<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
<!ENTITY version SYSTEM "version.xml">
]>
<refentry id="cutter-CppCutter">
<refmeta>
<refentrytitle role="top_of_page" id="cutter-CppCutter.top_of_page">CppCutter</refentrytitle>
<manvolnum>3</manvolnum>
<refmiscinfo>Cutterライブラリ</refmiscinfo>
</refmeta>
<refnamediv>
<refname>CppCutter</refname>
<refpurpose>C++サポート付きのCutter。</refpurpose>
</refnamediv>

<refsynopsisdiv id="cutter-CppCutter.synopsis" role="synopsis">
<title role="synopsis.title">概要</title>

<synopsis>#define             <link linkend="CPPCUTTER-ENABLED:CAPS">CPPCUTTER_ENABLED</link>
#define             <link linkend="CPPCUT-BEGIN-TEST-DECLS:CAPS">CPPCUT_BEGIN_TEST_DECLS</link>
#define             <link linkend="CPPCUT-END-TEST-DECLS:CAPS">CPPCUT_END_TEST_DECLS</link>
#define             <link linkend="cppcut-message">cppcut_message</link>                      (...)
</synopsis>
</refsynopsisdiv>

<refsect1 id="cutter-CppCutter.description" role="desc">
<title role="desc.title">説明</title>
<para>CppCutterはC++で便利な機能をCutterに追加します。C++でテストを書きたい場合はCppCutterの使用を検討してください。</para>
<para>CppCutterを使うことは簡単です。&lt;cutter.h&gt;の代わりに&lt;cppcutter.h&gt;をinlcudeして、cutter.pcの代わりにcppcutter.pcを使うだけです。</para>
<para>
test-xxx.cpp:
<informalexample><programlisting>
-#include &lt;cutter.h&gt;
+#include &lt;cppcutter.h&gt;
</programlisting></informalexample>
</para>
<para>
configure.ac:
<informalexample><programlisting>
-AC_CHECK_CUTTER
+AC_CHECK_CPPCUTTER
</programlisting></informalexample>
</para>
<para>
Makefile.am:
<informalexample><programlisting>
-XXX_CFLAGS = $(CUTTER_CFLAGS)
-XXX_LIBS = $(CUTTER_LIBS)
+XXX_CFLAGS = $(CPPCUTTER_CFLAGS)
+XXX_LIBS = $(CPPCUTTER_LIBS)
</programlisting></informalexample>
</para>
<para>テスト関数はnamespaceの中に定義します。名前付け規則はCutterと同じです。つまり、'test_...'関数はテスト関数、'setup'または'cut_setup'は初期化関数、'teardown'または'cut_teardown'は後始末関数になります。</para>
<para>
test-calc.cpp:
<informalexample><programlisting>
#include &lt;cppcutter.h&gt;

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));
    }
}
</programlisting></informalexample>
</para>
<para>新しいテストを追加するときはいつも通り関数を定義するだけです。よくわからないマクロを使う必要はありません。</para>
</refsect1>
<refsect1 id="cutter-CppCutter.details" role="details">
<title role="details.title">詳細</title>
<refsect2 id="CPPCUTTER-ENABLED:CAPS" role="macro" condition="since:1.0.9">
<title>CPPCUTTER_ENABLED</title>
<indexterm zone="CPPCUTTER-ENABLED:CAPS" role="1.0.9"><primary>CPPCUTTER_ENABLED</primary></indexterm>
<programlisting>#define CPPCUTTER_ENABLED 1
</programlisting>
<para>CppCutterが有効なとき定義されます。</para><para role="since">1.0.9から</para></refsect2>
<refsect2 id="CPPCUT-BEGIN-TEST-DECLS:CAPS" role="macro" condition="deprecated:1.1.0: Use namespace instead.|since:1.0.9">
<title>CPPCUT_BEGIN_TEST_DECLS</title>
<indexterm zone="CPPCUT-BEGIN-TEST-DECLS:CAPS" role="deprecated"><primary>CPPCUT_BEGIN_TEST_DECLS</primary></indexterm><indexterm zone="CPPCUT-BEGIN-TEST-DECLS:CAPS" role="1.0.9"><primary>CPPCUT_BEGIN_TEST_DECLS</primary></indexterm>
<programlisting>#define CPPCUT_BEGIN_TEST_DECLS extern "C" {
</programlisting>
<warning><para><literal>CPPCUT_BEGIN_TEST_DECLS</literal>はバージョン1.1.0から非推奨になりました。新しく書くコードでは使わないでください。代わりにnamespaceを使ってください。</para></warning>
<para>テスト関数のプロトタイプ宣言は<link linkend="CPPCUT-BEGIN-TEST-DECLS:CAPS"><literal>CPPCUT_BEGIN_TEST_DECLS</literal></link>と<link linkend="CPPCUT-END-TEST-DECLS:CAPS"><literal>CPPCUT_END_TEST_DECLS</literal></link>で囲みます:</para>
<para>
<informalexample><programlisting>
CPPCUT_BEGIN_TEST_DECLS
void test_add ();
void test_remove ();
CPPCUT_END_TEST_DECLS
</programlisting></informalexample>
</para>
<para>このマクロは単にテスト関数のプロトタイプ宣言を'extern "C" {...}'で囲むだけです。</para><para role="since">1.0.9から</para></refsect2>
<refsect2 id="CPPCUT-END-TEST-DECLS:CAPS" role="macro" condition="deprecated:1.1.0: Use namespace instead.|since:1.0.9">
<title>CPPCUT_END_TEST_DECLS</title>
<indexterm zone="CPPCUT-END-TEST-DECLS:CAPS" role="deprecated"><primary>CPPCUT_END_TEST_DECLS</primary></indexterm><indexterm zone="CPPCUT-END-TEST-DECLS:CAPS" role="1.0.9"><primary>CPPCUT_END_TEST_DECLS</primary></indexterm>
<programlisting>#define CPPCUT_END_TEST_DECLS }
</programlisting>
<warning><para><literal>CPPCUT_END_TEST_DECLS</literal>はバージョン1.1.0から非推奨になりました。新しく書くコードでは使わないでください。代わりにnamespaceを使ってください。</para></warning>
<para><link linkend="CPPCUT-BEGIN-TEST-DECLS:CAPS"><literal>CPPCUT_BEGIN_TEST_DECLS</literal></link>を見て下さい。</para><para role="since">1.0.9から</para></refsect2>
<refsect2 id="cppcut-message" role="macro" condition="since:1.1.0">
<title>cppcut_message()</title>
<indexterm zone="cppcut-message" role="1.1.0"><primary>cppcut_message</primary></indexterm>
<programlisting>#define             cppcut_message(...)</programlisting>
<para>C++らしいAPIで検証の省略可能なメッセージを指定します。メッセージは<link linkend="printf"><function>printf()</function></link>と同じAPIか"&lt;&lt;"を使ったストリームと同じAPIを使って指定します。</para>
<para>例: <informalexample><programlisting>
cppcut_assert_equal("abc", "def",
                    cppcut_message("should fail!"));
cppcut_assert_equal("abc", "def",
                    cppcut_message() &lt;&lt; "should fail!");
</programlisting></informalexample></para><variablelist role="params">
<varlistentry><term><parameter>...</parameter> :</term>
<listitem><simpara>整形文字列に挿入されるパラメータ。</simpara></listitem></varlistentry>
</variablelist><para role="since">1.1.0から</para></refsect2>

</refsect1>
<refsect1 id="cutter-CppCutter.see-also">
<title>参考</title>
<link linkend="cutter-Assertions-with-C++-support">C++サポート付きの検証</link>
</refsect1>

</refentry>
