diff options
Diffstat (limited to 'test/ruby/test_alias.rb')
| -rw-r--r-- | test/ruby/test_alias.rb | 99 |
1 files changed, 83 insertions, 16 deletions
diff --git a/test/ruby/test_alias.rb b/test/ruby/test_alias.rb index 83f897fb00..6320121bce 100644 --- a/test/ruby/test_alias.rb +++ b/test/ruby/test_alias.rb @@ -2,39 +2,106 @@ require 'test/unit' class TestAlias < Test::Unit::TestCase class Alias0 - def foo; "foo" end + def foo + "foo" + end end - class Alias1<Alias0 + + class Alias1 < Alias0 alias bar foo - def foo; "foo+" + super end + + def foo + "foo+#{super}" + end end - class Alias2<Alias1 + + class Alias2 < Alias1 alias baz foo undef foo end - class Alias3<Alias2 + + class Alias3 < Alias2 def foo - defined? super + super end + def bar - defined? super + super end + def quux - defined? super + super end end def test_alias x = Alias2.new - assert_equal("foo", x.bar) - assert_equal("foo+foo", x.baz) - - # test_check for cache - assert_equal("foo+foo", x.baz) + assert_equal "foo", x.bar + assert_equal "foo+foo", x.baz + assert_equal "foo+foo", x.baz # test_check for cache x = Alias3.new - assert(!x.foo) - assert(x.bar) - assert(!x.quux) + assert_raise(NoMethodError) { x.foo } + assert_equal "foo", x.bar + assert_raise(NoMethodError) { x.quux } + end + + class C + def m + $SAFE + end + end + + def test_JVN_83768862 + d = lambda { + $SAFE = 4 + dclass = Class.new(C) + dclass.send(:alias_method, :mm, :m) + dclass.new + }.call + assert_raise(SecurityError) { d.mm } + end + + def test_nonexistmethod + assert_raise(NameError){ + Class.new{ + alias_method :foobarxyzzy, :barbaz + } + } + end + + def test_send_alias + x = "abc" + class << x + alias_method :try, :__send__ + end + assert_equal("ABC", x.try(:upcase), '[ruby-dev:38824]') + end + + def test_special_const_alias + assert_raise(TypeError) do + 1.instance_eval do + alias to_string to_s + end + end + end + + def test_alias_with_zsuper_method + c = Class.new + c.class_eval do + def foo + :ok + end + def bar + :ng + end + private :foo + end + d = Class.new(c) + d.class_eval do + public :foo + alias bar foo + end + assert_equal(:ok, d.new.bar) end end |
