From 3e6337b88b5255aba07b8f44de72cd5885f59465 Mon Sep 17 00:00:00 2001 From: eregon Date: Sat, 27 Oct 2018 10:48:40 +0000 Subject: Update to ruby/spec@8b743a3 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65388 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- spec/ruby/shared/basicobject/send.rb | 7 +++++++ spec/ruby/shared/kernel/raise.rb | 18 +++++++++++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) (limited to 'spec/ruby/shared') 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) -- cgit v1.2.3