Bug #4709 » 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
|
||
- « Previous
- 1
- 2
- Next »