class DependenciesTest
Public Class Methods
before_remove_const()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 752 def self.before_remove_const; end
Public Instance Methods
test_access_thru_and_upwards_fails()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 405 def test_access_thru_and_upwards_fails with_autoloading_fixtures do assert_not defined?(ModuleFolder) assert_raise(NameError) { ModuleFolder::Object } assert_raise(NameError) { ModuleFolder::NestedClass::Object } end ensure remove_constants(:ModuleFolder) end
test_access_unloaded_constants_for_reload()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 1031 def test_access_unloaded_constants_for_reload with_autoloading_fixtures do assert_kind_of Module, A assert_kind_of Class, A::B # Necessary to load A::B for the test ActiveSupport::Dependencies.mark_for_unload(A::B) ActiveSupport::Dependencies.remove_unloadable_constants! A::B # Make sure no circular dependency error end ensure remove_constants(:A) end
test_application_should_special_case_application_controller()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 683 def test_application_should_special_case_application_controller with_autoloading_fixtures do require_dependency "application" assert_equal 10, ApplicationController assert ActiveSupport::Dependencies.autoloaded?(:ApplicationController) end ensure remove_constants(:ApplicationController) end
test_autoload_doesnt_shadow_error_when_mechanism_not_set_to_load()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 950 def test_autoload_doesnt_shadow_error_when_mechanism_not_set_to_load with_autoloading_fixtures do ActiveSupport::Dependencies.mechanism = :require 2.times do assert_raise(NameError) { assert_equal 123, ::RaisesNameError::FooBarBaz } end end ensure remove_constants(:RaisesNameError) end
test_autoload_doesnt_shadow_name_error()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 961 def test_autoload_doesnt_shadow_name_error with_autoloading_fixtures do 2.times do e = assert_raise NameError do ::RaisesNameError::FooBarBaz.object_id end assert_equal "uninitialized constant RaisesNameError::FooBarBaz", e.message assert !defined?(::RaisesNameError), "::RaisesNameError is defined but it should have failed!" end assert !defined?(::RaisesNameError) 2.times do assert_raise(NameError) { ::RaisesNameError } assert !defined?(::RaisesNameError), "::RaisesNameError is defined but it should have failed!" end end ensure remove_constants(:RaisesNameError) end
test_autoload_doesnt_shadow_no_method_error_with_absolute_constant()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 938 def test_autoload_doesnt_shadow_no_method_error_with_absolute_constant with_autoloading_fixtures do assert !defined?(::RaisesNoMethodError), "::RaisesNoMethodError is defined but it hasn't been referenced yet!" 2.times do assert_raise(NoMethodError) { ::RaisesNoMethodError } assert !defined?(::RaisesNoMethodError), "::RaisesNoMethodError is defined but it should have failed!" end end ensure remove_constants(:RaisesNoMethodError) end
test_autoload_doesnt_shadow_no_method_error_with_relative_constant()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 926 def test_autoload_doesnt_shadow_no_method_error_with_relative_constant with_autoloading_fixtures do assert !defined?(::RaisesNoMethodError), "::RaisesNoMethodError is defined but it hasn't been referenced yet!" 2.times do assert_raise(NoMethodError) { RaisesNoMethodError } assert !defined?(::RaisesNoMethodError), "::RaisesNoMethodError is defined but it should have failed!" end end ensure remove_constants(:RaisesNoMethodError) end
test_autoload_once_pathnames_do_not_add_to_autoloaded_constants()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 665 def test_autoload_once_pathnames_do_not_add_to_autoloaded_constants with_autoloading_fixtures do pathnames = ActiveSupport::Dependencies.autoload_paths.collect { |p| Pathname.new(p) } ActiveSupport::Dependencies.autoload_paths = pathnames ActiveSupport::Dependencies.autoload_once_paths = pathnames assert_not ActiveSupport::Dependencies.autoloaded?("ModuleFolder") assert_not ActiveSupport::Dependencies.autoloaded?("ModuleFolder::NestedClass") assert_not ActiveSupport::Dependencies.autoloaded?(ModuleFolder) 1 if ModuleFolder::NestedClass # 1 if to avoid warning assert_not ActiveSupport::Dependencies.autoloaded?(ModuleFolder::NestedClass) end ensure remove_constants(:ModuleFolder) ActiveSupport::Dependencies.autoload_once_paths = [] end
test_autoload_once_paths_do_not_add_to_autoloaded_constants()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 648 def test_autoload_once_paths_do_not_add_to_autoloaded_constants old_path = ActiveSupport::Dependencies.autoload_once_paths with_autoloading_fixtures do ActiveSupport::Dependencies.autoload_once_paths = ActiveSupport::Dependencies.autoload_paths.dup assert_not ActiveSupport::Dependencies.autoloaded?("ModuleFolder") assert_not ActiveSupport::Dependencies.autoloaded?("ModuleFolder::NestedClass") assert_not ActiveSupport::Dependencies.autoloaded?(ModuleFolder) 1 if ModuleFolder::NestedClass # 1 if to avoid warning assert_not ActiveSupport::Dependencies.autoloaded?(ModuleFolder::NestedClass) end ensure remove_constants(:ModuleFolder) ActiveSupport::Dependencies.autoload_once_paths = old_path end
test_autoload_once_paths_should_behave_when_recursively_loading()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 1044 def test_autoload_once_paths_should_behave_when_recursively_loading old_path = ActiveSupport::Dependencies.autoload_once_paths with_loading "dependencies", "autoloading_fixtures" do ActiveSupport::Dependencies.autoload_once_paths = [ActiveSupport::Dependencies.autoload_paths.last] assert_not defined?(CrossSiteDependency) assert_nothing_raised { CrossSiteDepender.nil? } assert defined?(CrossSiteDependency) assert_not ActiveSupport::Dependencies.autoloaded?(CrossSiteDependency), "CrossSiteDependency shouldn't be marked as autoloaded!" ActiveSupport::Dependencies.clear assert defined?(CrossSiteDependency), "CrossSiteDependency shouldn't have been unloaded!" end ensure ActiveSupport::Dependencies.autoload_once_paths = old_path remove_constants(:CrossSiteDependency) end
test_autoloaded?()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 493 def test_autoloaded? with_autoloading_fixtures do assert ! ActiveSupport::Dependencies.autoloaded?("ModuleFolder") assert ! ActiveSupport::Dependencies.autoloaded?("ModuleFolder::NestedClass") assert ActiveSupport::Dependencies.autoloaded?(ModuleFolder) assert ActiveSupport::Dependencies.autoloaded?("ModuleFolder") assert ! ActiveSupport::Dependencies.autoloaded?("ModuleFolder::NestedClass") assert ActiveSupport::Dependencies.autoloaded?(ModuleFolder::NestedClass) assert ActiveSupport::Dependencies.autoloaded?("ModuleFolder") assert ActiveSupport::Dependencies.autoloaded?("ModuleFolder::NestedClass") assert ActiveSupport::Dependencies.autoloaded?("::ModuleFolder") assert ActiveSupport::Dependencies.autoloaded?(:ModuleFolder) # Anonymous modules aren't autoloaded. assert !ActiveSupport::Dependencies.autoloaded?(Module.new) nil_name = Module.new def nil_name.name() nil end assert !ActiveSupport::Dependencies.autoloaded?(nil_name) end ensure remove_constants(:ModuleFolder) end
test_circular_autoloading_detection()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 156 def test_circular_autoloading_detection with_autoloading_fixtures do e = assert_raise(RuntimeError) { Circular1 } assert_equal "Circular dependency detected while autoloading constant Circular1", e.message end end
test_class_with_nested_class()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 238 def test_class_with_nested_class with_autoloading_fixtures do assert_kind_of Class, ClassFolder::NestedClass end ensure remove_constants(:ClassFolder) end
test_class_with_nested_inline_class()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 246 def test_class_with_nested_inline_class with_autoloading_fixtures do assert_kind_of Class, ClassFolder::InlineClass end ensure remove_constants(:ClassFolder) end
test_class_with_nested_inline_subclass_of_parent()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 254 def test_class_with_nested_inline_subclass_of_parent with_autoloading_fixtures do assert_kind_of Class, ClassFolder::ClassFolderSubclass assert_kind_of Class, ClassFolder assert_equal "indeed", ClassFolder::ClassFolderSubclass::ConstantInClassFolder end ensure remove_constants(:ClassFolder) end
test_const_missing_in_anonymous_modules_loads_top_level_constants()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 580 def test_const_missing_in_anonymous_modules_loads_top_level_constants with_autoloading_fixtures do # class_eval STRING pushes the class to the nesting of the eval'ed code. klass = Class.new.class_eval "EM" assert_equal EM, klass end ensure remove_constants(:EM) end
test_const_missing_in_anonymous_modules_raises_if_the_constant_belongs_to_Object()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 590 def test_const_missing_in_anonymous_modules_raises_if_the_constant_belongs_to_Object with_autoloading_fixtures do require_dependency "em" mod = Module.new e = assert_raise(NameError) { mod::EM } assert_equal "EM cannot be autoloaded from an anonymous class or module", e.message assert_equal :EM, e.name end ensure remove_constants(:EM) end
test_constantize_shortcut_for_cached_constant_lookups()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 632 def test_constantize_shortcut_for_cached_constant_lookups with_loading "dependencies" do assert_equal ServiceOne, ActiveSupport::Dependencies.constantize("ServiceOne") end ensure remove_constants(:ServiceOne) end
test_constants_in_capitalized_nesting_marked_as_autoloaded()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 710 def test_constants_in_capitalized_nesting_marked_as_autoloaded with_autoloading_fixtures do ActiveSupport::Dependencies.load_missing_constant(HTML, "SomeClass") assert ActiveSupport::Dependencies.autoloaded?("HTML::SomeClass") end ensure remove_constants(:HTML) end
test_custom_const_missing_should_work()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 559 def test_custom_const_missing_should_work Object.module_eval <<-end_eval, __FILE__, __LINE__ + 1 module ModuleWithCustomConstMissing def self.const_missing(name) const_set name, name.to_s.hash end module A end end end_eval with_autoloading_fixtures do assert_kind_of Integer, ::ModuleWithCustomConstMissing::B assert_kind_of Module, ::ModuleWithCustomConstMissing::A assert_kind_of String, ::ModuleWithCustomConstMissing::A::B end ensure remove_constants(:ModuleWithCustomConstMissing) end
test_depend_on_path()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 32 def test_depend_on_path expected = assert_raises(LoadError) do Kernel.require "omgwtfbbq" end e = assert_raises(LoadError) do ActiveSupport::Dependencies.depend_on "omgwtfbbq" end assert_equal expected.path, e.path end
test_dependency_which_raises_doesnt_blindly_call_blame_file!()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 98 def test_dependency_which_raises_doesnt_blindly_call_blame_file! with_loading do filename = "dependencies/raises_exception_without_blame_file" assert_raises(Exception) { require_dependency filename } end end
test_dependency_which_raises_exception_isnt_added_to_loaded_set()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 78 def test_dependency_which_raises_exception_isnt_added_to_loaded_set with_loading do filename = "dependencies/raises_exception" expanded = File.expand_path(filename) $raises_exception_load_count = 0 5.times do |count| e = assert_raise Exception, "should have loaded dependencies/raises_exception which raises an exception" do require_dependency filename end assert_equal "Loading me failed, so do not add to loaded or history.", e.message assert_equal count + 1, $raises_exception_load_count assert_not ActiveSupport::Dependencies.loaded.include?(expanded) assert_not ActiveSupport::Dependencies.history.include?(expanded) end end end
test_directories_manifest_as_modules_unless_const_defined()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 206 def test_directories_manifest_as_modules_unless_const_defined with_autoloading_fixtures do assert_kind_of Module, ModuleFolder end ensure remove_constants(:ModuleFolder) end
test_directories_may_manifest_as_nested_classes()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 230 def test_directories_may_manifest_as_nested_classes with_autoloading_fixtures do assert_kind_of Class, ClassFolder end ensure remove_constants(:ClassFolder) end
test_doesnt_break_normal_require()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 297 def test_doesnt_break_normal_require path = File.expand_path("autoloading_fixtures/load_path", __dir__) original_path = $:.dup $:.push(path) with_autoloading_fixtures do # The _ = assignments are to prevent warnings _ = RequiresConstant assert defined?(RequiresConstant) assert defined?(LoadedConstant) ActiveSupport::Dependencies.clear _ = RequiresConstant assert defined?(RequiresConstant) assert defined?(LoadedConstant) end ensure remove_constants(:RequiresConstant, :LoadedConstant) $:.replace(original_path) end
test_doesnt_break_normal_require_nested()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 316 def test_doesnt_break_normal_require_nested path = File.expand_path("autoloading_fixtures/load_path", __dir__) original_path = $:.dup $:.push(path) with_autoloading_fixtures do # The _ = assignments are to prevent warnings _ = LoadsConstant assert defined?(LoadsConstant) assert defined?(LoadedConstant) ActiveSupport::Dependencies.clear _ = LoadsConstant assert defined?(LoadsConstant) assert defined?(LoadedConstant) end ensure remove_constants(:RequiresConstant, :LoadedConstant, :LoadsConstant) $:.replace(original_path) end
test_ensures_the_expected_constant_is_defined()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 163 def test_ensures_the_expected_constant_is_defined with_autoloading_fixtures do e = assert_raise(LoadError) { Typo } assert_match %r{Unable to autoload constant Typo, expected .*/test/autoloading_fixtures/typo.rb to define it}, e.message end end
test_file_search()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 532 def test_file_search with_loading "dependencies" do root = ActiveSupport::Dependencies.autoload_paths.first assert_nil ActiveSupport::Dependencies.search_for_file("service_three") assert_nil ActiveSupport::Dependencies.search_for_file("service_three.rb") assert_equal root + "/service_one.rb", ActiveSupport::Dependencies.search_for_file("service_one") assert_equal root + "/service_one.rb", ActiveSupport::Dependencies.search_for_file("service_one.rb") end end
test_file_search_uses_first_in_load_path()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 542 def test_file_search_uses_first_in_load_path with_loading "dependencies", "autoloading_fixtures" do deps, autoload = ActiveSupport::Dependencies.autoload_paths assert_match %r/dependencies/, deps assert_match %r/autoloading_fixtures/, autoload assert_equal deps + "/conflict.rb", ActiveSupport::Dependencies.search_for_file("conflict") end with_loading "autoloading_fixtures", "dependencies" do autoload, deps = ActiveSupport::Dependencies.autoload_paths assert_match %r/dependencies/, deps assert_match %r/autoloading_fixtures/, autoload assert_equal autoload + "/conflict.rb", ActiveSupport::Dependencies.search_for_file("conflict") end end
test_file_with_multiple_constants_and_auto_loading()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 863 def test_file_with_multiple_constants_and_auto_loading with_autoloading_fixtures do assert_not defined?(MultipleConstantFile) assert_not defined?(SiblingConstant) assert_equal 10, MultipleConstantFile assert defined?(MultipleConstantFile) assert defined?(SiblingConstant) assert ActiveSupport::Dependencies.autoloaded?(:MultipleConstantFile) assert ActiveSupport::Dependencies.autoloaded?(:SiblingConstant) ActiveSupport::Dependencies.clear assert_not defined?(MultipleConstantFile) assert_not defined?(SiblingConstant) end ensure remove_constants(:MultipleConstantFile, :SiblingConstant) end
test_file_with_multiple_constants_and_require_dependency()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 844 def test_file_with_multiple_constants_and_require_dependency with_autoloading_fixtures do assert_not defined?(MultipleConstantFile) assert_not defined?(SiblingConstant) require_dependency "multiple_constant_file" assert defined?(MultipleConstantFile) assert defined?(SiblingConstant) assert ActiveSupport::Dependencies.autoloaded?(:MultipleConstantFile) assert ActiveSupport::Dependencies.autoloaded?(:SiblingConstant) ActiveSupport::Dependencies.clear assert_not defined?(MultipleConstantFile) assert_not defined?(SiblingConstant) end ensure remove_constants(:MultipleConstantFile, :SiblingConstant) end
test_hook_called_multiple_times()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 1062 def test_hook_called_multiple_times assert_nothing_raised { ActiveSupport::Dependencies.hook! } end
test_load_and_require_stay_private()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 1066 def test_load_and_require_stay_private assert_includes Object.private_methods, :load assert_includes Object.private_methods, :require ActiveSupport::Dependencies.unhook! assert_includes Object.private_methods, :load assert_includes Object.private_methods, :require ensure ActiveSupport::Dependencies.hook! end
test_load_once_constants_should_not_be_unloaded()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 1017 def test_load_once_constants_should_not_be_unloaded old_path = ActiveSupport::Dependencies.autoload_once_paths with_autoloading_fixtures do ActiveSupport::Dependencies.autoload_once_paths = ActiveSupport::Dependencies.autoload_paths _ = ::A # assignment to silence parse-time warning "possibly useless use of :: in void context" assert defined?(A) ActiveSupport::Dependencies.clear assert defined?(A) end ensure ActiveSupport::Dependencies.autoload_once_paths = old_path remove_constants(:A) end
test_load_raises_load_error_when_file_not_found()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 397 def test_load_raises_load_error_when_file_not_found with_loading do assert_raise(LoadError) { load "this_file_dont_exist_dude.rb" } end end
test_load_returns_true_when_file_found()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 383 def test_load_returns_true_when_file_found path = File.expand_path("autoloading_fixtures/load_path", __dir__) original_path = $:.dup $:.push(path) with_loading do assert_equal true, load("loaded_constant.rb") assert_equal true, load("loaded_constant.rb") end ensure remove_constants(:LoadedConstant) $:.replace(original_path) end
test_loadable_constants_for_path_should_handle_empty_autoloads()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 437 def test_loadable_constants_for_path_should_handle_empty_autoloads assert_equal [], ActiveSupport::Dependencies.loadable_constants_for_path("hello") end
test_loadable_constants_for_path_should_handle_relative_paths()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 441 def test_loadable_constants_for_path_should_handle_relative_paths fake_root = "dependencies" relative_root = File.expand_path("dependencies", __dir__) ["", "/"].each do |suffix| with_loading fake_root + suffix do assert_equal ["A::B"], ActiveSupport::Dependencies.loadable_constants_for_path(relative_root + "/a/b") end end end
test_loadable_constants_for_path_should_provide_all_results()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 451 def test_loadable_constants_for_path_should_provide_all_results fake_root = "/usr/apps/backpack" with_loading fake_root, fake_root + "/lib" do root = ActiveSupport::Dependencies.autoload_paths.first assert_equal ["Lib::A::B", "A::B"], ActiveSupport::Dependencies.loadable_constants_for_path(root + "/lib/a/b") end end
test_loadable_constants_for_path_should_uniq_results()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 459 def test_loadable_constants_for_path_should_uniq_results fake_root = "/usr/apps/backpack/lib" with_loading fake_root, fake_root + "/" do root = ActiveSupport::Dependencies.autoload_paths.first assert_equal ["A::B"], ActiveSupport::Dependencies.loadable_constants_for_path(root + "/a/b") end end
test_loadable_constants_with_load_path_without_trailing_slash()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 467 def test_loadable_constants_with_load_path_without_trailing_slash path = File.expand_path("autoloading_fixtures/class_folder/inline_class.rb", __dir__) with_loading "autoloading_fixtures/class/" do assert_equal [], ActiveSupport::Dependencies.loadable_constants_for_path(path) end end
test_missing_dependency_raises_missing_source_file()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 74 def test_missing_dependency_raises_missing_source_file assert_raise(LoadError) { require_dependency("missing_service") } end
test_module_loading()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 188 def test_module_loading with_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::EM::F end end
test_module_with_nested_class()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 214 def test_module_with_nested_class with_autoloading_fixtures do assert_kind_of Class, ModuleFolder::NestedClass end ensure remove_constants(:ModuleFolder) end
test_module_with_nested_inline_class()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 222 def test_module_with_nested_inline_class with_autoloading_fixtures do assert_kind_of Class, ModuleFolder::InlineClass end ensure remove_constants(:ModuleFolder) end
test_mutual_dependencies_dont_infinite_loop()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 142 def test_mutual_dependencies_dont_infinite_loop with_loading "dependencies" do $mutual_dependencies_count = 0 assert_nothing_raised { require_dependency "mutual_one" } assert_equal 2, $mutual_dependencies_count ActiveSupport::Dependencies.clear $mutual_dependencies_count = 0 assert_nothing_raised { require_dependency "mutual_two" } assert_equal 2, $mutual_dependencies_count end end
test_nested_class_can_access_sibling()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 264 def test_nested_class_can_access_sibling with_autoloading_fixtures do sibling = ModuleFolder::NestedClass.class_eval "NestedSibling" assert defined?(ModuleFolder::NestedSibling) assert_equal ModuleFolder::NestedSibling, sibling end ensure remove_constants(:ModuleFolder) end
test_nested_file_with_multiple_constants_and_auto_loading()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 905 def test_nested_file_with_multiple_constants_and_auto_loading with_autoloading_fixtures do assert_not defined?(ClassFolder::NestedClass) assert_not defined?(ClassFolder::SiblingClass) assert_kind_of Class, ClassFolder::NestedClass assert defined?(ClassFolder::NestedClass) assert defined?(ClassFolder::SiblingClass) assert ActiveSupport::Dependencies.autoloaded?("ClassFolder::NestedClass") assert ActiveSupport::Dependencies.autoloaded?("ClassFolder::SiblingClass") ActiveSupport::Dependencies.clear assert_not defined?(ClassFolder::NestedClass) assert_not defined?(ClassFolder::SiblingClass) end ensure remove_constants(:ClassFolder) end
test_nested_file_with_multiple_constants_and_require_dependency()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 884 def test_nested_file_with_multiple_constants_and_require_dependency with_autoloading_fixtures do assert_not defined?(ClassFolder::NestedClass) assert_not defined?(ClassFolder::SiblingClass) require_dependency "class_folder/nested_class" assert defined?(ClassFolder::NestedClass) assert defined?(ClassFolder::SiblingClass) assert ActiveSupport::Dependencies.autoloaded?("ClassFolder::NestedClass") assert ActiveSupport::Dependencies.autoloaded?("ClassFolder::SiblingClass") ActiveSupport::Dependencies.clear assert_not defined?(ClassFolder::NestedClass) assert_not defined?(ClassFolder::SiblingClass) end ensure remove_constants(:ClassFolder) end
test_nested_load_error_isnt_rescued()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 640 def test_nested_load_error_isnt_rescued with_loading "dependencies" do assert_raise(LoadError) do RequiresNonexistent1 end end end
test_new_constants_in_module()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 794 def test_new_constants_in_module Object.const_set :M, Module.new outer = ActiveSupport::Dependencies.new_constants_in(M) do M.const_set :OuterBefore, 10 inner = ActiveSupport::Dependencies.new_constants_in(M) do M.const_set :Inner, 20 end assert_equal ["M::Inner"], inner M.const_set :OuterAfter, 30 end assert_equal ["M::OuterAfter", "M::OuterBefore"], outer.sort assert ActiveSupport::Dependencies.constant_watch_stack.all? { |k, v| v.empty? } ensure remove_constants(:M) end
test_new_constants_in_module_using_name()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 813 def test_new_constants_in_module_using_name outer = ActiveSupport::Dependencies.new_constants_in(:M) do Object.const_set :M, Module.new M.const_set :OuterBefore, 10 inner = ActiveSupport::Dependencies.new_constants_in(:M) do M.const_set :Inner, 20 end assert_equal ["M::Inner"], inner M.const_set :OuterAfter, 30 end assert_equal ["M::OuterAfter", "M::OuterBefore"], outer.sort assert ActiveSupport::Dependencies.constant_watch_stack.all? { |k, v| v.empty? } ensure remove_constants(:M) end
test_new_constants_in_with_a_single_constant()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 768 def test_new_constants_in_with_a_single_constant assert_equal ["Hello"], ActiveSupport::Dependencies.new_constants_in(Object) { Object.const_set :Hello, 10 }.map(&:to_s) assert ActiveSupport::Dependencies.constant_watch_stack.all? { |k, v| v.empty? } ensure remove_constants(:Hello) end
test_new_constants_in_with_illegal_module_name_raises_correct_error()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 838 def test_new_constants_in_with_illegal_module_name_raises_correct_error assert_raise(NameError) do ActiveSupport::Dependencies.new_constants_in("Illegal-Name") {} end end
test_new_constants_in_with_inherited_constants()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 831 def test_new_constants_in_with_inherited_constants m = ActiveSupport::Dependencies.new_constants_in(:Object) do Object.class_eval { include ModuleWithConstant } end assert_equal [], m end
test_new_constants_in_with_nesting()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 777 def test_new_constants_in_with_nesting outer = ActiveSupport::Dependencies.new_constants_in(Object) do Object.const_set :OuterBefore, 10 assert_equal ["Inner"], ActiveSupport::Dependencies.new_constants_in(Object) { Object.const_set :Inner, 20 }.map(&:to_s) Object.const_set :OuterAfter, 30 end assert_equal ["OuterAfter", "OuterBefore"], outer.sort.map(&:to_s) assert ActiveSupport::Dependencies.constant_watch_stack.all? { |k, v| v.empty? } ensure remove_constants(:OuterBefore, :Inner, :OuterAfter) end
test_new_contants_in_without_constants()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 763 def test_new_contants_in_without_constants assert_equal [], (ActiveSupport::Dependencies.new_constants_in(Object) {}) assert ActiveSupport::Dependencies.constant_watch_stack.all? { |k, v| v.empty? } end
test_non_existing_const_raises_name_error()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 197 def test_non_existing_const_raises_name_error with_autoloading_fixtures do assert_raise(NameError) { DoesNotExist } assert_raise(NameError) { NoModule::DoesNotExist } assert_raise(NameError) { A::DoesNotExist } assert_raise(NameError) { A::B::DoesNotExist } end end
test_non_existing_const_raises_name_error_with_fully_qualified_name()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 416 def test_non_existing_const_raises_name_error_with_fully_qualified_name with_autoloading_fixtures do e = assert_raise(NameError) { A::DoesNotExist.nil? } assert_equal "uninitialized constant A::DoesNotExist", e.message assert_equal :DoesNotExist, e.name e = assert_raise(NameError) { A::B::DoesNotExist.nil? } assert_equal "uninitialized constant A::B::DoesNotExist", e.message assert_equal :DoesNotExist, e.name end ensure remove_constants(:A) end
test_preexisting_constants_are_not_marked_as_autoloaded()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 693 def test_preexisting_constants_are_not_marked_as_autoloaded with_autoloading_fixtures do require_dependency "em" assert ActiveSupport::Dependencies.autoloaded?(:EM) ActiveSupport::Dependencies.clear end Object.const_set :EM, Class.new with_autoloading_fixtures do require_dependency "em" assert ! ActiveSupport::Dependencies.autoloaded?(:EM), "EM shouldn't be marked autoloaded!" ActiveSupport::Dependencies.clear end ensure remove_constants(:EM) end
test_qualified_const_defined()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 474 def test_qualified_const_defined assert ActiveSupport::Dependencies.qualified_const_defined?("Object") assert ActiveSupport::Dependencies.qualified_const_defined?("::Object") assert ActiveSupport::Dependencies.qualified_const_defined?("::Object::Kernel") assert ActiveSupport::Dependencies.qualified_const_defined?("::ActiveSupport::TestCase") end
test_qualified_const_defined_explodes_with_invalid_const_name()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 489 def test_qualified_const_defined_explodes_with_invalid_const_name assert_raises(NameError) { ActiveSupport::Dependencies.qualified_const_defined?("invalid") } end
test_qualified_const_defined_should_not_call_const_missing()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 481 def test_qualified_const_defined_should_not_call_const_missing ModuleWithMissing.missing_count = 0 assert ! ActiveSupport::Dependencies.qualified_const_defined?("ModuleWithMissing::A") assert_equal 0, ModuleWithMissing.missing_count assert ! ActiveSupport::Dependencies.qualified_const_defined?("ModuleWithMissing::A::B") assert_equal 0, ModuleWithMissing.missing_count end
test_qualified_name_for()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 522 def test_qualified_name_for assert_equal "A", ActiveSupport::Dependencies.qualified_name_for(Object, :A) assert_equal "A", ActiveSupport::Dependencies.qualified_name_for(:Object, :A) assert_equal "A", ActiveSupport::Dependencies.qualified_name_for("Object", :A) assert_equal "A", ActiveSupport::Dependencies.qualified_name_for("::Object", :A) assert_equal "ActiveSupport::Dependencies::A", ActiveSupport::Dependencies.qualified_name_for(:'ActiveSupport::Dependencies', :A) assert_equal "ActiveSupport::Dependencies::A", ActiveSupport::Dependencies.qualified_name_for(ActiveSupport::Dependencies, :A) end
test_raising_discards_autoloaded_constants()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 274 def test_raising_discards_autoloaded_constants with_autoloading_fixtures do e = assert_raises(Exception) { RaisesArbitraryException } assert_equal("arbitrary exception message", e.message) assert_not defined?(A) assert_not defined?(RaisesArbitraryException) end ensure remove_constants(:A, :RaisesArbitraryException) end
test_references_should_work()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 617 def test_references_should_work with_loading "dependencies" do c = ActiveSupport::Dependencies.reference("ServiceOne") service_one_first = ServiceOne assert_equal service_one_first, c.get("ServiceOne") ActiveSupport::Dependencies.clear assert_not defined?(ServiceOne) service_one_second = ServiceOne assert_not_equal service_one_first, c.get("ServiceOne") assert_equal service_one_second, c.get("ServiceOne") end ensure remove_constants(:ServiceOne) end
test_removal_from_tree_should_be_detected()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 603 def test_removal_from_tree_should_be_detected with_loading "dependencies" do c = ServiceOne ActiveSupport::Dependencies.clear assert_not defined?(ServiceOne) e = assert_raise ArgumentError do ActiveSupport::Dependencies.load_missing_constant(c, :FakeMissing) end assert_match %r{ServiceOne has been removed from the module tree}i, e.message end ensure remove_constants(:ServiceOne) end
test_remove_constant_does_not_autoload_already_removed_parents_as_a_side_effect()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 1005 def test_remove_constant_does_not_autoload_already_removed_parents_as_a_side_effect with_autoloading_fixtures do _ = ::A # assignment to silence parse-time warning "possibly useless use of :: in void context" _ = ::A::B # assignment to silence parse-time warning "possibly useless use of :: in void context" ActiveSupport::Dependencies.remove_constant("A") ActiveSupport::Dependencies.remove_constant("A::B") assert_not defined?(A) end ensure remove_constants(:A) end
test_remove_constant_does_not_trigger_loading_autoloads()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 993 def test_remove_constant_does_not_trigger_loading_autoloads constant = "ShouldNotBeAutoloaded" Object.class_eval do autoload constant, File.expand_path("autoloading_fixtures/should_not_be_required", __dir__) end assert_nil ActiveSupport::Dependencies.remove_constant(constant), "Kernel#autoload has been triggered by remove_constant" assert_not defined?(ShouldNotBeAutoloaded) ensure remove_constants(constant) end
test_remove_constant_handles_double_colon_at_start()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 981 def test_remove_constant_handles_double_colon_at_start Object.const_set "DeleteMe", Module.new DeleteMe.const_set "OrMe", Module.new ActiveSupport::Dependencies.remove_constant "::DeleteMe::OrMe" assert_not defined?(DeleteMe::OrMe) assert defined?(DeleteMe) ActiveSupport::Dependencies.remove_constant "::DeleteMe" assert_not defined?(DeleteMe) ensure remove_constants(:DeleteMe) end
test_require_dependency_accepts_an_object_which_implements_to_path()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 43 def test_require_dependency_accepts_an_object_which_implements_to_path o = Object.new def o.to_path; "dependencies/service_one"; end assert_nothing_raised { require_dependency o } assert defined?(ServiceOne) ensure remove_constants(:ServiceOne) end
test_require_dependency_does_not_assume_any_particular_constant_is_defined()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 170 def test_require_dependency_does_not_assume_any_particular_constant_is_defined with_autoloading_fixtures do require_dependency "typo" assert_equal 1, TypO end end
test_require_dependency_interaction_with_autoloading()
click to toggle source
Regression, see github.com/quails/quails/issues/16468.
# File activesupport/test/dependencies_test.rb, line 178 def test_require_dependency_interaction_with_autoloading with_autoloading_fixtures do require_dependency "typo" assert_equal 1, TypO e = assert_raise(LoadError) { Typo } assert_match %r{Unable to autoload constant Typo, expected .*/test/autoloading_fixtures/typo.rb to define it}, e.message end end
test_require_raises_load_error_when_file_not_found()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 377 def test_require_raises_load_error_when_file_not_found with_loading do assert_raise(LoadError) { require "this_file_dont_exist_dude" } end end
test_require_returns_false_when_file_already_required()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 363 def test_require_returns_false_when_file_already_required path = File.expand_path("autoloading_fixtures/load_path", __dir__) original_path = $:.dup $:.push(path) with_loading do require "loaded_constant" assert_equal false, require("loaded_constant") end ensure remove_constants(:LoadedConstant) $:.replace(original_path) end
test_require_returns_true_when_file_not_yet_required()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 336 def test_require_returns_true_when_file_not_yet_required path = File.expand_path("autoloading_fixtures/load_path", __dir__) original_path = $:.dup $:.push(path) with_loading do assert_equal true, require("loaded_constant") end ensure remove_constants(:LoadedConstant) $:.replace(original_path) end
test_require_returns_true_when_file_not_yet_required_even_when_no_new_constants_added()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 349 def test_require_returns_true_when_file_not_yet_required_even_when_no_new_constants_added path = File.expand_path("autoloading_fixtures/load_path", __dir__) original_path = $:.dup $:.push(path) with_loading do Object.module_eval "module LoadedConstant; end" assert_equal true, require("loaded_constant") end ensure remove_constants(:LoadedConstant) $:.replace(original_path) end
test_smart_name_error_strings()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 430 def test_smart_name_error_strings e = assert_raise NameError do Object.module_eval "ImaginaryObject" end assert_includes "uninitialized constant ImaginaryObject", e.message end
test_throwing_discards_autoloaded_constants()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 285 def test_throwing_discards_autoloaded_constants with_autoloading_fixtures do catch :t do Throws end assert_not defined?(A) assert_not defined?(Throws) end ensure remove_constants(:A, :Throws) end
test_tracking_identical_loaded_files()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 64 def test_tracking_identical_loaded_files with_loading do require_dependency "dependencies/service_one" require_dependency "dependencies/service_one" assert_equal 1, ActiveSupport::Dependencies.loaded.size end ensure remove_constants(:ServiceOne) end
test_tracking_loaded_files()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 54 def test_tracking_loaded_files with_loading do require_dependency "dependencies/service_one" require_dependency "dependencies/service_two" assert_equal 2, ActiveSupport::Dependencies.loaded.size end ensure remove_constants(:ServiceOne, :ServiceTwo) end
test_unloadable()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 720 def test_unloadable with_autoloading_fixtures do Object.const_set :M, Module.new M.unloadable ActiveSupport::Dependencies.clear assert ! defined?(M) Object.const_set :M, Module.new ActiveSupport::Dependencies.clear assert ! defined?(M), "Dependencies should unload unloadable constants each time" end end
test_unloadable_constants_should_receive_callback()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 751 def test_unloadable_constants_should_receive_callback Object.const_set :C, Class.new { def self.before_remove_const; end } C.unloadable assert_called(C, :before_remove_const, times: 1) do assert C.respond_to?(:before_remove_const) ActiveSupport::Dependencies.clear assert !defined?(C) end ensure remove_constants(:C) end
test_unloadable_should_fail_with_anonymous_modules()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 734 def test_unloadable_should_fail_with_anonymous_modules with_autoloading_fixtures do m = Module.new assert_raise(ArgumentError) { m.unloadable } end end
test_unloadable_should_return_change_flag()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 741 def test_unloadable_should_return_change_flag with_autoloading_fixtures do Object.const_set :M, Module.new assert_equal true, M.unloadable assert_equal false, M.unloadable end ensure remove_constants(:M) end
test_warnings_should_be_enabled_on_first_load()
click to toggle source
# File activesupport/test/dependencies_test.rb, line 105 def test_warnings_should_be_enabled_on_first_load with_loading "dependencies" do old_warnings, ActiveSupport::Dependencies.warnings_on_first_load = ActiveSupport::Dependencies.warnings_on_first_load, true filename = "check_warnings" expanded = File.expand_path("dependencies/#{filename}", __dir__) $check_warnings_load_count = 0 assert_not ActiveSupport::Dependencies.loaded.include?(expanded) assert_not ActiveSupport::Dependencies.history.include?(expanded) 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_includes ActiveSupport::Dependencies.loaded, expanded ActiveSupport::Dependencies.clear assert_not ActiveSupport::Dependencies.loaded.include?(expanded) assert_includes ActiveSupport::Dependencies.history, expanded silence_warnings { require_dependency filename } assert_equal 2, $check_warnings_load_count assert_nil $checked_verbose, "After first load warnings should be left alone." assert_includes ActiveSupport::Dependencies.loaded, expanded ActiveSupport::Dependencies.clear assert_not ActiveSupport::Dependencies.loaded.include?(expanded) assert_includes ActiveSupport::Dependencies.history, expanded 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_includes ActiveSupport::Dependencies.loaded, expanded ActiveSupport::Dependencies.warnings_on_first_load = old_warnings end end