diff options
Diffstat (limited to 'spec/ruby/shared/kernel')
-rw-r--r-- | spec/ruby/shared/kernel/raise.rb | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/spec/ruby/shared/kernel/raise.rb b/spec/ruby/shared/kernel/raise.rb index 70d638fff9..4128a636ad 100644 --- a/spec/ruby/shared/kernel/raise.rb +++ b/spec/ruby/shared/kernel/raise.rb @@ -41,7 +41,7 @@ describe :kernel_raise, shared: true do lambda { @object.raise(nil) }.should raise_error(TypeError) end - it "re-raises the rescued exception" do + it "re-raises the previously rescued exception if no exception is specified" do lambda do begin raise Exception, "outer" @@ -60,6 +60,22 @@ describe :kernel_raise, shared: true do ScratchPad.recorded.should be_nil end + it "re-raises a previously rescued exception without overwriting the backtrace" do + begin + raise 'raised' + rescue => raised + begin + raise_again_line = __LINE__; raise raised + rescue => raised_again + # This spec is written using #backtrace and matching the line number + # from the string, as backtrace_locations is a more advanced + # method that is not always supported by implementations. + + raised_again.backtrace.first.should_not include(":#{raise_again_line}:") + end + end + end + it "allows Exception, message, and backtrace parameters" do lambda do @object.raise(ArgumentError, "message", caller) |