-> 06 { 11 / 09 }
test の結果を screen のステータスラインに表示
test まくってるときは、やっぱ視覚的にいつでもテストの結果がわかるとなんか楽しくてモチベーションにもつながるし、Red -> Green -> Red -> Green のサイクルも面白い。というわけで、テストの結果を screen のステータスラインにも表示させたら面白いんじゃ!と思ったのでやってみたyp。
ZenTest の autotest での .autotest にフック追加して実現。
いろいろ書き換え。autotest 終わると元に戻すとか。デフォルトの hardstatus を文字列でする方法がわからん…
module Autotest::Screen STATUS = %q[%H %`%-w%{=b bw}%n %t%{-}%+w] SCREEN_CMD = 'screen' SCREEN_COLOR = { :black => 'dd', :green => 'gk', :red => 'rw', } def self.message(msg, color = :black) col = SCREEN_COLOR[color] msg = %Q[ %{=b #{col}} #{msg} %{-}] send_cmd(msg) end def self.clear send_cmd('') end def self.run_screen_session? str = `#{SCREEN_CMD} -ls` str.match(/(\d+) Socket/) && ($1.to_i > 0) end def self.execute? !($TESTING || !run_screen_session?) end def self.send_cmd(msg) cmd = %Q[#{SCREEN_CMD} -X eval 'hardstatus alwayslastline "#{(STATUS + msg).gsub('"', '\"')}"'] system cmd end Autotest.add_hook :run do |at| message 'Run Tests' if execute? end Autotest.add_hook :quit do |at| clear if execute? end Autotest.add_hook :ran_command do |at| if execute? at.results.sub(/(\d+) failures, (\d+) errors/) do |m| if $1 == '0' && $2 == '0' message "All Green", :green else message "Red F:#{$1} E:#{$2}", :red end end end end end
status はご自分の hardstatus で適当に。Test::Unit::TestCase でも UI::Console::Runner(だっけ?)ちょっとオーバーライドすればいけると思う。
コメント
トラックバック - http://subtech.g.hatena.ne.jp/secondlife/20061109

