summaryrefslogtreecommitdiff
path: root/spec/ruby/shared/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'spec/ruby/shared/kernel')
-rw-r--r--spec/ruby/shared/kernel/raise.rb18
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)