1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162
|
require 'plugin_test_helper'
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')
@gemlike_plugin_path = plugin_fixture_path('default/gemlike')
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 test_should_not_be_loaded_when_created
assert !plugin_for(@valid_plugin_path).loaded?
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
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
assert_raise(LoadError) do
plugin_for(@empty_plugin_path).load_paths
end
assert_raise(LoadError) do
plugin_for('this_is_not_a_plugin_directory').load_paths
end
end
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 path is fine so nothing is raised
assert_nothing_raised do
plugin = plugin_for(@gemlike_plugin_path)
plugin.stubs(:evaluate_init_rb)
plugin.send(:load, @initializer)
end
# This is an empty path so it raises
assert_raise(LoadError) do
plugin = plugin_for(@empty_plugin_path)
plugin.stubs(:evaluate_init_rb)
plugin.send(:load, @initializer)
end
assert_raise(LoadError) do
plugin = plugin_for('this_is_not_a_plugin_directory')
plugin.stubs(:evaluate_init_rb)
plugin.send(:load, @initializer)
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_raise(LoadError) do
plugin_for(@empty_plugin_path).load_paths
end
assert_raise(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
def test_should_make_about_yml_available_as_about_method_on_plugin
plugin = plugin_for(@valid_plugin_path)
assert_equal "Plugin Author", plugin.about['author']
assert_equal "1.0.0", plugin.about['version']
end
def test_should_return_empty_hash_for_about_if_about_yml_is_missing
assert_equal({}, plugin_for(about_yml_plugin_path('plugin_without_about_yaml')).about)
end
def test_should_return_empty_hash_for_about_if_about_yml_is_malformed
assert_equal({}, plugin_for(about_yml_plugin_path('bad_about_yml')).about)
end
private
def about_yml_plugin_path(name)
File.join(File.dirname(__FILE__), 'fixtures', 'about_yml_plugins', name)
end
def plugin_for(path)
Rails::Plugin.new(path)
end
end
|