Add tests for explicit engines.
This commit is contained in:
parent
7adb1ffc03
commit
f8bf1982df
|
@ -6,6 +6,7 @@ require 'rails/engine'
|
|||
module Rails
|
||||
class Application < Engine
|
||||
autoload :Bootstrap, 'rails/application/bootstrap'
|
||||
autoload :Configurable, 'rails/application/configurable'
|
||||
autoload :Configuration, 'rails/application/configuration'
|
||||
autoload :Finisher, 'rails/application/finisher'
|
||||
autoload :Railties, 'rails/application/railties'
|
||||
|
@ -41,10 +42,6 @@ module Rails
|
|||
require environment if environment
|
||||
end
|
||||
|
||||
def config
|
||||
@config ||= Application::Configuration.new(self.class.find_root_with_flag("config.ru", Dir.pwd))
|
||||
end
|
||||
|
||||
def routes
|
||||
::ActionController::Routing::Routes
|
||||
end
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
module Rails
|
||||
class Application
|
||||
module Configurable
|
||||
def self.included(base)
|
||||
base.extend ClassMethods
|
||||
end
|
||||
|
||||
module ClassMethods
|
||||
def inherited(base)
|
||||
raise "You cannot inherit from a Rails::Application child"
|
||||
end
|
||||
end
|
||||
|
||||
def config
|
||||
@config ||= Application::Configuration.new(self.class.find_root_with_flag("config.ru", Dir.pwd))
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -17,7 +17,7 @@ module Rails
|
|||
|
||||
def inherited(base)
|
||||
unless abstract_railtie?(base)
|
||||
base.send(:include, self::Configurable) if add_configurable?(base)
|
||||
base.send(:include, self::Configurable)
|
||||
subclasses << base
|
||||
end
|
||||
end
|
||||
|
@ -53,14 +53,6 @@ module Rails
|
|||
def abstract_railtie?(base)
|
||||
ABSTRACT_RAILTIES.include?(base.name)
|
||||
end
|
||||
|
||||
# Just add configurable behavior if a Configurable module is defined
|
||||
# and the class is a direct child from self. This is required to avoid
|
||||
# application or plugins getting class configuration method from Railties
|
||||
# and/or Engines.
|
||||
def add_configurable?(base)
|
||||
defined?(self::Configurable) && base.ancestors[1] == self
|
||||
end
|
||||
end
|
||||
|
||||
def rake_tasks
|
||||
|
|
|
@ -100,6 +100,8 @@ module TestHelpers
|
|||
end
|
||||
|
||||
class Bukkit
|
||||
attr_reader :path
|
||||
|
||||
def initialize(path)
|
||||
@path = path
|
||||
end
|
||||
|
@ -118,10 +120,29 @@ module TestHelpers
|
|||
def plugin(name, string = "")
|
||||
dir = "#{app_path}/vendor/plugins/#{name}"
|
||||
FileUtils.mkdir_p(dir)
|
||||
|
||||
File.open("#{dir}/init.rb", 'w') do |f|
|
||||
f.puts "::#{name.upcase} = 'loaded'"
|
||||
f.puts string
|
||||
end
|
||||
|
||||
Bukkit.new(dir).tap do |bukkit|
|
||||
yield bukkit if block_given?
|
||||
end
|
||||
end
|
||||
|
||||
def engine(name)
|
||||
dir = "#{app_path}/random/#{name}"
|
||||
FileUtils.mkdir_p(dir)
|
||||
|
||||
app = File.readlines("#{app_path}/config/application.rb")
|
||||
app.insert(2, "$:.unshift(\"#{dir}/lib\")")
|
||||
app.insert(3, "require #{name.inspect}")
|
||||
|
||||
File.open("#{app_path}/config/application.rb", 'r+') do |f|
|
||||
f.puts app
|
||||
end
|
||||
|
||||
Bukkit.new(dir).tap do |bukkit|
|
||||
yield bukkit if block_given?
|
||||
end
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
require "isolation/abstract_unit"
|
||||
require "railties/shared_tests"
|
||||
|
||||
module RailtiesTest
|
||||
class EngineTest < Test::Unit::TestCase
|
||||
include ActiveSupport::Testing::Isolation
|
||||
include SharedTests
|
||||
|
||||
def setup
|
||||
build_app
|
||||
|
||||
@plugin = engine "bukkits" do |plugin|
|
||||
plugin.write "lib/bukkits.rb", <<-RUBY
|
||||
class Bukkits
|
||||
class Engine < ::Rails::Engine
|
||||
end
|
||||
end
|
||||
RUBY
|
||||
plugin.write "lib/another.rb", "class Another; end"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -2,7 +2,7 @@ require "isolation/abstract_unit"
|
|||
require "railties/shared_tests"
|
||||
|
||||
module RailtiesTest
|
||||
class PluginSpecificTest < Test::Unit::TestCase
|
||||
class PluginTest < Test::Unit::TestCase
|
||||
include ActiveSupport::Testing::Isolation
|
||||
include SharedTests
|
||||
|
||||
|
@ -11,9 +11,16 @@ module RailtiesTest
|
|||
|
||||
@plugin = plugin "bukkits", "::LEVEL = config.log_level" do |plugin|
|
||||
plugin.write "lib/bukkits.rb", "class Bukkits; end"
|
||||
plugin.write "lib/another.rb", "class Another; end"
|
||||
end
|
||||
end
|
||||
|
||||
test "plugin can load the file with the same name in lib" do
|
||||
boot_rails
|
||||
require "bukkits"
|
||||
assert_equal "Bukkits", Bukkits.name
|
||||
end
|
||||
|
||||
test "it loads the plugin's init.rb file" do
|
||||
boot_rails
|
||||
assert_equal "loaded", BUKKITS
|
||||
|
@ -24,6 +31,20 @@ module RailtiesTest
|
|||
assert_equal :debug, LEVEL
|
||||
end
|
||||
|
||||
test "plugin_init_is_ran_before_application_ones" do
|
||||
plugin "foo", "$foo = true" do |plugin|
|
||||
plugin.write "lib/foo.rb", "module Foo; end"
|
||||
end
|
||||
|
||||
app_file 'config/initializers/foo.rb', <<-RUBY
|
||||
raise "no $foo" unless $foo
|
||||
raise "no Foo" unless Foo
|
||||
RUBY
|
||||
|
||||
boot_rails
|
||||
assert $foo
|
||||
end
|
||||
|
||||
test "plugin should work without init.rb" do
|
||||
@plugin.delete("init.rb")
|
||||
|
||||
|
@ -56,5 +77,23 @@ module RailtiesTest
|
|||
|
||||
assert rescued, "Expected boot rails to fail"
|
||||
end
|
||||
|
||||
test "deprecated tasks are also loaded" do
|
||||
$executed = false
|
||||
@plugin.write "tasks/foo.rake", <<-RUBY
|
||||
task :foo do
|
||||
$executed = true
|
||||
end
|
||||
RUBY
|
||||
|
||||
boot_rails
|
||||
require 'rake'
|
||||
require 'rake/rdoctask'
|
||||
require 'rake/testtask'
|
||||
Rails.application.load_tasks
|
||||
Rake::Task[:foo].invoke
|
||||
assert $executed
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
|
|
@ -12,35 +12,21 @@ module RailtiesTest
|
|||
|
||||
def test_plugin_puts_its_lib_directory_on_load_path
|
||||
boot_rails
|
||||
require "bukkits"
|
||||
assert_equal "Bukkits", Bukkits.name
|
||||
end
|
||||
|
||||
def test_plugin_init_is_ran_before_application_ones
|
||||
plugin "foo", "$foo = true" do |plugin|
|
||||
plugin.write "lib/foo.rb", "module Foo; end"
|
||||
end
|
||||
|
||||
app_file 'config/initializers/foo.rb', <<-RUBY
|
||||
raise "no $foo" unless $foo
|
||||
raise "no Foo" unless Foo
|
||||
RUBY
|
||||
|
||||
boot_rails
|
||||
assert $foo
|
||||
require "another"
|
||||
assert_equal "Another", Another.name
|
||||
end
|
||||
|
||||
def test_plugin_paths_get_added_to_as_dependency_list
|
||||
boot_rails
|
||||
assert_equal "Bukkits", Bukkits.name
|
||||
assert_equal "Another", Another.name
|
||||
end
|
||||
|
||||
def test_plugins_constants_are_not_reloaded_by_default
|
||||
boot_rails
|
||||
assert_equal "Bukkits", Bukkits.name
|
||||
assert_equal "Another", Another.name
|
||||
ActiveSupport::Dependencies.clear
|
||||
@plugin.delete("lib/bukkits.rb")
|
||||
assert_nothing_raised { Bukkits }
|
||||
@plugin.delete("lib/another.rb")
|
||||
assert_nothing_raised { Another }
|
||||
end
|
||||
|
||||
def test_plugin_constants_get_reloaded_if_config_reload_plugins
|
||||
|
@ -50,10 +36,10 @@ module RailtiesTest
|
|||
|
||||
boot_rails
|
||||
|
||||
assert_equal "Bukkits", Bukkits.name
|
||||
assert_equal "Another", Another.name
|
||||
ActiveSupport::Dependencies.clear
|
||||
@plugin.delete("lib/bukkits.rb")
|
||||
assert_raises(NameError) { Bukkits }
|
||||
@plugin.delete("lib/another.rb")
|
||||
assert_raises(NameError) { Another }
|
||||
end
|
||||
|
||||
def test_plugin_puts_its_models_directory_on_load_path
|
||||
|
@ -190,23 +176,6 @@ module RailtiesTest
|
|||
assert $executed
|
||||
end
|
||||
|
||||
def test_deprecated_tasks_are_also_loaded
|
||||
$executed = false
|
||||
@plugin.write "tasks/foo.rake", <<-RUBY
|
||||
task :foo do
|
||||
$executed = true
|
||||
end
|
||||
RUBY
|
||||
|
||||
boot_rails
|
||||
require 'rake'
|
||||
require 'rake/rdoctask'
|
||||
require 'rake/testtask'
|
||||
Rails.application.load_tasks
|
||||
Rake::Task[:foo].invoke
|
||||
assert $executed
|
||||
end
|
||||
|
||||
def test_i18n_files_have_lower_priority_than_application_ones
|
||||
add_to_config <<-RUBY
|
||||
config.i18n.load_path << "#{app_path}/app/locales/en.yml"
|
||||
|
@ -235,7 +204,7 @@ YAML
|
|||
#{RAILS_FRAMEWORK_ROOT}/activemodel/lib/active_model/locale/en.yml
|
||||
#{RAILS_FRAMEWORK_ROOT}/activerecord/lib/active_record/locale/en.yml
|
||||
#{RAILS_FRAMEWORK_ROOT}/actionpack/lib/action_view/locale/en.yml
|
||||
#{app_path}/vendor/plugins/bukkits/config/locales/en.yml
|
||||
#{@plugin.path}/config/locales/en.yml
|
||||
#{app_path}/config/locales/en.yml
|
||||
#{app_path}/app/locales/en.yml
|
||||
).map { |path| File.expand_path(path) }, I18n.load_path.map { |path| File.expand_path(path) }
|
||||
|
|
Loading…
Reference in New Issue