lib/konacha/runner.rb in konacha-0.10.0 vs lib/konacha/runner.rb in konacha-1.0.0.rc1

- old
+ new

@@ -4,115 +4,23 @@ class Runner def self.start new.run end - class Example - def initialize(row) - @row = row - end + attr_reader :io - def passed? - @row['passed'] - end - - def failure_message - unless passed? - msg = [] - msg << " Failed: #{@row['name']}" - msg << " #{@row['message']}" - msg << " in #{@row['trace']['fileName']}:#{@row['trace']['lineNumber']}" if @row['trace'] - msg.join("\n") - end - end - end - - class SpecRunner - attr_reader :runner, :spec - - def initialize(runner, spec) - @runner = runner - @spec = spec - end - - def session - runner.session - end - - def io - runner.io - end - - def run - io.puts dots - io.puts failure_messages - io.puts "\n#{examples.size} examples, #{failed_examples.size} failures" - passed? - end - - def examples - @results ||= begin - session.visit(spec.url) - - previous_results = "" - - session.wait_until(300) do - dots = session.evaluate_script('Konacha.dots') - io.print dots.sub(/^#{Regexp.escape(previous_results)}/, '') - io.flush - previous_results = dots - session.evaluate_script('Konacha.done') - end - - dots = session.evaluate_script('Konacha.dots') - io.print dots.sub(/^#{Regexp.escape(previous_results)}/, '') - - JSON.parse(session.evaluate_script('Konacha.getResults()')).map do |row| - Example.new(row) - end - end - end - - def failed_examples - examples.select { |example| not example.passed? } - end - - def passed? - examples.all? { |example| example.passed? } - end - - def dots - examples; "" - end - - def failure_messages - unless passed? - examples.map { |example| example.failure_message }.compact.join("\n\n") - end - end - end - - attr_reader :suite, :io - def initialize(options = {}) @io = options[:output] || STDOUT end - def spec_runner(spec) - SpecRunner.new(self, spec) - end - def run before = Time.now + spec_runners.each { |spec_runner| spec_runner.run } # prints dots io.puts "" - io.puts dots.to_s io.puts "" - if failure_messages - io.puts failure_messages - io.puts "" - end + 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" passed? @@ -125,29 +33,75 @@ def failed_examples examples.select { |example| not example.passed? } end def passed? - spec_runners.all? { |spec_runner| spec_runner.passed? } + examples.all? { |example| example.passed? } end - def dots - spec_runners.map { |spec_runner| spec_runner.dots }.join - end - def failure_messages - unless passed? - spec_runners.map { |spec_runner| spec_runner.failure_messages }.compact.join("\n\n") - end + examples.map { |example| example.failure_message }.compact end def session @session ||= Capybara::Session.new(Konacha.driver, Konacha.application) end - protected - def spec_runners @spec_runners ||= Konacha::Spec.all.map { |spec| SpecRunner.new(self, spec) } + end + end + + class SpecRunner + attr_reader :runner, :spec, :examples + + def initialize(runner, spec) + @runner = runner + @spec = spec + end + + def session + runner.session + end + + def io + runner.io + end + + def run + session.visit(spec.url) + + dots_printed = 0 + begin + sleep 0.1 + done, dots = session.evaluate_script('[Konacha.done, Konacha.dots]') + io.write dots[dots_printed..-1] + io.flush + dots_printed = dots.length + end until done + + @examples = JSON.parse(session.evaluate_script('Konacha.getResults()')).map do |row| + Example.new(row) + end + end + end + + class Example + def initialize(row) + @row = row + end + + def passed? + @row['passed'] + end + + def failure_message + unless passed? + msg = [] + msg << " Failed: #{@row['name']}" + msg << " #{@row['message']}" + msg << " in #{@row['trace']['fileName']}:#{@row['trace']['lineNumber']}" if @row['trace'] + msg.join("\n") + end end end end