2004-11-24 09:04:44 +08:00
require 'rake/testtask'
2011-05-25 02:08:11 +08:00
require 'rubygems/package_task'
2008-01-22 01:20:51 +08:00
require File . expand_path ( File . dirname ( __FILE__ ) ) + " /test/config "
2011-06-07 03:37:23 +08:00
require File . expand_path ( File . dirname ( __FILE__ ) ) + " /test/support/config "
2008-04-21 12:40:16 +08:00
2009-08-28 02:04:08 +08:00
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
2004-11-24 09:04:44 +08:00
2010-08-02 16:37:57 +08:00
desc 'Run mysql, mysql2, sqlite, and postgresql tests by default'
2007-10-15 08:10:09 +08:00
task :default = > :test
2004-11-24 09:04:44 +08:00
2010-08-02 16:37:57 +08:00
desc 'Run mysql, mysql2, sqlite, and postgresql tests'
2009-08-28 02:04:08 +08:00
task :test do
tasks = defined? ( JRUBY_VERSION ) ?
%w( test_jdbcmysql test_jdbcsqlite3 test_jdbcpostgresql ) :
2010-08-02 16:37:57 +08:00
%w( test_mysql test_mysql2 test_sqlite3 test_postgresql )
2009-08-28 02:04:08 +08:00
run_without_aborting ( * tasks )
end
2009-11-11 08:50:15 +08:00
namespace :test do
task :isolated do
tasks = defined? ( JRUBY_VERSION ) ?
%w( isolated_test_jdbcmysql isolated_test_jdbcsqlite3 isolated_test_jdbcpostgresql ) :
2010-08-02 16:37:57 +08:00
%w( isolated_test_mysql isolated_test_mysql2 isolated_test_sqlite3 isolated_test_postgresql )
2009-11-11 08:50:15 +08:00
run_without_aborting ( * tasks )
end
2009-08-28 02:04:08 +08:00
end
2004-11-24 09:04:44 +08:00
2013-01-21 01:41:49 +08:00
namespace :db do
2013-01-21 01:48:55 +08:00
task :create = > [ 'mysql:build_databases' , 'postgresql:build_databases' ]
2013-01-21 03:00:26 +08:00
task :drop = > [ 'mysql:drop_databases' , 'postgresql:drop_databases' ]
2013-01-21 01:41:49 +08:00
end
2011-01-09 02:36:30 +08:00
%w( mysql mysql2 postgresql sqlite3 sqlite3_mem firebird db2 oracle sybase openbase frontbase jdbcmysql jdbcpostgresql jdbcsqlite3 jdbcderby jdbch2 jdbchsqldb ) . each do | adapter |
2005-03-27 22:10:42 +08:00
Rake :: TestTask . new ( " test_ #{ adapter } " ) { | t |
2010-08-02 16:37:57 +08:00
adapter_short = adapter == 'db2' ? adapter : adapter [ / ^[a-z0-9]+ / ]
2011-06-07 02:43:50 +08:00
t . libs << 'test'
2010-06-26 04:29:17 +08:00
t . test_files = ( Dir . glob ( " test/cases/**/*_test.rb " ) . reject {
| x | x =~ / \/ adapters \/ /
} + Dir . glob ( " test/cases/adapters/ #{ adapter_short } /**/*_test.rb " ) ) . sort
2010-04-06 15:18:22 +08:00
t . warning = true
2012-02-03 21:01:24 +08:00
t . verbose = true
2005-03-27 22:10:42 +08:00
}
2007-10-08 13:29:09 +08:00
2009-05-13 16:06:53 +08:00
task " isolated_test_ #{ adapter } " do
2010-08-02 16:37:57 +08:00
adapter_short = adapter == 'db2' ? adapter : adapter [ / ^[a-z0-9]+ / ]
2011-06-05 06:19:17 +08:00
puts [ adapter , adapter_short ] . inspect
2009-05-13 16:06:53 +08:00
ruby = File . join ( * RbConfig :: CONFIG . values_at ( 'bindir' , 'RUBY_INSTALL_NAME' ) )
2010-06-28 12:19:24 +08:00
( Dir [ " test/cases/**/*_test.rb " ] . reject {
| x | x =~ / \/ adapters \/ /
} + Dir [ " test/cases/adapters/ #{ adapter_short } /**/*_test.rb " ] ) . all? do | file |
2013-06-21 20:14:36 +08:00
sh ( ruby , '-w' , " -Itest " , file )
2009-05-13 16:06:53 +08:00
end or raise " Failures "
end
2007-10-08 13:29:09 +08:00
namespace adapter do
task :test = > " test_ #{ adapter } "
2009-05-13 16:06:53 +08:00
task :isolated_test = > " isolated_test_ #{ adapter } "
2011-06-07 07:51:28 +08:00
# Set the connection environment for the adapter
2011-06-07 07:59:51 +08:00
task ( :env ) { ENV [ 'ARCONN' ] = adapter }
2007-10-08 13:29:09 +08:00
end
2011-06-07 07:51:28 +08:00
# Make sure the adapter test evaluates the env setting task
task " test_ #{ adapter } " = > " #{ adapter } :env "
2011-06-07 09:01:11 +08:00
task " isolated_test_ #{ adapter } " = > " #{ adapter } :env "
2005-03-27 22:10:42 +08:00
end
2005-02-07 22:06:00 +08:00
2011-01-15 06:07:16 +08:00
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'
]
2007-10-08 13:29:09 +08:00
namespace :mysql do
desc 'Build the MySQL test databases'
task :build_databases do
2011-06-07 03:37:23 +08:00
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 " )
2007-10-08 13:29:09 +08:00
end
desc 'Drop the MySQL test databases'
task :drop_databases do
2011-06-07 03:37:23 +08:00
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' ] } )
2007-10-08 13:29:09 +08:00
end
2005-11-20 15:45:04 +08:00
2007-10-08 13:29:09 +08:00
desc 'Rebuild the MySQL test databases'
task :rebuild_databases = > [ :drop_databases , :build_databases ]
2005-11-20 15:45:04 +08:00
end
2007-10-08 13:29:09 +08:00
task :build_mysql_databases = > 'mysql:build_databases'
task :drop_mysql_databases = > 'mysql:drop_databases'
2007-10-15 11:30:47 +08:00
task :rebuild_mysql_databases = > 'mysql:rebuild_databases'
2005-11-20 15:45:04 +08:00
2007-10-08 13:29:09 +08:00
namespace :postgresql do
desc 'Build the PostgreSQL test databases'
task :build_databases do
2011-06-07 03:37:23 +08:00
config = ARTest . config [ 'connections' ] [ 'postgresql' ]
2012-08-20 10:05:15 +08:00
%x( createdb -E UTF8 -T template0 #{ config [ 'arunit' ] [ 'database' ] } )
%x( createdb -E UTF8 -T template0 #{ config [ 'arunit2' ] [ 'database' ] } )
2012-05-23 02:37:02 +08:00
# prepare hstore
version = %x( createdb --version ) . strip . gsub ( / (.*)( \ d \ . \ d \ . \ d)$ / , " \\ 2 " )
%w( arunit arunit2 ) . each do | db |
if version < " 9.1.0 "
puts " Please prepare hstore data type. See http://www.postgresql.org/docs/9.0/static/hstore.html "
end
end
2007-10-08 13:29:09 +08:00
end
desc 'Drop the PostgreSQL test databases'
task :drop_databases do
2011-06-07 03:37:23 +08:00
config = ARTest . config [ 'connections' ] [ 'postgresql' ]
%x( dropdb #{ config [ 'arunit' ] [ 'database' ] } )
%x( dropdb #{ config [ 'arunit2' ] [ 'database' ] } )
2007-10-08 13:29:09 +08:00
end
desc 'Rebuild the PostgreSQL test databases'
task :rebuild_databases = > [ :drop_databases , :build_databases ]
2005-11-20 15:45:04 +08:00
end
2007-10-08 13:29:09 +08:00
task :build_postgresql_databases = > 'postgresql:build_databases'
task :drop_postgresql_databases = > 'postgresql:drop_databases'
2007-10-15 11:30:47 +08:00
task :rebuild_postgresql_databases = > 'postgresql:rebuild_databases'
2005-02-23 21:34:57 +08:00
2006-04-28 06:39:45 +08:00
2007-10-08 13:29:09 +08:00
namespace :frontbase do
desc 'Build the FrontBase test databases'
task :build_databases = > :rebuild_frontbase_databases
2006-04-28 06:39:45 +08:00
2007-10-08 13:29:09 +08:00
desc 'Rebuild the FrontBase test databases'
task :rebuild_databases do
build_frontbase_database = Proc . new do | db_name , sql_definition_file |
%(
STOP DATABASE #{db_name};
DELETE DATABASE #{db_name};
CREATE DATABASE #{db_name};
2006-04-28 06:39:45 +08:00
2007-10-08 13:29:09 +08:00
CONNECT TO #{db_name} AS SESSION_NAME USER _SYSTEM;
SET COMMIT FALSE ;
2006-04-28 06:39:45 +08:00
2007-10-08 13:29:09 +08:00
CREATE USER RAILS ;
CREATE SCHEMA RAILS AUTHORIZATION RAILS ;
COMMIT ;
2006-04-28 06:39:45 +08:00
2007-10-08 13:29:09 +08:00
SET SESSION AUTHORIZATION RAILS ;
SCRIPT '#{sql_definition_file}' ;
2006-04-28 06:39:45 +08:00
2007-10-08 13:29:09 +08:00
COMMIT ;
DISCONNECT ALL ;
)
end
2011-06-07 03:37:23 +08:00
config = ARTest . config [ 'connections' ] [ 'frontbase' ]
create_activerecord_unittest = build_frontbase_database [ config [ 'arunit' ] [ 'database' ] , File . join ( SCHEMA_ROOT , 'frontbase.sql' ) ]
create_activerecord_unittest2 = build_frontbase_database [ config [ 'arunit2' ] [ 'database' ] , File . join ( SCHEMA_ROOT , 'frontbase2.sql' ) ]
2007-10-08 13:29:09 +08:00
execute_frontbase_sql = Proc . new do | sql |
system ( <<-SHELL)
/ Library / FrontBase / bin / sql92 <<-SQL
#{sql}
SQL
SHELL
end
execute_frontbase_sql [ create_activerecord_unittest ]
execute_frontbase_sql [ create_activerecord_unittest2 ]
2006-04-28 06:39:45 +08:00
end
end
2007-10-08 13:29:09 +08:00
task :build_frontbase_databases = > 'frontbase:build_databases'
task :rebuild_frontbase_databases = > 'frontbase:rebuild_databases'
2009-09-25 13:46:04 +08:00
spec = eval ( File . read ( 'activerecord.gemspec' ) )
2007-10-08 13:29:09 +08:00
2011-05-25 02:08:11 +08:00
Gem :: PackageTask . new ( spec ) do | p |
2004-11-24 09:04:44 +08:00
p . gem_spec = spec
end
2005-04-13 13:06:40 +08:00
task :lines do
lines , codelines , total_lines , total_codelines = 0 , 0 , 0 , 0
2012-01-30 00:54:17 +08:00
FileList [ " lib/active_record/**/*.rb " ] . each do | file_name |
2005-04-13 13:06:40 +08:00
next if file_name =~ / vendor /
2012-01-30 01:27:43 +08:00
File . open ( file_name , 'r' ) do | f |
while line = f . gets
lines += 1
next if line =~ / ^ \ s*$ /
next if line =~ / ^ \ s* # /
codelines += 1
end
2005-04-13 13:06:40 +08:00
end
puts " L: #{ sprintf ( " %4d " , lines ) } , LOC #{ sprintf ( " %4d " , codelines ) } | #{ file_name } "
2007-10-08 13:29:09 +08:00
2005-04-13 13:06:40 +08:00
total_lines += lines
total_codelines += codelines
2007-10-08 13:29:09 +08:00
2005-04-13 13:06:40 +08:00
lines , codelines = 0 , 0
end
puts " Total: Lines #{ total_lines } , LOC #{ total_codelines } "
end
2004-11-24 09:04:44 +08:00
2005-03-27 21:33:54 +08:00
# Publishing ------------------------------------------------------
2004-11-24 09:04:44 +08:00
2013-06-21 16:57:00 +08:00
desc " Release to rubygems "
2010-02-05 16:03:03 +08:00
task :release = > :package do
require 'rake/gemcutter'
Rake :: Gemcutter :: Tasks . new ( spec ) . define
Rake :: Task [ 'gem:push' ] . invoke
end