2012年4月15日日曜日

Jenkins のコンソール出力に色をつける(+ Google Test の編集)

きっかけは、Google Test(もとい、iutest)を実行させたときのコンソール出力がこんなことになっていたから。



あぁ、色変わらないんだなぁ~と思っていたら、AnsiColor Pluginってのがあったので試してみました。

結果
AnsiColor Plugin をインストールしたら、ビルド環境の Color ANSI Console Output にチェックを入れるだけです。

実行した結果がこちら。



色つきで表示されましたね!イイ感じです!!

Windows ターゲットだと…
Windows ターゲットでビルドされた場合、WIN32API でコンソールの色を変えるため、エスケープシーケンスが出力されません。
でも、こうして色つき出力されると Windows の場合でもしたくなります。
Google Test の改変
gtest.cc の ColoredPrintf 関数を見ると、Windows の場合とそれ以外とで #ifdef されているのがわかります。
色々とめんどくさいので、環境変数でエスケープシーケンスで出力するか分岐させたいと思います。

今回追加するのは以下のコード。ColoredPrintf 関数の
const HANDLE stdout_handle = GetStdHandle(STD_OUTPUT_HANDLE);
の前にぶち込みます。Google Test のバージョンは 1.6 です。
if( String::CaseInsensitiveCStringEquals(posix::GetEnv("GTEST_ANSI_COLOR"), "yes") ) {
    printf("\033[0;3%sm", GetAnsiColorCode(color));
    vprintf(fmt, args);
    printf("\033[m");  // Resets the terminal to default.
    va_end(args);
    return;
  }
使う時は、SET GTEST_ANSI_COLOR=yes として使います。
(動作確認してないけど、たぶん大丈夫でしょう…)

iutest の場合
--iutest_color=ansi
で、エスケープシーケンスで出力されるようにしました。(v0.24.0.0)

まとめ
色がついたからといって何かあるわけではない。
ただ、視認性が上がるので、致命的な失敗があったら赤色で表示するとかイイかも。

0 件のコメント:

コメントを投稿