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