2020-01-08 02:14:01 -05:00
|
|
|
# -*- coding: us-ascii -*-
|
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
require 'test/unit'
|
|
|
|
|
|
|
|
class TestMethod < Test::Unit::TestCase
|
|
|
|
def test_alias
|
|
|
|
m0 = Module.new do
|
|
|
|
def foo; :M0 end
|
|
|
|
end
|
|
|
|
m1 = Module.new do
|
|
|
|
include m0
|
|
|
|
end
|
|
|
|
c = Class.new do
|
|
|
|
include m1
|
|
|
|
alias bar foo
|
|
|
|
end
|
|
|
|
d = Class.new(c) do
|
|
|
|
end
|
|
|
|
|
|
|
|
test = -> do
|
|
|
|
d.new.bar
|
|
|
|
end
|
|
|
|
|
|
|
|
assert_equal :M0, test[]
|
|
|
|
|
|
|
|
c.class_eval do
|
|
|
|
def bar
|
|
|
|
:C
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
assert_equal :C, test[]
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_zsuper
|
|
|
|
assert_separately [], <<-EOS
|
|
|
|
class C
|
|
|
|
private def foo
|
|
|
|
:C
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
class D < C
|
|
|
|
public :foo
|
|
|
|
end
|
|
|
|
|
|
|
|
class E < D; end
|
|
|
|
class F < E; end
|
|
|
|
|
|
|
|
test = -> do
|
|
|
|
F.new().foo
|
|
|
|
end
|
|
|
|
|
|
|
|
assert_equal :C, test[]
|
|
|
|
|
|
|
|
class E
|
|
|
|
def foo; :E; end
|
|
|
|
end
|
|
|
|
|
|
|
|
assert_equal :E, test[]
|
|
|
|
EOS
|
|
|
|
end
|
2020-03-10 13:45:49 -04:00
|
|
|
|
|
|
|
def test_module_methods_redefiniton
|
|
|
|
m0 = Module.new do
|
|
|
|
def foo
|
|
|
|
super
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
c1 = Class.new do
|
|
|
|
def foo
|
|
|
|
:C1
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
c2 = Class.new do
|
|
|
|
def foo
|
|
|
|
:C2
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
d1 = Class.new(c1) do
|
|
|
|
include m0
|
|
|
|
end
|
|
|
|
|
|
|
|
d2 = Class.new(c2) do
|
|
|
|
include m0
|
|
|
|
end
|
|
|
|
|
|
|
|
assert_equal :C1, d1.new.foo
|
|
|
|
|
|
|
|
m = Module.new do
|
|
|
|
def foo
|
|
|
|
super
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
d1.class_eval do
|
|
|
|
include m
|
|
|
|
end
|
|
|
|
|
|
|
|
d2.class_eval do
|
|
|
|
include m
|
|
|
|
end
|
|
|
|
|
|
|
|
assert_equal :C2, d2.new.foo
|
|
|
|
end
|
2020-01-08 02:14:01 -05:00
|
|
|
end
|