diff options
author | Nicholas Seckar <nseckar@gmail.com> | 2006-03-27 05:13:46 +0000 |
---|---|---|
committer | Nicholas Seckar <nseckar@gmail.com> | 2006-03-27 05:13:46 +0000 |
commit | 9efca53908c09b7f188183aec6c0a4a2df347316 (patch) | |
tree | bd1eacf10bdcaef1112bf0c36d3a3743fb092733 /activesupport/test | |
parent | 24403498ba8582d29f55aab16ffd5920dec1c669 (diff) | |
download | rails-9efca53908c09b7f188183aec6c0a4a2df347316.tar.gz rails-9efca53908c09b7f188183aec6c0a4a2df347316.tar.bz2 rails-9efca53908c09b7f188183aec6c0a4a2df347316.zip |
Dependencies cleanup. Fixes #4221.
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@4060 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'activesupport/test')
4 files changed, 114 insertions, 81 deletions
diff --git a/activesupport/test/autoloading_fixtures/module_folder/nested_class.rb b/activesupport/test/autoloading_fixtures/module_folder/nested_class.rb new file mode 100644 index 0000000000..39ee0e50d5 --- /dev/null +++ b/activesupport/test/autoloading_fixtures/module_folder/nested_class.rb @@ -0,0 +1,2 @@ +class ModuleFolder::NestedClass +end
\ No newline at end of file diff --git a/activesupport/test/autoloading_fixtures/module_folder/nested_sibling.rb b/activesupport/test/autoloading_fixtures/module_folder/nested_sibling.rb new file mode 100644 index 0000000000..80244b8bab --- /dev/null +++ b/activesupport/test/autoloading_fixtures/module_folder/nested_sibling.rb @@ -0,0 +1,2 @@ +class ModuleFolder::NestedSibling +end
\ No newline at end of file diff --git a/activesupport/test/core_ext/module_test.rb b/activesupport/test/core_ext/module_test.rb index 464196a0ec..eb92fbc12c 100644 --- a/activesupport/test/core_ext/module_test.rb +++ b/activesupport/test/core_ext/module_test.rb @@ -82,4 +82,20 @@ class ModuleTest < Test::Unit::TestCase assert_raises(ArgumentError) { eval($nowhere) } assert_raises(ArgumentError) { eval($noplace) } end + + def test_parent + assert_equal Yz::Zy, Yz::Zy::Cd.parent + assert_equal Yz, Yz::Zy.parent + assert_equal Object, Yz.parent + end + + def test_parents + assert_equal [Yz::Zy, Yz, Object], Yz::Zy::Cd.parents + assert_equal [Yz, Object], Yz::Zy.parents + end + + def test_as_load_path + assert_equal 'yz/zy', Yz::Zy.as_load_path + assert_equal 'yz', Yz.as_load_path + end end
\ No newline at end of file diff --git a/activesupport/test/dependencies_test.rb b/activesupport/test/dependencies_test.rb index af7c09068c..f5651eddcc 100644 --- a/activesupport/test/dependencies_test.rb +++ b/activesupport/test/dependencies_test.rb @@ -7,6 +7,17 @@ class DependenciesTest < Test::Unit::TestCase def teardown Dependencies.clear end + + def with_loading(from_dir = nil) + prior_path = $LOAD_PATH.clone + $LOAD_PATH.unshift "#{File.dirname(__FILE__)}/#{from_dir}" if from_dir + old_mechanism, Dependencies.mechanism = Dependencies.mechanism, :load + yield + ensure + $LOAD_PATH.clear + $LOAD_PATH.concat prior_path + Dependencies.mechanism = old_mechanism + end def test_tracking_loaded_files require_dependency(File.dirname(__FILE__) + "/dependencies/service_one") @@ -29,76 +40,68 @@ class DependenciesTest < Test::Unit::TestCase end def test_dependency_which_raises_exception_isnt_added_to_loaded_set - old_mechanism, Dependencies.mechanism = Dependencies.mechanism, :load + with_loading do + filename = "#{File.dirname(__FILE__)}/dependencies/raises_exception" + $raises_exception_load_count = 0 - filename = "#{File.dirname(__FILE__)}/dependencies/raises_exception" - $raises_exception_load_count = 0 + 5.times do |count| + assert_raises(RuntimeError) { require_dependency filename } + assert_equal count + 1, $raises_exception_load_count - 5.times do |count| - assert_raises(RuntimeError) { require_dependency filename } - assert_equal count + 1, $raises_exception_load_count - - assert !Dependencies.loaded.include?(filename) - assert !Dependencies.history.include?(filename) + assert !Dependencies.loaded.include?(filename) + assert !Dependencies.history.include?(filename) + end end - ensure - Dependencies.mechanism = old_mechanism end def test_warnings_should_be_enabled_on_first_load - old_mechanism, Dependencies.mechanism = Dependencies.mechanism, :load - old_warnings, Dependencies.warnings_on_first_load = Dependencies.warnings_on_first_load, true + with_loading do + old_warnings, Dependencies.warnings_on_first_load = Dependencies.warnings_on_first_load, true - filename = "#{File.dirname(__FILE__)}/dependencies/check_warnings" - $check_warnings_load_count = 0 + filename = "#{File.dirname(__FILE__)}/dependencies/check_warnings" + $check_warnings_load_count = 0 - assert !Dependencies.loaded.include?(filename) - assert !Dependencies.history.include?(filename) + assert !Dependencies.loaded.include?(filename) + assert !Dependencies.history.include?(filename) - silence_warnings { require_dependency filename } - assert_equal 1, $check_warnings_load_count - assert_equal true, $checked_verbose, 'On first load warnings should be enabled.' + silence_warnings { require_dependency filename } + assert_equal 1, $check_warnings_load_count + assert_equal true, $checked_verbose, 'On first load warnings should be enabled.' - assert Dependencies.loaded.include?(filename) - Dependencies.clear - assert !Dependencies.loaded.include?(filename) - assert Dependencies.history.include?(filename) + assert Dependencies.loaded.include?(filename) + Dependencies.clear + assert !Dependencies.loaded.include?(filename) + assert Dependencies.history.include?(filename) - silence_warnings { require_dependency filename } - assert_equal 2, $check_warnings_load_count - assert_equal nil, $checked_verbose, 'After first load warnings should be left alone.' + silence_warnings { require_dependency filename } + assert_equal 2, $check_warnings_load_count + assert_equal nil, $checked_verbose, 'After first load warnings should be left alone.' - assert Dependencies.loaded.include?(filename) - Dependencies.clear - assert !Dependencies.loaded.include?(filename) - assert Dependencies.history.include?(filename) + assert Dependencies.loaded.include?(filename) + Dependencies.clear + assert !Dependencies.loaded.include?(filename) + assert Dependencies.history.include?(filename) - enable_warnings { require_dependency filename } - assert_equal 3, $check_warnings_load_count - assert_equal true, $checked_verbose, 'After first load warnings should be left alone.' + enable_warnings { require_dependency filename } + assert_equal 3, $check_warnings_load_count + assert_equal true, $checked_verbose, 'After first load warnings should be left alone.' - assert Dependencies.loaded.include?(filename) - ensure - Dependencies.mechanism = old_mechanism - Dependencies.warnings_on_first_load = old_warnings + assert Dependencies.loaded.include?(filename) + end end def test_mutual_dependencies_dont_infinite_loop - $LOAD_PATH.unshift "#{File.dirname(__FILE__)}/dependencies" - old_mechanism, Dependencies.mechanism = Dependencies.mechanism, :load + with_loading 'dependencies' do + $mutual_dependencies_count = 0 + assert_nothing_raised { require_dependency 'mutual_one' } + assert_equal 2, $mutual_dependencies_count - $mutual_dependencies_count = 0 - assert_nothing_raised { require_dependency 'mutual_one' } - assert_equal 2, $mutual_dependencies_count + Dependencies.clear - Dependencies.clear - - $mutual_dependencies_count = 0 - assert_nothing_raised { require_dependency 'mutual_two' } - assert_equal 2, $mutual_dependencies_count - ensure - $LOAD_PATH.shift - Dependencies.mechanism = old_mechanism + $mutual_dependencies_count = 0 + assert_nothing_raised { require_dependency 'mutual_two' } + assert_equal 2, $mutual_dependencies_count + end end def test_as_load_path @@ -106,43 +109,53 @@ class DependenciesTest < Test::Unit::TestCase end def test_module_loading - begin - $LOAD_PATH.unshift "#{File.dirname(__FILE__)}/autoloading_fixtures" - old_mechanism, Dependencies.mechanism = Dependencies.mechanism, :load - + with_loading 'autoloading_fixtures' do assert_kind_of Module, A assert_kind_of Class, A::B assert_kind_of Class, A::C::D assert_kind_of Class, A::C::E::F - ensure - $LOAD_PATH.shift - Dependencies.mechanism = old_mechanism end end - def test_non_existing_cost_raises_nameerrror - begin - $LOAD_PATH.unshift "#{File.dirname(__FILE__)}/autoloading_fixtures" - old_mechanism, Dependencies.mechanism = Dependencies.mechanism, :load - assert_raises(NameError) do - DoesNotExist - end - - assert_raises(NameError) do - NoModule::DoesNotExist - end - - assert_raises(NameError) do - A::DoesNotExist - end - - assert_raises(NameError) do - A::B::DoesNotExist - end - ensure - $LOAD_PATH.shift - Dependencies.mechanism = old_mechanism + def test_non_existing_const_raises_name_error + with_loading 'autoloading_fixtures' do + assert_raises(NameError) { DoesNotExist } + assert_raises(NameError) { NoModule::DoesNotExist } + assert_raises(NameError) { A::DoesNotExist } + assert_raises(NameError) { A::B::DoesNotExist } end - end + + def test_directories_should_manifest_as_modules + with_loading 'autoloading_fixtures' do + assert_kind_of Module, ModuleFolder + Object.send :remove_const, :ModuleFolder + end + end + + def test_nested_class_access + with_loading 'autoloading_fixtures' do + assert_kind_of Class, ModuleFolder::NestedClass + Object.send :remove_const, :ModuleFolder + end + end + + def test_nested_class_can_access_sibling + with_loading 'autoloading_fixtures' do + sibling = ModuleFolder::NestedClass.class_eval "NestedSibling" + assert defined?(ModuleFolder::NestedSibling) + assert_equal ModuleFolder::NestedSibling, sibling + Object.send :remove_const, :ModuleFolder + end + end + + def failing_test_access_thru_and_upwards_fails + with_loading 'autoloading_fixtures' do + assert ! defined?(ModuleFolder) + assert_raises(NameError) { ModuleFolder::Object } + assert_raises(NameError) { ModuleFolder::NestedClass::Object } + Object.send :remove_const, :ModuleFolder + end + end + end |