PageRenderTime 62ms CodeModel.GetById 23ms RepoModel.GetById 0ms app.codeStats 1ms

/railties/test/initializer_test.rb

https://github.com/zachinglis/docrails
Ruby | 225 lines | 183 code | 41 blank | 1 comment | 0 complexity | d0f5d35b40bb8071f4cd9305f8135016 MD5 | raw file
  1. require 'abstract_unit'
  2. require 'initializer'
  3. # Mocks out the configuration
  4. module Rails
  5. def self.configuration
  6. Rails::Configuration.new
  7. end
  8. end
  9. class ConfigurationMock < Rails::Configuration
  10. attr_reader :environment_path
  11. def initialize(envpath)
  12. super()
  13. @environment_path = envpath
  14. end
  15. end
  16. class Initializer_load_environment_Test < Test::Unit::TestCase
  17. def test_load_environment_with_constant
  18. config = ConfigurationMock.new("#{File.dirname(__FILE__)}/fixtures/environment_with_constant.rb")
  19. assert_nil $initialize_test_set_from_env
  20. Rails::Initializer.run(:load_environment, config)
  21. assert_equal "success", $initialize_test_set_from_env
  22. ensure
  23. $initialize_test_set_from_env = nil
  24. end
  25. end
  26. class Initializer_after_initialize_with_blocks_environment_Test < Test::Unit::TestCase
  27. def setup
  28. config = ConfigurationMock.new("")
  29. config.after_initialize do
  30. $test_after_initialize_block1 = "success"
  31. end
  32. config.after_initialize do
  33. $test_after_initialize_block2 = "congratulations"
  34. end
  35. assert_nil $test_after_initialize_block1
  36. assert_nil $test_after_initialize_block2
  37. Rails::Initializer.run(:after_initialize, config)
  38. end
  39. def teardown
  40. $test_after_initialize_block1 = nil
  41. $test_after_initialize_block2 = nil
  42. end
  43. def test_should_have_called_the_first_after_initialize_block
  44. assert_equal "success", $test_after_initialize_block1
  45. end
  46. def test_should_have_called_the_second_after_initialize_block
  47. assert_equal "congratulations", $test_after_initialize_block2
  48. end
  49. end
  50. class Initializer_after_initialize_with_no_block_environment_Test < Test::Unit::TestCase
  51. def setup
  52. config = ConfigurationMock.new("")
  53. config.after_initialize do
  54. $test_after_initialize_block1 = "success"
  55. end
  56. config.after_initialize # don't pass a block, this is what we're testing!
  57. config.after_initialize do
  58. $test_after_initialize_block2 = "congratulations"
  59. end
  60. assert_nil $test_after_initialize_block1
  61. Rails::Initializer.run(:after_initialize, config)
  62. end
  63. def teardown
  64. $test_after_initialize_block1 = nil
  65. $test_after_initialize_block2 = nil
  66. end
  67. def test_should_have_called_the_first_after_initialize_block
  68. assert_equal "success", $test_after_initialize_block1, "should still get set"
  69. end
  70. def test_should_have_called_the_second_after_initialize_block
  71. assert_equal "congratulations", $test_after_initialize_block2
  72. end
  73. end
  74. uses_mocha 'framework paths' do
  75. class ConfigurationFrameworkPathsTests < Test::Unit::TestCase
  76. def setup
  77. @config = Rails::Configuration.new
  78. @config.frameworks.clear
  79. File.stubs(:directory?).returns(true)
  80. @config.stubs(:framework_root_path).returns('')
  81. end
  82. def test_minimal
  83. expected = %w(
  84. /railties
  85. /railties/lib
  86. /activesupport/lib
  87. )
  88. assert_equal expected, @config.framework_paths
  89. end
  90. def test_actioncontroller_or_actionview_add_actionpack
  91. @config.frameworks << :action_controller
  92. assert_framework_path '/actionpack/lib'
  93. @config.frameworks = [:action_view]
  94. assert_framework_path '/actionpack/lib'
  95. end
  96. def test_paths_for_ar_ares_and_mailer
  97. [:active_record, :action_mailer, :active_resource, :action_web_service].each do |framework|
  98. @config.frameworks = [framework]
  99. assert_framework_path "/#{framework.to_s.gsub('_', '')}/lib"
  100. end
  101. end
  102. def test_unknown_framework_raises_error
  103. @config.frameworks << :action_foo
  104. initializer = Rails::Initializer.new @config
  105. initializer.expects(:require).raises(LoadError)
  106. assert_raise RuntimeError do
  107. initializer.send :require_frameworks
  108. end
  109. end
  110. protected
  111. def assert_framework_path(path)
  112. assert @config.framework_paths.include?(path),
  113. "<#{path.inspect}> not found among <#{@config.framework_paths.inspect}>"
  114. end
  115. end
  116. end
  117. uses_mocha "Initializer plugin loading tests" do
  118. require File.dirname(__FILE__) + '/plugin_test_helper'
  119. class InitializerPluginLoadingTests < Test::Unit::TestCase
  120. def setup
  121. @configuration = Rails::Configuration.new
  122. @configuration.plugin_paths << plugin_fixture_root_path
  123. @initializer = Rails::Initializer.new(@configuration)
  124. @valid_plugin_path = plugin_fixture_path('default/stubby')
  125. @empty_plugin_path = plugin_fixture_path('default/empty')
  126. end
  127. def test_no_plugins_are_loaded_if_the_configuration_has_an_empty_plugin_list
  128. only_load_the_following_plugins! []
  129. @initializer.load_plugins
  130. assert_equal [], @initializer.loaded_plugins
  131. end
  132. def test_only_the_specified_plugins_are_located_in_the_order_listed
  133. plugin_names = [:plugin_with_no_lib_dir, :acts_as_chunky_bacon]
  134. only_load_the_following_plugins! plugin_names
  135. load_plugins!
  136. assert_plugins plugin_names, @initializer.loaded_plugins
  137. end
  138. def test_all_plugins_are_loaded_when_registered_plugin_list_is_untouched
  139. failure_tip = "It's likely someone has added a new plugin fixture without updating this list"
  140. load_plugins!
  141. assert_plugins [:a, :acts_as_chunky_bacon, :plugin_with_no_lib_dir, :stubby], @initializer.loaded_plugins, failure_tip
  142. end
  143. def test_all_plugins_loaded_when_all_is_used
  144. plugin_names = [:stubby, :acts_as_chunky_bacon, :all]
  145. only_load_the_following_plugins! plugin_names
  146. load_plugins!
  147. failure_tip = "It's likely someone has added a new plugin fixture without updating this list"
  148. assert_plugins [:stubby, :acts_as_chunky_bacon, :a, :plugin_with_no_lib_dir], @initializer.loaded_plugins, failure_tip
  149. end
  150. def test_all_plugins_loaded_after_all
  151. plugin_names = [:stubby, :all, :acts_as_chunky_bacon]
  152. only_load_the_following_plugins! plugin_names
  153. load_plugins!
  154. failure_tip = "It's likely someone has added a new plugin fixture without updating this list"
  155. assert_plugins [:stubby, :a, :plugin_with_no_lib_dir, :acts_as_chunky_bacon], @initializer.loaded_plugins, failure_tip
  156. end
  157. def test_plugin_names_may_be_strings
  158. plugin_names = ['stubby', 'acts_as_chunky_bacon', :a, :plugin_with_no_lib_dir]
  159. only_load_the_following_plugins! plugin_names
  160. load_plugins!
  161. failure_tip = "It's likely someone has added a new plugin fixture without updating this list"
  162. assert_plugins plugin_names, @initializer.loaded_plugins, failure_tip
  163. end
  164. def test_registering_a_plugin_name_that_does_not_exist_raises_a_load_error
  165. only_load_the_following_plugins! [:stubby, :acts_as_a_non_existant_plugin]
  166. assert_raises(LoadError) do
  167. load_plugins!
  168. end
  169. end
  170. def test_should_ensure_all_loaded_plugins_load_paths_are_added_to_the_load_path
  171. only_load_the_following_plugins! [:stubby, :acts_as_chunky_bacon]
  172. @initializer.add_plugin_load_paths
  173. assert $LOAD_PATH.include?(File.join(plugin_fixture_path('default/stubby'), 'lib'))
  174. assert $LOAD_PATH.include?(File.join(plugin_fixture_path('default/acts/acts_as_chunky_bacon'), 'lib'))
  175. end
  176. private
  177. def load_plugins!
  178. @initializer.add_plugin_load_paths
  179. @initializer.load_plugins
  180. end
  181. end
  182. end