lib/autotest_notification.rb in blackwinter-autotest-notification-1.8.0 vs lib/autotest_notification.rb in blackwinter-autotest-notification-2.2.0

- old
+ new

@@ -1,16 +1,29 @@ $:.unshift(File.dirname(__FILE__)) -%w{ linux mac windows cygwin doom buuf }.each { |x| require "autotest_notification/#{x}" } module AutotestNotification - IMAGES_DIRECTORY = File.expand_path(File.dirname(__FILE__) + "/../images/") - SUCCESS_IMAGE = "#{IMAGES_DIRECTORY}/pass.png"; - FAIL_IMAGE = "#{IMAGES_DIRECTORY}/fail.png"; - PENDING_IMAGE = "#{IMAGES_DIRECTORY}/pending.png" + class Config - EXPIRATION_IN_SECONDS = 3 + class << self + attr_reader :images_directory + attr_accessor :success_image, :fail_image, :pending_image, :expiration_in_seconds + def images_directory=(path) + @images_directory = File.expand_path(path) + + @success_image = "#{@images_directory}/pass.png" + @fail_image = "#{@images_directory}/fail.png" + @pending_image = "#{@images_directory}/pending.png" + end + end + + self.images_directory = "#{File.dirname(__FILE__)}/../images/" + + self.expiration_in_seconds = 3 + + end + Autotest.add_hook :ran_command do |at| result = at.results.is_a?(Array) ? at.results.last : at.results.split("\n").last if result %w{ test assertion error example pending failure }.each { |x| instance_variable_set "@#{x}s", result[/(\d+) #{x}/, 1].to_i } @@ -27,34 +40,64 @@ msg = "1 exception occurred" @failures = 1 end if @failures > 0 || @errors > 0 - notify "FAIL", msg, FAIL_IMAGE, @tests + @examples, @failures + @errors, 2 + notify "FAIL", msg, Config.fail_image, @tests + @examples, @failures + @errors, 2 elsif PENDING && @pendings > 0 - notify "Pending", msg, PENDING_IMAGE, @tests + @examples, @failures + @errors, 1 + notify "Pending", msg, Config.pending_image, @tests + @examples, @failures + @errors, 1 else - notify "Pass", msg, SUCCESS_IMAGE, @tests + @examples, 0, -2 + notify "Pass", msg, Config.success_image, @tests + @examples, 0, -2 end puts "\e[#{code}m#{'=' * 80}\e[0m\n\n" end end + Autotest.add_hook :ran_features do |at| + results = at.results.is_a?(Array) ? at.results : at.results.split("\n") + if results + # How many scenarios and steps have passed, are pending, have failed or are undefined? + for result in results + next unless result =~ /^\d+ (scenario|step)/ + scenario_or_step = $1 + %w( scenario step passed pending failed undefined ).each do |x| + instance_variable_set "@#{scenario_or_step}_#{x}", result[/(\d+) #{x}/, 1].to_i + end + end + + count = @scenario_scenario + @step_step + failed = @scenario_failed + @step_failed + pending = @scenario_pending + @step_pending + @scenario_undefined + @step_undefined + + code = (failed > 0) ? 31 : (pending > 0) ? 33 : 32 + msg = feature_message(@scenario_scenario, @scenario_pending + @scenario_undefined, @scenario_failed, @step_step, @step_pending + @step_undefined, @step_failed) + + if @scenario_failed + @step_failed > 0 + notify "FAIL", msg, Config.fail_image, count, failed, 2 + elsif PENDING && pending > 0 + notify "Pending", msg, Config.pending_image, count, failed, 1 + else + notify "Pass", msg, Config.success_image, count, 0, -2 + end + puts "\e[#{code}m#{'=' * 80}\e[0m\n\n" + end + end + class << self - def notify(title, msg, img = SUCCESS_IMAGE, total = 1, failures = 0, priority = 0) + def notify(title, msg, img = Config.success_image, total = 1, failures = 0, priority = 0) img = Doom.image(total, failures) if DOOM_EDITION img = Buuf.image(title.downcase) if BUUF case RUBY_PLATFORM when /linux/ Linux.notify(title, msg, img, total, failures, priority) when /darwin/ Mac.notify(title, msg, img, total, failures, priority) when /cygwin/ - Cygwin.notify(title, msg, img) + Cygwin.notify(title, msg, img, total, failures) when /mswin/ Windows.notify(title, msg, img) end end @@ -67,7 +110,19 @@ end def rspec_message(examples, failures, pendings) "#{pluralize('example', examples)}, #{pluralize('failure', failures)}, #{pendings} pending" end + + def feature_message(scenarios, pending_scenarios, failed_scenarios, steps, pending_steps, failed_steps) + "#{pluralize('scenario', scenarios)}, #{pluralize('failure', failed_scenarios)}, #{pending_scenarios} pending\n" + + "#{pluralize('step', steps)}, #{pluralize('failure', failed_steps)}, #{pending_steps} pending" + end end +end + +%w{ linux mac windows cygwin doom buuf }.each { |x| require "autotest_notification/#{x}" } + +if RUBY_PLATFORM == 'java' + require 'java' + AutotestNotification.const_set :RUBY_PLATFORM, java.lang.System.getProperty('os.name').downcase end