diff options
author | eregon <eregon@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-07-27 12:10:23 +0000 |
---|---|---|
committer | eregon <eregon@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-07-27 12:10:23 +0000 |
commit | c13aa27e52c3ba10a329cf5a70b25fbf2a72d556 (patch) | |
tree | e9d0dbdd7424682ec9d94f9d5ff9c95d3a0229dd /spec/mspec/spec | |
parent | aa30bfd53651ff87983e5706a0d06706e8265c3b (diff) |
Update to ruby/mspec@353605f
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59430 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'spec/mspec/spec')
-rw-r--r-- | spec/mspec/spec/guards/guard_spec.rb | 246 | ||||
-rw-r--r-- | spec/mspec/spec/guards/platform_spec.rb | 51 | ||||
-rw-r--r-- | spec/mspec/spec/guards/version_spec.rb | 7 |
3 files changed, 277 insertions, 27 deletions
diff --git a/spec/mspec/spec/guards/guard_spec.rb b/spec/mspec/spec/guards/guard_spec.rb index ca7dba6455..f2828dd4ad 100644 --- a/spec/mspec/spec/guards/guard_spec.rb +++ b/spec/mspec/spec/guards/guard_spec.rb @@ -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 diff --git a/spec/mspec/spec/guards/platform_spec.rb b/spec/mspec/spec/guards/platform_spec.rb index f0af12c1f8..749963d3db 100644 --- a/spec/mspec/spec/guards/platform_spec.rb +++ b/spec/mspec/spec/guards/platform_spec.rb @@ -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/) diff --git a/spec/mspec/spec/guards/version_spec.rb b/spec/mspec/spec/guards/version_spec.rb index f11e3dbd94..07eb451ec9 100644 --- a/spec/mspec/spec/guards/version_spec.rb +++ b/spec/mspec/spec/guards/version_spec.rb @@ -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 |