mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
1fac7b79f3
Since we want this flag to be enabled anytime we are running the tests under JRuby, let's enable this at the Rakefile level so people get the performance boost on their local checkout. Moreover, we avoid having to update this particular line anytime the option changes on the JRuby side. The only drawback is that we have to define it in every Rakefile but there's no big deal, this is already the case for other options.
168 lines
5.5 KiB
Ruby
168 lines
5.5 KiB
Ruby
require 'rake/testtask'
|
|
require 'rubygems/package_task'
|
|
|
|
require File.expand_path(File.dirname(__FILE__)) + "/test/config"
|
|
require File.expand_path(File.dirname(__FILE__)) + "/test/support/config"
|
|
|
|
def run_without_aborting(*tasks)
|
|
errors = []
|
|
|
|
tasks.each do |task|
|
|
begin
|
|
Rake::Task[task].invoke
|
|
rescue Exception
|
|
errors << task
|
|
end
|
|
end
|
|
|
|
abort "Errors running #{errors.join(', ')}" if errors.any?
|
|
end
|
|
|
|
desc 'Run mysql, mysql2, sqlite, and postgresql tests by default'
|
|
task :default => :test
|
|
|
|
desc 'Run mysql, mysql2, sqlite, and postgresql tests'
|
|
task :test do
|
|
tasks = defined?(JRUBY_VERSION) ?
|
|
%w(test_jdbcmysql test_jdbcsqlite3 test_jdbcpostgresql) :
|
|
%w(test_mysql test_mysql2 test_sqlite3 test_postgresql)
|
|
run_without_aborting(*tasks)
|
|
end
|
|
|
|
namespace :test do
|
|
task :isolated do
|
|
tasks = defined?(JRUBY_VERSION) ?
|
|
%w(isolated_test_jdbcmysql isolated_test_jdbcsqlite3 isolated_test_jdbcpostgresql) :
|
|
%w(isolated_test_mysql isolated_test_mysql2 isolated_test_sqlite3 isolated_test_postgresql)
|
|
run_without_aborting(*tasks)
|
|
end
|
|
end
|
|
|
|
desc 'Build MySQL and PostgreSQL test databases'
|
|
namespace :db do
|
|
task :create => ['db:mysql:build', 'db:postgresql:build']
|
|
task :drop => ['db:mysql:drop', 'db:postgresql:drop']
|
|
end
|
|
|
|
%w( mysql mysql2 postgresql sqlite3 sqlite3_mem db2 oracle jdbcmysql jdbcpostgresql jdbcsqlite3 jdbcderby jdbch2 jdbchsqldb ).each do |adapter|
|
|
namespace :test do
|
|
Rake::TestTask.new(adapter => "#{adapter}:env") { |t|
|
|
adapter_short = adapter == 'db2' ? adapter : adapter[/^[a-z0-9]+/]
|
|
t.libs << 'test'
|
|
t.test_files = (Dir.glob( "test/cases/**/*_test.rb" ).reject {
|
|
|x| x =~ /\/adapters\//
|
|
} + Dir.glob("test/cases/adapters/#{adapter_short}/**/*_test.rb")).sort
|
|
|
|
t.warning = true
|
|
t.verbose = true
|
|
t.ruby_opts = ["--dev"] if defined?(JRUBY_VERSION)
|
|
}
|
|
|
|
namespace :isolated do
|
|
task adapter => "#{adapter}:env" do
|
|
adapter_short = adapter == 'db2' ? adapter : adapter[/^[a-z0-9]+/]
|
|
puts [adapter, adapter_short].inspect
|
|
(Dir["test/cases/**/*_test.rb"].reject {
|
|
|x| x =~ /\/adapters\//
|
|
} + Dir["test/cases/adapters/#{adapter_short}/**/*_test.rb"]).all? do |file|
|
|
sh(Gem.ruby, '-w' ,"-Itest", file)
|
|
end or raise "Failures"
|
|
end
|
|
end
|
|
end
|
|
|
|
namespace adapter do
|
|
task :test => "test_#{adapter}"
|
|
task :isolated_test => "isolated_test_#{adapter}"
|
|
|
|
# Set the connection environment for the adapter
|
|
task(:env) { ENV['ARCONN'] = adapter }
|
|
end
|
|
|
|
# Make sure the adapter test evaluates the env setting task
|
|
task "test_#{adapter}" => ["#{adapter}:env", "test:#{adapter}"]
|
|
task "isolated_test_#{adapter}" => ["#{adapter}:env", "test:isolated:#{adapter}"]
|
|
end
|
|
|
|
rule '.sqlite3' do |t|
|
|
sh %Q{sqlite3 "#{t.name}" "create table a (a integer); drop table a;"}
|
|
end
|
|
|
|
task :test_sqlite3 => [
|
|
'test/fixtures/fixture_database.sqlite3',
|
|
'test/fixtures/fixture_database_2.sqlite3'
|
|
]
|
|
|
|
namespace :db do
|
|
namespace :mysql do
|
|
desc 'Build the MySQL test databases'
|
|
task :build do
|
|
config = ARTest.config['connections']['mysql']
|
|
%x( mysql --user=#{config['arunit']['username']} -e "create DATABASE #{config['arunit']['database']} DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_unicode_ci ")
|
|
%x( mysql --user=#{config['arunit2']['username']} -e "create DATABASE #{config['arunit2']['database']} DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_unicode_ci ")
|
|
end
|
|
|
|
desc 'Drop the MySQL test databases'
|
|
task :drop do
|
|
config = ARTest.config['connections']['mysql']
|
|
%x( mysqladmin --user=#{config['arunit']['username']} -f drop #{config['arunit']['database']} )
|
|
%x( mysqladmin --user=#{config['arunit2']['username']} -f drop #{config['arunit2']['database']} )
|
|
end
|
|
|
|
desc 'Rebuild the MySQL test databases'
|
|
task :rebuild => [:drop, :build]
|
|
end
|
|
|
|
namespace :postgresql do
|
|
desc 'Build the PostgreSQL test databases'
|
|
task :build do
|
|
config = ARTest.config['connections']['postgresql']
|
|
%x( createdb -E UTF8 -T template0 #{config['arunit']['database']} )
|
|
%x( createdb -E UTF8 -T template0 #{config['arunit2']['database']} )
|
|
|
|
# prepare hstore
|
|
if %x( createdb --version ).strip.gsub(/(.*)(\d\.\d\.\d)$/, "\\2") < "9.1.0"
|
|
puts "Please prepare hstore data type. See http://www.postgresql.org/docs/9.0/static/hstore.html"
|
|
end
|
|
end
|
|
|
|
desc 'Drop the PostgreSQL test databases'
|
|
task :drop do
|
|
config = ARTest.config['connections']['postgresql']
|
|
%x( dropdb #{config['arunit']['database']} )
|
|
%x( dropdb #{config['arunit2']['database']} )
|
|
end
|
|
|
|
desc 'Rebuild the PostgreSQL test databases'
|
|
task :rebuild => [:drop, :build]
|
|
end
|
|
end
|
|
|
|
task :build_mysql_databases => 'db:mysql:build'
|
|
task :drop_mysql_databases => 'db:mysql:drop'
|
|
task :rebuild_mysql_databases => 'db:mysql:rebuild'
|
|
|
|
task :build_postgresql_databases => 'db:postgresql:build'
|
|
task :drop_postgresql_databases => 'db:postgresql:drop'
|
|
task :rebuild_postgresql_databases => 'db:postgresql:rebuild'
|
|
|
|
task :lines do
|
|
load File.expand_path('..', File.dirname(__FILE__)) + '/tools/line_statistics'
|
|
files = FileList["lib/active_record/**/*.rb"]
|
|
CodeTools::LineStatistics.new(files).print_loc
|
|
end
|
|
|
|
spec = eval(File.read('activerecord.gemspec'))
|
|
|
|
Gem::PackageTask.new(spec) do |p|
|
|
p.gem_spec = spec
|
|
end
|
|
|
|
# Publishing ------------------------------------------------------
|
|
|
|
desc "Release to rubygems"
|
|
task :release => :package do
|
|
require 'rake/gemcutter'
|
|
Rake::Gemcutter::Tasks.new(spec).define
|
|
Rake::Task['gem:push'].invoke
|
|
end
|