class Utils::LineFormatter
def close(_ignore)
def close(_ignore) @errors_lst.close end
def description(example, full: ENV['VERBOSE'].to_i == 1)
def description(example, full: ENV['VERBOSE'].to_i == 1) if full example.example.full_description else example.example.description end end
def dump_failure(example)
def dump_failure(example) output.puts( description(example, full: true), dump_failure_for_example(example) ) end
def dump_failure_for_example(example)
def dump_failure_for_example(example) result = '' exception = execution_result(example).exception exception_class_name = exception.class.name result << "Failure/Error: #{read_failed_line(example)}\n" result << "#{exception_class_name}:\n" unless exception_class_name =~ /RSpec/ if m = exception.message m.to_s.split("\n").each { |line| result << " #{line}\n" } end result end
def dump_failure_to_error_file(example)
def dump_failure_to_error_file(example) @errors_lst.flock File::LOCK_EX @errors_lst.puts "%s\n%3.3fs %s\n%s\n%s" % [ location(example), run_time(example), description(example, full: true), dump_failure_for_example(example), format_backtrace(example, folding: true) ] ensure @errors_lst.flock File::LOCK_UN end
def dump_summary(summary)
def dump_summary(summary) line = summary_line(summary) @errors_lst.puts ?= * 80, line output.puts ?= * Tins::Terminal.columns, line end
def example_failed(example)
def example_failed(example) dump_failure_to_error_file(example) output.puts format_line(example) dump_failure(example) end
def example_passed(example)
def example_passed(example) output.puts format_line(example) end
def example_pending(example)
def example_pending(example) output.puts format_line(example) end
def execution_result(example)
def execution_result(example) example.example.metadata[:execution_result] end
def failure_color(text)
def failure_color(text) Term::ANSIColor.red(text) end
def format_backtrace(example, folding: false, limit: nil)
def format_backtrace(example, folding: false, limit: nil) backtrace = execution_result(example).exception.backtrace backtrace.nil? and return '' if limit backtrace = backtrace[0, limit] end result = [] folding and result << '{{{' for line in backtrace result << RSpec::Core::Metadata::relative_path(line) end folding and result << '}}}' result * ?\n end
def format_line(example)
def format_line(example) args = [ location(example), run_time(example), description(example) ] uncolored = "%s # S %3.3fs %s" % args uncolored = uncolored[0, Tins::Terminal.columns] case execution_result(example).status when :passed success_color(uncolored) when :failed failure_color(uncolored) when :pending pending_color(uncolored) else uncolored % args end end
def initialize(output)
def initialize(output) @output = output @output.sync = true filename = 'errors.lst' @errors_lst = File.new(filename, 'w') @errors_lst.sync = true end
def location(example)
def location(example) location = example.example.metadata[:location] unless location.include?(?/) location = example.example.metadata[:example_group][:location] end RSpec::Core::Metadata::relative_path(location) end
def pending_color(text)
def pending_color(text) Term::ANSIColor.yellow(text) end
def read_failed_line(example)
def read_failed_line(example) ''.strip end
def run_time(example)
def run_time(example) execution_result(example).run_time end
def start(_ignore)
def start(_ignore) output.puts "Storing error list in #{@errors_lst.path.inspect}: " output.puts ?- * Tins::Terminal.columns end
def success_color(text)
def success_color(text) Term::ANSIColor.green(text) end
def summary_line(summary)
def summary_line(summary) failure_percentage = 100 * summary.failure_count.to_f / summary.example_count failure_percentage.nan? and failure_percentage = 0.0 pending_percentage = 100 * summary.pending_count.to_f / summary.example_count pending_percentage.nan? and pending_percentage = 0.0 "%u of %u (%.2f %%) failed, %u pending (%.2f %%) in %.3f seconds" % [ summary.failure_count, summary.example_count, failure_percentage, summary.pending_count, pending_percentage, summary.duration, ] end