class ParallelHtmlFormatter

Public Class Methods

new(output) click to toggle source
Calls superclass method ParallelTests::RSpec::LoggerBase::new
# File lib/sim/parallel_html_formatter.rb, line 7
def initialize(output)
  super(output)

  @buffer = StringIO.new
  @header_buffer = StringIO.new

  @example_group_number = 0
  @example_number = 0
  @header_red = nil
  @printer = RSpec::Core::Formatters::HtmlPrinter.new(@buffer)

  @header_printer = RSpec::Core::Formatters::HtmlPrinter.new(@header_buffer)

  if ENV[:TEST_ENV_NUMBER.to_s] == ""
    # puts %[hello from process #{ENV[:TEST_ENV_NUMBER.to_s].inspect}]
    # puts ENV[:TEST_ENV_NUMBER.to_s].class

    # lock this whole section so other threads don't get ahead of the html header flush
    lock_output do
      @header_printer.print_html_start
      @header_buffer.puts "<input id=\"curr_duration\" type=\"hidden\" value=\"0\"/>"
      @header_buffer.puts "<input id=\"curr_example_count\" type=\"hidden\" value=\"0\"/>"
      @header_buffer.puts "<input id=\"curr_failure_count\" type=\"hidden\" value=\"0\"/>"
      @output.puts @header_buffer.string
    
      @output.flush
    end
  end
end

Public Instance Methods

dump_failures() click to toggle source
# File lib/sim/parallel_html_formatter.rb, line 149
def dump_failures
end
dump_pending() click to toggle source
# File lib/sim/parallel_html_formatter.rb, line 152
def dump_pending
end
dump_summary(duration, example_count, failure_count, pending_count) click to toggle source
# File lib/sim/parallel_html_formatter.rb, line 155
def dump_summary(duration, example_count, failure_count, pending_count)
  # @printer.print_summary(
  #   dry_run?,
  #   duration,
  #   example_count,
  #   failure_count,
  #   pending_count
  # )
  # TODO - kill dry_run?

  formatted_duration = sprintf("%.5f", duration)

  @buffer.puts "<script type=\"text/javascript\">"
  @buffer.puts "  var curr_duration = parseFloat(document.getElementById('curr_duration').value) + #{formatted_duration};"
  @buffer.puts "  document.getElementById('curr_duration').value = curr_duration;"
  @buffer.puts "  document.getElementById('duration').innerHTML = 'Finished in <strong>' + curr_duration.toFixed(3) + ' seconds</strong>';"
  @buffer.puts "</script>"
  @buffer.puts "<script type=\"text/javascript\">"
  @buffer.puts "  var curr_example_count = Number(document.getElementById('curr_example_count').value) + #{example_count};"
  @buffer.puts "  var curr_failure_count = Number(document.getElementById('curr_failure_count').value) + #{failure_count};"
  @buffer.puts "  document.getElementById('curr_example_count').value = curr_example_count;"
  @buffer.puts "  document.getElementById('curr_failure_count').value = curr_failure_count;"
  @buffer.puts "  document.getElementById('totals').innerHTML = curr_example_count + ' example(s),' + curr_failure_count + ' failure(s)';"
  @buffer.puts "</script>"
  @buffer.puts "</div>"
  @buffer.puts "</div>"

  lock_output do
    @output.puts @buffer.string
    @output.flush
  end
end
example_failed(example) click to toggle source
Calls superclass method
# File lib/sim/parallel_html_formatter.rb, line 85
def example_failed(example)
  super(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)

  exception = example.metadata[:execution_result][:exception]
  exception_details = if exception
    {
      :message => exception.message,
      :backtrace => format_backtrace(exception.backtrace, example).join("\n")
    }
  else
    false
  end
  extra = extra_failure_content(exception)

  @printer.print_example_failed(
    example.execution_result[:pending_fixed],
    example.description,
    example.execution_result[:run_time],
    @failed_examples.size,
    exception_details,
    (extra == "") ? false : extra,
    true
  )
end
example_group_number() click to toggle source

The number of the currently running example_group

# File lib/sim/parallel_html_formatter.rb, line 47
def example_group_number
  @example_group_number
end
example_group_started(example_group) click to toggle source
Calls superclass method
# File lib/sim/parallel_html_formatter.rb, line 60
def example_group_started(example_group)
  super(example_group)
  @example_group_red = false
  @example_group_number += 1

  unless example_group_number == 1
    @printer.print_example_group_end
  end
  @printer.print_example_group_start( example_group_number, example_group.description, example_group.parent_groups.size )
end
example_number() click to toggle source

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

# File lib/sim/parallel_html_formatter.rb, line 52
def example_number
  @example_number
end
example_passed(example) click to toggle source
# File lib/sim/parallel_html_formatter.rb, line 80
def example_passed(example)
  @printer.move_progress(percent_done)
  @printer.print_example_passed( example.description, example.execution_result[:run_time] )
end
example_pending(example) click to toggle source
# File lib/sim/parallel_html_formatter.rb, line 122
def 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.metadata[:execution_result][:pending_message] )
end
example_started(example) click to toggle source
Calls superclass method
# File lib/sim/parallel_html_formatter.rb, line 75
def example_started(example)
  super(example)
  @example_number += 1
end
extra_failure_content(exception) 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/sim/parallel_html_formatter.rb, line 133
def extra_failure_content(exception)
  require 'rspec/core/formatters/snippet_extractor'
  backtrace = exception.backtrace.map {|line| backtrace_line(line)}
  backtrace.compact!
  @snippet_extractor ||= RSpec::Core::Formatters::SnippetExtractor.new
  "    <pre class=\"ruby\"><code>#{@snippet_extractor.snippet(backtrace)}</code></pre>"
end
message(message) click to toggle source
# File lib/sim/parallel_html_formatter.rb, line 43
def message(message)
end
percent_done() click to toggle source
# File lib/sim/parallel_html_formatter.rb, line 141
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
start(example_count) click to toggle source
Calls superclass method
# File lib/sim/parallel_html_formatter.rb, line 56
def start(example_count)
  super(example_count)
end
start_dump() click to toggle source
# File lib/sim/parallel_html_formatter.rb, line 71
def start_dump
  @printer.print_example_group_end
end

Private Instance Methods

method_missing(m, *a, &b) click to toggle source
# File lib/sim/parallel_html_formatter.rb, line 38
def method_missing(m, *a, &b)
  # no-op
end