From cd3bf49898c30975ec14df0ce9a9d01bb4f7d106 Mon Sep 17 00:00:00 2001 From: headius Date: Tue, 6 Jan 2015 20:56:49 +0000 Subject: * test/ruby/test_method.rb: Add test for &-coersion of an UnboundMethod. * test/ruby/test_module.rb: Add test for define_method given an UnboundMethod. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49164 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- test/ruby/test_method.rb | 9 +++++++++ test/ruby/test_module.rb | 19 +++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/test/ruby/test_method.rb b/test/ruby/test_method.rb index c8b5ff12d3..c88f3c88fe 100644 --- a/test/ruby/test_method.rb +++ b/test/ruby/test_method.rb @@ -652,6 +652,15 @@ class TestMethod < Test::Unit::TestCase EOC end + def test_unbound_method_proc_coerce + # '&' coercion of an UnboundMethod raises TypeError + assert_raise(TypeError) do + Class.new do + define_method('foo', &Object.instance_method(:to_s)) + end + end + end + def test___dir__ assert_instance_of String, __dir__ assert_equal(File.dirname(File.realpath(__FILE__)), __dir__) diff --git a/test/ruby/test_module.rb b/test/ruby/test_module.rb index 8084fdab45..9d6e13d676 100644 --- a/test/ruby/test_module.rb +++ b/test/ruby/test_module.rb @@ -2011,6 +2011,25 @@ class TestModule < Test::Unit::TestCase RUBY end + def test_define_method_with_unbound_method + # Passing an UnboundMethod to define_method succeeds if it is from an ancestor + assert_nothing_raised do + cls = Class.new(String) do + define_method('foo', String.instance_method(:to_s)) + end + + obj = cls.new('bar') + assert_equal('bar', obj.foo) + end + + # Passing an UnboundMethod to define_method fails if it is not from an ancestor + assert_raise(TypeError) do + Class.new do + define_method('foo', String.instance_method(:to_s)) + end + end + end + private def assert_top_method_is_private(method) -- cgit v1.2.3