class RSpec::Core::Formatters::BisectFormatter
@private
after each example.
opting to communicate only at the start and the end of the run, rather than
method calls, we try to minimize the number of DRb calls for perf reasons,
Note that since DRb calls carry considerable overhead compared to normal
this formatter as a means to have the status reported back to it, via DRb.
Used by ‘–bisect`. When it shells out and runs a portion of the suite, it uses
def example_failed(notification)
def example_failed(notification) @failed_example_ids << notification.example.id example_finished(notification, :failed) end
def example_finished(notification, status)
def example_finished(notification, status) return unless @remaining_failures.include?(notification.example.id) @remaining_failures.delete(notification.example.id) return if status == :failed && !@remaining_failures.empty? RSpec.world.wants_to_quit = true end
def example_passed(notification)
def example_passed(notification) example_finished(notification, :passed) end
def example_pending(notification)
def example_pending(notification) example_finished(notification, :pending) end
def example_started(notification)
def example_started(notification) @all_example_ids << notification.example.id end
def initialize(_output)
def initialize(_output) port = RSpec.configuration.drb_port drb_uri = "druby://localhost:#{port}" @all_example_ids = [] @failed_example_ids = [] @bisect_server = DRbObject.new_with_uri(drb_uri) @remaining_failures = [] end
def start(_notification)
def start(_notification) @remaining_failures = Set.new(@bisect_server.expected_failures) end
def start_dump(_notification)
def start_dump(_notification) @bisect_server.latest_run_results = RunResults.new( @all_example_ids, @failed_example_ids ) end