module Spec
module Runner
module Formatter
# Formatter base-class, which implements all required methods as no-ops, with the exception
class BaseFormatter
# Formatters are initialized with options and output
# arguments. RSpec's built-in formatters already expect this, and any
# custom formatters should as well.
#
# ==== Parameters
# options::
# A struct containing boolean values for colour, autospec,
# and dry_run
# output::
# Used by RSpec's built-in formatters to determine where to
# write the output. Default is STDOUT, otherwise a
# filename is expected.
#
# === Example
# If you invoke the spec command with:
#
# --format progress:progress_report.txt
#
# ... the value of output will be progress_report.txt. If you
# don't identify an output destination, the default is STDOUT.
def initialize(options, output)
end
# This method is invoked before any examples are run, right after
# they have all been collected. This can be useful for special
# formatters that need to provide progress on feedback (graphical ones)
#
# This method will only be invoked once, and the next one to be invoked
# is #example_group_started
#
# ==== Parameters
# example_count:: the total number of examples to be run
def start(example_count)
end
# This method is invoked at the beginning of the execution of each
# example_group. The next method to be invoked after this is
# #example_started
#
# ==== Parameters
# example_group_proxy:: instance of Spec::Example::ExampleGroupProxy
def example_group_started(example_group_proxy)
end
# Deprecated - use example_group_started instead
def add_example_group(example_group_proxy)
Spec.deprecate("BaseFormatter#add_example_group", "BaseFormatter#example_group_started")
example_group_started(example_group_proxy)
end
# This method is invoked when an +example+ starts. The next method to be
# invoked after this is #example_passed, #example_failed, or
# #example_pending
#
# ==== Parameters
# example_proxy:: instance of Spec::Example::ExampleProxy
def example_started(example_proxy)
end
# This method is invoked when an +example+ passes.
# +example_proxy+ is the same instance of Spec::Example::ExampleProxy
# that was passed to example_started
#
# ==== Parameters
# example_proxy:: instance of Spec::Example::ExampleProxy
def example_passed(example_proxy)
end
# This method is invoked when an +example+ fails, i.e. an exception occurred
# inside it (such as a failed should or other exception).
#
# ==== Parameters
# example_proxy::
# The same instance of Spec::Example::ExampleProxy that was passed
# to example_started
#
# counter:: the sequential number of this failure
#
# failure:: instance of Spec::Runner::Reporter::Failure
def example_failed(example_proxy, counter, failure)
end
# This method is invoked when an example is not yet implemented (i.e. has not
# been provided a block), or when an ExamplePendingError is raised.
# +message+ is the message from the ExamplePendingError, if it exists, or the
# default value of "Not Yet Implemented". +deprecated_pending_location+ is
# deprecated - use example_proxy.location instead
#
# ==== Parameters
# example_proxy:: instance of Spec::Example::ExampleProxy
# message::
# the message passed to the pending message, or an internal
# default
#
def example_pending(example_proxy, message, deprecated_pending_location=nil)
end
# This method is invoked after all of the examples have executed. The next method
# to be invoked after this one is #dump_failure (once for each failed example)
def start_dump
end
# Dumps detailed information about an example failure.
# This method is invoked for each failed example after all examples have run. +counter+ is the sequence number
# of the associated example. +failure+ is a Failure object, which contains detailed
# information about the failure.
#
# ==== Parameters
# counter:: the sequential number of this failure
# failure:: instance of Spec::Runner::Reporter::Failure
def dump_failure(counter, failure)
end
# This method is invoked after the dumping of examples and failures.
#
# ==== Parameters
# duration:: the total time for the entire run
# example_count:: the number of examples run
# failure_count:: the number of examples that failed
# pending_count:: the number of examples that are pending
def dump_summary(duration, example_count, failure_count, pending_count)
end
# This gets invoked after the summary
def dump_pending
end
# This method is invoked at the very end. Allows the formatter to clean up, like closing open streams.
def close
end
end
end
end
end