<?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-Cutter">
<refmeta>
<refentrytitle role="top_of_page" id="cutter-Cutter.top_of_page"
>Cutter</refentrytitle>
<manvolnum
>3</manvolnum>
<refmiscinfo
>Cutterライブラリ</refmiscinfo>
</refmeta>
<refnamediv>
<refname
>Cutter</refname>
<refpurpose
>C言語・C++言語用単体テストフレームワーク</refpurpose>
</refnamediv>

<refsect1 id="cutter-Cutter.functions" role="functions_proto">
<title role="functions_proto.title"
>Functions</title>
<informaltable pgwide="1" frame="none">
<tgroup cols="2">
<colspec colname="functions_proto_type" colwidth="150px"/>
<colspec colname="functions_proto_name"/>
<tbody>
<row
><entry role="function_type"
><link linkend="void"
><returnvalue
>void</returnvalue
></link>
</entry
><entry role="function_name"
><link linkend="setup"
>setup</link
>&#160;<phrase role="c_punctuation"
>()</phrase
></entry
></row>
<row
><entry role="function_type"
><link linkend="void"
><returnvalue
>void</returnvalue
></link>
</entry
><entry role="function_name"
><link linkend="cut-setup"
>cut_setup</link
>&#160;<phrase role="c_punctuation"
>()</phrase
></entry
></row>
<row
><entry role="function_type"
><link linkend="void"
><returnvalue
>void</returnvalue
></link>
</entry
><entry role="function_name"
><link linkend="teardown"
>teardown</link
>&#160;<phrase role="c_punctuation"
>()</phrase
></entry
></row>
<row
><entry role="function_type"
><link linkend="void"
><returnvalue
>void</returnvalue
></link>
</entry
><entry role="function_name"
><link linkend="cut-teardown"
>cut_teardown</link
>&#160;<phrase role="c_punctuation"
>()</phrase
></entry
></row>
<row
><entry role="function_type"
><link linkend="void"
><returnvalue
>void</returnvalue
></link>
</entry
><entry role="function_name"
><link linkend="cut-startup"
>cut_startup</link
>&#160;<phrase role="c_punctuation"
>()</phrase
></entry
></row>
<row
><entry role="function_type"
><link linkend="void"
><returnvalue
>void</returnvalue
></link>
</entry
><entry role="function_name"
><link linkend="cut-shutdown"
>cut_shutdown</link
>&#160;<phrase role="c_punctuation"
>()</phrase
></entry
></row>
<row
><entry role="define_keyword"
>#define</entry
><entry role="function_name"
><link linkend="cut-add-data"
>cut_add_data</link
><phrase role="c_punctuation"
>()</phrase
></entry
></row>
<row
><entry role="define_keyword"
>#define</entry
><entry role="function_name"
><link linkend="cut-add-data-backward-compatibility"
>cut_add_data_backward_compatibility</link
><phrase role="c_punctuation"
>()</phrase
></entry
></row>
<row
><entry role="define_keyword"
>#define</entry
><entry role="function_name"
><link linkend="cut-set-attributes"
>cut_set_attributes</link
><phrase role="c_punctuation"
>()</phrase
></entry
></row>
<row
><entry role="define_keyword"
>#define</entry
><entry role="function_name"
><link linkend="cut-get-current-test-context"
>cut_get_current_test_context</link
></entry
></row>
<row
><entry role="define_keyword"
>#define</entry
><entry role="function_name"
><link linkend="cut-set-current-test-context"
>cut_set_current_test_context</link
><phrase role="c_punctuation"
>()</phrase
></entry
></row>
<row
><entry role="function_type"
><link linkend="void"
><returnvalue
>void</returnvalue
></link>
</entry
><entry role="function_name"
><link linkend="cut-set-message"
>cut_set_message</link
>&#160;<phrase role="c_punctuation"
>()</phrase
></entry
></row>
<row
><entry role="function_type"
><link linkend="void"
><returnvalue
>void</returnvalue
></link>
</entry
><entry role="function_name"
><link linkend="cut-set-message-va-list"
>cut_set_message_va_list</link
>&#160;<phrase role="c_punctuation"
>()</phrase
></entry
></row>
<row
><entry role="function_type"
><link linkend="void"
><returnvalue
>void</returnvalue
></link>
</entry
><entry role="function_name"
><link linkend="cut-keep-message"
>cut_keep_message</link
>&#160;<phrase role="c_punctuation"
>()</phrase
></entry
></row>
<row
><entry role="function_type"
><link linkend="void"
><returnvalue
>void</returnvalue
></link>
</entry
><entry role="function_name"
><link linkend="cut-message"
>cut_message</link
>&#160;<phrase role="c_punctuation"
>()</phrase
></entry
></row>

</tbody>
</tgroup>
</informaltable>
</refsect1>
<refsect1 id="cutter-Cutter.other" role="other_proto">
<title role="other_proto.title"
>Types and Values</title>
<informaltable pgwide="1" frame="none">
<tgroup cols="2">
<colspec colname="other_proto_type" colwidth="150px"/>
<colspec colname="other_proto_name"/>
<tbody>
<row
><entry role="define_keyword"
>#define</entry
><entry role="function_name"
><link linkend="CUT-EXPORT:CAPS"
>CUT_EXPORT</link
></entry
></row>

</tbody>
</tgroup>
</informaltable>
</refsect1>


<refsect1 id="cutter-Cutter.description" role="desc">
<title role="desc.title"
>説明</title>
<para
>Cutterは以下のような特徴をもったC言語・C++言語用の単体テストフレームワークです。<placeholder-1/></para>
<itemizedlist>
  <listitem
><para
>Easy to use. Cutter doesn't introduce any magic macros like CUTTER_DEFINE_TEST_START and CUTTER_DEFINE_TEST_END into your test program. You can write your test program like normal program. You only use <link linkend="cut-assert-XXX"
><function
>cut_assert_XXX()</function
></link
> to check that your program works as you expect. <informalexample
><programlisting role="example"
><![CDATA[
#include <cutter.h>
#include "my-stack.h"

void
test_my_stack (void)
{
    MyStack *stack = my_stack_new();

    cut_assert_not_null(stack);
    cut_assert(my_stack_is_empty(stack));
    cut_assert_equal_int(0, my_stack_get_size(stack));

    my_stack_push(stack, 10);
    cut_assert(!my_stack_is_empty(stack));
    cut_assert_equal_int(1, my_stack_get_size(stack));

    my_stack_push(stack, 20);
    cut_assert_equal_int(2, my_stack_get_size(stack));

    cut_assert_equal(20, my_stack_pop(stack));
    cut_assert(!my_stack_is_empty(stack));
    cut_assert_equal_int(1, my_stack_get_size(stack));

    cut_assert_equal(10, my_stack_pop(stack));
    cut_assert(my_stack_is_empty(stack));
    cut_assert_equal_int(0, my_stack_get_size(stack));
}
]]></programlisting
></informalexample>
  </para
></listitem>
  <listitem
><para
>Simple but useful output. Cutter works quietly if tests are running without any problems by default. The following is an output of self test: <informalexample
><programlisting role="example"
><![CDATA[
...........................................................

Finished in 0.213021 seconds

59 test(s), 246 assertion(s), 0 failure(s), 0 error(s), 0 pending(s), 0 notification(s)
]]></programlisting
></informalexample
> Cutter just outputs "." for a passed test and a summary at the end. Cutter doesn't output each test name, how many assertions are used for a test and so because we don't need the information on success. </para
><para
>Cutter outputs many information on failure: <informalexample
><programlisting role="example"
><![CDATA[
.....................F.....................................

1) Failure: test_error
<"Strange" == cut_test_result_get_test_name(result)>
expected: <Strange!!!>
 but was: <dummy-error-test>
test/test-cut-assertions.c:240: cut_assert_test_result()

Finished in 0.223657 seconds

59 test(s), 242 assertion(s), 1 failure(s), 0 error(s), 0 pending(s), 0 notification(s)
]]></programlisting
></informalexample
> The above result is happened because I add a strange expected staring in Cutter's self test: <informalexample
><programlisting role="example"
><![CDATA[
cut_assert_equal_string("Strange!!!", cut_test_result_get_test_name(result));
]]></programlisting
></informalexample
> The strange assertion is written in the 240th line in test/test-cut-assertions.c and the line is in the <link linkend="cut-assert-test-result"
><function
>cut_assert_test_result()</function
></link
> function. The function is called in test_error test. We expected cut_test_result_get_test_name(result) should return "Strange!!!" but got "dummy-error-name". We can get the above information from Cutter output. This will help your debug. </para
><para
>Cutterの出力形式は実用的です。' but was:'はその上の'expected:'と並ぶようにインデントされています。これは期待値と実測値をパッと見て簡単に比較できるようにするためです。問題のあった行は「ファイル名:行: 関数」というように整形されています。これはEmacsと連携するためです。Emacsのcompilation-modeではこの形式が*compilation*バッファに表れると、next-errorコマンド(C-x `)で「ファイル名」の「行」へジャンプすることができます。これは問題行を素早く見つける手助けをします。 </para
><para
>Cutterは簡単にテストを書くことを支援するだけではなく、簡単にデバッグをできることも支援します。 </para
></listitem>
</itemizedlist>

</refsect1>
<refsect1 id="cutter-Cutter.functions_details" role="details">
<title role="details.title"
>Functions</title>
<refsect2 id="setup" role="function" condition="deprecated:1.0.7: Use cut_setup() instead.">
<title
>setup&#160;()</title>
<indexterm zone="setup" role="deprecated"
><primary
>setup</primary
></indexterm>
<programlisting language="C"
><link linkend="void"><returnvalue>void</returnvalue></link>
setup (<parameter><type>void</type></parameter>);</programlisting>
<warning
><para
><literal
>GCutEgg</literal
>は非推奨です。新しいコードでは使わないでください。</para
> <para
><link linkend="cut-set-actual"
><function
>cut_set_actual()</function
></link
>も見てください。</para>
</warning>
<para
>テストプログラム中で<link linkend="setup"
><function
>setup()</function
></link
>を定義していたら、cutterは各テストが実行される前に定義された<link linkend="setup"
><function
>setup()</function
></link
>を呼びだします。<link linkend="cut_setup"
><function
>cut_setup()</function
></link
>が定義されていた場合は、<link linkend="setup"
><function
>setup()</function
></link
>は無視されます。</para>
</refsect2>
<refsect2 id="cut-setup" role="function" condition="since:1.0.6">
<title
>cut_setup&#160;()</title>
<indexterm zone="cut-setup" role="1.0.6"
><primary
>cut_setup</primary
></indexterm>
<programlisting language="C"
><link linkend="void"><returnvalue>void</returnvalue></link>
cut_setup (<parameter><type>void</type></parameter>);</programlisting>
<para
>テストプログラム中で<link linkend="cut_setup"
><function
>cut_setup()</function
></link
>を定義していたら、cutterは各テストが実行される前に定義された<link linkend="cut_setup"
><function
>cut_setup()</function
></link
>を呼びだします。<link linkend="cut-setup"
><function
>cut_setup()</function
></link
>と<link linkend="setup"
><function
>setup()</function
></link
>が定義されていた場合は<link linkend="cut-setup"
><function
>cut_setup()</function
></link
>だけが使われます。</para>
<para role="since"
>Since: <link linkend="api-index-1.0.6"
>1.0.6</link
></para
></refsect2>
<refsect2 id="teardown" role="function" condition="deprecated:1.0.7: Use cut_teardown() instead.">
<title
>teardown&#160;()</title>
<indexterm zone="teardown" role="deprecated"
><primary
>teardown</primary
></indexterm>
<programlisting language="C"
><link linkend="void"><returnvalue>void</returnvalue></link>
teardown (<parameter><type>void</type></parameter>);</programlisting>
<warning
><para
><literal
>GCutEgg</literal
>は非推奨です。新しいコードでは使わないでください。</para
> <para
><link linkend="cut-set-expected"
><function
>cut_set_expected()</function
></link
>も見てください。</para>
</warning>
<para
>テストプログラム中で<link linkend="teardown"
><function
>teardown()</function
></link
>を定義していたら、cutterは各テストの後に、たとえテストが失敗していた時でも、<link linkend="teardown"
><function
>teardown()</function
></link
>を呼びだします。<link linkend="cut-teardown"
><function
>cut_teardown()</function
></link
>が定義されていた場合は、<link linkend="teardown"
><function
>teardown()</function
></link
>は無視されます。</para>
</refsect2>
<refsect2 id="cut-teardown" role="function" condition="since:1.0.6">
<title
>cut_teardown&#160;()</title>
<indexterm zone="cut-teardown" role="1.0.6"
><primary
>cut_teardown</primary
></indexterm>
<programlisting language="C"
><link linkend="void"><returnvalue>void</returnvalue></link>
cut_teardown (<parameter><type>void</type></parameter>);</programlisting>
<para
>テストプログラム中で<link linkend="cut-teardown"
><function
>cut_teardown()</function
></link
>を定義していたら、cutterは各テストの後に、たとえテストが失敗していた時でも、<link linkend="cut-teardown"
><function
>cut_teardown()</function
></link
>を呼びだします。<link linkend="cut-teardown"
><function
>cut_teardown()</function
></link
>と<link linkend="teardown"
><function
>teardown()</function
></link
>が定義されていた場合は<link linkend="cut-teardown"
><function
>cut_teardown()</function
></link
>だけが使われます。</para>
<para role="since"
>Since: <link linkend="api-index-1.0.6"
>1.0.6</link
></para
></refsect2>
<refsect2 id="cut-startup" role="function" condition="since:1.0.6">
<title
>cut_startup&#160;()</title>
<indexterm zone="cut-startup" role="1.0.6"
><primary
>cut_startup</primary
></indexterm>
<programlisting language="C"
><link linkend="void"><returnvalue>void</returnvalue></link>
cut_startup (<parameter><type>void</type></parameter>);</programlisting>
<para
>テストプログラム中で<link linkend="cut-startup"
><function
>cut_startup()</function
></link
>を定義していたら、cutterは各テストケースが実行される前に定義された<link linkend="cut-startup"
><function
>cut_startup()</function
></link
>を呼びだします。<link linkend="cut-startup"
><function
>cut_startup()</function
></link
>と<link linkend="startup"
><function
>startup()</function
></link
>が定義されていた場合は<link linkend="cut-startup"
><function
>cut_startup()</function
></link
>だけが使われます。</para>
<para role="since"
>Since: <link linkend="api-index-1.0.6"
>1.0.6</link
></para
></refsect2>
<refsect2 id="cut-shutdown" role="function" condition="since:1.0.6">
<title
>cut_shutdown&#160;()</title>
<indexterm zone="cut-shutdown" role="1.0.6"
><primary
>cut_shutdown</primary
></indexterm>
<programlisting language="C"
><link linkend="void"><returnvalue>void</returnvalue></link>
cut_shutdown (<parameter><type>void</type></parameter>);</programlisting>
<para
>テストプログラム中で<link linkend="shutdown"
><function
>shutdown()</function
></link
>を定義していたら、cutterは各テストケースが実行された後に定義された<link linkend="shutdown"
><function
>shutdown()</function
></link
>を呼びだします。<link linkend="cut-shutdown"
><function
>cut_shutdown()</function
></link
>と<link linkend="shutdown"
><function
>shutdown()</function
></link
>が定義されていた場合は<link linkend="cut-shutdown"
><function
>cut_shutdown()</function
></link
>だけが使われます。</para>
<para role="since"
>Since: <link linkend="api-index-1.0.6"
>1.0.6</link
></para
></refsect2>
<refsect2 id="cut-add-data" role="macro" condition="since:1.0.3">
<title
>cut_add_data()</title>
<indexterm zone="cut-add-data" role="1.0.3"
><primary
>cut_add_data</primary
></indexterm>
<programlisting language="C"
>#define             cut_add_data(first_data_name, ...)</programlisting>
<para
>データ駆動テストで使うデータを追加します。</para>
<para
>例:</para>
<informalexample
><programlisting role="example"
><![CDATA[
#include <cutter.h>

void data_translate (void);
void test_translate (const void *data);

static const char*
translate (int input)
{
   switch(input) {
   case 1:
       return "first";
   case 111:
       return "a hundred eleven";
   default:
       return "unsupported";
   }
}

typedef struct _TranslateTestData
{
    char *translated;
    int input;
} TranslateTestData;

static TranslateTestData *
translate_test_data_new (char *translated, int input)
{
    TranslateTestData *data;

    data = malloc(sizeof(TranslateTestData));
    data->translated = strdup(translated);
    data->input = input;

    return data;
}

static void
translate_test_data_free (TranslateTestData *data)
{
    free(data->translated);
    free(data);
}

void
data_translate(void)
{
    cut_add_data("simple data",
                 translate_test_data_new("first", 1),
                 translate_test_data_free,
                 "complex data",
                 translate_test_data_new("a hundred eleven", 111),
                 translate_test_data_free,
                 NULL);
}

void
test_translate(const void *data)
{
     const TranslateTestData *test_data = data;

     cut_assert_equal_string(test_data->translated,
                             translate(test_data->input));
}
]]></programlisting
></informalexample>
<para
></para>
<refsect3 id="cut-add-data.parameters" role="parameters">
<title
>Parameters</title>
<informaltable role="parameters_table" pgwide="1" frame="none">
<tgroup cols="3">
<colspec colname="parameters_name" colwidth="150px"/>
<colspec colname="parameters_description"/>
<colspec colname="parameters_annotations" colwidth="200px"/>
<tbody>
<row
><entry role="parameter_name"
><para
>最初のデータ名。</para
></entry>
<entry role="parameter_description"
><para
>最初のデータ名。</para
></entry>
<entry role="parameter_annotations"
></entry
></row>
<row
><entry role="parameter_name"
><para
>...</para
></entry>
<entry role="parameter_description"
><para
>最初のデータとデータ破棄関数。続けて任意の数の「名前・データ・データ破棄関数(<link linkend="CutDestroyFunction"
><type
>CutDestroyFunction</type
></link
>)」の三つ組を指定します。1.0.6から可変長の引数は<link linkend="NULL:CAPS"
><literal
>NULL</literal
></link
>終端しなければいけなくなりました。</para
></entry>
<entry role="parameter_annotations"
></entry
></row>
</tbody
></tgroup
></informaltable>
</refsect3
><para role="since"
>Since: <link linkend="api-index-1.0.3"
>1.0.3</link
></para
></refsect2>
<refsect2 id="cut-add-data-backward-compatibility" role="macro" condition="deprecated:">
<title
>cut_add_data_backward_compatibility()</title>
<indexterm zone="cut-add-data-backward-compatibility" role="deprecated"
><primary
>cut_add_data_backward_compatibility</primary
></indexterm>
<programlisting language="C"
>#define             cut_add_data_backward_compatibility(context, ...)</programlisting>
<warning
><para
><literal
>cut_add_data_backward_compatibility</literal
>は非推奨です。新しいコードでは使わないでください。</para
></warning>
</refsect2>
<refsect2 id="cut-set-attributes" role="macro" condition="since:1.0.4">
<title
>cut_set_attributes()</title>
<indexterm zone="cut-set-attributes" role="1.0.4"
><primary
>cut_set_attributes</primary
></indexterm>
<programlisting language="C"
>#define             cut_set_attributes(first_attribute_name, ...)</programlisting>
<para
>テストの属性を設定します。</para>
<para
>例:</para>
<informalexample
><programlisting role="example"
><![CDATA[
#include <cutter.h>

void attributes_repeat (void);
void test_repeat (void);

void
attributes_repeat(void)
{
    cut_set_attributes("description", "a test for repeat function",
                       "bug", "111",
                       "priority", "high",
                       NULL);
}

void
test_repeat(void)
{
     cut_assert_equal_string_with_free("XXX", repeat("X", 3));
}
]]></programlisting
></informalexample>
<para
></para>
<refsect3 id="cut-set-attributes.parameters" role="parameters">
<title
>Parameters</title>
<informaltable role="parameters_table" pgwide="1" frame="none">
<tgroup cols="3">
<colspec colname="parameters_name" colwidth="150px"/>
<colspec colname="parameters_description"/>
<colspec colname="parameters_annotations" colwidth="200px"/>
<tbody>
<row
><entry role="parameter_name"
><para
>最初の属性名。</para
></entry>
<entry role="parameter_description"
><para
>最初の属性名。</para
></entry>
<entry role="parameter_annotations"
></entry
></row>
<row
><entry role="parameter_name"
><para
>...</para
></entry>
<entry role="parameter_description"
><para
>最初の属性値です。その後に任意個数の名前と値のペアが続きます。1.0.7から<link linkend="NULL:CAPS"
><literal
>NULL</literal
></link
>終端が必須になりました。</para
></entry>
<entry role="parameter_annotations"
></entry
></row>
</tbody
></tgroup
></informaltable>
</refsect3
><para role="since"
>Since: <link linkend="api-index-1.0.4"
>1.0.4</link
></para
></refsect2>
<refsect2 id="cut-get-current-test-context" role="macro" condition="since:1.0.4">
<title
>cut_get_current_test_context</title>
<indexterm zone="cut-get-current-test-context" role="1.0.4"
><primary
>cut_get_current_test_context</primary
></indexterm>
<programlisting language="C"
>#define             cut_get_current_test_context()</programlisting>
<para
>現在のテストコンテキストを返します。「現在のテストコンテキスト」はスレッドローカルなオブジェクトです。もしテストの中で新しいスレッドを作らない場合はテストコンテキストを気にする必要はありません。新しいスレッドを作る場合だけ必要になります。テストのスレッドが持っている「現在のテストコンテキスト」を新しく作ったスレッドに渡す必要がありません。</para>
<para
>例:</para>
<informalexample
><programlisting role="example"
><![CDATA[
int
your_thread_function(void *data)
{
    CutTestContext *test_context = data;
    cut_set_current_test_context(test_context);
    ...
}

void
run_your_thread(void)
{
    int result;
    pthread_t your_thread;

    result = pthread_create(&your_thread, NULL,
                            your_thread_function,
                            cut_get_current_test_context());
    ...
}
]]></programlisting
></informalexample>
<para
></para>
<refsect3 id="cut-get-current-test-context.returns" role="returns">
<title
>Returns</title>
<para
><link linkend="CutTestContext"
><type
>CutTestContext</type
></link
>オブジェクト。</para>
</refsect3
><para role="since"
>Since: <link linkend="api-index-1.0.4"
>1.0.4</link
></para
></refsect2>
<refsect2 id="cut-set-current-test-context" role="macro" condition="since:1.0.4">
<title
>cut_set_current_test_context()</title>
<indexterm zone="cut-set-current-test-context" role="1.0.4"
><primary
>cut_set_current_test_context</primary
></indexterm>
<programlisting language="C"
>#define             cut_set_current_test_context(test_context)</programlisting>
<para
>現在のテストコンテキストを<parameter
>test_context</parameter
>にします。詳細は<link linkend="cut-get-current-test-context"
><function
>cut_get_current_test_context()</function
></link
>を見てください。</para>
<refsect3 id="cut-set-current-test-context.parameters" role="parameters">
<title
>Parameters</title>
<informaltable role="parameters_table" pgwide="1" frame="none">
<tgroup cols="3">
<colspec colname="parameters_name" colwidth="150px"/>
<colspec colname="parameters_description"/>
<colspec colname="parameters_annotations" colwidth="200px"/>
<tbody>
<row
><entry role="parameter_name"
><para
>test_context</para
></entry>
<entry role="parameter_description"
><para
>現在のテストコンテキストになる<link linkend="CutTestContext"
><type
>CutTestContext</type
></link
>。</para
></entry>
<entry role="parameter_annotations"
></entry
></row>
</tbody
></tgroup
></informaltable>
</refsect3
><para role="since"
>Since: <link linkend="api-index-1.0.4"
>1.0.4</link
></para
></refsect2>
<refsect2 id="cut-set-message" role="function" condition="deprecated:1.1.0: Use cut_message() instead.|since:1.0.6">
<title
>cut_set_message&#160;()</title>
<indexterm zone="cut-set-message" role="deprecated"
><primary
>cut_set_message</primary
></indexterm
><indexterm zone="cut-set-message" role="1.0.6"
><primary
>cut_set_message</primary
></indexterm>
<programlisting language="C"
><link linkend="void"><returnvalue>void</returnvalue></link>
cut_set_message (<parameter>const <link linkend="char"><type>char</type></link> *format</parameter>,
                 <parameter>...</parameter>);</programlisting>
<warning
><para
><literal
>CPPCUT_END_TEST_DECLS</literal
>はバージョン1.1.0から非推奨になりました。新しく書くコードでは使わないでください。代わりにnamespaceを使ってください。</para
> <para
>追加メッセージ（省略可能）。詳細は<link linkend="cut-message"
><function
>cut_message()</function
></link
>を見てください。</para>
</warning>
<para
>次の検証で使われるメッセージです。</para>
<refsect3 id="cut-set-message.parameters" role="parameters">
<title
>Parameters</title>
<informaltable role="parameters_table" pgwide="1" frame="none">
<tgroup cols="3">
<colspec colname="parameters_name" colwidth="150px"/>
<colspec colname="parameters_description"/>
<colspec colname="parameters_annotations" colwidth="200px"/>
<tbody>
<row
><entry role="parameter_name"
><para
>format</para
></entry>
<entry role="parameter_description"
><para
>整形文字列。<link linkend="printf"
><function
>printf()</function
></link
>のドキュメントを見てください。</para
></entry>
<entry role="parameter_annotations"
></entry
></row>
<row
><entry role="parameter_name"
><para
>...</para
></entry>
<entry role="parameter_description"
><para
>整形文字列に挿入されるパラメータ。</para
></entry>
<entry role="parameter_annotations"
></entry
></row>
</tbody
></tgroup
></informaltable>
</refsect3
><para role="since"
>Since: <link linkend="api-index-1.0.6"
>1.0.6</link
></para
></refsect2>
<refsect2 id="cut-set-message-va-list" role="function" condition="deprecated:1.1.0: Use cut_message() instead.|since:1.0.6">
<title
>cut_set_message_va_list&#160;()</title>
<indexterm zone="cut-set-message-va-list" role="deprecated"
><primary
>cut_set_message_va_list</primary
></indexterm
><indexterm zone="cut-set-message-va-list" role="1.0.6"
><primary
>cut_set_message_va_list</primary
></indexterm>
<programlisting language="C"
><link linkend="void"><returnvalue>void</returnvalue></link>
cut_set_message_va_list (<parameter>const <link linkend="char"><type>char</type></link> *format</parameter>,
                         <parameter><link linkend="va-list"><type>va_list</type></link> args</parameter>);</programlisting>
<warning
><para
><literal
>CPPCUT_END_TEST_DECLS</literal
>はバージョン1.1.0から非推奨になりました。新しく書くコードでは使わないでください。代わりにnamespaceを使ってください。</para
> <para
>追加メッセージ（省略可能）。詳細は<link linkend="cut-message"
><function
>cut_message()</function
></link
>を見てください。</para>
</warning>
<para
>次の検証で使われるメッセージです。</para>
<refsect3 id="cut-set-message-va-list.parameters" role="parameters">
<title
>Parameters</title>
<informaltable role="parameters_table" pgwide="1" frame="none">
<tgroup cols="3">
<colspec colname="parameters_name" colwidth="150px"/>
<colspec colname="parameters_description"/>
<colspec colname="parameters_annotations" colwidth="200px"/>
<tbody>
<row
><entry role="parameter_name"
><para
>format</para
></entry>
<entry role="parameter_description"
><para
>整形文字列。<link linkend="printf"
><function
>printf()</function
></link
>のドキュメントを見てください。</para
></entry>
<entry role="parameter_annotations"
></entry
></row>
<row
><entry role="parameter_name"
><para
>args</para
></entry>
<entry role="parameter_description"
><para
>整形文字列に挿入されるパラメータ。</para
></entry>
<entry role="parameter_annotations"
></entry
></row>
</tbody
></tgroup
></informaltable>
</refsect3
><para role="since"
>Since: <link linkend="api-index-1.0.6"
>1.0.6</link
></para
></refsect2>
<refsect2 id="cut-keep-message" role="function" condition="deprecated:1.1.0: Use cut_message() instead.|since:1.0.6">
<title
>cut_keep_message&#160;()</title>
<indexterm zone="cut-keep-message" role="deprecated"
><primary
>cut_keep_message</primary
></indexterm
><indexterm zone="cut-keep-message" role="1.0.6"
><primary
>cut_keep_message</primary
></indexterm>
<programlisting language="C"
><link linkend="void"><returnvalue>void</returnvalue></link>
cut_keep_message (<parameter><type>void</type></parameter>);</programlisting>
<warning
><para
><literal
>CPPCUT_END_TEST_DECLS</literal
>はバージョン1.1.0から非推奨になりました。新しく書くコードでは使わないでください。代わりにnamespaceを使ってください。</para
> <para
>追加メッセージ（省略可能）。詳細は<link linkend="cut-message"
><function
>cut_message()</function
></link
>を見てください。</para>
</warning>
<para
><link linkend="cut-set-message"
><function
>cut_set_message()</function
></link
>または<link linkend="cut-set-message-va-list"
><function
>cut_set_message_va_list()</function
></link
>で設定した現在のメッセージを次の検証の後でも維持します。</para>
<para role="since"
>Since: <link linkend="api-index-1.0.6"
>1.0.6</link
></para
></refsect2>
<refsect2 id="cut-message" role="function" condition="since:1.1.0">
<title
>cut_message&#160;()</title>
<indexterm zone="cut-message" role="1.1.0"
><primary
>cut_message</primary
></indexterm>
<programlisting language="C"
><link linkend="void"><returnvalue>void</returnvalue></link>
cut_message (<parameter>const <link linkend="char"><type>char</type></link> *format</parameter>,
             <parameter>...</parameter>);</programlisting>
<para
>追加の検証メッセージを指定します。</para>
<para
>例:</para>
<informalexample
><programlisting role="example"
><![CDATA[
cut_assert_equal_string("abc", "def",
                        cut_message("should fail!"));
]]></programlisting
></informalexample>
<para
></para>
<refsect3 id="cut-message.parameters" role="parameters">
<title
>Parameters</title>
<informaltable role="parameters_table" pgwide="1" frame="none">
<tgroup cols="3">
<colspec colname="parameters_name" colwidth="150px"/>
<colspec colname="parameters_description"/>
<colspec colname="parameters_annotations" colwidth="200px"/>
<tbody>
<row
><entry role="parameter_name"
><para
>format</para
></entry>
<entry role="parameter_description"
><para
>整形文字列。<link linkend="printf"
><function
>printf()</function
></link
>のドキュメントを見てください。</para
></entry>
<entry role="parameter_annotations"
></entry
></row>
<row
><entry role="parameter_name"
><para
>...</para
></entry>
<entry role="parameter_description"
><para
>整形文字列に挿入されるパラメータ。</para
></entry>
<entry role="parameter_annotations"
></entry
></row>
</tbody
></tgroup
></informaltable>
</refsect3
><para role="since"
>Since: <link linkend="api-index-1.1.0"
>1.1.0</link
></para
></refsect2>

</refsect1>
<refsect1 id="cutter-Cutter.other_details" role="details">
<title role="details.title"
>Types and Values</title>
<refsect2 id="CUT-EXPORT:CAPS" role="macro" condition="since:1.1.2">
<title
>CUT_EXPORT</title>
<indexterm zone="CUT-EXPORT:CAPS" role="1.1.2"
><primary
>CUT_EXPORT</primary
></indexterm>
<programlisting language="C"
>#  define CUT_EXPORT __declspec(dllexport)
</programlisting>
<para
>公開関数であるというしるしをつけます。このしるしはWindows環境上でだけ必要です。Windows上でもテストを実行したい場合はこのマクロを使う必要があります。そうでなければ使う必要はありません。</para>
<para
>例:</para>
<informalexample
><programlisting role="example"
><![CDATA[
CUT_EXPORT void
test_add (void)
{
  ...
}
]]></programlisting
></informalexample>
<para
></para>
<para role="since"
>Since: <link linkend="api-index-1.1.2"
>1.1.2</link
></para
></refsect2>

</refsect1>
<refsect1 id="cutter-Cutter.see-also">
<title
>参考</title>
<link linkend="cutter-Assertions"
>検証</link>

</refsect1>

</refentry>
