Class: RSpec::Core::Reporter

Inherits:
Object
  • Object
show all
Defined in:
lib/rspec/core/reporter.rb

Constant Summary collapse

NOTIFICATIONS =
%W[start message example_group_started example_group_finished example_started
example_passed example_failed example_pending start_dump dump_pending
dump_failures dump_summary seed close stop deprecation deprecation_summary].map { |n| n.to_sym }

Instance Method Summary collapse

Constructor Details

#initialize(*formatters) ⇒ Reporter

Returns a new instance of Reporter.



7
8
9
10
11
12
13
14
# File 'lib/rspec/core/reporter.rb', line 7

def initialize(*formatters)
  @listeners = Hash.new { |h,k| h[k] = [] }
  formatters.each do |formatter|
    register_listener(formatter, *NOTIFICATIONS)
  end
  @example_count = @failure_count = @pending_count = 0
  @duration = @start = nil
end

Instance Method Details

#deprecation(message) ⇒ Object



100
101
102
# File 'lib/rspec/core/reporter.rb', line 100

def deprecation(message)
  notify :deprecation, message
end

#example_failed(example) ⇒ Object



90
91
92
93
# File 'lib/rspec/core/reporter.rb', line 90

def example_failed(example)
  @failure_count += 1
  notify :example_failed, example
end

#example_group_finished(group) ⇒ Object



77
78
79
# File 'lib/rspec/core/reporter.rb', line 77

def example_group_finished(group)
  notify :example_group_finished, group unless group.descendant_filtered_examples.empty?
end

#example_group_started(group) ⇒ Object



73
74
75
# File 'lib/rspec/core/reporter.rb', line 73

def example_group_started(group)
  notify :example_group_started, group unless group.descendant_filtered_examples.empty?
end

#example_passed(example) ⇒ Object



86
87
88
# File 'lib/rspec/core/reporter.rb', line 86

def example_passed(example)
  notify :example_passed, example
end

#example_pending(example) ⇒ Object



95
96
97
98
# File 'lib/rspec/core/reporter.rb', line 95

def example_pending(example)
  @pending_count += 1
  notify :example_pending, example
end

#example_started(example) ⇒ Object



81
82
83
84
# File 'lib/rspec/core/reporter.rb', line 81

def example_started(example)
  @example_count += 1
  notify :example_started, example
end

#finish(seed) ⇒ Object Also known as: abort



104
105
106
107
108
109
110
111
112
113
114
115
116
# File 'lib/rspec/core/reporter.rb', line 104

def finish(seed)
  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, seed if seed
  ensure
    notify :close
  end
end

#message(message) ⇒ Object



69
70
71
# File 'lib/rspec/core/reporter.rb', line 69

def message(message)
  notify :message, message
end

#notify(event, *args, &block) ⇒ Object



125
126
127
128
129
# File 'lib/rspec/core/reporter.rb', line 125

def notify(event, *args, &block)
  registered_listeners(event).each do |formatter|
    formatter.send(event, *args, &block)
  end
end

#register_listener(listener, *notifications) ⇒ Object

Registers a listener to a list of notifications. The reporter will send notification of events to all registered listeners

Parameters:

  • An (Object)

    obect that wishes to be notified of reporter events

  • Array (Array)

    of symbols represents the events a listener wishes to subscribe too



22
23
24
25
26
27
# File 'lib/rspec/core/reporter.rb', line 22

def register_listener(listener, *notifications)
  notifications.each do |notification|
    @listeners[notification.to_sym] << listener if listener.respond_to?(notification)
  end
  true
end

#registered_listeners(notification) ⇒ Object



29
30
31
# File 'lib/rspec/core/reporter.rb', line 29

def registered_listeners(notification)
  @listeners[notification]
end

#report(count, &block) ⇒ Object #report(count, seed, &block) ⇒ Object

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.

Warning:

The seed argument is an internal API and is not guaranteed to be supported in the future.

Examples:


reporter.report(group.examples.size) do |r|
  example_groups.map {|g| g.run(r) }
end

Parameters:

  • count (Integer)

    the number of examples being run

  • seed (Integer) (defaults to: nil)

    the seed used to randomize the spec run

  • block (Block)

    yields itself for further reporting.



55
56
57
58
59
60
61
62
# File 'lib/rspec/core/reporter.rb', line 55

def report(expected_example_count, seed=nil)
  start(expected_example_count)
  begin
    yield self
  ensure
    finish(seed)
  end
end

#start(expected_example_count) ⇒ Object



64
65
66
67
# File 'lib/rspec/core/reporter.rb', line 64

def start(expected_example_count)
  @start = RSpec::Core::Time.now
  notify :start, expected_example_count
end

#stopObject



120
121
122
123
# File 'lib/rspec/core/reporter.rb', line 120

def stop
  @duration = (RSpec::Core::Time.now - @start).to_f if @start
  notify :stop
end