diff options
Diffstat (limited to 'spec/ruby/core/unboundmethod/super_method_spec.rb')
-rw-r--r-- | spec/ruby/core/unboundmethod/super_method_spec.rb | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/spec/ruby/core/unboundmethod/super_method_spec.rb b/spec/ruby/core/unboundmethod/super_method_spec.rb new file mode 100644 index 0000000000..49d356fd2b --- /dev/null +++ b/spec/ruby/core/unboundmethod/super_method_spec.rb @@ -0,0 +1,28 @@ +require File.expand_path('../../../spec_helper', __FILE__) +require File.expand_path('../fixtures/classes', __FILE__) + +describe "UnboundMethod#super_method" do + it "returns the method that would be called by super in the method" do + meth = UnboundMethodSpecs::C.instance_method(:overridden) + meth = meth.super_method + meth.should == UnboundMethodSpecs::B.instance_method(:overridden) + meth = meth.super_method + meth.should == UnboundMethodSpecs::A.instance_method(:overridden) + end + + it "returns nil when there's no super method in the parent" do + method = Kernel.instance_method(:method) + method.super_method.should == nil + end + + it "returns nil when the parent's method is removed" do + parent = Class.new { def foo; end } + child = Class.new(parent) { def foo; end } + + method = child.instance_method(:foo) + + parent.send(:undef_method, :foo) + + method.super_method.should == nil + end +end |