Permalink
Browse files

add watchr

  • Loading branch information...
1 parent 68c23b2 commit ea95408a0b0caf8e1279f8a00a01ff31249f4bc3 @achiu committed Oct 9, 2011
Showing with 67 additions and 0 deletions.
  1. +67 −0 spec.watchr
View
@@ -0,0 +1,67 @@
+ENV["WATCHR"] = "1"
+system 'clear'
+
+def growl(message)
+ growlnotify = `which growlnotify`.chomp
+ if not growlnotify.empty?
+ title = "Watchr Test Results"
+ image = message.include?('0 failures, 0 errors') ? "~/.watchr_images/passed.png" : "~/.watchr_images/failed.png"
+ options = "-w -n Watchr --image '#{File.expand_path(image)}' -m '#{message}' '#{title}'"
+ system %(#{growlnotify} #{options} &)
+ else
+ puts message
+ end
+end
+
+def run(cmd)
+ puts(cmd)
+ `#{cmd}`
+end
+
+def run_test_file(file)
+ system('clear')
+ result = run(%Q(ruby -I"lib:test" -rubygems #{file}))
+ growl result.split("\n").last rescue nil
+ puts result
+end
+
+def run_all_tests
+ system('clear')
+ result = run "rake spec"
+ growl result.split("\n").last rescue nil
+ puts result
+end
+
+def related_test_files(path)
+ Dir['spec/**/*.rb'].select { |file| file =~ /#{File.basename(path).split(".").first}_spec.rb/ }
+end
+
+def run_suite
+ run_all_tests
+end
+
+watch('spec/spec_helper\.rb') { run_all_tests }
+watch('spec/(.*).*_spec\.rb') { |m| run_test_file(m[0]) }
+watch('lib/.*/.*\.rb') { |m| related_test_files(m[0]).map {|tf| run_test_file(tf) } }
+
+# 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 then
+ @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

0 comments on commit ea95408

Please sign in to comment.