require 'rubygems' require 'rake' require 'rake/testtask' DIR = File.dirname( __FILE__ ) task :default => [ "test:mysql" ] task :boot do require File.expand_path( File.join( DIR, 'lib', 'ar-extensions' ) ) require File.expand_path( File.join( DIR, 'tests', 'connections', "native_#{ENV['ARE_DB']}", 'connection' ) ) require File.expand_path( File.join( DIR, 'db/migrate/version' ) ) end ADAPTERS = %w( mysql postgresql sqlite sqlite3 oracle ) namespace :db do namespace :test do ADAPTERS.each do |adapter| desc "builds test database for #{adapter}" task "prepare_#{adapter}" do |t| file2run = File.join( DIR, 'tests/prepare.rb' ) system( "ruby #{file2run} #{adapter}" ) end end end end namespace :test do ADAPTERS.each do |adapter| desc "test base extensions for #{adapter}" task adapter do |t| ENV['ARE_DB'] = adapter task = Rake::Task[ "db:test:prepare_#{adapter}" ] begin task = false if SchemaInfo::VERSION == SchemaInfo.find( :first ).version rescue Exception => ex end task.invoke if task system "ruby #{File.join( DIR, 'tests/run.rb ' )} #{adapter}" end end namespace :activerecord do ADAPTERS.each do |adapter| desc "runs ActiveRecord unit tests for #{adapter} with ActiveRecord::Extensions" task adapter.to_sym do |t| activerecord_dir = ARGV[1] if activerecord_dir.nil? or ! File.directory?( activerecord_dir ) STDERR.puts "ERROR: Pass in the path to ActiveRecord. Eg: /home/zdennis/rails_trunk/activerecord" exit end old_dir, old_env = Dir.pwd, ENV['RUBYOPT'] Dir.chdir( activerecord_dir ) ENV['RUBYOPT'] = "-r#{File.join(old_dir,'init.rb')}" load "Rakefile" Rake::Task[ "test_#{adapter}" ].invoke Dir.chdir( old_dir ) ENV['RUBYOPT'] = old_env end desc "runs ActiveRecord unit tests for #{adapter} with ActiveRecord::Extensions with ALL available #{adapter} functionality" task "#{adapter}_all" do |t| ENV['LOAD_ADAPTER_EXTENSIONS'] = adapter.to_s Rake::Task["test:activerecord:#{adapter}"].invoke end end end end