From 7873c05684839a88b1b9fd61272f3e70af8e3ac4 Mon Sep 17 00:00:00 2001 From: nobu Date: Fri, 5 Feb 2010 07:38:10 +0000 Subject: * lib/delegate.rb (Delegator): include copy of Kernel. [ruby-dev:40314] * lib/delegate.rb (Delegator#{dup,clone}): class of copy should be Delegator. [ruby-dev:40313] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@26580 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- test/test_delegate.rb | 48 ++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 42 insertions(+), 6 deletions(-) (limited to 'test') diff --git a/test/test_delegate.rb b/test/test_delegate.rb index f57263bef0..bbabf58968 100644 --- a/test/test_delegate.rb +++ b/test/test_delegate.rb @@ -23,11 +23,15 @@ class TestDelegateClass < Test::Unit::TestCase def test_delegateclass_class myclass=Myclass.new([]) assert_equal(Myclass,myclass.class) + assert_equal(Myclass,myclass.dup.class,'[ruby-dev:40313]') + assert_equal(Myclass,myclass.clone.class,'[ruby-dev:40313]') end def test_simpledelegator_class simple=SimpleDelegator.new([]) assert_equal(SimpleDelegator,simple.class) + assert_equal(SimpleDelegator,simple.dup.class) + assert_equal(SimpleDelegator,simple.clone.class) end class Object @@ -44,7 +48,6 @@ class TestDelegateClass < Test::Unit::TestCase def m :m end - private def delegate_test_m :m end @@ -54,13 +57,16 @@ class TestDelegateClass < Test::Unit::TestCase end def test_override + foo = Foo.new + foo2 = SimpleDelegator.new(foo) + bar = Bar.new(foo) assert_equal(:o, Object.new.m) - assert_equal(:m, Foo.new.m) - assert_equal(:m, SimpleDelegator.new(Foo.new).m) - assert_equal(:m, Bar.new(Foo.new).m) + assert_equal(:m, foo.m) + assert_equal(:m, foo2.m) + assert_equal(:m, bar.m) bug = '[ruby-dev:39154]' - assert_equal(:m, SimpleDelegator.new(Foo.new).__send__(:delegate_test_m), bug) - assert_equal(:m, Bar.new(Foo.new).__send__(:delegate_test_m), bug) + assert_equal(:m, foo2.send(:delegate_test_m), bug) + assert_equal(:m, bar.send(:delegate_test_m), bug) end class IV < DelegateClass(Integer) @@ -85,4 +91,34 @@ class TestDelegateClass < Test::Unit::TestCase d = SimpleDelegator.new(a) assert_nothing_raised(bug2679) {d.dup[0] += 1} end + + def test_frozen + d = SimpleDelegator.new([1, :foo]) + d.freeze + assert_raise(RuntimeError, '[ruby-dev:40314]#1') {d.__setobj__("foo")} + assert_equal([1, :foo], d) + end + + def test_instance_method + s = SimpleDelegator.new("foo") + m = s.method("upcase") + s.__setobj__([1,2,3]) + assert_raise(NoMethodError, '[ruby-dev:40314]#3') {m.call} + end + + class Foo + private + def delegate_test_private + :m + end + end + + def test_private_method + foo = Foo.new + d = SimpleDelegator.new(foo) + assert_raise(NoMethodError) {foo.delegate_test_private} + assert_equal(:m, foo.send(:delegate_test_private)) + assert_raise(NoMethodError, '[ruby-dev:40314]#4') {d.delegate_test_private} + assert_raise(NoMethodError, '[ruby-dev:40314]#5') {d.send(:delegate_test_private)} + end end -- cgit v1.2.3