зеркало из 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)
|
def run_if(name, &block)
|
||||||
@name = name
|
@name = name
|
||||||
yield if yield?(false)
|
if block
|
||||||
|
yield if yield?(false)
|
||||||
|
else
|
||||||
|
yield?(false)
|
||||||
|
end
|
||||||
ensure
|
ensure
|
||||||
unregister
|
unregister
|
||||||
end
|
end
|
||||||
|
|
||||||
def run_unless(name, &block)
|
def run_unless(name, &block)
|
||||||
@name = name
|
@name = name
|
||||||
yield if yield?(true)
|
if block
|
||||||
|
yield if yield?(true)
|
||||||
|
else
|
||||||
|
yield?(true)
|
||||||
|
end
|
||||||
ensure
|
ensure
|
||||||
unregister
|
unregister
|
||||||
end
|
end
|
||||||
|
@ -115,3 +123,19 @@ class SpecGuard
|
||||||
raise "must be implemented by the subclass"
|
raise "must be implemented by the subclass"
|
||||||
end
|
end
|
||||||
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
|
include MSpecMatchers
|
||||||
end
|
end
|
||||||
|
|
||||||
# Expactations are sometimes used in a module body
|
# Expectations are sometimes used in a module body
|
||||||
class Module
|
class Module
|
||||||
include MSpecMatchers
|
include MSpecMatchers
|
||||||
end
|
end
|
||||||
|
|
|
@ -234,7 +234,7 @@ class MSpecScript
|
||||||
files patterns
|
files patterns
|
||||||
end
|
end
|
||||||
|
|
||||||
def cores(max = 1)
|
def cores(max)
|
||||||
require 'etc'
|
require 'etc'
|
||||||
[Etc.nprocessors, max].min
|
[Etc.nprocessors, max].min
|
||||||
end
|
end
|
||||||
|
|
|
@ -178,3 +178,249 @@ SomeClass#reverse returns false
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
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
|
ScratchPad.recorded.should == :yield
|
||||||
end
|
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
|
it "sets the name of the guard to :platform_is" do
|
||||||
platform_is(:solarce) { }
|
platform_is(:solarce) { }
|
||||||
@guard.name.should == :platform_is
|
@guard.name.should == :platform_is
|
||||||
|
@ -53,6 +60,13 @@ describe Object, "#platform_is_not" do
|
||||||
ScratchPad.recorded.should == :yield
|
ScratchPad.recorded.should == :yield
|
||||||
end
|
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
|
it "sets the name of the guard to :platform_is_not" do
|
||||||
platform_is_not(:solarce) { }
|
platform_is_not(:solarce) { }
|
||||||
@guard.name.should == :platform_is_not
|
@guard.name.should == :platform_is_not
|
||||||
|
@ -110,66 +124,49 @@ describe Object, "#platform_is_not :wordsize => SIZE_SPEC" do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe PlatformGuard, ".implementation?" do
|
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
|
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
|
PlatformGuard.implementation?(:ruby).should == true
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns true if passed :rubinius and RUBY_ENGINE == 'rbx'" do
|
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
|
PlatformGuard.implementation?(:rubinius).should == true
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns true if passed :jruby and RUBY_ENGINE == 'jruby'" do
|
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
|
PlatformGuard.implementation?(:jruby).should == true
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns true if passed :ironruby and RUBY_ENGINE == 'ironruby'" do
|
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
|
PlatformGuard.implementation?(:ironruby).should == true
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns true if passed :maglev and RUBY_ENGINE == 'maglev'" do
|
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
|
PlatformGuard.implementation?(:maglev).should == true
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns true if passed :topaz and RUBY_ENGINE == 'topaz'" do
|
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
|
PlatformGuard.implementation?(:topaz).should == true
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns true if passed :ruby and RUBY_ENGINE matches /^ruby/" do
|
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
|
PlatformGuard.implementation?(:ruby).should == true
|
||||||
|
|
||||||
Object.const_set :RUBY_ENGINE, 'ruby1.8'
|
stub_const 'RUBY_ENGINE', 'ruby1.8'
|
||||||
PlatformGuard.implementation?(:ruby).should == true
|
PlatformGuard.implementation?(:ruby).should == true
|
||||||
|
|
||||||
Object.const_set :RUBY_ENGINE, 'ruby1.9'
|
stub_const 'RUBY_ENGINE', 'ruby1.9'
|
||||||
PlatformGuard.implementation?(:ruby).should == true
|
PlatformGuard.implementation?(:ruby).should == true
|
||||||
end
|
end
|
||||||
|
|
||||||
it "raises an error when passed an unrecognized name" do
|
it "raises an error when passed an unrecognized name" do
|
||||||
Object.const_set :RUBY_ENGINE, 'ruby'
|
stub_const 'RUBY_ENGINE', 'ruby'
|
||||||
lambda {
|
lambda {
|
||||||
PlatformGuard.implementation?(:python)
|
PlatformGuard.implementation?(:python)
|
||||||
}.should raise_error(/unknown implementation/)
|
}.should raise_error(/unknown implementation/)
|
||||||
|
|
|
@ -68,6 +68,13 @@ describe Object, "#ruby_version_is" do
|
||||||
ScratchPad.recorded.should_not == :yield
|
ScratchPad.recorded.should_not == :yield
|
||||||
end
|
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
|
it "sets the name of the guard to :ruby_version_is" do
|
||||||
ruby_version_is("") { }
|
ruby_version_is("") { }
|
||||||
@guard.name.should == :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
|
|
Загрузка…
Ссылка в новой задаче