diff options
Diffstat (limited to 'activerecord/Rakefile')
-rw-r--r-- | activerecord/Rakefile | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/activerecord/Rakefile b/activerecord/Rakefile new file mode 100644 index 0000000000..013e81c959 --- /dev/null +++ b/activerecord/Rakefile @@ -0,0 +1,142 @@ +# frozen_string_literal: true + +require "rake/testtask" + +require_relative "test/config" +require_relative "test/support/config" + +def run_without_aborting(*tasks) + errors = [] + + tasks.each do |task| + Rake::Task[task].invoke + rescue Exception + errors << task + end + + abort "Errors running #{errors.join(', ')}" if errors.any? +end + +desc "Run mysql2, sqlite, and postgresql tests by default" +task default: :test + +task :package + +desc "Run mysql2, sqlite, and postgresql tests" +task :test do + tasks = defined?(JRUBY_VERSION) ? + %w(test_jdbcmysql test_jdbcsqlite3 test_jdbcpostgresql) : + %w(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_mysql2 isolated_test_sqlite3 isolated_test_postgresql) + run_without_aborting(*tasks) + end +end + +namespace :db do + desc "Build MySQL and PostgreSQL test databases" + task create: ["db:mysql:build", "db:postgresql:build"] + + desc "Drop MySQL and PostgreSQL test databases" + task drop: ["db:mysql:drop", "db:postgresql:drop"] +end + +%w( 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.include?("/adapters/") + } + Dir.glob("test/cases/adapters/#{adapter_short}/**/*_test.rb")) + + 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.include?("/adapters/") + } + Dir["test/cases/adapters/#{adapter_short}/**/*_test.rb"]).all? do |file| + sh(Gem.ruby, "-w", "-Itest", file) + end || 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 + +namespace :db do + namespace :mysql do + desc "Build the MySQL test databases" + task :build do + config = ARTest.config["connections"]["mysql2"] + %x( mysql --user=#{config["arunit"]["username"]} --password=#{config["arunit"]["password"]} -e "create DATABASE #{config["arunit"]["database"]} DEFAULT CHARACTER SET utf8mb4" ) + %x( mysql --user=#{config["arunit2"]["username"]} --password=#{config["arunit2"]["password"]} -e "create DATABASE #{config["arunit2"]["database"]} DEFAULT CHARACTER SET utf8mb4" ) + end + + desc "Drop the MySQL test databases" + task :drop do + config = ARTest.config["connections"]["mysql2"] + %x( mysqladmin --user=#{config["arunit"]["username"]} --password=#{config["arunit"]["password"]} -f drop #{config["arunit"]["database"]} ) + %x( mysqladmin --user=#{config["arunit2"]["username"]} --password=#{config["arunit2"]["password"]} -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"]} ) + 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("../tools/line_statistics", __dir__) + files = FileList["lib/active_record/**/*.rb"] + CodeTools::LineStatistics.new(files).print_loc +end |