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