class Attestify::Reporter

Reports results to the console.

Attributes

timer[RW]

Public Class Methods

new() click to toggle source
# File lib/attestify/reporter.rb, line 8
def initialize
  @failures = []
  @total_tests = 0
  @total_assertions = 0
  @total_failed_assertions = 0
  @total_failures = 0
  @total_errors = 0
  @total_skips = 0
end

Public Instance Methods

passed?() click to toggle source
# File lib/attestify/reporter.rb, line 18
def passed?
  (@total_failures + @total_errors).zero?
end
record(result) click to toggle source
# File lib/attestify/reporter.rb, line 22
def record(result)
  add_to_totals(result)
  @failures << result if !result.skipped? && !result.passed?
  print_result_code(result)
end
report() click to toggle source
# File lib/attestify/reporter.rb, line 28
def report
  puts_failures
  puts_footer
end

Private Instance Methods

add_to_totals(result) click to toggle source
# File lib/attestify/reporter.rb, line 35
def add_to_totals(result)
  @total_tests += 1
  @total_assertions += result.assertions.total
  @total_failed_assertions += result.assertions.failed

  if result.skipped?
    @total_skips += 1
  elsif result.errored?
    @total_errors += 1
  elsif result.failed?
    @total_failures += 1
  end
end
assertions_per_second() click to toggle source
# File lib/attestify/reporter.rb, line 117
def assertions_per_second
  if timer
    format("%.1f assertions/second", @total_assertions.to_f / timer.duration)
  else
    "? assertions/second"
  end
end
comment(message) click to toggle source
# File lib/attestify/reporter.rb, line 171
def comment(message)
  "# #{message}"
end
elapsed_time() click to toggle source
# File lib/attestify/reporter.rb, line 105
def elapsed_time
  timer || "?"
end
failure_assertion_totals(failure) click to toggle source
# File lib/attestify/reporter.rb, line 81
def failure_assertion_totals(failure)
  "#{failure.failed_assertions_total} out of #{failure.assertions_total} assertions failed"
end
print_result_code(result) click to toggle source
puts_failure(failure, number) click to toggle source
# File lib/attestify/reporter.rb, line 71
def puts_failure(failure, number)
  puts
  puts_failure_header(failure, number)
  puts_failure_details(failure, number)
end
puts_failure_detail(failure_detail, number, sub_number) click to toggle source
# File lib/attestify/reporter.rb, line 91
def puts_failure_detail(failure_detail, number, sub_number)
  puts
  puts "  #{number}.#{sub_number}) #{failure_detail.message}"
  puts "    #{failure_detail.backtrace_locations.join("\n    ")}"
end
puts_failure_details(failure, number) click to toggle source
# File lib/attestify/reporter.rb, line 85
def puts_failure_details(failure, number)
  failure.assertions.failure_details.each_with_index do |failure_detail, i|
    puts_failure_detail(failure_detail, number, i + 1)
  end
end
puts_failure_header(failure, number) click to toggle source
# File lib/attestify/reporter.rb, line 77
def puts_failure_header(failure, number)
  puts "#{number}) #{failure.name}: #{failure_assertion_totals(failure)}"
end
puts_failure_rerun(failure) click to toggle source
# File lib/attestify/reporter.rb, line 159
def puts_failure_rerun(failure)
  puts "#{rerun_test_command(failure)} #{comment(failure.name)}"
end
puts_failure_reruns() click to toggle source
# File lib/attestify/reporter.rb, line 149
def puts_failure_reruns
  puts
  puts "Failed tests:"
  puts

  @failures.each do |failure|
    puts_failure_rerun(failure)
  end
end
puts_failures() click to toggle source
# File lib/attestify/reporter.rb, line 63
def puts_failures
  puts

  @failures.each_with_index do |failure, i|
    puts_failure(failure, i + 1)
  end
end
record_failure(result) click to toggle source
# File lib/attestify/reporter.rb, line 53
def record_failure(result)
  @failures << result

  if result.assertions.errored?
    @total_errors += 1
  else
    @total_failures += 1
  end
end
rerun_test_command(failure) click to toggle source
# File lib/attestify/reporter.rb, line 163
def rerun_test_command(failure)
  # TODO: Should I create a new method to get the test method...?
  test_method = failure.instance_variable_get(:@_test_method)
  source = failure.method(test_method).source_location
  source[0] = Pathname.new(File.realpath(source[0])).relative_path_from(Pathname.new(File.realpath(".")))
  "attestify #{source.join(":")}"
end
tests_per_second() click to toggle source
# File lib/attestify/reporter.rb, line 109
def tests_per_second
  if timer
    format("%.1f tests/second", @total_tests.to_f / timer.duration)
  else
    "? tests/second"
  end
end
total_assertions() click to toggle source
# File lib/attestify/reporter.rb, line 141
def total_assertions
  "#{@total_assertions} assertions"
end
total_errors() click to toggle source
# File lib/attestify/reporter.rb, line 133
def total_errors
  "#{@total_errors} errors"
end
total_failed_assertions() click to toggle source
# File lib/attestify/reporter.rb, line 145
def total_failed_assertions
  "#{@total_failed_assertions} failed assertions"
end
total_failures() click to toggle source
# File lib/attestify/reporter.rb, line 129
def total_failures
  "#{@total_failures} failures"
end
total_skips() click to toggle source
# File lib/attestify/reporter.rb, line 137
def total_skips
  "#{@total_skips} skips"
end
total_tests() click to toggle source
# File lib/attestify/reporter.rb, line 125
def total_tests
  "#{@total_tests} tests"
end