1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
|
# frozen_string_literal: true
ENV['FOG_MOCK'] ||= 'true'
ENV['AUTOTEST'] = 'true'
ENV['WATCHR'] = '1'
system 'clear'
def growl(message)
growlnotify = `which growlnotify`.chomp
title = 'Watchr Test Results'
image = case message
when /(\d+)\s+?(failure|error)/i
(Regexp.last_match(1).to_i == 0) ? '~/.watchr_images/passed.png' : '~/.watchr_images/failed.png'
else
'~/.watchr_images/unknown.png'
end
options = "-w -n Watchr --image '#{File.expand_path(image)}' -m '#{message}' '#{title}'"
system %(#{growlnotify} #{options} &)
end
def run(cmd)
puts(cmd)
`#{cmd}`
end
def run_spec_test(file)
if File.exist? file
result = run "rspec --format p #{file}"
growl result.split("\n").last
puts result
else
puts "FIXME: No test #{file} [#{Time.now}]"
end
end
def filter_rspec(data)
data.split("\n").grep(/^(\d+)\s+exampl\w+.*?(\d+).*?failur\w+.*?(\d+).*?pending/).join("\n")
end
def run_all_tests
system('clear')
files = Dir.glob('spec/**/*_spec.rb').join(' ')
result = run "rspec #{files}"
growl_results = filter_rspec result
growl growl_results
puts result
puts "GROWL: #{growl_results}"
end
# Ctrl-\
Signal.trap 'QUIT' do
puts " --- Running all tests ---\n\n"
run_all_tests
end
@interrupted = false
# Ctrl-C
Signal.trap 'INT' do
if @interrupted
@wants_to_quit = true
abort("\n")
else
puts 'Interrupt a second time to quit'
@interrupted = true
Kernel.sleep 1.5
# raise Interrupt, nil # let the run loop catch it
run_suite
end
end
watch('spec/.*_spec\.rb') do |_md|
run_all_tests
end
watch('lib/.*\.rb') do |_md|
run_all_tests
end
|