diff options
author | drbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2011-05-17 18:15:10 +0000 |
---|---|---|
committer | drbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2011-05-17 18:15:10 +0000 |
commit | c0d9226f49556b9b39b4451f1d8b8c2271a177e1 (patch) | |
tree | 4bc1b5be1b4d3174e76ef8c2af605f32e1c4f688 /test/test_singleton.rb | |
parent | f4c41cf2d24be02a06179a1f84960e3741fcd568 (diff) | |
download | ruby-c0d9226f49556b9b39b4451f1d8b8c2271a177e1.tar.gz |
* test/test_singleton.rb: Add tests from lib/singleton.rb. Patch by
Pete Higgins. [Ruby 1.9 - Bug #4715]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31614 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test/test_singleton.rb')
-rw-r--r-- | test/test_singleton.rb | 92 |
1 files changed, 90 insertions, 2 deletions
diff --git a/test/test_singleton.rb b/test/test_singleton.rb index bd11095cf2..259f9c5e0f 100644 --- a/test/test_singleton.rb +++ b/test/test_singleton.rb @@ -2,14 +2,102 @@ require 'test/unit' 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 |