vendor/rails/railties/test/plugin_test.rb in radiant-0.6.4 vs vendor/rails/railties/test/plugin_test.rb in radiant-0.6.5
- old
+ new
@@ -1,111 +1,141 @@
-$:.unshift File.dirname(__FILE__) + "/../lib"
-$:.unshift File.dirname(__FILE__) + "/../../activesupport/lib"
+require File.dirname(__FILE__) + '/plugin_test_helper'
-require 'test/unit'
-require 'active_support'
-require 'initializer'
+uses_mocha "Plugin Tests" do
-unless defined?(RAILS_ROOT)
- module Rails
- class Initializer
- RAILS_ROOT = '.'
+ class PluginTest < 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
- end
-end
-class PluginTest < Test::Unit::TestCase
- class TestConfig < Rails::Configuration
- protected
- def root_path
- File.dirname(__FILE__)
- end
- end
+ def test_should_determine_plugin_name_from_the_directory_of_the_plugin
+ assert_equal 'stubby', plugin_for(@valid_plugin_path).name
+ assert_equal 'empty', plugin_for(@empty_plugin_path).name
+ end
- def setup
- @init = Rails::Initializer.new(TestConfig.new)
- end
+ def test_should_not_be_loaded_when_created
+ assert !plugin_for(@valid_plugin_path).loaded?
+ end
- def test_plugin_path?
- assert @init.send(:plugin_path?, "#{File.dirname(__FILE__)}/fixtures/plugins/default/stubby")
- assert !@init.send(:plugin_path?, "#{File.dirname(__FILE__)}/fixtures/plugins/default/empty")
- assert !@init.send(:plugin_path?, "#{File.dirname(__FILE__)}/fixtures/plugins/default/jalskdjflkas")
- end
-
- def test_find_plugins
- base = "#{File.dirname(__FILE__)}/fixtures/plugins"
- default = "#{base}/default"
- alt = "#{base}/alternate"
- acts = "#{default}/acts"
- assert_equal ["#{acts}/acts_as_chunky_bacon"], @init.send(:find_plugins, acts)
- assert_equal ["#{acts}/acts_as_chunky_bacon", "#{default}/stubby"], @init.send(:find_plugins, default).sort
- assert_equal ["#{alt}/a", "#{acts}/acts_as_chunky_bacon", "#{default}/stubby"], @init.send(:find_plugins, base).sort
- end
-
- def test_load_plugin
- stubby = "#{File.dirname(__FILE__)}/fixtures/plugins/default/stubby"
- expected = ['stubby']
-
- assert @init.send(:load_plugin, stubby)
- assert_equal expected, @init.loaded_plugins
-
- assert !@init.send(:load_plugin, stubby)
- assert_equal expected, @init.loaded_plugins
-
- assert_raise(LoadError) { @init.send(:load_plugin, 'lakjsdfkasljdf') }
- assert_equal expected, @init.loaded_plugins
- end
-
- def test_load_default_plugins
- assert_loaded_plugins %w(stubby acts_as_chunky_bacon), 'default'
- end
-
- def test_load_alternate_plugins
- assert_loaded_plugins %w(a), 'alternate'
- end
-
- def test_load_plugins_from_two_sources
- assert_loaded_plugins %w(a stubby acts_as_chunky_bacon), ['default', 'alternate']
- end
-
- def test_load_all_plugins_when_config_plugins_is_nil
- @init.configuration.plugins = nil
- assert_loaded_plugins %w(a stubby acts_as_chunky_bacon), ['default', 'alternate']
- end
-
- def test_load_no_plugins_when_config_plugins_is_empty_array
- @init.configuration.plugins = []
- assert_loaded_plugins [], ['default', 'alternate']
- end
-
- def test_load_only_selected_plugins
- plugins = %w(stubby a)
- @init.configuration.plugins = plugins
- assert_loaded_plugins plugins, ['default', 'alternate']
- end
-
- def test_load_plugins_in_order
- plugins = %w(stubby acts_as_chunky_bacon a)
- @init.configuration.plugins = plugins
- assert_plugin_load_order plugins, ['default', 'alternate']
- end
-
- def test_raise_error_when_plugin_not_found
- @init.configuration.plugins = %w(this_plugin_does_not_exist)
- assert_raise(LoadError) { load_plugins(['default', 'alternate']) }
- end
+ def test_should_be_marked_as_loaded_when_load_is_called
+ plugin = plugin_for(@valid_plugin_path)
+ assert !plugin.loaded?
+ plugin.stubs(:evaluate_init_rb)
+ assert_nothing_raised do
+ plugin.send(:load, anything)
+ end
+ assert plugin.loaded?
+ end
- protected
- def assert_loaded_plugins(plugins, paths)
- assert_equal plugins.sort, load_plugins(paths).sort
+ def test_should_determine_validity_of_given_path
+ # This is a plugin path, with a lib dir
+ assert plugin_for(@valid_plugin_path).valid?
+ # This just has an init.rb and no lib dir
+ assert plugin_for(plugin_fixture_path('default/plugin_with_no_lib_dir')).valid?
+ # This would be a plugin path, but the directory is empty
+ assert !plugin_for(plugin_fixture_path('default/empty')).valid?
+ # This is a non sense path
+ assert !plugin_for(plugin_fixture_path('default/this_directory_does_not_exist')).valid?
end
+
+ def test_should_return_empty_array_for_load_paths_when_plugin_has_no_lib_directory
+ assert_equal [], plugin_for(plugin_fixture_path('default/plugin_with_no_lib_dir')).load_paths
+ end
+
+ def test_should_return_array_with_lib_path_for_load_paths_when_plugin_has_a_lib_directory
+ expected_lib_dir = File.join(plugin_fixture_path('default/stubby'), 'lib')
+ assert_equal [expected_lib_dir], plugin_for(plugin_fixture_path('default/stubby')).load_paths
+ end
+
+ def test_should_raise_a_load_error_when_trying_to_determine_the_load_paths_from_an_invalid_plugin
+ assert_nothing_raised do
+ plugin_for(@valid_plugin_path).load_paths
+ end
- def assert_plugin_load_order(plugins, paths)
- assert_equal plugins, load_plugins(paths)
+ assert_raises(LoadError) do
+ plugin_for(@empty_plugin_path).load_paths
+ end
+
+ assert_raises(LoadError) do
+ plugin_for('this_is_not_a_plugin_directory').load_paths
+ end
end
-
- def load_plugins(*paths)
- @init.configuration.plugin_paths = paths.flatten.map { |p| "#{File.dirname(__FILE__)}/fixtures/plugins/#{p}" }
- @init.load_plugins
- @init.loaded_plugins
+
+ def test_should_raise_a_load_error_when_trying_to_load_an_invalid_plugin
+ # This path is fine so nothing is raised
+ assert_nothing_raised do
+ plugin = plugin_for(@valid_plugin_path)
+ plugin.stubs(:evaluate_init_rb)
+ plugin.send(:load, @initializer)
+ end
+
+ # This is an empty path so it raises
+ assert_raises(LoadError) do
+ plugin = plugin_for(@empty_plugin_path)
+ plugin.stubs(:evaluate_init_rb)
+ plugin.send(:load, @initializer)
+ end
+
+ assert_raises(LoadError) do
+ plugin = plugin_for('this_is_not_a_plugin_directory')
+ plugin.stubs(:evaluate_init_rb)
+ plugin.send(:load, @initializer)
+ end
end
-end
+
+ def test_should_raise_a_load_error_when_trying_to_access_load_paths_of_an_invalid_plugin
+ # This path is fine so nothing is raised
+ assert_nothing_raised do
+ plugin_for(@valid_plugin_path).load_paths
+ end
+
+ # This is an empty path so it raises
+ assert_raises(LoadError) do
+ plugin_for(@empty_plugin_path).load_paths
+ end
+
+ assert_raises(LoadError) do
+ plugin_for('this_is_not_a_plugin_directory').load_paths
+ end
+ end
+
+ def test_loading_a_plugin_gives_the_init_file_access_to_all_it_needs
+ failure_tip = "Perhaps someone has written another test that loads this same plugin and therefore makes the StubbyMixin constant defined already."
+ assert !defined?(StubbyMixin), failure_tip
+ plugin = plugin_for(@valid_plugin_path)
+ plugin.load_paths.each { |path| $LOAD_PATH.unshift(path) }
+ # The init.rb of this plugin raises if it doesn't have access to all the things it needs
+ assert_nothing_raised do
+ plugin.load(@initializer)
+ end
+ assert defined?(StubbyMixin)
+ end
+
+ def test_should_sort_naturally_by_name
+ a = plugin_for("path/a")
+ b = plugin_for("path/b")
+ z = plugin_for("path/z")
+ assert_equal [a, b, z], [b, z, a].sort
+ end
+
+ def test_should_only_be_loaded_once
+ plugin = plugin_for(@valid_plugin_path)
+ assert !plugin.loaded?
+ plugin.expects(:evaluate_init_rb)
+ assert_nothing_raised do
+ plugin.send(:load, @initializer)
+ plugin.send(:load, @initializer)
+ end
+ assert plugin.loaded?
+ end
+
+ private
+
+ def plugin_for(path)
+ Rails::Plugin.new(path)
+ end
+ end
+
+end # uses_mocha
\ No newline at end of file