aboutsummaryrefslogtreecommitdiffstats
path: root/railties/Rakefile
diff options
context:
space:
mode:
Diffstat (limited to 'railties/Rakefile')
-rw-r--r--railties/Rakefile84
1 files changed, 84 insertions, 0 deletions
diff --git a/railties/Rakefile b/railties/Rakefile
new file mode 100644
index 0000000000..445f6217b3
--- /dev/null
+++ b/railties/Rakefile
@@ -0,0 +1,84 @@
+# frozen_string_literal: true
+
+require "rake/testtask"
+
+task default: :test
+
+task :package
+
+desc "Run all unit tests"
+task test: "test:isolated"
+
+namespace :test do
+ task :isolated do
+ dash_i = [
+ "test",
+ "lib",
+ "../activesupport/lib",
+ "../actionpack/lib",
+ "../actionview/lib",
+ "../activemodel/lib"
+ ].map { |dir| File.expand_path(dir, __dir__) }
+
+ dash_i.reverse_each do |x|
+ $:.unshift(x) unless $:.include?(x)
+ end
+ $-w = true
+
+ require "bundler/setup" unless defined?(Bundler)
+ require "active_support"
+
+ # Only generate the template app once.
+ require_relative "test/isolation/abstract_unit"
+
+ failing_files = []
+
+ dirs = (ENV["TEST_DIR"] || ENV["TEST_DIRS"] || "**").split(",")
+ test_options = ENV["TESTOPTS"].to_s.split(/[\s]+/)
+
+ test_files = dirs.map { |dir| "test/#{dir}/*_test.rb" }
+ Dir[*test_files].each do |file|
+ next true if file.start_with?("test/fixtures/")
+
+ fake_command = Shellwords.join([
+ FileUtils::RUBY,
+ "-w",
+ *dash_i.map { |dir| "-I#{Pathname.new(dir).relative_path_from(Pathname.pwd)}" },
+ file,
+ ])
+ puts fake_command
+
+ # We could run these in parallel, but pretty much all of the
+ # railties tests already run in parallel, so ¯\_(⊙︿⊙)_/¯
+ Process.waitpid fork {
+ ARGV.clear.concat test_options
+ Rake.application = nil
+
+ load file
+ }
+
+ unless $?.success?
+ failing_files << file
+ end
+ end
+
+ unless failing_files.empty?
+ puts
+ puts "Failed in:"
+ failing_files.each do |file|
+ puts " #{file}"
+ end
+ puts
+
+ raise "Failure in isolated test runner"
+ end
+ end
+end
+
+Rake::TestTask.new("test:regular") do |t|
+ t.libs << "test" << "#{__dir__}/../activesupport/lib"
+ t.pattern = "test/**/*_test.rb"
+ t.warning = true
+ t.verbose = true
+ t.ruby_opts = ["--dev"] if defined?(JRUBY_VERSION)
+end