Used by `–bisect`. When it shells out and runs a portion of the suite, it uses this formatter as a means to have the status reported back to it, via DRb.
Note that since DRb calls carry considerable overhead compared to normal method calls, we try to minimize the number of DRb calls for perf reasons, opting to communicate only at the start and the end of the run, rather than after each example. @private
# File lib/rspec/core/formatters/bisect_formatter.rb, line 18 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
# File lib/rspec/core/formatters/bisect_formatter.rb, line 35 def example_failed(notification) @failed_example_ids << notification.example.id example_finished(notification, :failed) end
# File lib/rspec/core/formatters/bisect_formatter.rb, line 40 def example_passed(notification) example_finished(notification, :passed) end
# File lib/rspec/core/formatters/bisect_formatter.rb, line 44 def example_pending(notification) example_finished(notification, :pending) end
# File lib/rspec/core/formatters/bisect_formatter.rb, line 31 def example_started(notification) @all_example_ids << notification.example.id end
# File lib/rspec/core/formatters/bisect_formatter.rb, line 27 def start(_notification) @remaining_failures = Set.new(@bisect_server.expected_failures) end
# File lib/rspec/core/formatters/bisect_formatter.rb, line 48 def start_dump(_notification) @bisect_server.latest_run_results = RunResults.new( @all_example_ids, @failed_example_ids ) end
# File lib/rspec/core/formatters/bisect_formatter.rb, line 58 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