aboutsummaryrefslogtreecommitdiffstats
path: root/railties/lib/rails/test_unit
diff options
context:
space:
mode:
Diffstat (limited to 'railties/lib/rails/test_unit')
-rw-r--r--railties/lib/rails/test_unit/line_filtering.rb4
-rw-r--r--railties/lib/rails/test_unit/minitest_plugin.rb46
-rw-r--r--railties/lib/rails/test_unit/railtie.rb8
-rw-r--r--railties/lib/rails/test_unit/reporter.rb14
-rw-r--r--railties/lib/rails/test_unit/test_requirer.rb8
-rw-r--r--railties/lib/rails/test_unit/testing.rake26
6 files changed, 58 insertions, 48 deletions
diff --git a/railties/lib/rails/test_unit/line_filtering.rb b/railties/lib/rails/test_unit/line_filtering.rb
index dd9732bb12..32ba744701 100644
--- a/railties/lib/rails/test_unit/line_filtering.rb
+++ b/railties/lib/rails/test_unit/line_filtering.rb
@@ -1,4 +1,4 @@
-require 'method_source'
+require "method_source"
module Rails
module LineFiltering # :nodoc:
@@ -39,7 +39,7 @@ module Rails
def derive_line_filters(patterns)
patterns.flat_map do |file_and_line|
- file, *lines = file_and_line.split(':')
+ file, *lines = file_and_line.split(":")
if lines.empty?
Filter.new(@runnable, file, nil) if file
diff --git a/railties/lib/rails/test_unit/minitest_plugin.rb b/railties/lib/rails/test_unit/minitest_plugin.rb
index 29a3d991b8..6e196a32ab 100644
--- a/railties/lib/rails/test_unit/minitest_plugin.rb
+++ b/railties/lib/rails/test_unit/minitest_plugin.rb
@@ -1,6 +1,7 @@
require "active_support/core_ext/module/attribute_accessors"
require "rails/test_unit/reporter"
require "rails/test_unit/test_requirer"
+require "shellwords"
module Minitest
class SuppressedSummaryReporter < SummaryReporter
@@ -42,7 +43,7 @@ module Minitest
end
opts.on("-f", "--fail-fast",
- "Abort test run on first failure") do
+ "Abort test run on first failure or error") do
options[:fail_fast] = true
end
@@ -53,26 +54,36 @@ module Minitest
options[:color] = true
options[:output_inline] = true
- options[:patterns] = opts.order!
+ options[:patterns] = defined?(@rake_patterns) ? @rake_patterns : opts.order!
end
# Running several Rake tasks in a single command would trip up the runner,
# as the patterns would also contain the other Rake tasks.
def self.rake_run(patterns) # :nodoc:
@rake_patterns = patterns
- passed = run
- exit passed unless passed
- passed
+ autorun
end
- def self.plugin_rails_init(options)
- self.run_with_rails_extension = true
+ module RunRespectingRakeTestopts
+ def run(args = [])
+ if defined?(@rake_patterns)
+ args = Shellwords.split(ENV["TESTOPTS"] || "")
+ end
+
+ super
+ end
+ end
+
+ singleton_class.prepend RunRespectingRakeTestopts
+ # Owes great inspiration to test runner trailblazers like RSpec,
+ # minitest-reporters, maxitest and others.
+ def self.plugin_rails_init(options)
ENV["RAILS_ENV"] = options[:environment] || "test"
- unless run_with_autorun
- patterns = defined?(@rake_patterns) ? @rake_patterns : options[:patterns]
- ::Rails::TestRequirer.require_files(patterns)
+ # If run via `ruby` we've been passed the files to run directly.
+ unless run_via[:ruby]
+ ::Rails::TestRequirer.require_files(options[:patterns])
end
unless options[:full_backtrace] || ENV["BACKTRACE"]
@@ -81,14 +92,17 @@ module Minitest
end
# Replace progress reporter for colors.
- self.reporter.reporters.delete_if { |reporter| reporter.kind_of?(SummaryReporter) || reporter.kind_of?(ProgressReporter) }
- self.reporter << SuppressedSummaryReporter.new(options[:io], options)
- self.reporter << ::Rails::TestUnitReporter.new(options[:io], options)
+ reporter.reporters.delete_if { |reporter| reporter.kind_of?(SummaryReporter) || reporter.kind_of?(ProgressReporter) }
+ reporter << SuppressedSummaryReporter.new(options[:io], options)
+ reporter << ::Rails::TestUnitReporter.new(options[:io], options)
end
- mattr_accessor(:run_with_autorun) { false }
- mattr_accessor(:run_with_rails_extension) { false }
+ mattr_accessor(:run_via) { Hash.new }
end
+# Put Rails as the first plugin minitest initializes so other plugins
+# can override or replace our default reporter setup.
+# Since minitest only loads plugins if its extensions are empty we have
+# to call `load_plugins` first.
Minitest.load_plugins
-Minitest.extensions << 'rails'
+Minitest.extensions.unshift "rails"
diff --git a/railties/lib/rails/test_unit/railtie.rb b/railties/lib/rails/test_unit/railtie.rb
index 511cee33bd..746120e6a1 100644
--- a/railties/lib/rails/test_unit/railtie.rb
+++ b/railties/lib/rails/test_unit/railtie.rb
@@ -1,7 +1,7 @@
-require 'rails/test_unit/line_filtering'
+require "rails/test_unit/line_filtering"
if defined?(Rake.application) && Rake.application.top_level_tasks.grep(/^(default$|test(:|$))/).any?
- ENV['RAILS_ENV'] ||= 'test'
+ ENV["RAILS_ENV"] ||= "test"
end
module Rails
@@ -14,7 +14,9 @@ module Rails
end
initializer "test_unit.line_filtering" do
- ActiveSupport::TestCase.extend Rails::LineFiltering
+ ActiveSupport.on_load(:active_support_test_case) {
+ ActiveSupport::TestCase.extend Rails::LineFiltering
+ }
end
rake_tasks do
diff --git a/railties/lib/rails/test_unit/reporter.rb b/railties/lib/rails/test_unit/reporter.rb
index ce99dbd585..fe11664d5e 100644
--- a/railties/lib/rails/test_unit/reporter.rb
+++ b/railties/lib/rails/test_unit/reporter.rb
@@ -18,13 +18,13 @@ module Rails
if output_inline? && result.failure && (!result.skipped? || options[:verbose])
io.puts
io.puts
- io.puts format_failures(result).map { |line| color_output(line, by: result) }
+ io.puts color_output(result, by: result)
io.puts
io.puts format_rerun_snippet(result)
io.puts
end
- if fail_fast? && result.failure && !result.error? && !result.skipped?
+ if fail_fast? && result.failure && !result.skipped?
raise Interrupt
end
end
@@ -50,7 +50,7 @@ module Rails
end
def relative_path_for(file)
- file.sub(/^#{app_root}\/?/, '')
+ file.sub(/^#{app_root}\/?/, "")
end
private
@@ -66,15 +66,9 @@ module Rails
"%s#%s = %.2f s = %s" % [result.class, result.name, result.time, result.result_code]
end
- def format_failures(result)
- result.failures.map do |failure|
- "#{failure.result_label}:\n#{result.location}:\n#{failure.message}\n"
- end
- end
-
def format_rerun_snippet(result)
location, line = result.method(result.name).source_location
- "#{self.executable} #{relative_path_for(location)}:#{line}"
+ "#{executable} #{relative_path_for(location)}:#{line}"
end
def app_root
diff --git a/railties/lib/rails/test_unit/test_requirer.rb b/railties/lib/rails/test_unit/test_requirer.rb
index 8b211ce130..fe35934abc 100644
--- a/railties/lib/rails/test_unit/test_requirer.rb
+++ b/railties/lib/rails/test_unit/test_requirer.rb
@@ -1,5 +1,5 @@
-require 'active_support/core_ext/object/blank'
-require 'rake/file_list'
+require "active_support/core_ext/object/blank"
+require "rake/file_list"
module Rails
class TestRequirer # :nodoc:
@@ -7,7 +7,7 @@ module Rails
def require_files(patterns)
patterns = expand_patterns(patterns)
- Rake::FileList[patterns.compact.presence || 'test/**/*_test.rb'].to_a.each do |file|
+ Rake::FileList[patterns.compact.presence || "test/**/*_test.rb"].to_a.each do |file|
require File.expand_path(file)
end
end
@@ -15,7 +15,7 @@ module Rails
private
def expand_patterns(patterns)
patterns.map do |arg|
- arg = arg.gsub(/(:\d+)+?$/, '')
+ arg = arg.gsub(/(:\d+)+?$/, "")
if Dir.exist?(arg)
"#{arg}/**/*_test.rb"
else
diff --git a/railties/lib/rails/test_unit/testing.rake b/railties/lib/rails/test_unit/testing.rake
index 41921e43f3..4c157c1262 100644
--- a/railties/lib/rails/test_unit/testing.rake
+++ b/railties/lib/rails/test_unit/testing.rake
@@ -1,17 +1,17 @@
-gem 'minitest'
-require 'minitest'
-require 'rails/test_unit/minitest_plugin'
+gem "minitest"
+require "minitest"
+require "rails/test_unit/minitest_plugin"
task default: :test
desc "Runs all tests in test folder"
task :test do
$: << "test"
- pattern = if ENV.key?('TEST')
- ENV['TEST']
- else
- "test"
- end
+ pattern = if ENV.key?("TEST")
+ ENV["TEST"]
+ else
+ "test"
+ end
Minitest.rake_run([pattern])
end
@@ -21,10 +21,10 @@ namespace :test do
# If used with Active Record, this task runs before the database schema is synchronized.
end
- task :run => %w[test]
+ task run: %w[test]
desc "Run tests quickly, but also reset db"
- task :db => %w[db:test:prepare test]
+ task db: %w[db:test:prepare test]
["models", "helpers", "controllers", "mailers", "integration", "jobs"].each do |name|
task name => "test:prepare" do
@@ -33,17 +33,17 @@ namespace :test do
end
end
- task :generators => "test:prepare" do
+ task generators: "test:prepare" do
$: << "test"
Minitest.rake_run(["test/lib/generators"])
end
- task :units => "test:prepare" do
+ task units: "test:prepare" do
$: << "test"
Minitest.rake_run(["test/models", "test/helpers", "test/unit"])
end
- task :functionals => "test:prepare" do
+ task functionals: "test:prepare" do
$: << "test"
Minitest.rake_run(["test/controllers", "test/mailers", "test/functional"])
end