зеркало из https://github.com/github/ruby.git
[ruby/singleton] Simplify implementation of `Singleton#instance`.
(https://github.com/ruby/singleton/pull/9) - Add more tests to cover rails' usage.
This commit is contained in:
Родитель
3fe0f8c68b
Коммит
542c70aab7
|
@ -121,12 +121,7 @@ module Singleton
|
||||||
end
|
end
|
||||||
|
|
||||||
def instance # :nodoc:
|
def instance # :nodoc:
|
||||||
return @singleton__instance__ if @singleton__instance__
|
@singleton__instance__ || @singleton__mutex__.synchronize { @singleton__instance__ ||= new }
|
||||||
@singleton__mutex__.synchronize {
|
|
||||||
return @singleton__instance__ if @singleton__instance__
|
|
||||||
@singleton__instance__ = new()
|
|
||||||
}
|
|
||||||
@singleton__instance__
|
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
|
@ -94,6 +94,23 @@ class TestSingleton < Test::Unit::TestCase
|
||||||
assert_same a, b
|
assert_same a, b
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_inheritance_creates_separate_singleton
|
||||||
|
a = SingletonTest.instance
|
||||||
|
b = Class.new(SingletonTest).instance
|
||||||
|
|
||||||
|
assert_not_same a, b
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_inheritance_instantiation
|
||||||
|
klass = Class.new do
|
||||||
|
include Singleton
|
||||||
|
|
||||||
|
public_class_method :new
|
||||||
|
end
|
||||||
|
|
||||||
|
assert Class.new(klass).new
|
||||||
|
end
|
||||||
|
|
||||||
def test_class_level_cloning_preserves_singleton_behavior
|
def test_class_level_cloning_preserves_singleton_behavior
|
||||||
klass = SingletonTest.clone
|
klass = SingletonTest.clone
|
||||||
|
|
||||||
|
@ -101,4 +118,8 @@ class TestSingleton < Test::Unit::TestCase
|
||||||
b = klass.instance
|
b = klass.instance
|
||||||
assert_same a, b
|
assert_same a, b
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_class_level_cloning_creates_separate_singleton
|
||||||
|
assert_not_same SingletonTest.instance, SingletonTest.clone.instance
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Загрузка…
Ссылка в новой задаче