Skip to content

Commit

Permalink
Make the Fixtures Test::Unit enhancements more supporting for double-…
Browse files Browse the repository at this point in the history
…loaded test cases. Closes rails#10379 [brynary]

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@8392 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
  • Loading branch information
technoweenie committed Dec 15, 2007
1 parent 1ceccde commit abd7cf3
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 2 deletions.
2 changes: 2 additions & 0 deletions activerecord/CHANGELOG
@@ -1,5 +1,7 @@
*SVN*

* Make the Fixtures Test::Unit enhancements more supporting for double-loaded test cases. Closes #10379 [brynary]

* Fix that validates_acceptance_of still works for non-existent tables (useful for bootstrapping new databases). Closes #10474 [hasmanyjosh]

* Ensure that the :uniq option for has_many :through associations retains the order. #10463 [remvee]
Expand Down
15 changes: 13 additions & 2 deletions activerecord/lib/active_record/fixtures.rb
Expand Up @@ -916,6 +916,8 @@ def use_transactional_fixtures?
end

def setup_with_fixtures
return if @fixtures_setup
@fixtures_setup = true
return unless defined?(ActiveRecord::Base) && !ActiveRecord::Base.configurations.blank?

if pre_loaded_fixtures && !use_transactional_fixtures
Expand Down Expand Up @@ -947,6 +949,8 @@ def setup_with_fixtures
alias_method :setup, :setup_with_fixtures

def teardown_with_fixtures
return if @fixtures_teardown
@fixtures_teardown = true
return unless defined?(ActiveRecord::Base) && !ActiveRecord::Base.configurations.blank?

unless use_transactional_fixtures?
Expand All @@ -963,24 +967,31 @@ def teardown_with_fixtures
alias_method :teardown, :teardown_with_fixtures

def self.method_added(method)
return if @__disable_method_added__
@__disable_method_added__ = true

case method.to_s
when 'setup'
unless method_defined?(:setup_without_fixtures)
alias_method :setup_without_fixtures, :setup
define_method(:setup) do
define_method(:full_setup) do
setup_with_fixtures
setup_without_fixtures
end
end
alias_method :setup, :full_setup
when 'teardown'
unless method_defined?(:teardown_without_fixtures)
alias_method :teardown_without_fixtures, :teardown
define_method(:teardown) do
define_method(:full_teardown) do
teardown_without_fixtures
teardown_with_fixtures
end
end
alias_method :teardown, :full_teardown
end

@__disable_method_added__ = false
end

private
Expand Down
16 changes: 16 additions & 0 deletions activerecord/test/fixtures_test.rb
Expand Up @@ -324,6 +324,22 @@ def test_fixture_table_names
end
end

# This is to reproduce a bug where if a TestCase is loaded
# twice by Ruby, it loses its fixture setup hook.
class_def = <<-CODE
class DoubleLoadedTestCase < Test::Unit::TestCase
fixtures :topics
def setup
end
def test_should_properly_setup_fixtures
assert_nothing_raised { topics(:first) }
end
end
CODE
2.times { eval(class_def) }

class OverlappingFixturesTest < Test::Unit::TestCase
fixtures :topics, :developers
fixtures :developers, :accounts
Expand Down

0 comments on commit abd7cf3

Please sign in to comment.