lib/parallel_tests/cucumber/failures_logger.rb



# frozen_string_literal: true
require 'cucumber/formatter/rerun'
require 'parallel_tests/gherkin/io'
require 'cucumber/events'

module ParallelTests
  module Cucumber
    class FailuresLogger < ::Cucumber::Formatter::Rerun
      include ParallelTests::Gherkin::Io

      def initialize(config)
        super

        @io = prepare_io(config.out_stream)

        # Remove handler inherited from Cucumber::Formatter::Rerun that does not
        # properly join file failures
        handlers = config.event_bus.instance_variable_get(:@handlers)
        handlers[::Cucumber::Events::TestRunFinished.to_s].pop

        # Add our own handler
        config.on_event :test_run_finished do
          return if @failures.empty?

          lock_output do
            @failures.each do |file, lines|
              lines.each do |line|
                @io.print "#{file}:#{line} "
              end
            end
          end
        end
      end
    end
  end
end