From d94104b5644df764752d98783e1d35837da238b4 Mon Sep 17 00:00:00 2001 From: Sampo Kuokkanen Date: Sun, 3 May 2026 18:11:47 +0900 Subject: [PATCH] Add specs for original_name with define_method Verify that Method#original_name and UnboundMethod#original_name return the source UnboundMethod's name when a method is created via define_method, and that the original name is preserved through define_method and aliasing. --- core/method/original_name_spec.rb | 15 +++++++++++++++ core/unboundmethod/original_name_spec.rb | 15 +++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/core/method/original_name_spec.rb b/core/method/original_name_spec.rb index 676fdaedb4..71cfb65656 100644 --- a/core/method/original_name_spec.rb +++ b/core/method/original_name_spec.rb @@ -19,4 +19,19 @@ obj.method(:baz).original_name.should == :foo obj.method(:baz).unbind.bind(obj).original_name.should == :foo end + + it "returns the source UnboundMethod's name (not the name given to define_method)" do + klass = Class.new { define_method(:my_inspect, ::Kernel.instance_method(:inspect)) } + klass.new.method(:my_inspect).original_name.should == :inspect + end + + it "preserves the source method's name through define_method and alias" do + source = Class.new { def my_method; end } + klass = Class.new(source) do + define_method(:renamed, source.instance_method(:my_method)) + alias aliased renamed + end + klass.new.method(:renamed).original_name.should == :my_method + klass.new.method(:aliased).original_name.should == :my_method + end end diff --git a/core/unboundmethod/original_name_spec.rb b/core/unboundmethod/original_name_spec.rb index 7280dcb2b4..e50ce28dd7 100644 --- a/core/unboundmethod/original_name_spec.rb +++ b/core/unboundmethod/original_name_spec.rb @@ -19,4 +19,19 @@ obj.method(:baz).unbind.original_name.should == :foo UnboundMethodSpecs::Methods.instance_method(:baz).original_name.should == :foo end + + it "returns the source UnboundMethod's name (not the name given to define_method)" do + klass = Class.new { define_method(:my_inspect, ::Kernel.instance_method(:inspect)) } + klass.instance_method(:my_inspect).original_name.should == :inspect + end + + it "preserves the source method's name through define_method and alias" do + source = Class.new { def my_method; end } + klass = Class.new(source) do + define_method(:renamed, source.instance_method(:my_method)) + alias aliased renamed + end + klass.instance_method(:renamed).original_name.should == :my_method + klass.instance_method(:aliased).original_name.should == :my_method + end end