diff options
author | Rolf Timmermans <r.timmermans@voormedia.com> | 2011-03-13 16:52:34 +0100 |
---|---|---|
committer | Rolf Timmermans <r.timmermans@voormedia.com> | 2011-03-13 17:04:01 +0100 |
commit | 76e4e2fa468593c42623472055d329dfeb577c49 (patch) | |
tree | dd6c654db48363a192a496a419e9cfa62f2d6d93 /activesupport/test/descendants_tracker_test_cases.rb | |
parent | 56a0cba7bedea46bb01f7f9e8db9398aeeac950b (diff) | |
download | rails-76e4e2fa468593c42623472055d329dfeb577c49.tar.gz rails-76e4e2fa468593c42623472055d329dfeb577c49.tar.bz2 rails-76e4e2fa468593c42623472055d329dfeb577c49.zip |
Refactored AS::DescendantsTracker test cases so they can be tested without AS::Dependencies.
Diffstat (limited to 'activesupport/test/descendants_tracker_test_cases.rb')
-rw-r--r-- | activesupport/test/descendants_tracker_test_cases.rb | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/activesupport/test/descendants_tracker_test_cases.rb b/activesupport/test/descendants_tracker_test_cases.rb new file mode 100644 index 0000000000..066ec8549b --- /dev/null +++ b/activesupport/test/descendants_tracker_test_cases.rb @@ -0,0 +1,59 @@ +module DescendantsTrackerTestCases + class Parent + extend ActiveSupport::DescendantsTracker + end + + class Child1 < Parent + end + + class Child2 < Parent + end + + class Grandchild1 < Child1 + end + + class Grandchild2 < Child1 + end + + ALL = [Parent, Child1, Child2, Grandchild1, Grandchild2] + + def test_descendants + assert_equal [Child1, Grandchild1, Grandchild2, Child2], Parent.descendants + assert_equal [Grandchild1, Grandchild2], Child1.descendants + assert_equal [], Child2.descendants + end + + def test_direct_descendants + assert_equal [Child1, Child2], Parent.direct_descendants + assert_equal [Grandchild1, Grandchild2], Child1.direct_descendants + assert_equal [], Child2.direct_descendants + end + + def test_clear + mark_as_autoloaded(*ALL) do + ActiveSupport::DescendantsTracker.clear + ALL.each do |k| + assert ActiveSupport::DescendantsTracker.descendants(k).empty? + end + end + end + + protected + + def mark_as_autoloaded(*klasses) + # If ActiveSupport::Dependencies is not loaded, forget about autoloading. + # This allows using AS::DescendantsTracker without AS::Dependencies. + if defined? ActiveSupport::Dependencies + old_autoloaded = ActiveSupport::Dependencies.autoloaded_constants.dup + ActiveSupport::Dependencies.autoloaded_constants = klasses.map(&:name) + end + + old_descendants = ActiveSupport::DescendantsTracker.class_eval("@@direct_descendants").dup + old_descendants.each { |k, v| old_descendants[k] = v.dup } + + yield + ensure + ActiveSupport::Dependencies.autoloaded_constants = old_autoloaded if defined? ActiveSupport::Dependencies + ActiveSupport::DescendantsTracker.class_eval("@@direct_descendants").replace(old_descendants) + end +end
\ No newline at end of file |