Sha256: 01c53fa96b7f9c5576ec0fce3e151ce037032a3906b28faf0e73ea24207bf9e0

Contents?: true

Size: 1.94 KB

Versions: 12

Compression:

Stored size: 1.94 KB

Contents

module Specjour::RSpec
  class FinalReport
    attr_reader :examples
    attr_reader :duration

    def initialize
      @examples = []
      @duration = 0.0
      ::RSpec.configuration.color_enabled = true
      ::RSpec.configuration.output_stream = $stdout
    end

    def add(data)
      if data.respond_to?(:has_key?) && data.has_key?(:duration)
        self.duration = data[:duration]
      else
        metadata_for_examples(data)
      end
    end

    def duration=(value)
      @duration = value.to_f if duration < value.to_f
    end

    def exit_status
      formatter.failed_examples.empty?
    end

    def metadata_for_examples(metadata_collection)
      examples.concat(
        metadata_collection.map do |partial_metadata|
          example = ::RSpec::Core::Example.allocate
          example.instance_variable_set(:@example_group_class,
            OpenStruct.new(:metadata => {}, :ancestors => [])
          )
          metadata = ::RSpec::Core::Metadata.new
          metadata.merge! partial_metadata
          example.instance_variable_set(:@metadata, metadata)
          example
        end
      )
    end

    def pending_examples
      examples.select {|e| e.execution_result[:status] == 'pending'}
    end

    def failed_examples
      examples.select {|e| e.execution_result[:status] == 'failed'}
    end

    def formatter
      @formatter ||= new_progress_formatter
    end

    def summarize
      if examples.size > 0
        formatter.start_dump
        formatter.dump_pending
        formatter.dump_failures
        formatter.dump_summary(duration, examples.size, failed_examples.size, pending_examples.size)
      end
    end

    protected
    def new_progress_formatter
      new_formatter = ::RSpec::Core::Formatters::ProgressFormatter.new($stdout)
      new_formatter.instance_variable_set(:@failed_examples, failed_examples)
      new_formatter.instance_variable_set(:@pending_examples, pending_examples)
      new_formatter
    end
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
specjour-0.6.6 lib/specjour/rspec/final_report.rb
specjour-0.6.5 lib/specjour/rspec/final_report.rb
specjour-0.6.4 lib/specjour/rspec/final_report.rb
specjour-0.6.3 lib/specjour/rspec/final_report.rb
specjour-0.6.2 lib/specjour/rspec/final_report.rb
specjour-0.6.1 lib/specjour/rspec/final_report.rb
specjour-0.6.0 lib/specjour/rspec/final_report.rb
specjour-0.5.6 lib/specjour/rspec/final_report.rb
specjour-0.5.5 lib/specjour/rspec/final_report.rb
specjour-0.5.4 lib/specjour/rspec/final_report.rb
specjour-0.5.2 lib/specjour/rspec/final_report.rb
specjour-0.5.0 lib/specjour/rspec/final_report.rb