diff options
| author | mo k <mo@mokhan.ca> | 2012-04-12 21:48:17 -0600 |
|---|---|---|
| committer | mo k <mo@mokhan.ca> | 2012-04-12 21:48:17 -0600 |
| commit | 4e2cb5a2d9c68bbdbf0ba24a5704ee5d6a13746a (patch) | |
| tree | 8a900c348bb4c55b777c11967a296c7a69a933ed /continuous_testing | |
| parent | 071d432d0f399030e38a4543741a3b108f133acb (diff) | |
tweaked jp's continuous testing script.
Diffstat (limited to 'continuous_testing')
| -rw-r--r-- | continuous_testing | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/continuous_testing b/continuous_testing new file mode 100644 index 0000000..94d53cc --- /dev/null +++ b/continuous_testing @@ -0,0 +1,104 @@ +#!/usr/bin/env ruby +require 'ruby_gntp' + +@all_files ={} + +class ChangedFile + attr_accessor :name,:last_changed_time + + def initialize(name) + @name = name + @last_changed_time = File.mtime(name) + end + + def has_changed? + @last_changed_time < File.mtime(@name) + end + + def update + @last_changed_time = File.mtime(@name) + end + + def was_deleted? + not File.exists?(@name) + end +end + + +class BuildMessage + def initialize(error_items) + @error_items = error_items + end + + def successful + @error_items.length == 0 + end + + def message + successful ? "Build Successful" : @error_items.join("\r\n") + end +end + + +def scan_for_new_files + has_new_files = false + Dir.glob("**/*.cs").each do|file| + unless (@all_files.key?(file)) + has_new_files = true + @all_files[file] = ChangedFile.new(file) + end + end + has_new_files +end + +def remove_all_deleted + remaining = @all_files.select{|path,item| ! item.was_deleted?} + files_were_deleted = remaining.length != @all_files.length + @all_files = remaining + files_were_deleted +end + +def changes_have_occured + return scan_for_new_files | remove_all_deleted | files_have_changed +end + +def files_have_changed + has_changed = false + @all_files.each do|path,file| + has_changed |= file.has_changed? + file.update + end + return has_changed +end + +def get_errors_in(output) + error_pattern = /error|FAIL/ + output.split("\n").select{|item| error_pattern =~ item} +end + +def notify(build_message) + #icon = build_message.successful ? "green" : "red" + #args = {:t => "Build",:i => ".\\#{icon}.jpg"} + #command_line = "build/tools/growl/growlnotify.exe" + #args.each {|key,value| command_line += " /#{key}:\"#{value}\""} + #`#{command_line} "#{build_message.message}"` + + GNTP.notify({ + :app_name => 'c# practice', + :title => build_message.successful ? 'PASS' : 'FAIL', + :text => build_message.message, + :icon => build_message.successful ? 'green.jpg' : 'red.jpg' + }) +end + +def monitor + if changes_have_occured + errors = get_errors_in(`rake spec`) + notify(BuildMessage.new(errors)) + end +end + +while true do + monitor + sleep(1) +end |
