class RSpec::Core::Formatters::HtmlFormatter

@private

Public Class Methods

new(output) click to toggle source
# File lib/rspec/core/formatters/html_formatter.rb, line 13
def initialize(output)
  super(output)
  @failed_examples = []
  @example_group_number = 0
  @example_number = 0
  @header_red = nil
  @printer = HtmlPrinter.new(output)
end

Public Instance Methods

dump_summary(summary) click to toggle source
# File lib/rspec/core/formatters/html_formatter.rb, line 103
def dump_summary(summary)
  @printer.print_summary(
    summary.duration,
    summary.example_count,
    summary.failure_count,
    summary.pending_count
  )
  @printer.flush
end
example_failed(failure) click to toggle source
# File lib/rspec/core/formatters/html_formatter.rb, line 55
def example_failed(failure)
  @failed_examples << failure.example
  unless @header_red
    @header_red = true
    @printer.make_header_red
  end

  unless @example_group_red
    @example_group_red = true
    @printer.make_example_group_header_red(example_group_number)
  end

  @printer.move_progress(percent_done)

  example = failure.example

  exception = failure.exception
  message_lines = failure.fully_formatted_lines(nil, RSpec::Core::Notifications::NullColorizer)
  exception_details = if exception
                        {
                          # drop 2 removes the description (regardless of newlines) and leading blank line
                          :message => message_lines.drop(2).join("\n"),
                          :backtrace => failure.formatted_backtrace.join("\n"),
                        }
                      end
  extra = extra_failure_content(failure)

  @printer.print_example_failed(
    example.execution_result.pending_fixed,
    example.description,
    example.execution_result.run_time,
    @failed_examples.size,
    exception_details,
    (extra == "") ? false : extra
  )
  @printer.flush
end
example_group_started(notification) click to toggle source
# File lib/rspec/core/formatters/html_formatter.rb, line 28
def example_group_started(notification)
  super
  @example_group_red = false
  @example_group_number += 1

  @printer.print_example_group_end unless example_group_number == 1
  @printer.print_example_group_start(example_group_number,
                                     notification.group.description,
                                     notification.group.parent_groups.size)
  @printer.flush
end
example_passed(passed) click to toggle source
# File lib/rspec/core/formatters/html_formatter.rb, line 49
def example_passed(passed)
  @printer.move_progress(percent_done)
  @printer.print_example_passed(passed.example.description, passed.example.execution_result.run_time)
  @printer.flush
end
example_pending(pending) click to toggle source
# File lib/rspec/core/formatters/html_formatter.rb, line 93
def example_pending(pending)
  example = pending.example

  @printer.make_header_yellow unless @header_red
  @printer.make_example_group_header_yellow(example_group_number) unless @example_group_red
  @printer.move_progress(percent_done)
  @printer.print_example_pending(example.description, example.execution_result.pending_message)
  @printer.flush
end
example_started(_notification) click to toggle source
# File lib/rspec/core/formatters/html_formatter.rb, line 45
def example_started(_notification)
  @example_number += 1
end
start(notification) click to toggle source
# File lib/rspec/core/formatters/html_formatter.rb, line 22
def start(notification)
  super
  @printer.print_html_start
  @printer.flush
end
start_dump(_notification) click to toggle source
# File lib/rspec/core/formatters/html_formatter.rb, line 40
def start_dump(_notification)
  @printer.print_example_group_end
  @printer.flush
end

Private Instance Methods

example_group_number() click to toggle source

The number of the currently running example_group.

# File lib/rspec/core/formatters/html_formatter.rb, line 120
def example_group_number
  @example_group_number
end
example_number() click to toggle source

The number of the currently running example (a global counter).

# File lib/rspec/core/formatters/html_formatter.rb, line 125
def example_number
  @example_number
end
extra_failure_content(failure) click to toggle source

Override this method if you wish to output extra HTML for a failed spec. For example, you could output links to images or other files produced during the specs.

# File lib/rspec/core/formatters/html_formatter.rb, line 141
def extra_failure_content(failure)
  RSpec::Support.require_rspec_core "formatters/html_snippet_extractor"
  backtrace = (failure.exception.backtrace || []).map do |line|
    RSpec.configuration.backtrace_formatter.backtrace_line(line)
  end
  backtrace.compact!
  @snippet_extractor ||= HtmlSnippetExtractor.new
  "    <pre class=\"ruby\"><code>#{@snippet_extractor.snippet(backtrace)}</code></pre>"
end
percent_done() click to toggle source

rubocop:enable Style/TrivialAccessors

# File lib/rspec/core/formatters/html_formatter.rb, line 130
def percent_done
  result = 100.0
  if @example_count > 0
    result = (((example_number).to_f / @example_count.to_f * 1000).to_i / 10.0).to_f
  end
  result
end