2006-11-09
そろそろ季節だ
この日記はなれ合いとうんことオナニーについて書いてある日記なので全然ためにならないよ!unsubscribe はここらへん↑
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(だっけ?)ちょっとオーバーライドすればいけると思う。