Bug #4715 ยป singleton_tests.diff
test/test_singleton.rb | ||
---|---|---|
require 'singleton'
|
||
class TestSingleton < Test::Unit::TestCase
|
||
class C
|
||
class SingletonTest
|
||
include Singleton
|
||
end
|
||
def test_marshal
|
||
o1 = C.instance
|
||
o1 = SingletonTest.instance
|
||
m = Marshal.dump(o1)
|
||
o2 = Marshal.load(m)
|
||
assert_same(o1, o2)
|
||
end
|
||
def test_instance_never_changes
|
||
a = SingletonTest.instance
|
||
b = SingletonTest.instance
|
||
assert_same a, b
|
||
end
|
||
def test_initialize_raises_exception
|
||
assert_raises NoMethodError do
|
||
SingletonTest.new
|
||
end
|
||
end
|
||
def test_allocate_raises_exception
|
||
assert_raises NoMethodError do
|
||
SingletonTest.allocate
|
||
end
|
||
end
|
||
def test_clone_raises_exception
|
||
exception = assert_raises TypeError do
|
||
SingletonTest.instance.clone
|
||
end
|
||
expected = "can't clone instance of singleton TestSingleton::SingletonTest"
|
||
assert_equal expected, exception.message
|
||
end
|
||
def test_dup_raises_exception
|
||
exception = assert_raises TypeError do
|
||
SingletonTest.instance.dup
|
||
end
|
||
expected = "can't dup instance of singleton TestSingleton::SingletonTest"
|
||
assert_equal expected, exception.message
|
||
end
|
||
def test_include_in_module_raises_exception
|
||
mod = Module.new
|
||
exception = assert_raises TypeError do
|
||
mod.class_eval do
|
||
include Singleton
|
||
end
|
||
end
|
||
expected = "Inclusion of the OO-Singleton module in module #{mod}"
|
||
assert_equal expected, exception.message
|
||
end
|
||
def test_extending_singleton_raises_exception
|
||
assert_raises NoMethodError do
|
||
'foo'.extend Singleton
|
||
end
|
||
end
|
||
def test_inheritance_works_with_overridden_inherited_method
|
||
super_super_called = false
|
||
outer = Class.new do
|
||
define_singleton_method :inherited do |sub|
|
||
super_super_called = true
|
||
end
|
||
end
|
||
inner = Class.new(outer) do
|
||
include Singleton
|
||
end
|
||
tester = Class.new(inner)
|
||
assert super_super_called
|
||
a = tester.instance
|
||
b = tester.instance
|
||
assert_same a, b
|
||
end
|
||
def test_class_level_cloning_preserves_singleton_behavior
|
||
klass = SingletonTest.clone
|
||
a = klass.instance
|
||
b = klass.instance
|
||
assert_same a, b
|
||
end
|
||
end
|