/vendor/bundle/jruby/2.1/gems/rspec-core-2.14.8/lib/rspec/core/formatters/html_formatter.rb

https://github.com/delowong/logstash · Ruby · 155 lines · 124 code · 25 blank · 6 comment · 4 complexity · a847706426e4c09bfa11f70917004c34 MD5 · raw file

  1. require 'rspec/core/formatters/base_text_formatter'
  2. require 'rspec/core/formatters/html_printer'
  3. module RSpec
  4. module Core
  5. module Formatters
  6. class HtmlFormatter < BaseTextFormatter
  7. def initialize(output)
  8. super(output)
  9. @example_group_number = 0
  10. @example_number = 0
  11. @header_red = nil
  12. @printer = HtmlPrinter.new(output)
  13. end
  14. private
  15. def method_missing(m, *a, &b)
  16. # no-op
  17. end
  18. public
  19. def message(message)
  20. end
  21. # The number of the currently running example_group
  22. def example_group_number
  23. @example_group_number
  24. end
  25. # The number of the currently running example (a global counter)
  26. def example_number
  27. @example_number
  28. end
  29. def start(example_count)
  30. super(example_count)
  31. @printer.print_html_start
  32. @printer.flush
  33. end
  34. def example_group_started(example_group)
  35. super(example_group)
  36. @example_group_red = false
  37. @example_group_number += 1
  38. unless example_group_number == 1
  39. @printer.print_example_group_end
  40. end
  41. @printer.print_example_group_start( example_group_number, example_group.description, example_group.parent_groups.size )
  42. @printer.flush
  43. end
  44. def start_dump
  45. @printer.print_example_group_end
  46. @printer.flush
  47. end
  48. def example_started(example)
  49. super(example)
  50. @example_number += 1
  51. end
  52. def example_passed(example)
  53. @printer.move_progress(percent_done)
  54. @printer.print_example_passed( example.description, example.execution_result[:run_time] )
  55. @printer.flush
  56. end
  57. def example_failed(example)
  58. super(example)
  59. unless @header_red
  60. @header_red = true
  61. @printer.make_header_red
  62. end
  63. unless @example_group_red
  64. @example_group_red = true
  65. @printer.make_example_group_header_red(example_group_number)
  66. end
  67. @printer.move_progress(percent_done)
  68. exception = example.metadata[:execution_result][:exception]
  69. exception_details = if exception
  70. {
  71. :message => exception.message,
  72. :backtrace => format_backtrace(exception.backtrace, example).join("\n")
  73. }
  74. else
  75. false
  76. end
  77. extra = extra_failure_content(exception)
  78. @printer.print_example_failed(
  79. example.execution_result[:pending_fixed],
  80. example.description,
  81. example.execution_result[:run_time],
  82. @failed_examples.size,
  83. exception_details,
  84. (extra == "") ? false : extra,
  85. true
  86. )
  87. @printer.flush
  88. end
  89. def example_pending(example)
  90. @printer.make_header_yellow unless @header_red
  91. @printer.make_example_group_header_yellow(example_group_number) unless @example_group_red
  92. @printer.move_progress(percent_done)
  93. @printer.print_example_pending( example.description, example.metadata[:execution_result][:pending_message] )
  94. @printer.flush
  95. end
  96. # Override this method if you wish to output extra HTML for a failed spec. For example, you
  97. # could output links to images or other files produced during the specs.
  98. #
  99. def extra_failure_content(exception)
  100. require 'rspec/core/formatters/snippet_extractor'
  101. backtrace = exception.backtrace.map {|line| backtrace_line(line)}
  102. backtrace.compact!
  103. @snippet_extractor ||= SnippetExtractor.new
  104. " <pre class=\"ruby\"><code>#{@snippet_extractor.snippet(backtrace)}</code></pre>"
  105. end
  106. def percent_done
  107. result = 100.0
  108. if @example_count > 0
  109. result = (((example_number).to_f / @example_count.to_f * 1000).to_i / 10.0).to_f
  110. end
  111. result
  112. end
  113. def dump_failures
  114. end
  115. def dump_pending
  116. end
  117. def dump_summary(duration, example_count, failure_count, pending_count)
  118. @printer.print_summary(
  119. dry_run?,
  120. duration,
  121. example_count,
  122. failure_count,
  123. pending_count
  124. )
  125. @printer.flush
  126. end
  127. end
  128. end
  129. end
  130. end