lib/lopata/observers/console_output_observer.rb in lopata-0.1.13 vs lib/lopata/observers/console_output_observer.rb in lopata-0.1.14
- old
+ new
@@ -1,100 +1,100 @@
-require_relative 'backtrace_formatter'
-require 'forwardable'
-
-module Lopata
- module Observers
- # @private
- class ConsoleOutputObserver < BaseObserver
- extend Forwardable
- # @private
- attr_reader :output
- # @private
- def_delegators :output, :puts, :flush
-
- def initialize
- @output = $stdout
- end
-
- # @see Lopata::Observers::BaseObserver#finished
- def finished(world)
- total = statuses.values.inject(0, &:+)
- counts = statuses.map do |status, count|
- colored("%d %s", status) % [count, status]
- end
- details = counts.empty? ? "" : "(%s)" % counts.join(', ')
- puts "#{total} scenario%s %s" % [total == 1 ? '' : 's', details]
- end
-
- # @see Lopata::Observers::BaseObserver#scenario_finished
- def scenario_finished(scenario)
- message = "#{scenario.title} #{bold(scenario.status.to_s.upcase)}"
- puts colored(message, scenario.status)
-
- statuses[scenario.status] ||= 0
- statuses[scenario.status] += 1
-
- if scenario.failed?
- scenario.steps.each do |step|
- puts colored(" #{status_marker(step.status)} #{step.title}", step.status)
- puts indent(4, backtrace_formatter.error_message(step.exception, include_backtrace: true)) if step.failed?
- end
- end
-
- flush
- end
-
- private
-
- def colored(text, status)
- case status
- when :failed then red(text)
- when :passed then green(text)
- when :skipped then cyan(text)
- when :pending then yellow(text)
- else text
- end
- end
-
- {
- red: 31,
- green: 32,
- cyan: 36,
- yellow: 33,
- bold: 1,
- }.each do |color, code|
- define_method(color) do |text|
- wrap(text, code)
- end
- end
-
- def wrap(text, code)
- "\e[#{code}m#{text}\e[0m"
- end
-
- def backtrace_formatter
- @backtrace_formatter ||= Lopata::Observers::BacktraceFormatter.new
- end
-
- def status_marker(status)
- case status
- when :failed then "[!]"
- when :skipped then "[-]"
- when :pending then "[?]"
- else "[+]"
- end
- end
-
- # Adds indent to text
- # @param cols [Number] number of spaces to be added
- # @param text [String] text to add indent
- # @return [String] text with indent
- def indent(cols, text)
- text.split("\n").map { |line| " " * cols + line }.join("\n")
- end
-
- def statuses
- @statuses ||= {}
- end
- end
- end
-end
+require_relative 'backtrace_formatter'
+require 'forwardable'
+
+module Lopata
+ module Observers
+ # @private
+ class ConsoleOutputObserver < BaseObserver
+ extend Forwardable
+ # @private
+ attr_reader :output
+ # @private
+ def_delegators :output, :puts, :flush
+
+ def initialize
+ @output = $stdout
+ end
+
+ # @see Lopata::Observers::BaseObserver#finished
+ def finished(world)
+ total = statuses.values.inject(0, &:+)
+ counts = statuses.map do |status, count|
+ colored("%d %s", status) % [count, status]
+ end
+ details = counts.empty? ? "" : "(%s)" % counts.join(', ')
+ puts "#{total} scenario%s %s" % [total == 1 ? '' : 's', details]
+ end
+
+ # @see Lopata::Observers::BaseObserver#scenario_finished
+ def scenario_finished(scenario)
+ message = "#{scenario.title} #{bold(scenario.status.to_s.upcase)}"
+ puts colored(message, scenario.status)
+
+ statuses[scenario.status] ||= 0
+ statuses[scenario.status] += 1
+
+ if scenario.failed?
+ scenario.steps.each do |step|
+ puts colored(" #{status_marker(step.status)} #{step.title}", step.status)
+ puts indent(4, backtrace_formatter.error_message(step.exception, include_backtrace: true)) if step.failed?
+ end
+ end
+
+ flush
+ end
+
+ private
+
+ def colored(text, status)
+ case status
+ when :failed then red(text)
+ when :passed then green(text)
+ when :skipped then cyan(text)
+ when :pending then yellow(text)
+ else text
+ end
+ end
+
+ {
+ red: 31,
+ green: 32,
+ cyan: 36,
+ yellow: 33,
+ bold: 1,
+ }.each do |color, code|
+ define_method(color) do |text|
+ wrap(text, code)
+ end
+ end
+
+ def wrap(text, code)
+ "\e[#{code}m#{text}\e[0m"
+ end
+
+ def backtrace_formatter
+ @backtrace_formatter ||= Lopata::Observers::BacktraceFormatter.new
+ end
+
+ def status_marker(status)
+ case status
+ when :failed then "[!]"
+ when :skipped then "[-]"
+ when :pending then "[?]"
+ else "[+]"
+ end
+ end
+
+ # Adds indent to text
+ # @param cols [Number] number of spaces to be added
+ # @param text [String] text to add indent
+ # @return [String] text with indent
+ def indent(cols, text)
+ text.split("\n").map { |line| " " * cols + line }.join("\n")
+ end
+
+ def statuses
+ @statuses ||= {}
+ end
+ end
+ end
+end