diff options
Diffstat (limited to 'spec/ruby/core/exception/no_method_error_spec.rb')
-rw-r--r-- | spec/ruby/core/exception/no_method_error_spec.rb | 91 |
1 files changed, 55 insertions, 36 deletions
diff --git a/spec/ruby/core/exception/no_method_error_spec.rb b/spec/ruby/core/exception/no_method_error_spec.rb index a93ef2187e..26df3338e9 100644 --- a/spec/ruby/core/exception/no_method_error_spec.rb +++ b/spec/ruby/core/exception/no_method_error_spec.rb @@ -10,15 +10,13 @@ describe "NoMethodError.new" do NoMethodError.new("msg").message.should == "msg" end - ruby_version_is "2.6" do - it "accepts a :receiver keyword argument" do - receiver = mock("receiver") + it "accepts a :receiver keyword argument" do + receiver = mock("receiver") - error = NoMethodError.new("msg", :name, receiver: receiver) + error = NoMethodError.new("msg", :name, receiver: receiver) - error.receiver.should == receiver - error.name.should == :name - end + error.receiver.should == receiver + error.name.should == :name end end @@ -64,26 +62,49 @@ describe "NoMethodError#message" do NoMethodErrorSpecs::NoMethodErrorC.new.a_private_method rescue Exception => e e.should be_kind_of(NoMethodError) - e.message.lines[0].should =~ /private method `a_private_method' called for #<NoMethodErrorSpecs::NoMethodErrorC:0x[\h]+>/ + e.message.lines[0].should =~ /private method [`']a_private_method' called for / end end - it "calls receiver.inspect only when calling Exception#message" do - ScratchPad.record [] - test_class = Class.new do - def inspect - ScratchPad << :inspect_called - "<inspect>" + ruby_version_is ""..."3.3" do + it "calls receiver.inspect only when calling Exception#message" do + ScratchPad.record [] + test_class = Class.new do + def inspect + ScratchPad << :inspect_called + "<inspect>" + end + end + instance = test_class.new + begin + instance.bar + rescue Exception => e + e.name.should == :bar + ScratchPad.recorded.should == [] + e.message.should =~ /undefined method.+\bbar\b/ + ScratchPad.recorded.should == [:inspect_called] end end - instance = test_class.new - begin - instance.bar - rescue Exception => e - e.name.should == :bar - ScratchPad.recorded.should == [] - e.message.should =~ /undefined method.+\bbar\b/ - ScratchPad.recorded.should == [:inspect_called] + end + + ruby_version_is "3.3" do + it "does not call receiver.inspect even when calling Exception#message" do + ScratchPad.record [] + test_class = Class.new do + def inspect + ScratchPad << :inspect_called + "<inspect>" + end + end + instance = test_class.new + begin + instance.bar + rescue Exception => e + e.name.should == :bar + ScratchPad.recorded.should == [] + e.message.should =~ /undefined method.+\bbar\b/ + ScratchPad.recorded.should == [] + end end end @@ -104,21 +125,19 @@ describe "NoMethodError#message" do end end - ruby_version_is "3.0" do - it "uses #name to display the receiver if it is a class or a module" do - klass = Class.new { def self.name; "MyClass"; end } - begin - klass.foo - rescue NoMethodError => error - error.message.lines.first.chomp.should == "undefined method `foo' for MyClass:Class" - end + it "uses #name to display the receiver if it is a class or a module" do + klass = Class.new { def self.name; "MyClass"; end } + begin + klass.foo + rescue NoMethodError => error + error.message.lines.first.chomp.should =~ /^undefined method [`']foo' for / + end - mod = Module.new { def self.name; "MyModule"; end } - begin - mod.foo - rescue NoMethodError => error - error.message.lines.first.chomp.should == "undefined method `foo' for MyModule:Module" - end + mod = Module.new { def self.name; "MyModule"; end } + begin + mod.foo + rescue NoMethodError => error + error.message.lines.first.chomp.should =~ /^undefined method [`']foo' for / end end end |