From 4e2cb5a2d9c68bbdbf0ba24a5704ee5d6a13746a Mon Sep 17 00:00:00 2001 From: mo k Date: Thu, 12 Apr 2012 21:48:17 -0600 Subject: tweaked jp's continuous testing script. --- continuous_testing | 104 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 continuous_testing (limited to 'continuous_testing') 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 -- cgit v1.2.3