class Campa::Core::TestReport

Uses the result of a {Test#call} execution to show a human readable summary of a test execution.

Public Instance Methods

call(result, env:) click to toggle source

Receives the result of {Test#call} and shows a (hopefully) useful test summary.

@param result [List] result of calling {Test#call} @param env [Context] where object bound to {SYMBOL_OUT} will be searched

as an alternative to $stdout

@return [Boolean] true if all tests were successful

(<b>false</b> otherwhise).
# File lib/campa/core/test_report.rb, line 14
def call(result, env:)
  success, failures = %i[success failures].map { |t| filter(t, result) }
  out = env[SYMBOL_OUT] || $stdout
  show_summary(success, failures, out)
end

Private Instance Methods

failure_summary(failures, out) click to toggle source
# File lib/campa/core/test_report.rb, line 56
def failure_summary(failures, out)
  [
    "FAIL!",
    "  #{failures.length} tests failed",
    "  they are:",
  ].each { |str| out.puts str }

  failures.each { |t| out.puts "    - #{t}" }

  false
end
filter(type, result) click to toggle source
# File lib/campa/core/test_report.rb, line 32
def filter(type, result)
  filtered =
    result
    .to_a
    .find { |l| l.head == Symbol.new(type.to_s) }
  return [] if filtered.nil?

  label_only(filtered)
end
label_only(filtered) click to toggle source
# File lib/campa/core/test_report.rb, line 42
def label_only(filtered)
  filtered
    .tail
    .head
    .to_a
    .map(&:label)
end
show_summary(success, failures, out) click to toggle source
# File lib/campa/core/test_report.rb, line 22
def show_summary(success, failures, out)
  out.puts "\n\n#{success.length + failures.length} tests ran"

  if failures.empty?
    success_summary(success, out)
  else
    failure_summary(failures, out)
  end
end
success_summary(_success, out) click to toggle source
# File lib/campa/core/test_report.rb, line 50
def success_summary(_success, out)
  out.puts "Success: none of those returned false"

  true
end