Skip to content

Instantly share code, notes, and snippets.

@mtgrosser
Last active August 29, 2015 14:05
Show Gist options
  • Save mtgrosser/692dde12f4822dc1db95 to your computer and use it in GitHub Desktop.
Save mtgrosser/692dde12f4822dc1db95 to your computer and use it in GitHub Desktop.
Turn style reporter for minitest-reporters gem

Turn-style reporter for minitest-reporters

# Gemfile
gem 'minitest-reporters-turn_reporter', git: 'git://gist.github.com/692dde12f4822dc1db95.git', require: 'turn_reporter'
# test_helper.rb
require 'minitest/reporters'
require 'minitest-reporters-turn_reporter'
Minitest::Reporters.use! Minitest::Reporters::TurnReporter.new
Gem::Specification.new do |s|
s.name = 'minitest-reporters-turn_reporter'
s.version = '1.0.0'
s.platform = Gem::Platform::RUBY
s.author = 'Matthias Grosser'
s.email = 'mtgrosser@gmx.net'
s.summary = 'Turn style reporter for minitest-reporters gem'
s.description = 'Provides summary of failed and skipped tests for large test suites'
s.files = ['minitest-reporters-turn_reporter.rb']
s.require_path = '.'
s.add_dependency 'minitest-reporters', '~> 1.0'
end
require 'set'
require 'ansi/code'
module Minitest
module Reporters
class TurnReporter < BaseReporter
include ANSI::Code
include RelativePosition
INDENT = ' '
RESULT = { pass: ANSI::Code.green { ' PASS' },
error: ANSI::Code.yellow { ' ERROR' },
fail: ANSI::Code.red { ' FAIL' },
skip: ANSI::Code.cyan { ' SKIP' } }
def report
super
puts
puts('Finished in %.5fs' % total_time)
print('%d tests, %d assertions, ' % [count, assertions])
color = failures.zero? && errors.zero? ? :green : :red
print(send(color) { '%d failures, %d errors, ' } % [failures, errors])
print(yellow { '%d skips' } % skips)
puts
print_suites
end
def record(test)
test_result = result(test)
print INDENT + RESULT[test_result] + ' '
print_time test.time
print human(test.name)
puts
if !test.skipped? && test.failure
print_info(test.failure)
puts
end
suites[test_result] << test.class.name
super
end
protected
def human(name)
name.to_s.gsub('_', ' ').sub(/\Atest (: )?/, '')
end
def print_time(t)
h, t = t.divmod(3600)
m, t = t.divmod(60)
s = t.truncate
f = ((t - s) * 100).to_i
print "(#{'%02d:%02d.%02d' % [m,s,f]}) "
end
def before_suite(suite)
puts
puts suite
end
def suites
@suites ||= { pass: Set.new, error: Set.new, fail: Set.new, skip: Set.new }
end
def print_suites
suites[:pass].subtract(suites[:error] + suites[:fail] + suites[:skip])
if number_of_suites > 1 && (suites[:skip].any? || suites[:fail].any? || suites[:error].any?)
puts "\nResults:\n"
[:skip, :fail, :error].each do |result|
suites[result].each { |suite| puts "#{INDENT}#{RESULT[result]} #{suite}" }
end
puts
end
end
def number_of_suites
suites.values.map(&:size).sum
end
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment