Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

128 lines (107 sloc) 3.544 kb
require 'test/unit'
class TestMethodCache < Test::Unit::TestCase
def test_simple_hierarchy
obj = Object.new
class << obj
class A; def foo; 1; end; end
class B < A; end
class C < B; def bar; foo; end; end
$test_simple_hierarchy1 = C.new.bar
class B; def foo; 2; end; end
$test_simple_hierarchy2 = C.new.bar
end
assert_equal(1, $test_simple_hierarchy1)
assert_equal(2, $test_simple_hierarchy2)
end
def test_simple_include
obj = Object.new
class << obj
class A; def foo; 1; end; end
module B; end
class C < A; include B; def bar; foo; end; end
$test_simple_include1 = C.new.bar
# modules included into modules don't cause flush
module X; def foo; 2; end; end
module B; include X; end
$test_simple_include2 = C.new.bar
module X; def foo; 3; end; end
$test_simple_include3 = C.new.bar
# changes in included modules do cause flush
module B; def foo; 4; end; end
$test_simple_include4 = C.new.bar
end
assert_equal(1, $test_simple_include1)
assert_equal(1, $test_simple_include2)
assert_equal(1, $test_simple_include3)
assert_equal(4, $test_simple_include4)
end
def test_simple_hierarchy_send
obj = Object.new
class << obj
class A; def foo; 1; end; end
class B < A; end
class C < B; def bar; foo; end; end
$test_simple_hierarchy1 = C.new.send :bar
class B; def foo; 2; end; end
$test_simple_hierarchy2 = C.new.send :bar
end
assert_equal(1, $test_simple_hierarchy1)
assert_equal(2, $test_simple_hierarchy2)
end
def test_simple_include_send
obj = Object.new
class << obj
class A; def foo; 1; end; end
module B; end
class C < A; include B; def bar; foo; end; end
$test_simple_include1 = C.new.send :bar
# modules included into modules don't cause flush
module X; def foo; 2; end; end
module B; include X; end
$test_simple_include2 = C.new.send :bar
module X; def foo; 3; end; end
$test_simple_include3 = C.new.send :bar
# changes in included modules do cause flush
module B; def foo; 4; end; end
$test_simple_include4 = C.new.send :bar
end
assert_equal(1, $test_simple_include1)
assert_equal(1, $test_simple_include2)
assert_equal(1, $test_simple_include3)
assert_equal(4, $test_simple_include4)
end
def test_simple_alias
obj = Object.new
class << obj
class A; def foo; 1; end; end;
class B < A; def bar; 2; end; end
class C < B; end
class D < C; def go; bar; end; end
$test_simple_include1 = D.new.bar
class A; alias bar foo; end
$test_simple_include2 = D.new.bar
class C; alias bar foo; end
$test_simple_include3 = D.new.bar
end
assert_equal(2, $test_simple_include1)
assert_equal(2, $test_simple_include2)
assert_equal(1, $test_simple_include3)
end
def test_simple_alias_send
obj = Object.new
class << obj
class A; def foo; 1; end; end;
class B < A; def bar; 2; end; end
class C < B; end
class D < C; def go; bar; end; end
$test_simple_include1 = D.new.send :bar
class A; alias bar foo; end
$test_simple_include2 = D.new.send :bar
class C; alias bar foo; end
$test_simple_include3 = D.new.send :bar
end
assert_equal(2, $test_simple_include1)
assert_equal(2, $test_simple_include2)
assert_equal(1, $test_simple_include3)
end
end
Jump to Line
Something went wrong with that request. Please try again.