Class: RSpec::Core::Formatters::BaseTextFormatter
- Inherits:
-
BaseFormatter
- Object
- BaseFormatter
- RSpec::Core::Formatters::BaseTextFormatter
- Defined in:
- lib/rspec/core/formatters/base_text_formatter.rb
Overview
Base for all of RSpec's built-in formatters. See RSpec::Core::Formatters::BaseFormatter to learn more about all of the methods called by the reporter.
Direct Known Subclasses
Constant Summary collapse
- VT100_COLORS =
{ :black => 30, :red => 31, :green => 32, :yellow => 33, :blue => 34, :magenta => 35, :cyan => 36, :white => 37 }
- VT100_COLOR_CODES =
VT100_COLORS.values.to_set
Constants included from Helpers
Helpers::DEFAULT_PRECISION, Helpers::SUB_SECOND_PRECISION
Instance Attribute Summary
Attributes inherited from BaseFormatter
#duration, #example_count, #example_group, #examples, #failed_examples, #failure_count, #output, #pending_count, #pending_examples
Instance Method Summary collapse
- #close ⇒ Object
- #color_code_for(code_or_symbol) ⇒ Object
-
#colorise_summary(summary) ⇒ Object
Colorizes the output red for failure, yellow for pending, and green otherwise.
- #colorize(text, code_or_symbol) ⇒ Object
-
#dump_commands_to_rerun_failed_examples ⇒ Object
Outputs commands which can be used to re-run failed examples.
- #dump_failures ⇒ Object
- #dump_pending ⇒ Object
-
#dump_profile ⇒ Object
Outputs the slowest examples and example groups in a report when using
--profile COUNT
(default 10). - #dump_profile_slowest_example_groups ⇒ Object
- #dump_profile_slowest_examples ⇒ Object
- #dump_summary(duration, example_count, failure_count, pending_count) ⇒ Object
- #message(message) ⇒ Object
- #seed(number) ⇒ Object
-
#summary_line(example_count, failure_count, pending_count) ⇒ Object
Outputs summary with number of examples, failures and pending.
Methods inherited from BaseFormatter
#example_failed, #example_group_finished, #example_group_started, #example_passed, #example_pending, #example_started, #format_backtrace, #initialize, #start, #start_dump, #stop
Methods included from Helpers
#format_duration, #format_seconds, #pluralize, #strip_trailing_zeroes
Methods included from BacktraceFormatter
Constructor Details
This class inherits a constructor from RSpec::Core::Formatters::BaseFormatter
Instance Method Details
#close ⇒ Object
162 163 164 |
# File 'lib/rspec/core/formatters/base_text_formatter.rb', line 162 def close output.close if IO === output && output != $stdout end |
#color_code_for(code_or_symbol) ⇒ Object
179 180 181 182 183 184 185 186 187 |
# File 'lib/rspec/core/formatters/base_text_formatter.rb', line 179 def color_code_for(code_or_symbol) if VT100_COLOR_CODES.include?(code_or_symbol) code_or_symbol else VT100_COLORS.fetch(code_or_symbol) do color_code_for(:white) end end end |
#colorise_summary(summary) ⇒ Object
Colorizes the output red for failure, yellow for pending, and green otherwise.
35 36 37 38 39 40 41 42 43 |
# File 'lib/rspec/core/formatters/base_text_formatter.rb', line 35 def colorise_summary(summary) if failure_count > 0 color(summary, RSpec.configuration.failure_color) elsif pending_count > 0 color(summary, RSpec.configuration.pending_color) else color(summary, RSpec.configuration.success_color) end end |
#colorize(text, code_or_symbol) ⇒ Object
189 190 191 |
# File 'lib/rspec/core/formatters/base_text_formatter.rb', line 189 def colorize(text, code_or_symbol) "\e[#{color_code_for(code_or_symbol)}m#{text}\e[0m" end |
#dump_commands_to_rerun_failed_examples ⇒ Object
Outputs commands which can be used to re-run failed examples.
57 58 59 60 61 62 63 64 65 66 |
# File 'lib/rspec/core/formatters/base_text_formatter.rb', line 57 def dump_commands_to_rerun_failed_examples return if failed_examples.empty? output.puts output.puts("Failed examples:") output.puts failed_examples.each do |example| output.puts(failure_color("rspec #{RSpec::Core::Metadata::relative_path(example.location)}") + " " + detail_color("# #{example.full_description}")) end end |
#dump_failures ⇒ Object
18 19 20 21 22 23 24 25 26 27 |
# File 'lib/rspec/core/formatters/base_text_formatter.rb', line 18 def dump_failures return if failed_examples.empty? output.puts output.puts "Failures:" failed_examples.each_with_index do |example, index| output.puts pending_fixed?(example) ? dump_pending_fixed(example, index) : dump_failure(example, index) dump_backtrace(example) end end |
#dump_pending ⇒ Object
139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 |
# File 'lib/rspec/core/formatters/base_text_formatter.rb', line 139 def dump_pending unless pending_examples.empty? output.puts output.puts "Pending:" pending_examples.each do |pending_example| output.puts pending_color(" #{pending_example.full_description}") output.puts detail_color(" # #{pending_example.execution_result[:pending_message]}") output.puts detail_color(" # #{format_caller(pending_example.location)}") if pending_example.execution_result[:exception] \ && RSpec.configuration.show_failures_in_pending_blocks? dump_failure_info(pending_example) dump_backtrace(pending_example) end end end end |
#dump_profile ⇒ Object
Outputs the slowest examples and example groups in a report when using --profile COUNT
(default 10).
72 73 74 75 |
# File 'lib/rspec/core/formatters/base_text_formatter.rb', line 72 def dump_profile dump_profile_slowest_examples dump_profile_slowest_example_groups end |
#dump_profile_slowest_example_groups ⇒ Object
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 |
# File 'lib/rspec/core/formatters/base_text_formatter.rb', line 96 def dump_profile_slowest_example_groups number_of_examples = RSpec.configuration.profile_examples example_groups = {} examples.each do |example| location = example.example_group.parent_groups.last.[:example_group][:location] example_groups[location] ||= Hash.new(0) example_groups[location][:total_time] += example.execution_result[:run_time] example_groups[location][:count] += 1 example_groups[location][:description] = example.example_group.top_level_description unless example_groups[location].has_key?(:description) end # stop if we've only one example group return if example_groups.keys.length <= 1 example_groups.each do |loc, hash| hash[:average] = hash[:total_time].to_f / hash[:count] end sorted_groups = example_groups.sort_by {|_, hash| -hash[:average]}.first(number_of_examples) output.puts "\nTop #{sorted_groups.size} slowest example groups:" sorted_groups.each do |loc, hash| average = "#{failure_color(format_seconds(hash[:average]))} #{failure_color("seconds")} average" total = "#{format_seconds(hash[:total_time])} seconds" count = pluralize(hash[:count], "example") output.puts " #{hash[:description]}" output.puts detail_color(" #{average} (#{total} / #{count}) #{loc}") end end |
#dump_profile_slowest_examples ⇒ Object
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/rspec/core/formatters/base_text_formatter.rb', line 77 def dump_profile_slowest_examples number_of_examples = RSpec.configuration.profile_examples sorted_examples = examples.sort_by {|example| example.execution_result[:run_time] }.reverse.first(number_of_examples) total, slows = [examples, sorted_examples].map {|exs| exs.inject(0.0) {|i, e| i + e.execution_result[:run_time] }} time_taken = slows / total percentage = '%.1f' % ((time_taken.nan? ? 0.0 : time_taken) * 100) output.puts "\nTop #{sorted_examples.size} slowest examples (#{format_seconds(slows)} seconds, #{percentage}% of total time):\n" sorted_examples.each do |example| output.puts " #{example.full_description}" output.puts detail_color(" #{failure_color(format_seconds(example.execution_result[:run_time]))} #{failure_color("seconds")} #{format_caller(example.location)}") end end |
#dump_summary(duration, example_count, failure_count, pending_count) ⇒ Object
45 46 47 48 49 50 51 |
# File 'lib/rspec/core/formatters/base_text_formatter.rb', line 45 def dump_summary(duration, example_count, failure_count, pending_count) super(duration, example_count, failure_count, pending_count) dump_profile unless mute_profile_output?(failure_count) output.puts "\nFinished in #{format_duration(duration)}\n" output.puts colorise_summary(summary_line(example_count, failure_count, pending_count)) dump_commands_to_rerun_failed_examples end |
#message(message) ⇒ Object
14 15 16 |
# File 'lib/rspec/core/formatters/base_text_formatter.rb', line 14 def () output.puts end |
#seed(number) ⇒ Object
156 157 158 159 160 |
# File 'lib/rspec/core/formatters/base_text_formatter.rb', line 156 def seed(number) output.puts output.puts "Randomized with seed #{number}" output.puts end |
#summary_line(example_count, failure_count, pending_count) ⇒ Object
Outputs summary with number of examples, failures and pending.
132 133 134 135 136 137 |
# File 'lib/rspec/core/formatters/base_text_formatter.rb', line 132 def summary_line(example_count, failure_count, pending_count) summary = pluralize(example_count, "example") summary << ", " << pluralize(failure_count, "failure") summary << ", #{pending_count} pending" if pending_count > 0 summary end |