Class: Tryouts::FailureCollector
- Inherits:
-
Object
- Object
- Tryouts::FailureCollector
- Defined in:
- lib/tryouts/failure_collector.rb
Overview
Collects and organizes failed test results across files for summary display Similar to RSpec's failure summary at the end of test runs
Constant Summary collapse
- FailureEntry =
Data structure for a single failure entry
Data.define(:file_path, :test_case, :result_packet) do def line_number # Use first expectation line for consistency with main error display test_case.first_expectation_line || test_case.line_range&.first || 0 end def description desc = test_case.description.to_s.strip desc.empty? ? 'unnamed test' : desc end def failure_reason case result_packet.status when :failed if result_packet.actual_results.any? && result_packet.expected_results.any? "expected #{result_packet.first_expected.inspect}, got #{result_packet.first_actual.inspect}" else 'test failed' end when :error error_msg = result_packet.error&. || 'unknown error' "#{result_packet.error&.class&.name || 'Error'}: #{error_msg}" else 'test did not pass' end end def source_context return [] unless test_case.source_lines # Show the test code (excluding setup/teardown) test_case.source_lines.reject do |line| line.strip.empty? || line.strip.start_with?('#') end.first(3) # Limit to first 3 relevant lines end end
Instance Method Summary collapse
-
#add_failure(file_path, result_packet) ⇒ Object
Add a failed test result.
-
#all_failures ⇒ Object
Get all failure entries (for detailed processing).
-
#any_failures? ⇒ Boolean
Check if any failures were collected.
-
#clear ⇒ Object
Reset the collector (useful for testing).
-
#error_count ⇒ Object
Get count of total errors.
-
#failure_count ⇒ Object
Get count of total failures.
-
#failures_by_file ⇒ Object
Get failures grouped by file for summary display.
-
#files_with_failures_count ⇒ Object
Get count of files with failures.
-
#initialize ⇒ FailureCollector
constructor
A new instance of FailureCollector.
-
#total_issues ⇒ Object
Get total issues (failures + errors).
Constructor Details
#initialize ⇒ FailureCollector
Returns a new instance of FailureCollector.
47 48 49 50 |
# File 'lib/tryouts/failure_collector.rb', line 47 def initialize @failures = [] @files_with_failures = Set.new end |
Instance Method Details
#add_failure(file_path, result_packet) ⇒ Object
Add a failed test result
53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/tryouts/failure_collector.rb', line 53 def add_failure(file_path, result_packet) return unless result_packet.failed? || result_packet.error? entry = FailureEntry.new( file_path: file_path, test_case: result_packet.test_case, result_packet: result_packet, ) @failures << entry @files_with_failures << file_path end |
#all_failures ⇒ Object
Get all failure entries (for detailed processing)
99 100 101 |
# File 'lib/tryouts/failure_collector.rb', line 99 def all_failures @failures.dup end |
#any_failures? ⇒ Boolean
Check if any failures were collected
67 68 69 |
# File 'lib/tryouts/failure_collector.rb', line 67 def any_failures? !@failures.empty? end |
#clear ⇒ Object
Reset the collector (useful for testing)
104 105 106 107 |
# File 'lib/tryouts/failure_collector.rb', line 104 def clear @failures.clear @files_with_failures.clear end |
#error_count ⇒ Object
Get count of total errors
77 78 79 |
# File 'lib/tryouts/failure_collector.rb', line 77 def error_count @failures.count { |f| f.result_packet.error? } end |
#failure_count ⇒ Object
Get count of total failures
72 73 74 |
# File 'lib/tryouts/failure_collector.rb', line 72 def failure_count @failures.count { |f| f.result_packet.failed? } end |
#failures_by_file ⇒ Object
Get failures grouped by file for summary display
92 93 94 95 96 |
# File 'lib/tryouts/failure_collector.rb', line 92 def failures_by_file @failures.group_by(&:file_path).transform_values do |file_failures| file_failures.sort_by(&:line_number) end end |
#files_with_failures_count ⇒ Object
Get count of files with failures
87 88 89 |
# File 'lib/tryouts/failure_collector.rb', line 87 def files_with_failures_count @files_with_failures.size end |
#total_issues ⇒ Object
Get total issues (failures + errors)
82 83 84 |
# File 'lib/tryouts/failure_collector.rb', line 82 def total_issues @failures.size end |