## テストユーティリティ テストユーティリティ — テストをもっと簡単に書くためのユーティリティ。 |

## 概要

    void *              cut_take                            (void *object,
                                                             CutDestroyFunction destroy_function);
    const void *        cut_take_memory                     (void *memory);
    const char *        cut_take_string                     (char *string);
    const char *        cut_take_strdup                     (const char *string);
    const char *        cut_take_strndup                    (const char *string,
                                                             size_t size);
    const void *        cut_take_memdup                     (const void *memory,
                                                             size_t size);
    const char *        cut_take_printf                     (const char *format,
                                                             ...);
    char **             cut_take_string_array               (char **strings);
    const char *        cut_take_diff                       (const char *from,
                                                             const char *to);
    const char *        cut_take_replace                    (const char *target,
                                                             const char *pattern,
                                                             const char *replacement);
    const char *        cut_append_diff                     (const char *message,
                                                             const char *from,
                                                             const char *to);
    const char *        cut_inspect_string_array            (const char **strings);
    void                cut_set_fixture_data_dir            (const char *path,
                                                             ...);
    char *              cut_build_fixture_data_path         (const char *path,
                                                             ...);
    const char *        cut_get_fixture_data_string         (const char *path,
                                                             ...);
    void                cut_remove_path                     (const char *path,
                                                             ...);
    const char *        cut_build_path                      (const char *path,
                                                             ...);
    cut_boolean         cut_equal_string                    (const char *string1,
                                                             const char *string2);
    cut_boolean         cut_equal_double                    (double double1,
                                                             double double2,
                                                             double error);

## 説明

テストを書くためには、テスト環境を前処理・後処理するコードや、検証する結果を準備するコードなどたくさんのコードを書く必要があります。Cutterはもっと簡単にテストを書くためにユーティリティを提供します。

このユーティリティはGLibサポート無しでも使えます。

## 詳細

### cut_take ()

    void *              cut_take                            (void *object,
                                                             CutDestroyFunction destroy_function);

`object`の所有権をCutterに渡し、`object`自身を返します。`object`は`destroy_func`を用いて破棄されます。

`object` : | Cutterが所有権をもつことになるオブジェクト。
`destroy_function` : | オブジェクト用の破棄関数。
戻り値 : | Cutterが所有する`object`。解放しないで下さい。

1.0.5から

### cut_take_memory ()

    const void *        cut_take_memory                     (void *memory);

`memory`の所有権をCutterに渡し、`memory`自身を返します。`memory`は`free()`で破棄されます。

`memory` : | Cutterが所有権を持つことになるメモリ。
戻り値 : | Cutterが所有する`memory`。解放しないで下さい。

1.0.5から

### cut_take_string ()

    const char *        cut_take_string                     (char *string);

`string`の所有権をCutterに渡し、`string`それ自身を返します。

`string` : | Cutterが所有権を持つことになる文字列。
戻り値 : | Cutterが所有する`string`。解放しないで下さい。

### cut_take_strdup ()

    const char *        cut_take_strdup                     (const char *string);

`string`を複製し、その所有権をCutterに渡し、複製されたメモリを返します。

`string` : | 複製される文字列。
戻り値 : | Cutterが所有する複製された文字列。解放しないで下さい。

1.0.5から

### cut_take_strndup ()

    const char *        cut_take_strndup                    (const char *string,
                                                             size_t size);

`string`の先頭`size`バイトを複製し、その所有権ををCutterに渡し、複製された文字列を返します。複製された文字列は常に`NULL`終端しています。

`string` : | 複製される文字列。
`size` : | 複製するバイト数。
戻り値 : | Cutterが所有する複製された文字列。解放しないで下さい。

1.0.5から

### cut_take_memdup ()

    const void *        cut_take_memdup                     (const void *memory,
                                                             size_t size);

`memory`の`size`バイトを複製し、その所有権をCutterに渡し、複製されたメモリを返します。

`memory` : | 複製されるメモリ。
`size` : | 複製するバイト数。
戻り値 : | Cutterが所有する複製されたメモリ。解放しないで下さい。

1.0.5から

### cut_take_printf ()

    const char *        cut_take_printf                     (const char *format,
                                                             ...);

`printf()`のように文字列を整形しますが、整形された文字列はCutterが所有します。

`format` : | 整形文字列。`printf()`のドキュメントを見てください。
`...` : | 整形文字列に挿入されるパラメータ。
戻り値 : | Cutterが所有する整形された文字列。解放しないで下さい。

### cut_take_string_array ()

    char **             cut_take_string_array               (char **strings);

配列の所有権をCutterに渡し、`strings`それ自身を返します。

`strings` : | Cutterが所有権を持つことになる文字列の配列。
戻り値 : | Cutterが所有する`strings`。解放しないで下さい。

### cut_take_diff ()

    const char *        cut_take_diff                       (const char *from,
                                                             const char *to);

`from`と`to`のdiffを計算します。diffの所有者はCutterです。

`from` : | 元の文字列。
`to` : | 修正された文字列。
戻り値 : | Cutterが所有する`from`と`to`のdiff。開放しないでください。

### cut_take_replace ()

    const char *        cut_take_replace                    (const char *target,
                                                             const char *pattern,
                                                             const char *replacement);

`target`文字列中で、`pattern`にマッチする部分を`replacement`で置き換えます。

`target` : | 置換対象の文字列。
`pattern` : | 正規表現パターン。（文字列で指定）
`replacement` : | マッチした部分を置き換える文字列。
戻り値 : | Cutterが所有する複製された文字列。解放しないで下さい。

1.0.6から

### cut_append_diff ()

    const char *        cut_append_diff                     (const char *message,
                                                             const char *from,
                                                             const char *to);

`from`と`to`のdiffを計算し、そのdiffを`message`に追加します。戻り値の文字列の所有者はCutterです。

`message` : | diffが追加される文字列。
`from` : | 元の文字列。
`to` : | 修正された文字列。
戻り値 : | `from`と`to`間のdiff付きの`message`。必要なさそうなdiffであれば`message`と同じ。開放しないでください。

1.0.3から

### cut_inspect_string_array ()

    const char *        cut_inspect_string_array            (const char **strings);

`strings`を人が読みやすい文字列に整形します。整形された文字列の所有者はCutterです。

`strings` : | 整形される文字列の配列。
戻り値 : | Cutterが所有する整形された文字列。解放しないで下さい。

### cut_set_fixture_data_dir ()

    void                cut_set_fixture_data_dir            (const char *path,
                                                             ...);

`cut_get_fixture_data_string()`などで使われるフィクスチャデータのディレクトリを指定します。

`path` : | フィクスチャデータディレクトリのパスの最初の要素。
`...` : | パスの残りの要素。1.0.7から`NULL`終端が必須となりました。

1.0.2から

### cut_build_fixture_data_path ()

    char *              cut_build_fixture_data_path         (const char *path,
                                                             ...);

フィクスチャデータへのパスを生成します。もし、`path`が相対パスなら、パスは`cut_set_fixture_data_dir()`で指定したディレクトリか、現在のディレクトリからの相対パスとして処理されます。

`path` : | フィクスチャデータのパスの最初の要素。
`...` : | パスの残りの要素。1.0.7から`NULL`終端が必須となりました。
戻り値 : | フィクスチャデータのパス。返された文字列が必要なくなったときは開放してください。

1.0.2から

### cut_get_fixture_data_string ()

    const char *        cut_get_fixture_data_string         (const char *path,
                                                             ...);

"`path`/..."にあるフィクスチャデータを読み込み、文字列として返します。文字列はCutterが所持します。`cut_build_fixture_data_path()`の説明にはフィクスチャデータのパスがどのように決定されるかが書かれています。

`path` : | フィクスチャデータのパスの最初の要素。
`...` : | パスの残りの要素。1.0.7から`NULL`終端が必須となりました。
戻り値 : | フィクスチャデータの内容。開放しないください。

1.0.2から

### cut_remove_path ()

    void                cut_remove_path                     (const char *path,
                                                             ...);

`path`と、その下にあるパスを再帰的に削除します。いかなるエラーも報告しません。

`path` : | 削除するパスの最初の要素。
`...` : | パスの残りの要素。1.0.7から`NULL`終端が必須となりました。

1.0.2から

### cut_build_path ()

    const char *        cut_build_path                      (const char *path,
                                                             ...);

`path`と続く要素を使ってパスを作ります。

`path` : | 削除するパスの最初の要素。
`...` : | パスの残りの要素。`NULL`終端。
戻り値 : | Cutterが所有する作成したパス。解放しないで下さい。

1.0.7から

### cut_equal_string ()

    cut_boolean         cut_equal_string                    (const char *string1,
                                                             const char *string2);

`string1`と`string2`を比較します。`string1`あるいは`string2`、または両方が`NULL`でもかまいません。

`string1` : | 文字列。
`string2` : | 文字列。
戻り値 : | `string1`と`string2`が両方`NULL`、あるいは同じ内容の場合は`CUT_TRUE`、そうでない場合は`CUT_FALSE`。

1.0.5から

### cut_equal_double ()

    cut_boolean         cut_equal_double                    (double double1,
                                                             double double2,
                                                             double error);

`double1`と`double2`を誤差範囲`error`で比較します。

`double1` : | 浮動小数点値。
`double2` : | 浮動小数点値。
`error` : | 誤差範囲を示す浮動小数点数。
戻り値 : | |`double1` - `double2`| <= `error`なら`CUT_TRUE`、そうでなければ`CUT_FALSE`。

1.0.5から