class RSpec::Core::Formatters::BisectFormatter
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
Constants
- RunResults
Public Class Methods
new(_output)
click to toggle source
# 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
Public Instance Methods
example_failed(notification)
click to toggle source
# 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
example_passed(notification)
click to toggle source
# File lib/rspec/core/formatters/bisect_formatter.rb, line 40 def example_passed(notification) example_finished(notification, :passed) end
example_pending(notification)
click to toggle source
# File lib/rspec/core/formatters/bisect_formatter.rb, line 44 def example_pending(notification) example_finished(notification, :pending) end
example_started(notification)
click to toggle source
# File lib/rspec/core/formatters/bisect_formatter.rb, line 31 def example_started(notification) @all_example_ids << notification.example.id end
start(_notification)
click to toggle source
# File lib/rspec/core/formatters/bisect_formatter.rb, line 27 def start(_notification) @remaining_failures = Set.new(@bisect_server.expected_failures) end
start_dump(_notification)
click to toggle source
# 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
Private Instance Methods
example_finished(notification, status)
click to toggle source
# 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