aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoryuuji.yaginuma <yuuji.yaginuma@gmail.com>2017-02-08 18:24:50 +0900
committeryuuji.yaginuma <yuuji.yaginuma@gmail.com>2017-02-18 09:49:57 +0900
commitf38a660a60ecc5e2f0e0f91e07a18344598cff5e (patch)
treea4f5d33200bef6c1f5c6e964aed054c02c19381a
parent25c6f4c947450c75c5a43ded19d7b6ca8b7c95b6 (diff)
downloadrails-f38a660a60ecc5e2f0e0f91e07a18344598cff5e.tar.gz
rails-f38a660a60ecc5e2f0e0f91e07a18344598cff5e.tar.bz2
rails-f38a660a60ecc5e2f0e0f91e07a18344598cff5e.zip
Prevent multiple values being set to `run_via`
When executing the test via rake, since `rake` is set for `run_via`, `ruby` should not be set. Related 2cb6c27310452da11b93d729c3b760ce988106e1
-rw-r--r--activesupport/lib/active_support/testing/autorun.rb4
-rw-r--r--railties/lib/rails/commands/test/test_command.rb2
-rw-r--r--railties/lib/rails/generators/rails/plugin/templates/bin/test.tt2
-rw-r--r--railties/lib/rails/test_unit/minitest_plugin.rb34
-rw-r--r--tools/test.rb2
5 files changed, 34 insertions, 10 deletions
diff --git a/activesupport/lib/active_support/testing/autorun.rb b/activesupport/lib/active_support/testing/autorun.rb
index 3108e3e549..a18788f38e 100644
--- a/activesupport/lib/active_support/testing/autorun.rb
+++ b/activesupport/lib/active_support/testing/autorun.rb
@@ -2,8 +2,8 @@ gem "minitest"
require "minitest"
-if Minitest.respond_to?(:run_via) && !Minitest.run_via[:rails]
- Minitest.run_via[:ruby] = true
+if Minitest.respond_to?(:run_via) && !Minitest.run_via.set?
+ Minitest.run_via = :ruby
end
Minitest.autorun
diff --git a/railties/lib/rails/commands/test/test_command.rb b/railties/lib/rails/commands/test/test_command.rb
index 7bf8f61137..629fb5b425 100644
--- a/railties/lib/rails/commands/test/test_command.rb
+++ b/railties/lib/rails/commands/test/test_command.rb
@@ -11,7 +11,7 @@ module Rails
def perform(*)
$LOAD_PATH << Rails::Command.root.join("test")
- Minitest.run_via[:rails] = true
+ Minitest.run_via = :rails
require "active_support/testing/autorun"
end
diff --git a/railties/lib/rails/generators/rails/plugin/templates/bin/test.tt b/railties/lib/rails/generators/rails/plugin/templates/bin/test.tt
index c0fbb84a93..35a9bf8c8b 100644
--- a/railties/lib/rails/generators/rails/plugin/templates/bin/test.tt
+++ b/railties/lib/rails/generators/rails/plugin/templates/bin/test.tt
@@ -5,6 +5,6 @@ require 'rails/test_unit/minitest_plugin'
Rails::TestUnitReporter.executable = 'bin/test'
-Minitest.run_via[:rails] = true
+Minitest.run_via = :rails
require "active_support/testing/autorun"
diff --git a/railties/lib/rails/test_unit/minitest_plugin.rb b/railties/lib/rails/test_unit/minitest_plugin.rb
index 4df3e7f0f2..7d3da6b529 100644
--- a/railties/lib/rails/test_unit/minitest_plugin.rb
+++ b/railties/lib/rails/test_unit/minitest_plugin.rb
@@ -59,18 +59,18 @@ module Minitest
options[:color] = true
options[:output_inline] = true
- options[:patterns] = opts.order! unless run_via[:rake]
+ options[:patterns] = opts.order! unless run_via.rake?
end
def self.rake_run(patterns) # :nodoc:
- run_via[:rake] = true
+ self.run_via = :rake unless run_via.set?
::Rails::TestRequirer.require_files(patterns)
autorun
end
module RunRespectingRakeTestopts
def run(args = [])
- if run_via[:rake]
+ if run_via.rake?
args = Shellwords.split(ENV["TESTOPTS"] || "")
end
@@ -87,7 +87,7 @@ module Minitest
# If run via `ruby` we've been passed the files to run directly, or if run
# via `rake` then they have already been eagerly required.
- unless run_via[:ruby] || run_via[:rake]
+ unless run_via.ruby? || run_via.rake?
::Rails::TestRequirer.require_files(options[:patterns])
end
@@ -102,7 +102,31 @@ module Minitest
reporter << ::Rails::TestUnitReporter.new(options[:io], options)
end
- mattr_accessor(:run_via) { Hash.new }
+ def self.run_via=(runner)
+ if run_via.set?
+ raise ArgumentError, "run_via already assigned"
+ else
+ run_via.runner = runner
+ end
+ end
+
+ class RunVia
+ attr_accessor :runner
+ alias set? runner
+
+ # Backwardscompatibility with Rails 5.0 generated plugin test scripts.
+ alias []= runner=
+
+ def ruby?
+ runner == :ruby
+ end
+
+ def rake?
+ runner == :rake
+ end
+ end
+
+ mattr_reader(:run_via) { RunVia.new }
end
# Put Rails as the first plugin minitest initializes so other plugins
diff --git a/tools/test.rb b/tools/test.rb
index ce546b382d..71349a5974 100644
--- a/tools/test.rb
+++ b/tools/test.rb
@@ -16,5 +16,5 @@ end
ActiveSupport::TestCase.extend Rails::LineFiltering
Rails::TestUnitReporter.executable = "bin/test"
-Minitest.run_via[:rails] = true
+Minitest.run_via = :rails
require "active_support/testing/autorun"