Skip to content
This repository
tag: v2.0.0.beta.3
Fetching contributors…

Octocat-spinner-32-eaf2f5

Cannot retrieve contributors at this time

file 140 lines (106 sloc) 3.735 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 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 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 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 127 128 129 130 131 132 133 134 135 136 137 138 139
module Rspec

  module Core

    module Formatters

      class BaseTextFormatter < BaseFormatter

        def dump_failures
          output.puts
          failed_examples.each_with_index do |failed_example, index|
            exception = failed_example.execution_result[:exception_encountered]
            padding = ' '

            output.puts "#{index.next}) #{failed_example}"
            output.puts "#{padding}Failure/Error: #{read_failed_line(exception, failed_example).strip}"

            exception.message.split("\n").each do |line|
              output.puts "#{padding}#{colorise(line, exception).strip}"
            end

            format_backtrace(exception.backtrace, failed_example).each do |backtrace_info|
              output.puts grey("#{padding}# #{backtrace_info}")
            end

            output.puts
            output.flush
          end
        end

        def colorise(s, failure)
          red(s)
        end

        def dump_summary
          failure_count = failed_examples.size
          pending_count = pending_examples.size

          output.puts "\nFinished in #{duration} seconds\n"

          summary = "#{example_count} example#{'s' unless example_count == 1}, #{failure_count} failures"
          summary << ", #{pending_count} pending" if pending_count > 0

          if failure_count == 0
            if pending_count > 0
              output.puts yellow(summary)
            else
              output.puts green(summary)
            end
          else
            output.puts red(summary)
          end

          # Don't print out profiled info if there are failures, it just clutters the output
          if profile_examples? && failure_count == 0
            sorted_examples = examples.sort_by { |example| example.execution_result[:run_time] }.reverse.first(10)
            output.puts "\nTop #{sorted_examples.size} slowest examples:\n"
            sorted_examples.each do |example|
              output.puts " (#{sprintf("%.7f", example.execution_result[:run_time])} seconds) #{example}"
              output.puts grey(" # #{format_caller(example.metadata[:caller])}")
            end
          end

          output.flush
        end

        # def textmate_link_backtrace(path)
        # file, line = path.split(':')
        # "txmt://open/?url=file://#{File.expand_path(file)}&line=#{line}"
        # end

        def format_caller(caller_info)
          caller_info.to_s.split(':in `block').first
        end

        def dump_pending
          unless pending_examples.empty?
            output.puts
            output.puts "Pending:"
            pending_examples.each do |pending_example, message|
              output.puts " #{pending_example}"
              output.puts grey(" # #{format_caller(pending_example.metadata[:location])}")
            end
          end
          output.flush
        end

        def close
          if IO === output && output != $stdout
            output.close
          end
        end

        protected

        def color(text, color_code)
          return text unless color_enabled?
          "#{color_code}#{text}\e[0m"
        end

        def bold(text)
          color(text, "\e[1m")
        end

        def white(text)
          color(text, "\e[37m")
        end

        def green(text)
          color(text, "\e[32m")
        end

        def red(text)
          color(text, "\e[31m")
        end

        def magenta(text)
          color(text, "\e[35m")
        end

        def yellow(text)
          color(text, "\e[33m")
        end

        def blue(text)
          color(text, "\e[34m")
        end

        def grey(text)
          color(text, "\e[90m")
        end

      end

    end

  end

end
Something went wrong with that request. Please try again.