зеркало из https://github.com/github/ruby.git
Update to ruby/mspec@353605f
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59430 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
aa30bfd536
Коммит
c13aa27e52
|
@ -76,14 +76,22 @@ class SpecGuard
|
|||
|
||||
def run_if(name, &block)
|
||||
@name = name
|
||||
yield if yield?(false)
|
||||
if block
|
||||
yield if yield?(false)
|
||||
else
|
||||
yield?(false)
|
||||
end
|
||||
ensure
|
||||
unregister
|
||||
end
|
||||
|
||||
def run_unless(name, &block)
|
||||
@name = name
|
||||
yield if yield?(true)
|
||||
if block
|
||||
yield if yield?(true)
|
||||
else
|
||||
yield?(true)
|
||||
end
|
||||
ensure
|
||||
unregister
|
||||
end
|
||||
|
@ -115,3 +123,19 @@ class SpecGuard
|
|||
raise "must be implemented by the subclass"
|
||||
end
|
||||
end
|
||||
|
||||
# Combined guards
|
||||
|
||||
def guard(condition, &block)
|
||||
raise "condition must be a Proc" unless condition.is_a?(Proc)
|
||||
raise LocalJumpError, "no block given" unless block
|
||||
return yield if MSpec.mode? :unguarded or MSpec.mode? :verify or MSpec.mode? :report
|
||||
yield if condition.call
|
||||
end
|
||||
|
||||
def guard_not(condition, &block)
|
||||
raise "condition must be a Proc" unless condition.is_a?(Proc)
|
||||
raise LocalJumpError, "no block given" unless block
|
||||
return yield if MSpec.mode? :unguarded or MSpec.mode? :verify or MSpec.mode? :report
|
||||
yield unless condition.call
|
||||
end
|
||||
|
|
|
@ -5,7 +5,7 @@ class MSpecEnv
|
|||
include MSpecMatchers
|
||||
end
|
||||
|
||||
# Expactations are sometimes used in a module body
|
||||
# Expectations are sometimes used in a module body
|
||||
class Module
|
||||
include MSpecMatchers
|
||||
end
|
||||
|
|
|
@ -234,7 +234,7 @@ class MSpecScript
|
|||
files patterns
|
||||
end
|
||||
|
||||
def cores(max = 1)
|
||||
def cores(max)
|
||||
require 'etc'
|
||||
[Etc.nprocessors, max].min
|
||||
end
|
||||
|
|
|
@ -178,3 +178,249 @@ SomeClass#reverse returns false
|
|||
]
|
||||
end
|
||||
end
|
||||
|
||||
describe SpecGuard, ".run_if" do
|
||||
before :each do
|
||||
@guard = SpecGuard.new
|
||||
ScratchPad.clear
|
||||
end
|
||||
|
||||
it "yields if match? returns true" do
|
||||
@guard.stub(:match?).and_return(true)
|
||||
@guard.run_if(:name) { ScratchPad.record :yield }
|
||||
ScratchPad.recorded.should == :yield
|
||||
end
|
||||
|
||||
it "does not yield if match? returns false" do
|
||||
@guard.stub(:match?).and_return(false)
|
||||
@guard.run_if(:name) { fail }
|
||||
end
|
||||
|
||||
it "returns the result of the block if match? is true" do
|
||||
@guard.stub(:match?).and_return(true)
|
||||
@guard.run_if(:name) { 42 }.should == 42
|
||||
end
|
||||
|
||||
it "returns nil if given a block and match? is false" do
|
||||
@guard.stub(:match?).and_return(false)
|
||||
@guard.run_if(:name) { 42 }.should == nil
|
||||
end
|
||||
|
||||
it "returns what #match? returns when no block is given" do
|
||||
@guard.stub(:match?).and_return(true)
|
||||
@guard.run_if(:name).should == true
|
||||
@guard.stub(:match?).and_return(false)
|
||||
@guard.run_if(:name).should == false
|
||||
end
|
||||
end
|
||||
|
||||
describe SpecGuard, ".run_unless" do
|
||||
before :each do
|
||||
@guard = SpecGuard.new
|
||||
ScratchPad.clear
|
||||
end
|
||||
|
||||
it "yields if match? returns false" do
|
||||
@guard.stub(:match?).and_return(false)
|
||||
@guard.run_unless(:name) { ScratchPad.record :yield }
|
||||
ScratchPad.recorded.should == :yield
|
||||
end
|
||||
|
||||
it "does not yield if match? returns true" do
|
||||
@guard.stub(:match?).and_return(true)
|
||||
@guard.run_unless(:name) { fail }
|
||||
end
|
||||
|
||||
it "returns the result of the block if match? is false" do
|
||||
@guard.stub(:match?).and_return(false)
|
||||
@guard.run_unless(:name) { 42 }.should == 42
|
||||
end
|
||||
|
||||
it "returns nil if given a block and match? is true" do
|
||||
@guard.stub(:match?).and_return(true)
|
||||
@guard.run_unless(:name) { 42 }.should == nil
|
||||
end
|
||||
|
||||
it "returns the opposite of what #match? returns when no block is given" do
|
||||
@guard.stub(:match?).and_return(true)
|
||||
@guard.run_unless(:name).should == false
|
||||
@guard.stub(:match?).and_return(false)
|
||||
@guard.run_unless(:name).should == true
|
||||
end
|
||||
end
|
||||
|
||||
describe Object, "#guard" do
|
||||
before :each do
|
||||
ScratchPad.clear
|
||||
end
|
||||
|
||||
after :each do
|
||||
MSpec.clear_modes
|
||||
end
|
||||
|
||||
it "allows to combine guards" do
|
||||
guard1 = VersionGuard.new 'x.x.x'
|
||||
VersionGuard.stub(:new).and_return(guard1)
|
||||
guard2 = PlatformGuard.new :dummy
|
||||
PlatformGuard.stub(:new).and_return(guard2)
|
||||
|
||||
guard1.stub(:match?).and_return(true)
|
||||
guard2.stub(:match?).and_return(true)
|
||||
guard -> { ruby_version_is "2.4" and platform_is :linux } do
|
||||
ScratchPad.record :yield
|
||||
end
|
||||
ScratchPad.recorded.should == :yield
|
||||
|
||||
guard1.stub(:match?).and_return(false)
|
||||
guard2.stub(:match?).and_return(true)
|
||||
guard -> { ruby_version_is "2.4" and platform_is :linux } do
|
||||
fail
|
||||
end
|
||||
|
||||
guard1.stub(:match?).and_return(true)
|
||||
guard2.stub(:match?).and_return(false)
|
||||
guard -> { ruby_version_is "2.4" and platform_is :linux } do
|
||||
fail
|
||||
end
|
||||
|
||||
guard1.stub(:match?).and_return(false)
|
||||
guard2.stub(:match?).and_return(false)
|
||||
guard -> { ruby_version_is "2.4" and platform_is :linux } do
|
||||
fail
|
||||
end
|
||||
end
|
||||
|
||||
it "yields when the Proc returns true" do
|
||||
guard -> { true } do
|
||||
ScratchPad.record :yield
|
||||
end
|
||||
ScratchPad.recorded.should == :yield
|
||||
end
|
||||
|
||||
it "does not yield when the Proc returns false" do
|
||||
guard -> { false } do
|
||||
fail
|
||||
end
|
||||
end
|
||||
|
||||
it "yields if MSpec.mode?(:unguarded) is true" do
|
||||
MSpec.register_mode :unguarded
|
||||
|
||||
guard -> { false } do
|
||||
ScratchPad.record :yield1
|
||||
end
|
||||
ScratchPad.recorded.should == :yield1
|
||||
|
||||
guard -> { true } do
|
||||
ScratchPad.record :yield2
|
||||
end
|
||||
ScratchPad.recorded.should == :yield2
|
||||
end
|
||||
|
||||
it "yields if MSpec.mode?(:verify) is true" do
|
||||
MSpec.register_mode :verify
|
||||
|
||||
guard -> { false } do
|
||||
ScratchPad.record :yield1
|
||||
end
|
||||
ScratchPad.recorded.should == :yield1
|
||||
|
||||
guard -> { true } do
|
||||
ScratchPad.record :yield2
|
||||
end
|
||||
ScratchPad.recorded.should == :yield2
|
||||
end
|
||||
|
||||
it "yields if MSpec.mode?(:report) is true" do
|
||||
MSpec.register_mode :report
|
||||
|
||||
guard -> { false } do
|
||||
ScratchPad.record :yield1
|
||||
end
|
||||
ScratchPad.recorded.should == :yield1
|
||||
|
||||
guard -> { true } do
|
||||
ScratchPad.record :yield2
|
||||
end
|
||||
ScratchPad.recorded.should == :yield2
|
||||
end
|
||||
|
||||
it "raises an error if no Proc is given" do
|
||||
-> { guard :foo }.should raise_error(RuntimeError)
|
||||
end
|
||||
|
||||
it "requires a block" do
|
||||
-> {
|
||||
guard(-> { true })
|
||||
}.should raise_error(LocalJumpError)
|
||||
-> {
|
||||
guard(-> { false })
|
||||
}.should raise_error(LocalJumpError)
|
||||
end
|
||||
end
|
||||
|
||||
describe Object, "#guard_not" do
|
||||
before :each do
|
||||
ScratchPad.clear
|
||||
end
|
||||
|
||||
it "allows to combine guards" do
|
||||
guard1 = VersionGuard.new 'x.x.x'
|
||||
VersionGuard.stub(:new).and_return(guard1)
|
||||
guard2 = PlatformGuard.new :dummy
|
||||
PlatformGuard.stub(:new).and_return(guard2)
|
||||
|
||||
guard1.stub(:match?).and_return(true)
|
||||
guard2.stub(:match?).and_return(true)
|
||||
guard_not -> { ruby_version_is "2.4" and platform_is :linux } do
|
||||
fail
|
||||
end
|
||||
|
||||
guard1.stub(:match?).and_return(false)
|
||||
guard2.stub(:match?).and_return(true)
|
||||
guard_not -> { ruby_version_is "2.4" and platform_is :linux } do
|
||||
ScratchPad.record :yield1
|
||||
end
|
||||
ScratchPad.recorded.should == :yield1
|
||||
|
||||
guard1.stub(:match?).and_return(true)
|
||||
guard2.stub(:match?).and_return(false)
|
||||
guard_not -> { ruby_version_is "2.4" and platform_is :linux } do
|
||||
ScratchPad.record :yield2
|
||||
end
|
||||
ScratchPad.recorded.should == :yield2
|
||||
|
||||
guard1.stub(:match?).and_return(false)
|
||||
guard2.stub(:match?).and_return(false)
|
||||
guard_not -> { ruby_version_is "2.4" and platform_is :linux } do
|
||||
ScratchPad.record :yield3
|
||||
end
|
||||
ScratchPad.recorded.should == :yield3
|
||||
end
|
||||
|
||||
it "yields when the Proc returns false" do
|
||||
guard_not -> { false } do
|
||||
ScratchPad.record :yield
|
||||
end
|
||||
ScratchPad.recorded.should == :yield
|
||||
end
|
||||
|
||||
it "does not yield when the Proc returns true" do
|
||||
guard_not -> { true } do
|
||||
fail
|
||||
end
|
||||
end
|
||||
|
||||
it "raises an error if no Proc is given" do
|
||||
-> { guard_not :foo }.should raise_error(RuntimeError)
|
||||
end
|
||||
|
||||
it "requires a block" do
|
||||
-> {
|
||||
guard_not(-> { true })
|
||||
}.should raise_error(LocalJumpError)
|
||||
-> {
|
||||
guard_not(-> { false })
|
||||
}.should raise_error(LocalJumpError)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -20,6 +20,13 @@ describe Object, "#platform_is" do
|
|||
ScratchPad.recorded.should == :yield
|
||||
end
|
||||
|
||||
it "returns what #os? returns when no block is given" do
|
||||
PlatformGuard.stub(:os?).and_return(true)
|
||||
platform_is(:solarce).should == true
|
||||
PlatformGuard.stub(:os?).and_return(false)
|
||||
platform_is(:solarce).should == false
|
||||
end
|
||||
|
||||
it "sets the name of the guard to :platform_is" do
|
||||
platform_is(:solarce) { }
|
||||
@guard.name.should == :platform_is
|
||||
|
@ -53,6 +60,13 @@ describe Object, "#platform_is_not" do
|
|||
ScratchPad.recorded.should == :yield
|
||||
end
|
||||
|
||||
it "returns the opposite of what #os? returns when no block is given" do
|
||||
PlatformGuard.stub(:os?).and_return(true)
|
||||
platform_is_not(:solarce).should == false
|
||||
PlatformGuard.stub(:os?).and_return(false)
|
||||
platform_is_not(:solarce).should == true
|
||||
end
|
||||
|
||||
it "sets the name of the guard to :platform_is_not" do
|
||||
platform_is_not(:solarce) { }
|
||||
@guard.name.should == :platform_is_not
|
||||
|
@ -110,66 +124,49 @@ describe Object, "#platform_is_not :wordsize => SIZE_SPEC" do
|
|||
end
|
||||
|
||||
describe PlatformGuard, ".implementation?" do
|
||||
before :all do
|
||||
@verbose = $VERBOSE
|
||||
$VERBOSE = nil
|
||||
end
|
||||
|
||||
after :all do
|
||||
$VERBOSE = @verbose
|
||||
end
|
||||
|
||||
before :each do
|
||||
@ruby_engine = Object.const_get :RUBY_ENGINE
|
||||
end
|
||||
|
||||
after :each do
|
||||
Object.const_set :RUBY_ENGINE, @ruby_engine
|
||||
end
|
||||
|
||||
it "returns true if passed :ruby and RUBY_ENGINE == 'ruby'" do
|
||||
Object.const_set :RUBY_ENGINE, 'ruby'
|
||||
stub_const 'RUBY_ENGINE', 'ruby'
|
||||
PlatformGuard.implementation?(:ruby).should == true
|
||||
end
|
||||
|
||||
it "returns true if passed :rubinius and RUBY_ENGINE == 'rbx'" do
|
||||
Object.const_set :RUBY_ENGINE, 'rbx'
|
||||
stub_const 'RUBY_ENGINE', 'rbx'
|
||||
PlatformGuard.implementation?(:rubinius).should == true
|
||||
end
|
||||
|
||||
it "returns true if passed :jruby and RUBY_ENGINE == 'jruby'" do
|
||||
Object.const_set :RUBY_ENGINE, 'jruby'
|
||||
stub_const 'RUBY_ENGINE', 'jruby'
|
||||
PlatformGuard.implementation?(:jruby).should == true
|
||||
end
|
||||
|
||||
it "returns true if passed :ironruby and RUBY_ENGINE == 'ironruby'" do
|
||||
Object.const_set :RUBY_ENGINE, 'ironruby'
|
||||
stub_const 'RUBY_ENGINE', 'ironruby'
|
||||
PlatformGuard.implementation?(:ironruby).should == true
|
||||
end
|
||||
|
||||
it "returns true if passed :maglev and RUBY_ENGINE == 'maglev'" do
|
||||
Object.const_set :RUBY_ENGINE, 'maglev'
|
||||
stub_const 'RUBY_ENGINE', 'maglev'
|
||||
PlatformGuard.implementation?(:maglev).should == true
|
||||
end
|
||||
|
||||
it "returns true if passed :topaz and RUBY_ENGINE == 'topaz'" do
|
||||
Object.const_set :RUBY_ENGINE, 'topaz'
|
||||
stub_const 'RUBY_ENGINE', 'topaz'
|
||||
PlatformGuard.implementation?(:topaz).should == true
|
||||
end
|
||||
|
||||
it "returns true if passed :ruby and RUBY_ENGINE matches /^ruby/" do
|
||||
Object.const_set :RUBY_ENGINE, 'ruby'
|
||||
stub_const 'RUBY_ENGINE', 'ruby'
|
||||
PlatformGuard.implementation?(:ruby).should == true
|
||||
|
||||
Object.const_set :RUBY_ENGINE, 'ruby1.8'
|
||||
stub_const 'RUBY_ENGINE', 'ruby1.8'
|
||||
PlatformGuard.implementation?(:ruby).should == true
|
||||
|
||||
Object.const_set :RUBY_ENGINE, 'ruby1.9'
|
||||
stub_const 'RUBY_ENGINE', 'ruby1.9'
|
||||
PlatformGuard.implementation?(:ruby).should == true
|
||||
end
|
||||
|
||||
it "raises an error when passed an unrecognized name" do
|
||||
Object.const_set :RUBY_ENGINE, 'ruby'
|
||||
stub_const 'RUBY_ENGINE', 'ruby'
|
||||
lambda {
|
||||
PlatformGuard.implementation?(:python)
|
||||
}.should raise_error(/unknown implementation/)
|
||||
|
|
|
@ -68,6 +68,13 @@ describe Object, "#ruby_version_is" do
|
|||
ScratchPad.recorded.should_not == :yield
|
||||
end
|
||||
|
||||
it "returns what #match? returns when no block is given" do
|
||||
@guard.stub(:match?).and_return(true)
|
||||
ruby_version_is('x.x.x').should == true
|
||||
@guard.stub(:match?).and_return(false)
|
||||
ruby_version_is('x.x.x').should == false
|
||||
end
|
||||
|
||||
it "sets the name of the guard to :ruby_version_is" do
|
||||
ruby_version_is("") { }
|
||||
@guard.name.should == :ruby_version_is
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
#!/usr/bin/env ruby
|
||||
Dir.chdir('../rubyspec') do
|
||||
regexp = Regexp.new(ARGV[0])
|
||||
Dir.glob('**/*.rb') do |file|
|
||||
contents = File.read(file)
|
||||
if regexp =~ contents
|
||||
puts file
|
||||
end
|
||||
end
|
||||
end
|
|
@ -1,4 +0,0 @@
|
|||
mri: 4e95b8c265d4d365477a05fe6701186415576303
|
||||
truffleruby: c8fb3e592bf354cd67893555c671955cc54c32ff
|
||||
jruby: d834e4279090998ba3ef087d81278734cab4c50a
|
||||
rbx: 7799d9fa48467cdbfceeed6765a63366d9dc8b0e
|
Загрузка…
Ссылка в новой задаче