summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Pittman <daniel@puppetlabs.com>2011-04-22 14:08:59 -0700
committerDaniel Pittman <daniel@puppetlabs.com>2011-04-22 15:39:01 -0700
commit96195c1dc2fea6262523fcc1726c6dfd7fea274a (patch)
treee0825b02cba4dc74a73d1a1eae041aef68861ed6
parent822d5303f01b42cb074db52e6ee2c05e913ba9c5 (diff)
downloadpuppet-96195c1dc2fea6262523fcc1726c6dfd7fea274a.tar.gz
puppet-96195c1dc2fea6262523fcc1726c6dfd7fea274a.tar.xz
puppet-96195c1dc2fea6262523fcc1726c6dfd7fea274a.zip
maint: add an "exit was called" matcher for rspec.
We have a bunch of places that want to test if exit was called in a block of code or not, which we did in a whole pile of ad-hoc ways. Instead, better to have a custom matcher that tests specifically for the correct exit exception being thrown, and the right error code in it. Reviewed-By: Jesse Wolf <jesse@puppetlabs.com>
-rwxr-xr-xspec/spec_helper.rb22
1 files changed, 22 insertions, 0 deletions
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
index 01ffabc48..1dcf3c2d4 100755
--- a/spec/spec_helper.rb
+++ b/spec/spec_helper.rb
@@ -80,3 +80,25 @@ RSpec::Matchers.define :have_matching_element do |expected|
actual.any? { |item| item =~ expected }
end
end
+
+RSpec::Matchers.define :exit_with do |expected|
+ actual = nil
+ match do |block|
+ begin
+ block.call
+ rescue SystemExit => e
+ actual = e.status
+ end
+ actual and actual == expected
+ end
+ failure_message_for_should do |block|
+ "expected exit with code #{expected} but " +
+ (actual.nil? ? " exit was not called" : "we exited with #{actual} instead")
+ end
+ failure_message_for_should_not do |block|
+ "expected that exit would not be called with #{expected}"
+ end
+ description do
+ "expect exit with #{expected}"
+ end
+end