mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
c1304098cc
* A new module (ActiveSupport::Autoload) is provide that extends autoloading with new behavior. * All autoloads in modules that have extended ActiveSupport::Autoload will be eagerly required in threadsafe environments * Autoloads can optionally leave off the path if the path is the same as full_constant_name.underscore * It is possible to specify that a group of autoloads live under an additional path. For instance, all of ActionDispatch's middlewares are ActionDispatch::MiddlewareName, but they live under "action_dispatch/middlewares/middleware_name" * It is possible to specify that a group of autoloads are all found at the same path. For instance, a number of exceptions might all be declared there. * One consequence of this is that testing-related constants are not autoloaded. To get the testing helpers for a given component, require "component_name/test_case". For instance, "action_controller/test_case". * test_help.rb, which is automatically required by a Rails application's test helper, requires the test_case.rb for all active components, so this change will not be disruptive in existing or new applications.
80 lines
No EOL
2.4 KiB
Ruby
80 lines
No EOL
2.4 KiB
Ruby
require 'abstract_unit'
|
|
|
|
class TestAutoloadModule < ActiveSupport::TestCase
|
|
include ActiveSupport::Testing::Isolation
|
|
|
|
module ::Fixtures
|
|
extend ActiveSupport::Autoload
|
|
|
|
module Autoload
|
|
extend ActiveSupport::Autoload
|
|
end
|
|
end
|
|
|
|
test "the autoload module works like normal autoload" do
|
|
module ::Fixtures::Autoload
|
|
autoload :SomeClass, "fixtures/autoload/some_class"
|
|
end
|
|
|
|
assert_nothing_raised { ::Fixtures::Autoload::SomeClass }
|
|
end
|
|
|
|
test "when specifying an :eager constant it still works like normal autoload by default" do
|
|
module ::Fixtures::Autoload
|
|
autoload :SomeClass, "fixtures/autoload/some_class"
|
|
end
|
|
|
|
assert !$LOADED_FEATURES.include?("fixtures/autoload/some_class.rb")
|
|
assert_nothing_raised { ::Fixtures::Autoload::SomeClass }
|
|
end
|
|
|
|
test ":eager constants can be triggered via ActiveSupport::Autoload.eager_autoload!" do
|
|
module ::Fixtures::Autoload
|
|
autoload :SomeClass, "fixtures/autoload/some_class"
|
|
end
|
|
ActiveSupport::Autoload.eager_autoload!
|
|
assert $LOADED_FEATURES.include?("fixtures/autoload/some_class.rb")
|
|
assert_nothing_raised { ::Fixtures::Autoload::SomeClass }
|
|
end
|
|
|
|
test "the location of autoloaded constants defaults to :name.underscore" do
|
|
module ::Fixtures::Autoload
|
|
autoload :SomeClass
|
|
end
|
|
|
|
assert !$LOADED_FEATURES.include?("fixtures/autoload/some_class.rb")
|
|
assert_nothing_raised { ::Fixtures::Autoload::SomeClass }
|
|
end
|
|
|
|
test "the location of :eager autoloaded constants defaults to :name.underscore" do
|
|
module ::Fixtures::Autoload
|
|
autoload :SomeClass
|
|
end
|
|
|
|
ActiveSupport::Autoload.eager_autoload!
|
|
assert $LOADED_FEATURES.include?("fixtures/autoload/some_class.rb")
|
|
assert_nothing_raised { ::Fixtures::Autoload::SomeClass }
|
|
end
|
|
|
|
test "a directory for a block of autoloads can be specified" do
|
|
module ::Fixtures
|
|
autoload_under "autoload" do
|
|
autoload :AnotherClass
|
|
end
|
|
end
|
|
|
|
assert !$LOADED_FEATURES.include?("fixtures/autoload/another_class.rb")
|
|
assert_nothing_raised { ::Fixtures::AnotherClass }
|
|
end
|
|
|
|
test "a path for a block of autoloads can be specified" do
|
|
module ::Fixtures
|
|
autoload_at "fixtures/autoload/another_class" do
|
|
autoload :AnotherClass
|
|
end
|
|
end
|
|
|
|
assert !$LOADED_FEATURES.include?("fixtures/autoload/another_class.rb")
|
|
assert_nothing_raised { ::Fixtures::AnotherClass }
|
|
end
|
|
end |