require 'mspec/runner/mspec'
require 'mspec/runner/actions/tally'
unless defined?(RUBY_NAME) and RUBY_NAME
if defined?(RUBY_ENGINE) and RUBY_ENGINE
RUBY_NAME = RUBY_ENGINE
if defined?(ARG0)
RUBY_CLI = /rubinius|rbx/.match(ARG0) ? "shotgun/rubinius" : ARG0
else
RUBY_CLI = RUBY_NAME
end
else
require 'rbconfig'
RUBY_NAME = Config::CONFIG["RUBY_INSTALL_NAME"] || Config::CONFIG["ruby_install_name"]
RUBY_CLI = RUBY_NAME
end
end
class SpecGuard
def self.register
unless @registered
@tally = TallyAction.new
@tally.register
MSpec.register :finish, self
@registered = true
end
end
def self.unregister
@tally.unregister if @tally
end
def self.finish
print "\n#{self.class}\n#{@tally.format}\n"
end
def initialize(*args)
@args = args
end
def yield?(invert=false)
if MSpec.report_mode?
self.class.register
MSpec.register :before, self
return true
elsif MSpec.verify_mode?
self.class.register
MSpec.register :after, self
return true
end
return match? ^ invert
end
def ===(other)
true
end
def before(state)
end
def after(state)
end
def unregister
MSpec.unregister :before, self
MSpec.unregister :after, self
MSpec.unregister :exclude, self
self.class.unregister
end
def implementation?(*args)
args.any? do |name|
!!case name
when :rbx, :rubinius
RUBY_NAME =~ /^rbx/
when :ruby
RUBY_NAME =~ /^ruby/
when :ruby18
RUBY_NAME =~ /^ruby(1.8)?/ and RUBY_VERSION =~ /^1.8/
when :ruby19
RUBY_NAME =~ /^ruby(1.9)?/ and RUBY_VERSION =~ /^1.9/
when :jruby
RUBY_NAME =~ /^jruby/
else
false
end
end
end
def platform?(*args)
args.any? do |platform|
case platform
when :windows
['mswin', 'mingw'].any? { |p| RUBY_PLATFORM.match p }
else
RUBY_PLATFORM.match platform.to_s
end
end
end
def match?
implementation?(*@args) or platform?(*@args)
end
end