Skip to content

Commit

Permalink
Make better use of Minitest's lifecycle
Browse files Browse the repository at this point in the history
  • Loading branch information
bf4 committed Aug 27, 2015
1 parent 39d6dab commit 01490c9
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 31 deletions.
44 changes: 27 additions & 17 deletions test/capture_warnings.rb
Original file line number Diff line number Diff line change
@@ -1,36 +1,43 @@
# https://raw.githubusercontent.com/metric_fu/metric_fu/master/spec/capture_warnings.rb
require "tempfile"
require "fileutils"
require 'tempfile'
require 'fileutils'

class CaptureWarnings

def initialize(fail_on_warnings = true)
@fail_on_warnings = fail_on_warnings
@stderr_file = Tempfile.new("app.stderr")
@app_root ||= Dir.pwd
@output_dir = File.join(app_root, "tmp")
FileUtils.mkdir_p(output_dir)
@bundle_dir = File.join(app_root, "bundle")
@output = STDOUT
end

def before_tests
$stderr.reopen(stderr_file.path)
def execute!
$VERBOSE = true
at_exit { $stderr.reopen(STDERR) }
end

def after_tests
stderr_file.rewind
lines = stderr_file.read.split("\n")
stderr_file.close!
$stderr.reopen(stderr_file.path)

$stderr.reopen(STDERR)
Minitest.after_run do
stderr_file.rewind
lines = stderr_file.read.split("\n")
stderr_file.close!
$stderr.reopen(STDERR)
after_tests(lines)
end
end

def after_tests(lines)
app_warnings, other_warnings = lines.partition { |line|
line.include?(app_root) && !line.include?(bundle_dir)
}

header = "#{'*' * 20} Warnings Results #{'*' * 20}"
output.puts
output.puts header

if app_warnings.any?
puts <<-WARNINGS
output.puts <<-WARNINGS
#{'-' * 30} app warnings: #{'-' * 30}
#{app_warnings.join("\n")}
Expand All @@ -41,17 +48,20 @@ def after_tests

if other_warnings.any?
File.write(File.join(output_dir, "warnings.txt"), other_warnings.join("\n") << "\n")
puts
puts "Non-app warnings written to tmp/warnings.txt"
puts
output.puts
output.puts "Non-app warnings written to tmp/warnings.txt"
output.puts
end

output.puts
output.puts '*' * header.size

# fail the build...
if fail_on_warnings && app_warnings.any?
abort "Failing build due to app warnings: #{app_warnings.inspect}"
end
end

private
attr_reader :stderr_file, :app_root, :output_dir, :bundle_dir, :fail_on_warnings
attr_reader :stderr_file, :app_root, :output_dir, :bundle_dir, :fail_on_warnings, :output
end
1 change: 1 addition & 0 deletions test/support/stream_capture.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
begin
require "active_support/testing/stream"
rescue LoadError
require 'tempfile'
module ActiveSupport
module Testing
module Stream #:nodoc:
Expand Down
29 changes: 15 additions & 14 deletions test/test_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,25 +9,26 @@
require 'fileutils'
FileUtils.mkdir_p(File.expand_path('../../tmp/cache', __FILE__))

gem 'minitest'
require 'minitest/autorun'
# Ensure backward compatibility with Minitest 4
Minitest::Test = MiniTest::Unit::TestCase unless defined?(Minitest::Test)


require 'capture_warnings'
@capture_warnings = CaptureWarnings.new(fail_build = true)
@capture_warnings.before_tests
if Minitest.respond_to?(:after_run)
Minitest.after_run do
@capture_warnings.after_tests
end
if defined?(MiniTest::Test)
# Minitest 5
# https://github.com/seattlerb/minitest/blob/e21fdda9d/lib/minitest/autorun.rb
# https://github.com/seattlerb/minitest/blob/e21fdda9d/lib/minitest.rb#L45-L59
else
at_exit do
STDOUT.puts "Minitest.after_run not available."
@capture_warnings.after_tests
# Minitest 4
# https://github.com/seattlerb/minitest/blob/644a52fd0/lib/minitest/autorun.rb
# https://github.com/seattlerb/minitest/blob/644a52fd0/lib/minitest/unit.rb#L768-L787
# Ensure backward compatibility with Minitest 4
Minitest::Test = MiniTest::Unit::TestCase
def Minitest.after_run(&block)
MiniTest::Unit.after_tests(&block)
end
end

require 'capture_warnings'
CaptureWarnings.new(fail_build = true).execute!

require 'active_model_serializers'

require 'support/stream_capture'
Expand Down

0 comments on commit 01490c9

Please sign in to comment.