Skip to content

Commit a453de1

Browse files
committed
Merge pull request #1109 from bf4/fix_minitest_after_run
Make better use of Minitest's lifecycle
2 parents 736591c + b18671f commit a453de1

File tree

3 files changed

+45
-34
lines changed

3 files changed

+45
-34
lines changed

test/capture_warnings.rb

Lines changed: 28 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -10,49 +10,56 @@ def initialize(fail_on_warnings = true)
1010
@output_dir = File.join(app_root, 'tmp')
1111
FileUtils.mkdir_p(output_dir)
1212
@bundle_dir = File.join(app_root, 'bundle')
13+
@output = STDOUT
1314
end
1415

15-
def before_tests
16-
$stderr.reopen(stderr_file.path)
16+
def execute!
1717
$VERBOSE = true
18-
at_exit { $stderr.reopen(STDERR) }
19-
end
20-
21-
def after_tests
22-
stderr_file.rewind
23-
lines = stderr_file.read.split("\n")
24-
stderr_file.close!
18+
$stderr.reopen(stderr_file.path)
2519

26-
$stderr.reopen(STDERR)
20+
Minitest.after_run do
21+
stderr_file.rewind
22+
lines = stderr_file.read.split("\n")
23+
stderr_file.close!
24+
$stderr.reopen(STDERR)
25+
after_tests(lines)
26+
end
27+
end
2728

29+
# rubocop:disable Metrics/AbcSize
30+
def after_tests(lines)
2831
app_warnings, other_warnings = lines.partition { |line|
2932
line.include?(app_root) && !line.include?(bundle_dir)
3033
}
3134

32-
if app_warnings.any?
33-
puts <<-WARNINGS
34-
#{'-' * 30} app warnings: #{'-' * 30}
35-
36-
#{app_warnings.join("\n")}
35+
header = "#{'-' * 22} app warnings: #{'-' * 22}"
36+
output.puts
37+
output.puts header
3738

38-
#{'-' * 75}
39-
WARNINGS
39+
if app_warnings.any?
40+
output.puts app_warnings.join("\n")
41+
else
42+
output.puts 'None. Yay!'
4043
end
4144

4245
if other_warnings.any?
4346
File.write(File.join(output_dir, 'warnings.txt'), other_warnings.join("\n") << "\n")
44-
puts
45-
puts 'Non-app warnings written to tmp/warnings.txt'
46-
puts
47+
output.puts
48+
output.puts 'Non-app warnings written to tmp/warnings.txt'
49+
output.puts
4750
end
4851

52+
output.puts
53+
output.puts '-' * header.size
54+
4955
# fail the build...
5056
if fail_on_warnings && app_warnings.any?
5157
abort "Failing build due to app warnings: #{app_warnings.inspect}"
5258
end
5359
end
60+
# rubocop:enable Metrics/AbcSize
5461

5562
private
5663

57-
attr_reader :stderr_file, :app_root, :output_dir, :bundle_dir, :fail_on_warnings
64+
attr_reader :stderr_file, :app_root, :output_dir, :bundle_dir, :fail_on_warnings, :output
5865
end

test/support/stream_capture.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
begin
44
require 'active_support/testing/stream'
55
rescue LoadError
6+
require 'tempfile'
67
module ActiveSupport
78
module Testing
89
module Stream #:nodoc:

test/test_helper.rb

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -20,24 +20,27 @@
2020
require 'fileutils'
2121
FileUtils.mkdir_p(File.expand_path('../../tmp/cache', __FILE__))
2222

23+
gem 'minitest'
2324
require 'minitest/autorun'
24-
# Ensure backward compatibility with Minitest 4
25-
Minitest::Test = MiniTest::Unit::TestCase unless defined?(Minitest::Test)
26-
27-
require 'capture_warnings'
28-
@capture_warnings = CaptureWarnings.new(fail_build = true)
29-
@capture_warnings.before_tests
30-
if Minitest.respond_to?(:after_run)
31-
Minitest.after_run do
32-
@capture_warnings.after_tests
33-
end
25+
if defined?(Minitest::Test)
26+
# Minitest 5
27+
# https://github.com/seattlerb/minitest/blob/e21fdda9d/lib/minitest/autorun.rb
28+
# https://github.com/seattlerb/minitest/blob/e21fdda9d/lib/minitest.rb#L45-L59
3429
else
35-
at_exit do
36-
STDOUT.puts 'Minitest.after_run not available.'
37-
@capture_warnings.after_tests
30+
# Minitest 4
31+
# https://github.com/seattlerb/minitest/blob/644a52fd0/lib/minitest/autorun.rb
32+
# https://github.com/seattlerb/minitest/blob/644a52fd0/lib/minitest/unit.rb#L768-L787
33+
# Ensure backward compatibility with Minitest 4
34+
Minitest = MiniTest unless defined?(Minitest)
35+
Minitest::Test = MiniTest::Unit::TestCase
36+
def Minitest.after_run(&block)
37+
MiniTest::Unit.after_tests(&block)
3838
end
3939
end
4040

41+
require 'capture_warnings'
42+
CaptureWarnings.new(_fail_build = true).execute!
43+
4144
require 'active_model_serializers'
4245

4346
require 'support/stream_capture'

0 commit comments

Comments
 (0)