diff options
Diffstat (limited to 'spec/ruby/core/kernel/singleton_method_spec.rb')
| -rw-r--r-- | spec/ruby/core/kernel/singleton_method_spec.rb | 52 |
1 files changed, 48 insertions, 4 deletions
diff --git a/spec/ruby/core/kernel/singleton_method_spec.rb b/spec/ruby/core/kernel/singleton_method_spec.rb index 0bdf125ad8..fe8e23eb02 100644 --- a/spec/ruby/core/kernel/singleton_method_spec.rb +++ b/spec/ruby/core/kernel/singleton_method_spec.rb @@ -1,10 +1,10 @@ require_relative '../../spec_helper' describe "Kernel#singleton_method" do - it "find a method defined on the singleton class" do + it "finds a method defined on the singleton class" do obj = Object.new def obj.foo; end - obj.singleton_method(:foo).should be_an_instance_of(Method) + obj.singleton_method(:foo).should.instance_of?(Method) end it "returns a Method which can be called" do @@ -23,7 +23,7 @@ describe "Kernel#singleton_method" do obj.foo.should == 42 -> { obj.singleton_method(:foo) - }.should raise_error(NameError) { |e| + }.should.raise(NameError) { |e| # a NameError and not a NoMethodError e.class.should == NameError } @@ -33,9 +33,53 @@ describe "Kernel#singleton_method" do obj = Object.new -> { obj.singleton_method(:not_existing) - }.should raise_error(NameError) { |e| + }.should.raise(NameError) { |e| # a NameError and not a NoMethodError e.class.should == NameError } end + + ruby_bug "#20620", ""..."3.4" do + it "finds a method defined in a module included in the singleton class" do + m = Module.new do + def foo + :foo + end + end + + obj = Object.new + obj.singleton_class.include(m) + + obj.singleton_method(:foo).should.instance_of?(Method) + obj.singleton_method(:foo).call.should == :foo + end + + it "finds a method defined in a module prepended in the singleton class" do + m = Module.new do + def foo + :foo + end + end + + obj = Object.new + obj.singleton_class.prepend(m) + + obj.singleton_method(:foo).should.instance_of?(Method) + obj.singleton_method(:foo).call.should == :foo + end + + it "finds a method defined in a module that an object is extended with" do + m = Module.new do + def foo + :foo + end + end + + obj = Object.new + obj.extend(m) + + obj.singleton_method(:foo).should.instance_of?(Method) + obj.singleton_method(:foo).call.should == :foo + end + end end |
