-
Notifications
You must be signed in to change notification settings - Fork 197
/
default_reporter.rb
103 lines (83 loc) · 2.76 KB
/
default_reporter.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
require 'ansi'
module MiniTest
module Reporters
# A reporter identical to the standard MiniTest reporter.
#
# Based upon Ryan Davis of Seattle.rb's MiniTest (MIT License).
#
# @see https://github.com/seattlerb/minitest MiniTest
class DefaultReporter < MiniTest::Reporter
def before_suites(suites, type)
puts
puts "# Running #{type}s:"
puts
end
def before_test(suite, test)
print "#{suite}##{method} = " if verbose?
end
def pass(suite, test, test_runner)
after_test('.')
end
def skip(suite, test, test_runner)
after_test('S')
end
def failure(suite, test, test_runner)
after_test('F')
end
def error(suite, test, test_runner)
after_test('E')
end
def after_suites(suites, type)
time = Time.now - runner.start_time
puts
puts
puts "Finished #{type}s in %.6fs, %.4f tests/s, %.4f assertions/s." %
[time, runner.test_count / time, runner.assertion_count / time]
i = 0
runner.report.each do |suite, tests|
tests.each do |test, test_runner|
message = message_for(test_runner)
if message
i += 1
puts "\n%3d) %s" % [i, message]
end
end
end
puts
puts status
end
private
def after_test(result)
time = Time.now - runner.test_start_time
print '%.2f s = ' % time if verbose?
print result
puts if verbose?
end
def location(exception)
last_before_assertion = ''
exception.backtrace.reverse_each do |s|
break if s =~ /in .(assert|refute|flunk|pass|fail|raise|must|wont)/
last_before_assertion = s
end
last_before_assertion.sub(/:in .*$/, '')
end
def message_for(test_runner)
suite = test_runner.suite
test = test_runner.test
e = test_runner.exception
case test_runner.result
when :pass then nil
when :skip then "Skipped:\n#{test}(#{suite}) [#{location(e)}]:\n#{e.message}\n"
when :failure then "Failure:\n#{test}(#{suite}) [#{location(e)}]:\n#{e.message}\n"
when :error
bt = MiniTest::filter_backtrace(test_runner.exception.backtrace).join "\n "
"Error:\n#{test}(#{suite}):\n#{e.class}: #{e.message}\n #{bt}\n"
end
end
def status
'%d tests, %d assertions, %d failures, %d errors, %d skips' %
[runner.test_count, runner.assertion_count, runner.failures, runner.errors, runner.skips]
end
end
end
end