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