class RSpec::Core::Reporter

A reporter will send notifications to listeners, usually formatters for the spec suite run.

Attributes

examples[R]

@private

failed_examples[R]

@private

pending_examples[R]

@private

Public Class Methods

new(configuration) click to toggle source
# File lib/rspec/core/reporter.rb, line 6
def initialize(configuration)
  @configuration = configuration
  @listeners = Hash.new { |h,k| h[k] = Set.new }
  @examples = []
  @failed_examples = []
  @pending_examples = []
  @duration = @start = @load_time = nil
end

Public Instance Methods

deprecation(hash) click to toggle source

@private

# File lib/rspec/core/reporter.rb, line 106
def deprecation(hash)
  notify :deprecation, Notifications::DeprecationNotification.from_hash(hash)
end
example_failed(example) click to toggle source

@private

# File lib/rspec/core/reporter.rb, line 94
def example_failed(example)
  @failed_examples << example
  notify :example_failed, Notifications::ExampleNotification.for(example)
end
example_group_finished(group) click to toggle source

@private

# File lib/rspec/core/reporter.rb, line 78
def example_group_finished(group)
  notify :example_group_finished, Notifications::GroupNotification.new(group) unless group.descendant_filtered_examples.empty?
end
example_group_started(group) click to toggle source

@private

# File lib/rspec/core/reporter.rb, line 73
def example_group_started(group)
  notify :example_group_started, Notifications::GroupNotification.new(group) unless group.descendant_filtered_examples.empty?
end
example_passed(example) click to toggle source

@private

# File lib/rspec/core/reporter.rb, line 89
def example_passed(example)
  notify :example_passed, Notifications::ExampleNotification.for(example)
end
example_pending(example) click to toggle source

@private

# File lib/rspec/core/reporter.rb, line 100
def example_pending(example)
  @pending_examples << example
  notify :example_pending, Notifications::ExampleNotification.for(example)
end
example_started(example) click to toggle source

@private

# File lib/rspec/core/reporter.rb, line 83
def example_started(example)
  @examples << example
  notify :example_started, Notifications::ExampleNotification.for(example)
end
finish() click to toggle source

@private

# File lib/rspec/core/reporter.rb, line 111
def finish
  begin
    stop
    notify :start_dump,    Notifications::NullNotification
    notify :dump_pending,  Notifications::ExamplesNotification.new(self)
    notify :dump_failures, Notifications::ExamplesNotification.new(self)
    notify :deprecation_summary, Notifications::NullNotification
    notify :dump_summary, Notifications::SummaryNotification.new(@duration, @examples, @failed_examples, @pending_examples, @load_time)
    unless mute_profile_output?
      notify :dump_profile, Notifications::ProfileNotification.new(@duration, @examples, @configuration.profile_examples)
    end
    notify :seed, Notifications::SeedNotification.new(@configuration.seed, seed_used?)
  ensure
    notify :close, Notifications::NullNotification
  end
end
message(message) click to toggle source

@private

# File lib/rspec/core/reporter.rb, line 68
def message(message)
  notify :message, Notifications::MessageNotification.new(message)
end
notify(event, notification) click to toggle source

@private

# File lib/rspec/core/reporter.rb, line 135
def notify(event, notification)
  registered_listeners(event).each do |formatter|
    formatter.__send__(event, notification)
  end
end
register_listener(listener, *notifications) click to toggle source

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

@param listener [Object] An obect that wishes to be notified of reporter events @param notifications [Array] Array of symbols represents the events a listener wishes to subscribe too

# File lib/rspec/core/reporter.rb, line 23
def register_listener(listener, *notifications)
  notifications.each do |notification|
    @listeners[notification.to_sym] << listener
  end
  true
end
registered_listeners(notification) click to toggle source

@private

# File lib/rspec/core/reporter.rb, line 31
def registered_listeners(notification)
  @listeners[notification].to_a
end
report(expected_example_count) { |self| ... } click to toggle source

@api @overload report(count, &block) @overload report(count, &block) @param expected_example_count [Integer] the number of examples being run @yield [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
# File lib/rspec/core/reporter.rb, line 51
def report(expected_example_count)
  start(expected_example_count)
  begin
    yield self
  ensure
    finish
  end
end
start(expected_example_count, time = RSpec::Core::Time.now) click to toggle source

@private

# File lib/rspec/core/reporter.rb, line 61
def start(expected_example_count, time = RSpec::Core::Time.now)
  @start = time
  @load_time = (@start - @configuration.start_time).to_f
  notify :start, Notifications::StartNotification.new(expected_example_count, @load_time)
end
stop() click to toggle source

@private

# File lib/rspec/core/reporter.rb, line 129
def stop
  @duration = (RSpec::Core::Time.now - @start).to_f if @start
  notify :stop, Notifications::ExamplesNotification.new(self)
end

Private Instance Methods

mute_profile_output?() click to toggle source
# File lib/rspec/core/reporter.rb, line 143
def mute_profile_output?
  # Don't print out profiled info if there are failures and `--fail-fast` is used, it just clutters the output
  !@configuration.profile_examples? || (@configuration.fail_fast? && @failed_examples.size > 0)
end
seed_used?() click to toggle source
# File lib/rspec/core/reporter.rb, line 148
def seed_used?
  @configuration.seed && @configuration.seed_used?
end