2007-02-09 09:04:31 +01:00
|
|
|
require File.dirname(__FILE__) + '/abstract_unit'
|
2007-01-22 14:43:50 +01:00
|
|
|
|
2007-02-09 09:04:31 +01:00
|
|
|
ActiveSupport::Deprecation.silence do
|
|
|
|
module ReloadableTestSandbox
|
|
|
|
class AReloadableClass
|
|
|
|
include Reloadable
|
2007-01-22 14:43:50 +01:00
|
|
|
end
|
2007-02-09 09:04:31 +01:00
|
|
|
class AReloadableClassWithSubclasses
|
|
|
|
include Reloadable
|
|
|
|
end
|
|
|
|
class AReloadableSubclass < AReloadableClassWithSubclasses
|
|
|
|
end
|
|
|
|
class ANonReloadableSubclass < AReloadableClassWithSubclasses
|
|
|
|
def self.reloadable?
|
|
|
|
false
|
|
|
|
end
|
|
|
|
end
|
|
|
|
class AClassWhichDefinesItsOwnReloadable
|
|
|
|
def self.reloadable?
|
|
|
|
10
|
|
|
|
end
|
|
|
|
include Reloadable
|
|
|
|
end
|
|
|
|
|
|
|
|
class SubclassesReloadable
|
|
|
|
include Reloadable::Subclasses
|
|
|
|
end
|
|
|
|
class ASubclassOfSubclassesReloadable < SubclassesReloadable
|
|
|
|
end
|
|
|
|
|
|
|
|
class AnOnlySubclassReloadableClassSubclassingAReloadableClass
|
|
|
|
include Reloadable::Subclasses
|
|
|
|
end
|
|
|
|
|
|
|
|
class ASubclassofAOnlySubclassReloadableClassWhichWasSubclassingAReloadableClass < AnOnlySubclassReloadableClassSubclassingAReloadableClass
|
2007-01-22 14:43:50 +01:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
class ReloadableTest < Test::Unit::TestCase
|
|
|
|
def test_classes_receive_reloadable
|
|
|
|
assert ReloadableTestSandbox::AReloadableClass.respond_to?(:reloadable?)
|
|
|
|
end
|
|
|
|
def test_classes_inherit_reloadable
|
|
|
|
assert ReloadableTestSandbox::AReloadableSubclass.respond_to?(:reloadable?)
|
|
|
|
end
|
|
|
|
def test_reloadable_is_not_overwritten_if_present
|
|
|
|
assert_equal 10, ReloadableTestSandbox::AClassWhichDefinesItsOwnReloadable.reloadable?
|
|
|
|
end
|
2007-02-09 09:04:31 +01:00
|
|
|
|
2007-01-22 14:43:50 +01:00
|
|
|
def test_only_subclass_reloadable
|
2007-02-09 09:04:31 +01:00
|
|
|
assert_deprecated_reloadable do
|
|
|
|
assert !ReloadableTestSandbox::SubclassesReloadable.reloadable?
|
|
|
|
assert ReloadableTestSandbox::ASubclassOfSubclassesReloadable.reloadable?
|
|
|
|
end
|
2007-01-22 14:43:50 +01:00
|
|
|
end
|
2007-02-09 09:04:31 +01:00
|
|
|
|
2007-01-22 14:43:50 +01:00
|
|
|
def test_inside_hierarchy_only_subclass_reloadable
|
2007-02-09 09:04:31 +01:00
|
|
|
assert_deprecated_reloadable do
|
|
|
|
assert !ReloadableTestSandbox::AnOnlySubclassReloadableClassSubclassingAReloadableClass.reloadable?
|
|
|
|
assert ReloadableTestSandbox::ASubclassofAOnlySubclassReloadableClassWhichWasSubclassingAReloadableClass.reloadable?
|
|
|
|
end
|
2007-01-22 14:43:50 +01:00
|
|
|
end
|
2007-02-09 09:04:31 +01:00
|
|
|
|
2007-01-22 14:43:50 +01:00
|
|
|
def test_removable_classes
|
|
|
|
reloadables = %w(
|
|
|
|
AReloadableClass
|
|
|
|
AReloadableClassWithSubclasses
|
|
|
|
AReloadableSubclass
|
|
|
|
AClassWhichDefinesItsOwnReloadable
|
|
|
|
ASubclassOfSubclassesReloadable
|
|
|
|
)
|
|
|
|
non_reloadables = %w(
|
|
|
|
ANonReloadableSubclass
|
|
|
|
SubclassesReloadable
|
|
|
|
)
|
2007-02-09 09:04:31 +01:00
|
|
|
|
|
|
|
results = []
|
|
|
|
assert_deprecated_reloadable { results = Reloadable.reloadable_classes }
|
2007-01-22 14:43:50 +01:00
|
|
|
reloadables.each do |name|
|
|
|
|
assert results.include?(ReloadableTestSandbox.const_get(name)), "Expected #{name} to be reloadable"
|
|
|
|
end
|
|
|
|
non_reloadables.each do |name|
|
|
|
|
assert ! results.include?(ReloadableTestSandbox.const_get(name)), "Expected #{name} NOT to be reloadable"
|
|
|
|
end
|
|
|
|
end
|
2007-02-09 09:04:31 +01:00
|
|
|
|
|
|
|
def test_including_reloadable_should_warn
|
|
|
|
c = Class.new
|
|
|
|
assert_deprecated_reloadable do
|
|
|
|
c.send :include, Reloadable
|
|
|
|
end
|
|
|
|
|
|
|
|
assert_deprecated_reloadable { c.reloadable? }
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_include_subclasses_should_warn
|
|
|
|
c = Class.new
|
|
|
|
result, deps = collect_deprecations do
|
|
|
|
c.send :include, Reloadable::Subclasses
|
|
|
|
end
|
|
|
|
assert_equal 1, deps.size
|
|
|
|
assert_match %r{Reloadable::Subclasses}, deps.first
|
|
|
|
|
|
|
|
assert_deprecated_reloadable { c.reloadable? }
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_include_deprecated_should_not_warn
|
|
|
|
c = Class.new
|
|
|
|
result, deps = collect_deprecations do
|
|
|
|
c.send :include, Reloadable::Deprecated
|
|
|
|
end
|
|
|
|
assert_equal 0, deps.size
|
|
|
|
|
|
|
|
assert c.respond_to?(:reloadable?)
|
|
|
|
assert_deprecated_reloadable { c.reloadable? }
|
|
|
|
end
|
|
|
|
|
|
|
|
protected
|
|
|
|
def assert_deprecated_reloadable(&block)
|
|
|
|
assert_deprecated(/reloadable/, &block)
|
|
|
|
end
|
|
|
|
end
|