lib/konacha/runner.rb in konacha-1.4.1 vs lib/konacha/runner.rb in konacha-1.4.2

- old
+ new

@@ -1,6 +1,7 @@ require "capybara" +require "colorize" module Konacha class Runner def self.start new.run @@ -20,20 +21,24 @@ io.puts "" failure_messages.each { |msg| io.write("#{msg}\n\n") } seconds = "%.2f" % (Time.now - before) io.puts "Finished in #{seconds} seconds" - io.puts "#{examples.size} examples, #{failed_examples.size} failures" + io.puts "#{examples.size} examples, #{failed_examples.size} failures, #{pending_examples.size} pending" passed? end def examples spec_runners.map { |spec_runner| spec_runner.examples }.flatten end + def pending_examples + examples.select { |example| example.pending? } + end + def failed_examples - examples.select { |example| not example.passed? } + examples.select { |example| example.failed? } end def passed? examples.all? { |example| example.passed? } end @@ -65,29 +70,43 @@ def io runner.io end + def colorize_dots(dots) + dots = dots.chars.map do |d| + case d + when 'E', 'F'; d.red + when 'P'; d.yellow + when '.'; d.green + else; d + end + end + dots.join '' + end + def run session.visit(spec.url) dots_printed = 0 begin sleep 0.1 done, dots = session.evaluate_script('[Konacha.done, Konacha.dots]') if dots - io.write dots[dots_printed..-1] + io.write colorize_dots(dots[dots_printed..-1]) io.flush dots_printed = dots.length end end until done @examples = JSON.parse(session.evaluate_script('Konacha.getResults()')).map do |row| Example.new(row) end rescue => e - raise Konacha::Error, "Error communicating with browser process: #{e.inspect}" + msg = [e.inspect] + msg << e.message unless e.message.blank? + raise Konacha::Error, "Error communicating with browser process:\n#{msg.join("\n")}" end end class Example def initialize(row) @@ -96,16 +115,26 @@ def passed? @row['passed'] end + def pending? + @row['pending'] + end + + def failed? + !(@row['passed'] || @row['pending']) + end + def failure_message - unless passed? + if failed? msg = [] msg << " Failed: #{@row['name']}" msg << " #{@row['message']}" msg << " in #{@row['trace']['fileName']}:#{@row['trace']['lineNumber']}" if @row['trace'] - msg.join("\n") + msg.join("\n").red + elsif pending? + " Pending: #{@row['name']}".yellow end end end class Error < StandardError