2014年12月1日月曜日

iutest v1.11.0 をリリースしました

iutest v1.11.0 をリリースしました。
変更点は以下の通りです。

  • 追加
    • fused-src 対応
    • Wandbox 対応
    • Matcher に Eq,Ne,Le,Lt,Ge,Gt,IsNull,NotNull,TypeEq を追加
    • Matcher に StrEq,StrNe,StrCaseEq,StrCaseNe,HasSubstr を追加
    • Matcher に FloatEq,DoubleEq,NanSensitiveFloatEq,NanSensitiveDoubleEq を追加
    • Matcher に Not,ResultOf,Pointee を追加
    • コンテナMatcher に Each,ContainerEq,Pointwise,At,IsEmpty,ElementsAre,ElementsAreArray を追加
    • メンバーMatcher に Key,Pair,Field,Property を追加
    • ワイルドカードMatcher A,_ を追加
  • 変更
    • コンテナMatcher の Contains から HasSubstr 機能を削除
  • 修正
    • IUTEST_*_FLOAT_EQ,DOUBLE_EQ で NAN の比較が真を返す不具合を修正
    • コンテナMatcher の条件に Matcher を使えるように修正
    • Visual Studio 2015 Preview 対応
    • バグ修正

今回の大きな変更点は Matcher の種類追加、fused-src の追加、Wandbox 対応の3つです。

Matcher の種類追加
IUTEST_*_THAT で使える Matcher を大幅に追加し、
Google Mock 1.6.0 相当の Matcher が使えるようになりました。

また、Google Mock との互換性対応も少しだけしました。
対応はしましたが、ほんとに少しだけなので注意してください。
また、iutest v1.10.0 から挙動の変わった Matcher もあるので、ご了承ください。

fused-src の追加
fused-src は iutest の全ソースコードを1つにまとめたものです。
Google Test にも同様のものがあります。
1つのファイルにまとまったことで、ライブラリを作らなくてもプロジェクトに簡単に追加することができます。

とはいえ、iutest はヘッダーオンリーなテスティングフレームワークですので、メリットがないように思えますが、これは次の Wandbox 対応のための布石です。

Wandbox 対応
Wandbox で iutest が使えるように対応しました。
この話は Boost 勉強会でも話してきました。ブログズミ: Boost.勉強会#16 大阪に行ってきました

ここでは簡単に使い方を説明します。
iutest/tools/wandbox に iuwandbox.py があります。これが Wandbox 連携ツールです。

$ ./iuwandbox.py -h
usage: iuwandbox.py [-h] [-v] [--list_compiler] [--list_options LIST_OPTIONS]
                    [-c COMPILER] [-x OPTIONS] [--stdin STDIN]
                    [-f COMPILER_OPTION_RAW] [-r RUNTIME_OPTION_RAW] [-s]
                    [--permlink PERMLINK] [-o OUTPUT] [--encoding ENCODING]
                    [--expand_include]
                    [CODE]

positional arguments:
  CODE                  source code file

optional arguments:
  -h, --help            show this help message and exit
  -v, --version         show program's version number and exit
  --list_compiler       listup compiler.
  --list_options LIST_OPTIONS
                        listup compiler options.
  -c COMPILER, --compiler COMPILER
                        compiler select. default=gcc-head
  -x OPTIONS, --options OPTIONS
                        used options for a compiler. default=warning,gnu++11
  --stdin STDIN         set stdin.
  -f COMPILER_OPTION_RAW, --compiler_option_raw COMPILER_OPTION_RAW
                        compile-time any additional options.
  -r RUNTIME_OPTION_RAW, --runtime_option_raw RUNTIME_OPTION_RAW
                        runtime-time any additional options.
  -s, --save            generate permanent link.
  --permlink PERMLINK   get permanent link.
  -o OUTPUT, --output OUTPUT
                        output source code.
  --encoding ENCODING   set encoding.
  --expand_include      expand include file.
上記がヘルプです。
基本的な機能としては以下の3つがありますが、今回はメイン機能であるコンパイルと実行方法について説明します。
  • コンパイルと実行
  • コンパイラーやオプションのリスト取得
  • permlink から結果を取得

コンパイルと実行
まず、コンパイルしたいソースコードですが、普通にテストコードを書くだけで OK です。
#include "../../include/iutest.hpp"

int main(int argc, char** argv)
{
    IUTEST_INIT(&argc, argv);
    return IUTEST_RUN_ALL_TESTS();
}

IUTEST(Foo, Bar)
{
    IUTEST_ASSERT_EQ(1, abs(-1));
}
あとは、ソースコードのパスを引数に iuwandbox.py に投げるだけです。
すると、以下のように結果が得られます。

--save オプションを付けると permanent link を発行。
また、--output オプションを付けると iuwandbox.py が生成したソースコードをファイルに書き出します。
コンパイラーの設定やオプションなどは、ヘルプを参照してください。

CI サービスとの連携
Wandbox でテストコードが書けるようになったことで、様々なコンパイラーでのチェックができるようになりました。
これを利用して、Travis CI や Jenkins などに組み込むことでコンパイラーチェックの自動化も簡単にできます。

C++ Advent Calender 2014 では、Wandbox + CI について書きたいと思ってます。

0 件のコメント:

コメントを投稿