class RSpec::Core::Reporter

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

def abort_with(msg, exit_status)

Other tags:
    Private: -
def abort_with(msg, exit_status)
  message(msg)
  close
  exit!(exit_status)
end

def close

def close
  notify :close, Notifications::NullNotification
end

def close_after

Other tags:
    Private: -
def close_after
  yield
ensure
  close
end

def deprecation(hash)

Other tags:
    Private: -
def deprecation(hash)
  notify :deprecation, Notifications::DeprecationNotification.from_hash(hash)
end

def ensure_listeners_ready

def ensure_listeners_ready
  return if @setup
  @setup_default.call
  @profiler = Profiler.new
  register_listener @profiler, *Profiler::NOTIFICATIONS
  @setup = true
end

def example_failed(example)

Other tags:
    Private: -
def example_failed(example)
  @failed_examples << example
  notify :example_failed, Notifications::ExampleNotification.for(example)
end

def example_finished(example)

Other tags:
    Private: -
def example_finished(example)
  notify :example_finished, Notifications::ExampleNotification.for(example)
end

def example_group_finished(group)

Other tags:
    Private: -
def example_group_finished(group)
  notify :example_group_finished, Notifications::GroupNotification.new(group) unless group.descendant_filtered_examples.empty?
end

def example_group_started(group)

Other tags:
    Private: -
def example_group_started(group)
  notify :example_group_started, Notifications::GroupNotification.new(group) unless group.descendant_filtered_examples.empty?
end

def example_passed(example)

Other tags:
    Private: -
def example_passed(example)
  notify :example_passed, Notifications::ExampleNotification.for(example)
end

def example_pending(example)

Other tags:
    Private: -
def example_pending(example)
  @pending_examples << example
  notify :example_pending, Notifications::ExampleNotification.for(example)
end

def example_started(example)

Other tags:
    Private: -
def example_started(example)
  @examples << example
  notify :example_started, Notifications::ExampleNotification.for(example)
end

def exit_early(exit_code)

Parameters:
  • exit_code (Integer) -- the exit_code to be return by the reporter
def exit_early(exit_code)
  report(0) { exit_code }
end

def fail_fast_limit_met?

Other tags:
    Private: -
def fail_fast_limit_met?
  return false unless (fail_fast = @configuration.fail_fast)
  if fail_fast == true
    @failed_examples.any?
  else
    fail_fast <= @failed_examples.size
  end
end

def finish

Other tags:
    Private: -
def finish
  close_after do
    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
    unless mute_profile_output?
      notify :dump_profile, Notifications::ProfileNotification.new(@duration, @examples,
                                                                   @configuration.profile_examples,
                                                                   @profiler.example_groups)
    end
    notify :dump_summary, Notifications::SummaryNotification.new(@duration, @examples, @failed_examples,
                                                                 @pending_examples, @load_time,
                                                                 @non_example_exception_count)
    notify :seed, Notifications::SeedNotification.new(@configuration.seed, seed_used?)
  end
end

def initialize(configuration)

def initialize(configuration)
  @configuration = configuration
  @listeners = Hash.new { |h, k| h[k] = Set.new }
  @examples = []
  @failed_examples = []
  @pending_examples = []
  @duration = @start = @load_time = nil
  @non_example_exception_count = 0
  @setup_default = lambda {}
  @setup = false
  @profiler = nil
end

def message(message)

Parameters:
  • message (#to_s) -- A message object to send to formatters
def message(message)
  notify :message, Notifications::MessageNotification.new(message)
end

def mute_profile_output?

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? || fail_fast_limit_met?
end

def notify(event, notification)

Other tags:
    Private: -
def notify(event, notification)
  ensure_listeners_ready
  registered_listeners(event).each do |formatter|
    formatter.__send__(event, notification)
  end
end

def notify_non_example_exception(exception, context_description)

Other tags:
    Private: -
def notify_non_example_exception(exception, context_description)
  @configuration.world.non_example_failure = true
  @non_example_exception_count += 1
  example = Example.new(AnonymousExampleGroup, context_description, {})
  presenter = Formatters::ExceptionPresenter.new(exception, example, :indentation => 0)
  message presenter.fully_formatted(nil)
end

def prepare_default(loader, output_stream, deprecation_stream)

Other tags:
    Private: -
def prepare_default(loader, output_stream, deprecation_stream)
  @setup_default = lambda do
    loader.setup_default output_stream, deprecation_stream
  end
end

def publish(event, options={})

Other tags:
    See: RSpec::Core::Notifications::CustomNotification -

Parameters:
  • options (Hash) -- Hash of arguments to provide via `CustomNotification`
  • event (Symbol) -- Name of the custom event to trigger on formatters
def publish(event, options={})
  if RSPEC_NOTIFICATIONS.include? event
    raise "RSpec::Core::Reporter#publish is intended for sending custom " \
          "events not internal RSpec ones, please rename your custom event."
  end
  notify event, Notifications::CustomNotification.for(options)
end

def register_listener(listener, *notifications)

Parameters:
  • notifications (Array) -- Array of symbols represents the events a
  • listener (Object) -- An object that wishes to be notified of reporter
def register_listener(listener, *notifications)
  notifications.each do |notification|
    @listeners[notification.to_sym] << listener
  end
  true
end

def registered_listeners(notification)

Other tags:
    Private: -
def registered_listeners(notification)
  @listeners[notification].to_a
end

def report(expected_example_count)

Other tags:
    Yield: - block yields itself for further reporting.

Parameters:
  • expected_example_count (Integer) -- the number of examples being run

Overloads:
  • report(count, &block)
  • report(count, &block)
def report(expected_example_count)
  start(expected_example_count)
  begin
    yield self
  ensure
    finish
  end
end

def seed_used?

def seed_used?
  @configuration.seed && @configuration.seed_used?
end

def start(expected_example_count, time=RSpec::Core::Time.now)

Other tags:
    Private: -
def start(expected_example_count, time=RSpec::Core::Time.now)
  @start = time
  @load_time = (@start - @configuration.start_time).to_f
  notify :seed, Notifications::SeedNotification.new(@configuration.seed, seed_used?)
  notify :start, Notifications::StartNotification.new(expected_example_count, @load_time)
end

def stop

Other tags:
    Private: -
def stop
  @duration = (RSpec::Core::Time.now - @start).to_f if @start
  notify :stop, Notifications::ExamplesNotification.new(self)
end