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