Class: Tryouts::CLI::QuietFormatter

Inherits:
Object
  • Object
show all
Includes:
FormatterInterface
Defined in:
lib/tryouts/cli/formatters/quiet.rb

Overview

Minimal output formatter - only shows essential information

Direct Known Subclasses

QuietFailsFormatter

Instance Attribute Summary

Attributes included from FormatterInterface

#current_indent, #stderr, #stdout

Instance Method Summary collapse

Methods included from FormatterInterface

#debug_info, #file_parsed, #file_result, #file_start, #live_status_manager, #parser_warnings, #phase_header, #puts, #set_live_status_manager, #setup_output, #setup_start, #teardown_output, #teardown_start, #test_end, #test_output, #test_start, #trace_info, #update_live_status, #write

Constructor Details

#initialize(options = {}) ⇒ QuietFormatter

Returns a new instance of QuietFormatter.



11
12
13
14
15
16
17
# File 'lib/tryouts/cli/formatters/quiet.rb', line 11

def initialize(options = {})
  super
  @show_errors        = options.fetch(:show_errors, true)
  @show_final_summary = options.fetch(:show_final_summary, true)
  @show_stack_traces  = options.fetch(:stack_traces, false) || options.fetch(:debug, false)
  @current_file       = nil
end

Instance Method Details

#batch_summary(failure_collector) ⇒ Object

Summary operations - quiet mode skips failure summary



47
48
49
50
# File 'lib/tryouts/cli/formatters/quiet.rb', line 47

def batch_summary(failure_collector)
  # Quiet formatter defaults to no failure summary
  # Users can override with --failure-summary if needed
end

#error_message(message, backtrace: nil) ⇒ Object



80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/tryouts/cli/formatters/quiet.rb', line 80

def error_message(message, backtrace: nil)
  return unless @show_errors

  @stderr.puts
  @stderr.puts Console.color(:red, "ERROR: #{message}")

  return unless backtrace && @show_stack_traces

  Console.pretty_backtrace(backtrace, limit: 3).each do |line|
    @stderr.puts "  #{line}"
  end
end

#file_end(_file_path, context_info: {}) ⇒ Object



23
24
25
26
# File 'lib/tryouts/cli/formatters/quiet.rb', line 23

def file_end(_file_path, context_info: {})
  # Always use coordinated output through puts() method
  # puts # add newline after all dots
end

#file_execution_start(file_path, test_count:, context_mode:) ⇒ Object



19
20
21
# File 'lib/tryouts/cli/formatters/quiet.rb', line 19

def file_execution_start(file_path, test_count:, context_mode:)
  @current_file = file_path
end

#grand_total(total_tests:, failed_count:, error_count:, successful_files:, total_files:, elapsed_time:) ⇒ Object



52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/tryouts/cli/formatters/quiet.rb', line 52

def grand_total(total_tests:, failed_count:, error_count:, successful_files:, total_files:, elapsed_time:)
  return unless @show_final_summary

  puts
  puts # Add newline after dots

  time_str = if elapsed_time < 2
               "#{(elapsed_time * 1000).to_i}ms"
             else
               "#{elapsed_time.round(2)}s"
             end

  issues_count = failed_count + error_count
  if issues_count > 0
    passed  = [total_tests - issues_count, 0].max  # Ensure passed never goes negative
    details = []
    details << "#{failed_count} failed" if failed_count > 0
    details << "#{error_count} errors" if error_count > 0
    puts Console.color(:red, "Total: #{details.join(', ')}, #{passed} passed (#{time_str})")
  else
    puts Console.color(:green, "Total: #{total_tests} passed (#{time_str})")
  end

  if total_files > 1
    puts "Files: #{successful_files} of #{total_files} successful"
  end
end

#live_status_capabilitiesObject



93
94
95
96
97
98
99
# File 'lib/tryouts/cli/formatters/quiet.rb', line 93

def live_status_capabilities
  {
    supports_coordination: true,     # Quiet can work with coordinated output
    output_frequency: :low,          # Very minimal output, mainly dots
    requires_tty: false,             # Works without TTY
  }
end

#test_result(result_packet) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/tryouts/cli/formatters/quiet.rb', line 28

def test_result(result_packet)
  char = case result_packet.status
         when :passed
           Console.color(:green, '.')
         when :failed
           Console.color(:red, 'F')
         when :error
           Console.color(:red, 'E')
         when :skipped
           Console.color(:yellow, 'S')
         else
           '?'
         end

  # Always use coordinated output through write() method
  write(char)
end