diff options
author | Emilio Tagua <miloops@gmail.com> | 2009-06-30 19:34:26 -0300 |
---|---|---|
committer | Emilio Tagua <miloops@gmail.com> | 2009-06-30 19:34:26 -0300 |
commit | 9c70442534c7754eac3738e0ddf11446b01c4f9e (patch) | |
tree | 7af8614ad91e7400735a6be1b36dca704d87e3b6 /railties/test/new_initializer_test.rb | |
parent | 50f73bd39c729b4ba4b5215b608e5767ab0aa7a1 (diff) | |
parent | b5dfdc714fab7d2836e0a979ca88b4a17db9ec06 (diff) | |
download | rails-9c70442534c7754eac3738e0ddf11446b01c4f9e.tar.gz rails-9c70442534c7754eac3738e0ddf11446b01c4f9e.tar.bz2 rails-9c70442534c7754eac3738e0ddf11446b01c4f9e.zip |
Merge commit 'rails/master'
Conflicts:
activerecord/test/cases/adapter_test.rb
Diffstat (limited to 'railties/test/new_initializer_test.rb')
-rw-r--r-- | railties/test/new_initializer_test.rb | 165 |
1 files changed, 165 insertions, 0 deletions
diff --git a/railties/test/new_initializer_test.rb b/railties/test/new_initializer_test.rb new file mode 100644 index 0000000000..8d9ef7bee3 --- /dev/null +++ b/railties/test/new_initializer_test.rb @@ -0,0 +1,165 @@ +require 'abstract_unit' +require 'active_support/ruby/shim' +require 'initializer' + +class InitializerRunnerTest < ActiveSupport::TestCase + + def setup + @runner = Rails::Initializer::Runner.new + end + + test "A new runner can be created" do + assert @runner + end + + test "The initializers actually get run when the runner is run" do + state = nil + + @runner.add :foo do + run { state = true } + end + + @runner.run + assert state + end + + test "By default, initializers get run in the order that they are added" do + state = [] + + @runner.add :first do + run { state << :first } + end + + @runner.add :second do + run { state << :second } + end + + @runner.run + assert_equal [:first, :second], state + end + + test "Raises an exception if :before or :after are specified, but don't exist" do + assert_raise(Rails::Initializer::Error) do + @runner.add(:fail, :before => :whale) { 1 } + end + + assert_raise(Rails::Initializer::Error) do + @runner.add(:fail, :after => :whale) { 1 } + end + end + + test "When adding an initializer, specifying :after allows you to move an initializer after another" do + state = [] + + @runner.add :first do + run { state << :first } + end + + @runner.add :second do + run { state << :second } + end + + @runner.add :third, :after => :first do + run { state << :third } + end + + @runner.run + assert_equal [:first, :third, :second], state + end + + test "An initializer can be deleted" do + state = [] + + @runner.add :first do + run { state << :first } + end + + @runner.add :second do + run { state << :second } + end + + @runner.delete(:second) + + @runner.run + assert_equal [:first], state + end + + test "A runner can be initialized with an existing runner, which it copies" do + state = [] + + @runner.add :first do + run { state << :first } + end + + @runner.add :second do + run { state << :second } + end + + Rails::Initializer::Runner.new(@runner).run + assert_equal [:first, :second], state + end + + test "A child runner can be still be modified without modifying the parent" do + state = [] + + @runner.add :first do + run { state << :first } + end + + @runner.add :second do + run { state << :second } + end + + new_runner = Rails::Initializer::Runner.new(@runner) + new_runner.add :trois do + run { state << :trois } + end + new_runner.delete(:second) + + new_runner.run + assert_equal [:first, :trois], state + state.clear + @runner.run + assert_equal [:first, :second], state + end + + test "A child runner that is modified does not modify any other children of the same parent" do + state = [] + + @runner.add :first do + run { state << :first } + end + + @runner.add :second do + run { state << :second } + end + + child_one = Rails::Initializer::Runner.new(@runner) + child_two = Rails::Initializer::Runner.new(@runner) + + child_one.delete(:second) + child_two.run + + assert_equal [:first, :second], state + end + + test "It does not run the initializer block immediately" do + state = [] + @runner.add :first do + state << :first + end + + assert_equal [], state + end + + test "It runs the block when the runner is run" do + state = [] + @runner.add :first do + state << :first + end + + @runner.run + assert_equal [:first], state + end + +end
\ No newline at end of file |