mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	visibility again. we no longer provide __send, __send!. * eval.c (rb_invoke_method): new method to honor private visibility. if it's invoked in a function call style, it calls private methods as well (previous 1.9 send behavior). git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@13824 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
		
			
				
	
	
		
			64 lines
		
	
	
	
		
			955 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
	
		
			955 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
require 'test/unit'
 | 
						|
 | 
						|
class TestAlias < Test::Unit::TestCase
 | 
						|
  class Alias0
 | 
						|
    def foo
 | 
						|
      "foo"
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  class Alias1 < Alias0
 | 
						|
    alias bar foo
 | 
						|
 | 
						|
    def foo
 | 
						|
      "foo+#{super}"
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  class Alias2 < Alias1
 | 
						|
    alias baz foo
 | 
						|
    undef foo
 | 
						|
  end
 | 
						|
 | 
						|
  class Alias3 < Alias2
 | 
						|
    def foo
 | 
						|
      super
 | 
						|
    end
 | 
						|
 | 
						|
    def bar
 | 
						|
      super
 | 
						|
    end
 | 
						|
 | 
						|
    def quux
 | 
						|
      super
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  def test_alias
 | 
						|
    x = Alias2.new
 | 
						|
    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_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
 | 
						|
end
 |