summaryrefslogtreecommitdiff
path: root/spec/mspec/spec/guards
diff options
context:
space:
mode:
authoreregon <eregon@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-07-27 12:10:23 +0000
committereregon <eregon@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-07-27 12:10:23 +0000
commitc13aa27e52c3ba10a329cf5a70b25fbf2a72d556 (patch)
treee9d0dbdd7424682ec9d94f9d5ff9c95d3a0229dd /spec/mspec/spec/guards
parentaa30bfd53651ff87983e5706a0d06706e8265c3b (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/guards')
-rw-r--r--spec/mspec/spec/guards/guard_spec.rb246
-rw-r--r--spec/mspec/spec/guards/platform_spec.rb51
-rw-r--r--spec/mspec/spec/guards/version_spec.rb7
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