Sha256: f21c45d123cd64006888fc738736217e74d415030673d994fd10454d4d60d159

Contents?: true

Size: 1.43 KB

Versions: 6

Compression:

Stored size: 1.43 KB

Contents

# frozen_string_literal: true

module RubyCI
  class RspecFormatter
    attr_reader :current_test_key

    def initialize
      @output = {}
      @is_failed = false
    end

    def passed?
      !@is_failed
    end

    def current_test_key=(value)
      @current_test_key = value
    end

    def example_finished(notification)
      example =  notification.example
      metadata = example.metadata

      *example_group_ids, example_id = metadata[:scoped_id].split(":")

      file_output = @output[current_test_key] ||= {}

      example_group = example_group_ids.reduce(file_output) do |output, scope_id|
        output[scope_id] ||= {}
        output[scope_id]
      end

      example_group[example_id] = {
        run_time: example.execution_result.run_time,
        status: example.execution_result.status
      }

      if example.execution_result.status == :failed
        @is_failed = true
        example_group[example_id][:fully_formatted] =
          notification.fully_formatted(0, ::RSpec::Core::Formatters::ConsoleCodes)
      elsif metadata[:retry_attempts] && metadata[:retry_attempts] > 0
        example_group[example_id][:retry_attempts] = metadata[:retry_attempts]
        example_group[example_id][:fully_formatted] =
          example.set_exception metadata[:retry_exceptions].first.to_s
      end

      example_group[example_id]
    end

    def dump_and_reset
      output = @output
      @output = {}
      output
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
ruby_ci-0.2.5 lib/ruby_ci/rspec_formatter.rb
ruby_ci-0.2.3 lib/ruby_ci/rspec_formatter.rb
ruby_ci-0.2.2 lib/ruby_ci/rspec_formatter.rb
ruby_ci-0.2.1 lib/ruby_ci/rspec_formatter.rb
ruby_ci-0.2.0 lib/ruby_ci/rspec_formatter.rb
ruby_ci-0.1.7 lib/ruby_ci/rspec_formatter.rb