Skip to content

Commit 46038e7

Browse files
authored
Merge pull request #723 from ruby/fix/testopts-preserve-existing-value
Preserve `ENV["TESTOPTS"]` when verbose is enabled
2 parents 92193ac + 604a3d9 commit 46038e7

4 files changed

Lines changed: 54 additions & 10 deletions

File tree

lib/rake/file_utils_ext.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ def #{name}(*args, **options, &block)
5353
def verbose(value=nil)
5454
oldvalue = FileUtilsExt.verbose_flag
5555
FileUtilsExt.verbose_flag = value unless value.nil?
56-
ENV["TESTOPTS"] = "-v" if value
56+
5757
if block_given?
5858
begin
5959
yield

lib/rake/testtask.rb

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -108,10 +108,11 @@ def initialize(name=:test)
108108
def define
109109
desc @description
110110
task @name => Array(deps) do
111-
FileUtilsExt.verbose(@verbose) do
111+
effective_verbose = @verbose || FileUtilsExt.verbose_flag == true
112+
FileUtilsExt.verbose(effective_verbose) do
112113
args =
113114
"#{ruby_opts_string} #{run_code} " +
114-
"#{file_list_string} #{option_list}"
115+
"#{file_list_string} #{option_list(verbose: effective_verbose)}"
115116
ruby args do |ok, status|
116117
if !ok && status.respond_to?(:signaled?) && status.signaled?
117118
raise SignalException.new(status.termsig)
@@ -133,13 +134,17 @@ def define
133134
self
134135
end
135136

136-
def option_list # :nodoc:
137-
(ENV["TESTOPTS"] ||
137+
def option_list(verbose: @verbose) # :nodoc:
138+
opts = ENV["TESTOPTS"] ||
138139
ENV["TESTOPT"] ||
139140
ENV["TEST_OPTS"] ||
140141
ENV["TEST_OPT"] ||
141142
@options ||
142-
"")
143+
""
144+
if verbose && !opts.split.include?("-v")
145+
opts = opts.empty? ? "-v" : "#{opts} -v"
146+
end
147+
opts
143148
end
144149

145150
def ruby_opts_string # :nodoc:

test/test_rake_file_utils.rb

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ def teardown
1212
FileUtils::LN_SUPPORTED[0] = true
1313
RakeFileUtils.verbose_flag = Rake::FileUtilsExt::DEFAULT
1414
ENV["RAKE_TEST_SH"] = @rake_test_sh
15-
ENV["TESTOPTS"] = nil
1615

1716
super
1817
end
@@ -107,12 +106,9 @@ def test_safe_ln_fails_on_script_error
107106
def test_verbose
108107
verbose true
109108
assert_equal true, verbose
110-
assert_equal "-v", ENV["TESTOPTS"]
111109

112-
ENV["TESTOPTS"] = nil
113110
verbose false
114111
assert_equal false, verbose
115-
assert_equal nil, ENV["TESTOPTS"]
116112

117113
verbose(true) {
118114
assert_equal true, verbose

test/test_rake_test_task.rb

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,21 @@
55
class TestRakeTestTask < Rake::TestCase # :nodoc:
66
include Rake
77

8+
def setup
9+
super
10+
@_previous_testopts = ENV["TESTOPTS"]
11+
ENV.delete "TESTOPTS"
12+
end
13+
14+
def teardown
15+
if @_previous_testopts.nil?
16+
ENV.delete "TESTOPTS"
17+
else
18+
ENV["TESTOPTS"] = @_previous_testopts
19+
end
20+
super
21+
end
22+
823
def test_initialize
924
tt = Rake::TestTask.new do |t| end
1025
refute_nil tt
@@ -191,6 +206,34 @@ def test_task_order_only_prerequisites
191206
assert_equal [b, c], t.prerequisite_tasks
192207
end
193208

209+
def test_option_list_verbose_without_testopts
210+
tt = Rake::TestTask.new { |t| t.verbose = true }
211+
assert_equal "-v", tt.option_list
212+
end
213+
214+
def test_option_list_verbose_with_testopts
215+
ENV["TESTOPTS"] = "--ci-reporter"
216+
tt = Rake::TestTask.new { |t| t.verbose = true }
217+
assert_equal "--ci-reporter -v", tt.option_list
218+
end
219+
220+
def test_option_list_not_verbose_with_testopts
221+
ENV["TESTOPTS"] = "--ci-reporter"
222+
tt = Rake::TestTask.new { |t| t.verbose = false }
223+
assert_equal "--ci-reporter", tt.option_list
224+
end
225+
226+
def test_option_list_skips_duplicate_v
227+
ENV["TESTOPTS"] = "-v --ci-reporter"
228+
tt = Rake::TestTask.new { |t| t.verbose = true }
229+
assert_equal "-v --ci-reporter", tt.option_list
230+
end
231+
232+
def test_option_list_verbose_keyword_overrides
233+
tt = Rake::TestTask.new { |t| t.verbose = false }
234+
assert_equal "-v", tt.option_list(verbose: true)
235+
end
236+
194237
def test_task_order_only_prerequisites_key
195238
t = task "a" => "b", order_only: ["c"]
196239
b, c = task("b"), task("c")

0 commit comments

Comments
 (0)