Class: Ace::TestRunner::Formatters::MarkdownFormatter

Inherits:
BaseFormatter
  • Object
show all
Defined in:
lib/ace/test_runner/formatters/markdown_formatter.rb

Overview

Markdown formatter for generating individual failure report files This formatter is used internally for creating detailed failure reports It is not exposed as a user-selectable output format

Instance Attribute Summary

Attributes inherited from BaseFormatter

#options, #report_path

Instance Method Summary collapse

Methods inherited from BaseFormatter

#on_finish, #on_start, #on_test_complete

Constructor Details

#initialize(options = {}) ⇒ MarkdownFormatter

Returns a new instance of MarkdownFormatter.



12
13
14
15
# File 'lib/ace/test_runner/formatters/markdown_formatter.rb', line 12

def initialize(options = {})
  super
  @configuration = options
end

Instance Method Details

#format_report(report) ⇒ Object

Not used for report generation



85
86
87
# File 'lib/ace/test_runner/formatters/markdown_formatter.rb', line 85

def format_report(report)
  {}
end

#format_stdout(result) ⇒ Object

Not used for console output



80
81
82
# File 'lib/ace/test_runner/formatters/markdown_formatter.rb', line 80

def format_stdout(result)
  ""
end

#generate_failure_report(failure, index) ⇒ Object

Generate markdown report for a single failure



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
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
# File 'lib/ace/test_runner/formatters/markdown_formatter.rb', line 18

def generate_failure_report(failure, index)
  lines = []

  # Title with status
  status = failure.error? ? "ERROR" : "FAILURE"
  lines << "# Test #{status}: #{failure.test_name}"
  lines << ""
  lines << "**Status:** #{status}"
  lines << "**Location:** #{failure.location}" if failure.location
  lines << ""

  # Error Message
  lines << "## Error Message"
  lines << ""
  lines << failure.message if failure.message
  lines << ""

  # Stack Trace
  if failure.backtrace && !failure.backtrace.empty?
    lines << "## Stack Trace"
    lines << ""
    lines << "```"
    lines << failure.backtrace.take(15).join("\n")
    lines << "```"
    lines << ""
  end

  # Related stderr
  if failure.stderr_warnings && !failure.stderr_warnings.empty?
    lines << "## Related stderr"
    lines << ""
    lines << "```"
    lines << failure.stderr_warnings
    lines << "```"
    lines << ""
  end

  # Code Context
  if failure.code_context && failure.code_context[:lines]
    lines << "## Code Context"
    lines << ""
    lines << "```ruby"
    failure.code_context[:lines].each do |line_num, line_data|
      marker = line_data[:highlighted] ? "← ERROR HERE" : ""
      lines << format("%3d:  %s  %s", line_num, line_data[:content], marker)
    end
    lines << "```"
    lines << ""
  end

  # Fix Suggestion
  if failure.fix_suggestion
    lines << "## Fix Suggestion"
    lines << ""
    lines << failure.fix_suggestion
    lines << ""
  end

  lines.join("\n")
end