提交 767eaa9d 编写于 作者: J Jeremy Kemper

Clean up and run the Active Record integration tests by default. Closes #5854.

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@4807 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
上级 8f89f14f
*SVN* *SVN*
* Clean up and run the Active Record integration tests by default. [Jeremy Kemper] * Clean up and run the Active Record integration tests by default. #5854 [kevin.clark@gmail.com, Jeremy Kemper]
* Correct example in cookies docs. #5832 [jessemerriman@warpmail.net] * Correct example in cookies docs. #5832 [jessemerriman@warpmail.net]
......
...@@ -6,7 +6,6 @@ ...@@ -6,7 +6,6 @@
require 'test/unit' require 'test/unit'
require 'action_controller' require 'action_controller'
require 'breakpoint' require 'breakpoint'
require 'action_controller/test_process' require 'action_controller/test_process'
ActionController::Base.logger = nil ActionController::Base.logger = nil
......
...@@ -33,10 +33,12 @@ class ActiveRecordTestConnector ...@@ -33,10 +33,12 @@ class ActiveRecordTestConnector
# Define the rest of the connector # Define the rest of the connector
class ActiveRecordTestConnector class ActiveRecordTestConnector
def self.setup class << self
def setup
unless self.connected || !self.able_to_connect unless self.connected || !self.able_to_connect
setup_connection setup_connection
load_schema load_schema
require_fixture_models
self.connected = true self.connected = true
end end
rescue Object => e rescue Object => e
...@@ -47,14 +49,18 @@ def self.setup ...@@ -47,14 +49,18 @@ def self.setup
private private
def self.setup_connection def setup_connection
if Object.const_defined?(:ActiveRecord) if Object.const_defined?(:ActiveRecord)
begin begin
ActiveRecord::Base.establish_connection(:adapter => 'sqlite3', :dbfile => ':memory:') connection_options = {:adapter => 'sqlite3', :dbfile => ':memory:'}
ActiveRecord::Base.establish_connection(connection_options)
ActiveRecord::Base.configurations = { 'sqlite3_ar_integration' => connection_options }
ActiveRecord::Base.connection ActiveRecord::Base.connection
rescue Object rescue Object
$stderr.puts 'SQLite 3 unavailable; falling to SQLite 2.' $stderr.puts 'SQLite 3 unavailable; falling to SQLite 2.'
ActiveRecord::Base.establish_connection(:adapter => 'sqlite', :dbfile => ':memory:') connection_options = {:adapter => 'sqlite', :dbfile => ':memory:'}
ActiveRecord::Base.establish_connection(connection_options)
ActiveRecord::Base.configurations = { 'sqlite2_ar_integration' => connection_options }
ActiveRecord::Base.connection ActiveRecord::Base.connection
end end
...@@ -65,11 +71,16 @@ def self.setup_connection ...@@ -65,11 +71,16 @@ def self.setup_connection
end end
# Load actionpack sqlite tables # Load actionpack sqlite tables
def self.load_schema def load_schema
File.read(File.dirname(__FILE__) + "/fixtures/db_definitions/sqlite.sql").split(';').each do |sql| File.read(File.dirname(__FILE__) + "/fixtures/db_definitions/sqlite.sql").split(';').each do |sql|
ActiveRecord::Base.connection.execute(sql) unless sql.blank? ActiveRecord::Base.connection.execute(sql) unless sql.blank?
end end
end end
def require_fixture_models
Dir.glob(File.dirname(__FILE__) + "/fixtures/*.rb").each {|f| require f}
end
end
end end
# Test case for inheiritance # Test case for inheiritance
...@@ -80,6 +91,10 @@ class ActiveRecordTestCase < Test::Unit::TestCase ...@@ -80,6 +91,10 @@ class ActiveRecordTestCase < Test::Unit::TestCase
self.use_transactional_fixtures = false self.use_transactional_fixtures = false
end end
def self.fixtures(*args)
super if ActiveRecordTestConnector.connected
end
def setup def setup
abort_tests unless ActiveRecordTestConnector.connected abort_tests unless ActiveRecordTestConnector.connected
end end
......
require "#{File.dirname(__FILE__)}/../active_record_unit" require "#{File.dirname(__FILE__)}/../active_record_unit"
require 'fixtures/company' if ActiveRecordTestConnector.able_to_connect
class ActiveRecordAssertionsController < ActionController::Base class ActiveRecordAssertionsController < ActionController::Base
self.template_root = "#{File.dirname(__FILE__)}/../fixtures/" self.template_root = "#{File.dirname(__FILE__)}/../fixtures/"
...@@ -39,7 +38,7 @@ def rescue_action(e) raise; end ...@@ -39,7 +38,7 @@ def rescue_action(e) raise; end
end end
class ActiveRecordAssertionsControllerTest < ActiveRecordTestCase class ActiveRecordAssertionsControllerTest < ActiveRecordTestCase
fixtures :companies if ActiveRecordTestConnector.able_to_connect fixtures :companies
def setup def setup
@request = ActionController::TestRequest.new @request = ActionController::TestRequest.new
......
# Unfurl the safety net.
path_to_ar = File.dirname(__FILE__) + '/../../../activerecord'
if Object.const_defined?(:ActiveRecord) or File.exist?(path_to_ar)
begin
# These tests exercise CGI::Session::ActiveRecordStore, so you're going to # These tests exercise CGI::Session::ActiveRecordStore, so you're going to
# need AR in a sibling directory to AP and have SQLite installed. # need AR in a sibling directory to AP and have SQLite installed.
require File.dirname(__FILE__) + '/../active_record_unit'
unless Object.const_defined?(:ActiveRecord)
require File.join(path_to_ar, 'lib', 'active_record')
end
require File.dirname(__FILE__) + '/../abstract_unit'
require 'action_controller/session/active_record_store' require 'action_controller/session/active_record_store'
#ActiveRecord::Base.logger = Logger.new($stdout)
begin
CGI::Session::ActiveRecordStore::Session.establish_connection(:adapter => 'sqlite3', :database => ':memory:')
CGI::Session::ActiveRecordStore::Session.connection
rescue Object
$stderr.puts 'SQLite 3 unavailable; falling back to SQLite 2.'
begin
CGI::Session::ActiveRecordStore::Session.establish_connection(:adapter => 'sqlite', :database => ':memory:')
CGI::Session::ActiveRecordStore::Session.connection
rescue Object
$stderr.puts 'SQLite 2 unavailable; skipping ActiveRecordStore test suite.'
raise SystemExit
end
end
module CommonActiveRecordStoreTests module CommonActiveRecordStoreTests
def test_basics def test_basics
...@@ -165,11 +140,3 @@ def test_model_attribute ...@@ -165,11 +140,3 @@ def test_model_attribute
assert_equal({ 'foo' => 'bar' }, @new_session.model.data) assert_equal({ 'foo' => 'bar' }, @new_session.model.data)
end end
end end
# End of safety net.
rescue Object => e
$stderr.puts "Skipping CGI::Session::ActiveRecordStore tests: #{e}"
#$stderr.puts " #{e.backtrace.join("\n ")}"
end
end
require File.dirname(__FILE__) + '/../active_record_unit' require File.dirname(__FILE__) + '/../active_record_unit'
if ActiveRecordTestConnector.able_to_connect
require 'fixtures/topic'
require 'fixtures/reply'
require 'fixtures/developer'
require 'fixtures/project'
end
class PaginationTest < ActiveRecordTestCase class PaginationTest < ActiveRecordTestCase
if ActiveRecordTestConnector.able_to_connect
fixtures :topics, :replies, :developers, :projects, :developers_projects fixtures :topics, :replies, :developers, :projects, :developers_projects
end
class PaginationController < ActionController::Base class PaginationController < ActionController::Base
self.template_root = "#{File.dirname(__FILE__)}/../fixtures/" self.template_root = "#{File.dirname(__FILE__)}/../fixtures/"
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册