1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
|
require "test_helper"
class ClassSnapshotTest < Minitest::Test
def test_detect_class_method_on_class
for_all_method_visibilities do |visibility|
klass = Class.new
klass.__metaclass__.send(:define_method, :foo) {}
klass.__metaclass__.send(visibility, :foo)
assert_method_exists(klass, klass.__metaclass__, :foo, visibility)
end
end
def test_detect_class_method_on_superclass
for_all_method_visibilities do |visibility|
superklass = Class.new
superklass.__metaclass__.send(:define_method, :foo) {}
superklass.__metaclass__.send(visibility, :foo)
klass = Class.new(superklass)
assert_method_exists(klass, superklass.__metaclass__, :foo, visibility)
end
end
def test_detect_class_method_on_superclass_of_superclass
for_all_method_visibilities do |visibility|
superduperklass = Class.new
superduperklass.__metaclass__.send(:define_method, :foo) {}
superduperklass.__metaclass__.send(visibility, :foo)
klass = Class.new(Class.new(superduperklass))
assert_method_exists(klass, superduperklass.__metaclass__, :foo, visibility)
end
end
def test_detect_method_on_module_included_as_class_method_into_class
for_all_method_visibilities do |visibility|
mod = Module.new
mod.send(:define_method, :foo) {}
mod.send(visibility, :foo)
klass = Class.new do
extend mod
end
assert_method_exists(klass, mod, :foo, visibility)
end
end
def test_detect_method_on_module_included_as_class_method_into_superclass
for_all_method_visibilities do |visibility|
mod = Module.new
mod.send(:define_method, :foo) {}
mod.send(visibility, :foo)
superklass = Class.new do
extend mod
end
klass = Class.new(superklass)
assert_method_exists(klass, mod, :foo, visibility)
end
end
def test_detect_method_on_module_included_as_class_method_into_superclass_of_superclass
for_all_method_visibilities do |visibility|
mod = Module.new
mod.send(:define_method, :foo) {}
mod.send(visibility, :foo)
superduperklass = Class.new do
extend mod
end
klass = Class.new(Class.new(superduperklass))
assert_method_exists(klass, mod, :foo, visibility)
end
end
def test_detect_method_on_module_included_into_module_included_as_class_method_into_class
for_all_method_visibilities do |visibility|
mod = Module.new
mod.send(:define_method, :foo) {}
mod.send(visibility, :foo)
supermod = Module.new do
include mod
end
klass = Class.new do
extend supermod
end
assert_method_exists(klass, mod, :foo, visibility)
end
end
end
|