Sha256: d1e9addd155d1bf36617fe079f64fd34e741183c21d484ee42eab927ffb76bac

Contents?: true

Size: 1.82 KB

Versions: 5

Compression:

Stored size: 1.82 KB

Contents

require 'stringio'

module Riot
  class Report
    attr_reader :bad_results, :passes, :failures, :errors, :time_taken
    def initialize
      @bad_results = []
      @passes, @failures, @errors, @time_taken = 0, 0, 0, 0.0
    end

    def passed?; failures + errors == 0; end
    def assertions; passes + failures + errors; end

    def time(&block)
      @start = Time.now
      result = yield
      @time_taken += (Time.now - @start).to_f
      result
    end

    def process_assertion(assertion)
      if assertion.passed?
        passed
      else
        send((assertion.errored? ? :errored : :failed), assertion.result)
      end
    end

    def passed; @passes += 1; end
    
    def failed(failure)
      @failures += 1
      @bad_results << failure
    end

    def errored(error)
      @errors += 1
      @bad_results << error
    end
  end # Report

  class NilReport < Report
    def results; end
    def time(&block); yield; end
  end # NilReport

  class TextReport < Report
    def initialize(writer=nil)
      super()
      @writer ||= STDOUT
    end

    def passed
      super && @writer.print('.')
    end

    def failed(failure)
      super && @writer.print('F')
    end

    def errored(error)
      super && @writer.print('E')
    end

    def results
      @writer.puts "\n\n"
      print_bad_results
      format = "%d assertions, %d failures, %d errors in %s seconds"
      @writer.puts format % [assertions, failures, errors, ("%0.6f" % time_taken)]
    end
  private
    def print_bad_results
      bad_results.each_with_index do |result, idx|
        @writer.puts format_result(idx + 1, result)
        @writer.puts "  " + result.backtrace.join("\n  ") if result.print_stacktrace?
        @writer.puts "\n"
      end
    end

    def format_result(idx, result) "#%d - %s" % [idx, result.to_s]; end
  end # TextReport
end # Riot

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
riot-0.9.12 lib/riot/report.rb
riot-0.9.11 lib/riot/report.rb
riot-0.9.10 lib/riot/report.rb
riot-0.9.9 lib/riot/report.rb
riot-0.9.8 lib/riot/report.rb