2007-03-01 19:20:32 -05:00
|
|
|
require File.dirname(__FILE__) + '/plugin_test_helper'
|
|
|
|
|
|
|
|
class TestPluginLoader < Test::Unit::TestCase
|
|
|
|
def setup
|
|
|
|
@initializer = Rails::Initializer.new(Rails::Configuration.new)
|
|
|
|
@valid_plugin_path = plugin_fixture_path('default/stubby')
|
|
|
|
@empty_plugin_path = plugin_fixture_path('default/empty')
|
|
|
|
end
|
|
|
|
|
2007-03-02 18:39:29 -05:00
|
|
|
def test_determining_if_the_plugin_order_has_been_explicitly_set
|
|
|
|
loader = loader_for(@valid_plugin_path)
|
|
|
|
assert !loader.send(:explicit_plugin_loading_order?)
|
|
|
|
only_load_the_following_plugins! %w(stubby acts_as_chunky_bacon)
|
|
|
|
assert loader.send(:explicit_plugin_loading_order?)
|
|
|
|
end
|
|
|
|
|
2007-09-21 18:31:19 -04:00
|
|
|
def test_enabled_if_not_named_explicitly
|
|
|
|
stubby_loader = loader_for(@valid_plugin_path)
|
|
|
|
acts_as_loader = loader_for('acts_as/acts_as_chunky_bacon')
|
|
|
|
|
|
|
|
only_load_the_following_plugins! ['stubby', :all]
|
|
|
|
assert stubby_loader.send(:enabled?)
|
|
|
|
assert acts_as_loader.send(:enabled?)
|
|
|
|
|
|
|
|
assert stubby_loader.send(:explicitly_enabled?)
|
|
|
|
assert !acts_as_loader.send(:explicitly_enabled?)
|
|
|
|
end
|
|
|
|
|
2007-03-01 19:20:32 -05:00
|
|
|
def test_determining_whether_a_given_plugin_is_loaded
|
|
|
|
plugin_loader = loader_for(@valid_plugin_path)
|
|
|
|
assert !plugin_loader.loaded?
|
|
|
|
assert_nothing_raised do
|
|
|
|
plugin_loader.send(:register_plugin_as_loaded)
|
|
|
|
end
|
|
|
|
assert plugin_loader.loaded?
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_if_a_path_is_a_plugin_path
|
|
|
|
# This is a plugin path, with a lib dir
|
|
|
|
assert loader_for(@valid_plugin_path).plugin_path?
|
|
|
|
# This just has an init.rb and no lib dir
|
|
|
|
assert loader_for(plugin_fixture_path('default/plugin_with_no_lib_dir')).plugin_path?
|
|
|
|
# This would be a plugin path, but the directory is empty
|
|
|
|
assert !loader_for(plugin_fixture_path('default/empty')).plugin_path?
|
|
|
|
# This is a non sense path
|
|
|
|
assert !loader_for(plugin_fixture_path('default/this_directory_does_not_exist')).plugin_path?
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_if_you_try_to_load_a_non_plugin_path_you_get_a_load_error
|
|
|
|
# This path is fine so nothing is raised
|
|
|
|
assert_nothing_raised do
|
|
|
|
loader_for(@valid_plugin_path).send(:report_nonexistant_or_empty_plugin!)
|
|
|
|
end
|
|
|
|
|
|
|
|
# This is an empty path so it raises
|
|
|
|
assert_raises(LoadError) do
|
|
|
|
loader_for(@empty_plugin_path).send(:report_nonexistant_or_empty_plugin!)
|
|
|
|
end
|
|
|
|
|
|
|
|
assert_raises(LoadError) do
|
|
|
|
loader_for('this_is_not_a_plugin_directory').send(:report_nonexistant_or_empty_plugin!)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_loading_a_plugin_gives_the_init_file_access_to_all_it_needs
|
2007-03-02 18:39:29 -05:00
|
|
|
failure_tip = "Perhaps someone has written another test that loads this same plugin and therefore makes the StubbyMixin constant defined already."
|
2007-03-01 19:20:32 -05:00
|
|
|
assert !defined?(StubbyMixin), failure_tip
|
|
|
|
assert !added_to_load_path?(@valid_plugin_path)
|
|
|
|
# The init.rb of this plugin raises if it doesn't have access to all the things it needs
|
|
|
|
assert_nothing_raised do
|
|
|
|
loader_for(@valid_plugin_path).load
|
|
|
|
end
|
|
|
|
assert added_to_load_path?(@valid_plugin_path)
|
|
|
|
assert defined?(StubbyMixin)
|
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
def loader_for(path, initializer = @initializer)
|
|
|
|
Rails::Plugin::Loader.new(initializer, path)
|
|
|
|
end
|
|
|
|
|
|
|
|
def plugin_fixture_path(path)
|
|
|
|
File.join(plugin_fixture_root_path, path)
|
|
|
|
end
|
|
|
|
|
|
|
|
def added_to_load_path?(path)
|
|
|
|
$LOAD_PATH.grep(/#{path}/).size == 1
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|