diff options
Diffstat (limited to 'spec/ruby/shared')
-rw-r--r-- | spec/ruby/shared/basicobject/send.rb | 7 | ||||
-rw-r--r-- | spec/ruby/shared/kernel/raise.rb | 18 |
2 files changed, 24 insertions, 1 deletions
diff --git a/spec/ruby/shared/basicobject/send.rb b/spec/ruby/shared/basicobject/send.rb index f8c63c5522..2b79ab4c2c 100644 --- a/spec/ruby/shared/basicobject/send.rb +++ b/spec/ruby/shared/basicobject/send.rb @@ -29,6 +29,13 @@ describe :basicobject_send, shared: true do SendSpecs::Foo.send(@method, :bar).should == 'done' end + it "raises a TypeError if the method name is not a string or symbol" do + -> { SendSpecs.send(@method, nil) }.should raise_error(TypeError, /not a symbol nor a string/) + -> { SendSpecs.send(@method, 42) }.should raise_error(TypeError, /not a symbol nor a string/) + -> { SendSpecs.send(@method, 3.14) }.should raise_error(TypeError, /not a symbol nor a string/) + -> { SendSpecs.send(@method, true) }.should raise_error(TypeError, /not a symbol nor a string/) + end + it "raises a NameError if the corresponding method can't be found" do class SendSpecs::Foo def bar 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) |