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