## CppCutter CppCutter — C++サポート付きのCutter。 |

## 概要

    #define             CPPCUTTER_ENABLED
    #define             CPPCUT_BEGIN_TEST_DECLS
    #define             CPPCUT_END_TEST_DECLS
    #define             cppcut_message                      (...)

## 説明

CppCutterはC++で便利な機能をCutterに追加します。C++でテストを書きたい場合はCppCutterの使用を検討してください。

CppCutterを使うことは簡単です。<cutter.h>の代わりに<cppcutter.h>をinlcudeして、cutter.pcの代わりにcppcutter.pcを使うだけです。

test-xxx.cpp:

    -#include <cutter.h>
    +#include <cppcutter.h>

configure.ac:

    -AC_CHECK_CUTTER
    +AC_CHECK_CPPCUTTER

Makefile.am:

    -XXX_CFLAGS = $(CUTTER_CFLAGS)
    -XXX_LIBS = $(CUTTER_LIBS)
    +XXX_CFLAGS = $(CPPCUTTER_CFLAGS)
    +XXX_LIBS = $(CPPCUTTER_LIBS)

テスト関数はnamespaceの中に定義します。名前付け規則はCutterと同じです。つまり、'test_...'関数はテスト関数、'setup'または'cut_setup'は初期化関数、'teardown'または'cut_teardown'は後始末関数になります。

test-calc.cpp:

    #include <cppcutter.h>

    namespace calc
    {
        void
        test_add (void)
        {
            cppcut_assert_equal(3, calc.add(1, 2));
        }

        void
        test_sub (void)
        {
            cppcut_assert_equal(5, calc.sub(9, 4));
        }
    }

新しいテストを追加するときはいつも通り関数を定義するだけです。よくわからないマクロを使う必要はありません。

## 詳細

### CPPCUTTER_ENABLED

    #define CPPCUTTER_ENABLED 1

CppCutterが有効なとき定義されます。

1.0.9から

### CPPCUT_BEGIN_TEST_DECLS

    #define CPPCUT_BEGIN_TEST_DECLS extern "C" {

### Warning

`CPPCUT_BEGIN_TEST_DECLS`はバージョン1.1.0から非推奨になりました。新しく書くコードでは使わないでください。代わりにnamespaceを使ってください。

テスト関数のプロトタイプ宣言は`CPPCUT_BEGIN_TEST_DECLS`と`CPPCUT_END_TEST_DECLS`で囲みます:

    CPPCUT_BEGIN_TEST_DECLS
    void test_add ();
    void test_remove ();
    CPPCUT_END_TEST_DECLS

このマクロは単にテスト関数のプロトタイプ宣言を'extern "C" {...}'で囲むだけです。

1.0.9から

### CPPCUT_END_TEST_DECLS

    #define CPPCUT_END_TEST_DECLS }

### Warning

`CPPCUT_END_TEST_DECLS`はバージョン1.1.0から非推奨になりました。新しく書くコードでは使わないでください。代わりにnamespaceを使ってください。

`CPPCUT_BEGIN_TEST_DECLS`を見て下さい。

1.0.9から

### cppcut_message()

    #define             cppcut_message(...)

C++らしいAPIで検証の省略可能なメッセージを指定します。メッセージは`printf()`と同じAPIか"<<"を使ったストリームと同じAPIを使って指定します。

例:

    cppcut_assert_equal("abc", "def",
                        cppcut_message("should fail!"));
    cppcut_assert_equal("abc", "def",
                        cppcut_message() << "should fail!");

`...` : | 整形文字列に挿入されるパラメータ。

1.1.0から

## 参考

C++サポート付きの検証