summaryrefslogtreecommitdiff
path: root/spec/mspec/lib/mspec/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/lib/mspec/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/lib/mspec/guards')
-rw-r--r--spec/mspec/lib/mspec/guards/guard.rb28
1 files changed, 26 insertions, 2 deletions
diff --git a/spec/mspec/lib/mspec/guards/guard.rb b/spec/mspec/lib/mspec/guards/guard.rb
index 88adbba260..322a08145d 100644
--- a/spec/mspec/lib/mspec/guards/guard.rb
+++ b/spec/mspec/lib/mspec/guards/guard.rb
@@ -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