guard-jasmine-headless-webkit/lib/guard/jasmine-headless-webkit/runner.rb

71 lines
1.9 KiB
Ruby
Raw Normal View History

2011-05-26 14:31:56 +00:00
require 'guard/notifier'
require 'jasmine-headless-webkit'
2011-05-26 14:31:56 +00:00
2011-05-24 01:28:01 +00:00
module Guard
2011-10-11 19:30:39 +00:00
class JasmineHeadlessWebkit
class Runner
2012-01-10 22:14:46 +00:00
def self.run(paths = [], options = {})
2012-01-11 16:31:19 +00:00
report_file = notify_report_file
options = options.merge(:reporters => process_reporters(options[:reporters], report_file), :colors => true, :files => paths)
Jasmine::Headless::Runner.run(options)
notify(report_file)
end
def self.notify_report_file
2012-01-10 22:14:46 +00:00
file = Tempfile.new('guard-jasmine-headless-webkit')
file.close
2012-01-11 16:31:19 +00:00
file.path
end
2011-05-26 14:31:56 +00:00
2012-01-11 16:31:19 +00:00
def self.process_reporters(reporters, report_file)
reporters ||= 'Console'
2011-09-14 14:06:55 +00:00
2012-01-11 16:31:19 +00:00
out = []
reporters.split(' ').each do |reporter|
name, file = reporter.split(':', 2)
out << [ name ]
out.last << file if file && !file.empty?
end
2011-05-26 14:31:56 +00:00
2012-01-11 16:31:19 +00:00
out + [ [ 'File', report_file ] ]
2012-01-10 22:14:46 +00:00
end
2012-01-10 22:14:46 +00:00
def self.notify(file)
if (report = Jasmine::Headless::Report.load(file)).valid?
Notifier.notify(message(report.total, report.failed, report.time, report.has_used_console?), :title => 'Jasmine results', :image => image(report.has_used_console?, report.failed))
report.failed_files
else
raise Jasmine::Headless::InvalidReport
end
2012-01-10 22:14:46 +00:00
rescue Jasmine::Headless::InvalidReport => e
Notifier.notify('Spec runner interrupted!', :title => 'Jasmine results', :image => :failed)
false
end
2011-05-26 15:26:47 +00:00
2012-01-10 22:14:46 +00:00
private
def self.message(total, fails, secs, any_console)
total_word = (total.to_i == 1) ? "test" : "tests"
2012-01-10 22:14:46 +00:00
"#{total} #{total_word}, #{fails} failures, #{secs} secs#{any_console ? ', console.log used' : ''}."
end
2011-05-26 15:26:47 +00:00
2012-01-10 22:14:46 +00:00
def self.image(any_console, fails)
if any_console
:pending
else
if fails.to_i == 0
:success
2011-05-26 15:26:47 +00:00
else
2012-01-10 22:14:46 +00:00
:failed
2011-05-26 15:26:47 +00:00
end
end
2011-05-24 01:28:01 +00:00
end
end
end
end