This repository was archived by the owner on Nov 30, 2024. It is now read-only.
-
-
Notifications
You must be signed in to change notification settings - Fork 753
Expand file tree
/
Copy pathreporter.rb
More file actions
124 lines (106 loc) · 3.13 KB
/
reporter.rb
File metadata and controls
124 lines (106 loc) · 3.13 KB
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
module RSpec::Core
class Reporter
def initialize(configuration)
@configuration = configuration
@listeners = Hash.new { |h,k| h[k] = Set.new }
@example_count = @failure_count = @pending_count = 0
@duration = @start = nil
end
# @api
# @param [Object] An obect that wishes to be notified of reporter events
# @param [Array] Array of symbols represents the events a listener wishes to subscribe too
#
# Registers a listener to a list of notifications. The reporter will send notification of
# events to all registered listeners
def register_listener(listener, *notifications)
notifications.each do |notification|
@listeners[notification.to_sym] << listener
end
true
end
def registered_listeners(notification)
@listeners[notification].to_a
end
# @api
# @overload report(count, &block)
# @overload report(count, &block)
# @param [Integer] count the number of examples being run
# @param [Block] block yields itself for further reporting.
#
# Initializes the report run and yields itself for further reporting. The
# block is required, so that the reporter can manage cleaning up after the
# run.
#
# @example
#
# reporter.report(group.examples.size) do |r|
# example_groups.map {|g| g.run(r) }
# end
#
def report(expected_example_count)
start(expected_example_count)
begin
yield self
ensure
finish
end
end
def start(expected_example_count)
@start = RSpec::Core::Time.now
notify :start, expected_example_count
end
def message(message)
notify :message, message
end
def example_group_started(group)
notify :example_group_started, group unless group.descendant_filtered_examples.empty?
end
def example_group_finished(group)
notify :example_group_finished, group unless group.descendant_filtered_examples.empty?
end
def example_started(example)
@example_count += 1
notify :example_started, example
end
def example_passed(example)
notify :example_passed, example
end
def example_failed(example)
@failure_count += 1
notify :example_failed, example
end
def example_pending(example)
@pending_count += 1
notify :example_pending, example
end
def deprecation(message)
notify :deprecation, message
end
def finish
begin
stop
notify :start_dump
notify :dump_pending
notify :dump_failures
notify :dump_summary, @duration, @example_count, @failure_count, @pending_count
notify :deprecation_summary
notify :seed, @configuration.seed if seed_used?
ensure
notify :close
end
end
def stop
@duration = (RSpec::Core::Time.now - @start).to_f if @start
notify :stop
end
def notify(event, *args, &block)
registered_listeners(event).each do |formatter|
formatter.__send__(event, *args, &block)
end
end
private
def seed_used?
@configuration.seed && @configuration.seed_used?
end
end
end