4 class RaiseError #:nodoc:
5 def initialize(exception=Exception, message=nil)
6 @expected_error = exception
7 @expected_message = message
11 @raised_expected_error = false
15 rescue @expected_error => @actual_error
16 if @expected_message.nil?
17 @raised_expected_error = true
19 case @expected_message
21 if @expected_message =~ @actual_error.message
22 @raised_expected_error = true
27 if @expected_message == @actual_error.message
28 @raised_expected_error = true
34 rescue => @actual_error
37 return @raised_expected_error
42 return "expected #{expected_error}#{actual_error}" if @raised_other || !@raised_expected_error
45 def negative_failure_message
46 "expected no #{expected_error}#{actual_error}"
50 "raise #{expected_error}"
55 case @expected_message
59 "#{@expected_error} with message matching #{@expected_message.inspect}"
61 "#{@expected_error} with #{@expected_message.inspect}"
66 @actual_error.nil? ? " but nothing was raised" : ", got #{@actual_error.inspect}"
71 # should raise_error()
72 # should raise_error(NamedError)
73 # should raise_error(NamedError, String)
74 # should raise_error(NamedError, Regexp)
75 # should_not raise_error()
76 # should_not raise_error(NamedError)
77 # should_not raise_error(NamedError, String)
78 # should_not raise_error(NamedError, Regexp)
80 # With no args, matches if any error is raised.
81 # With a named error, matches only if that specific error is raised.
82 # With a named error and messsage specified as a String, matches only if both match.
83 # With a named error and messsage specified as a Regexp, matches only if both match.
87 # lambda { do_something_risky }.should raise_error
88 # lambda { do_something_risky }.should raise_error(PoorRiskDecisionError)
89 # lambda { do_something_risky }.should raise_error(PoorRiskDecisionError, "that was too risky")
90 # lambda { do_something_risky }.should raise_error(PoorRiskDecisionError, /oo ri/)
92 # lambda { do_something_risky }.should_not raise_error
93 # lambda { do_something_risky }.should_not raise_error(PoorRiskDecisionError)
94 # lambda { do_something_risky }.should_not raise_error(PoorRiskDecisionError, "that was too risky")
95 # lambda { do_something_risky }.should_not raise_error(PoorRiskDecisionError, /oo ri/)
96 def raise_error(error=Exception, message=nil)
97 Matchers::RaiseError.new(error, message)