## 便利なテストデータ用API 便利なテストデータ用API — 構造体定義なしでテストデータを作成するためのAPI。 |

## 概要

    void                gcut_add_datum                      (const gchar *name,
                                                             const gchar *first_field_name,
                                                             ...);
    gboolean            gcut_data_has_field                 (gconstpointer data,
                                                             const gchar *field_name);
    #define             gcut_data_get_char                  (data,
                                                             field_name)
    const gchar *       gcut_data_get_string                (gconstpointer data,
                                                             const gchar *field_name);
    gint                gcut_data_get_int                   (gconstpointer data,
                                                             const gchar *field_name);
    guint               gcut_data_get_uint                  (gconstpointer data,
                                                             const gchar *field_name);
    #define             gcut_data_get_int64                 (data,
                                                             field_name)
    #define             gcut_data_get_uint64                (data,
                                                             field_name)
    #define             gcut_data_get_size                  (data,
                                                             field_name)
    GType               gcut_data_get_type                  (gconstpointer data,
                                                             const gchar *field_name);
    guint               gcut_data_get_flags                 (gconstpointer data,
                                                             const gchar *field_name);
    gint                gcut_data_get_enum                  (gconstpointer data,
                                                             const gchar *field_name);
    gconstpointer       gcut_data_get_pointer               (gconstpointer data,
                                                             const gchar *field_name);
    gconstpointer       gcut_data_get_boxed                 (gconstpointer data,
                                                             const gchar *field_name);
    #define             gcut_data_get_object                (data,
                                                             field_name)
    #define             gcut_data_get_boolean               (data,
                                                             field_name)
    #define             gcut_data_get_double                (data,
                                                             field_name)

## 説明

`cut_add_data()`で複雑なテストデータを使用したい場合はテストデータ用にデータ型を定義する必要があります。しかし、それは少し面倒です。`gcut_add_datum()`はデータ型を定義せずに複雑なテストデータを使用するためのAPIを提供します。このAPIは複雑なデータを扱うためにGTypeを使います。

## 詳細

### gcut_add_datum ()

    void                gcut_add_datum                      (const gchar *name,
                                                             const gchar *first_field_name,
                                                             ...);

データ駆動テスト用のデータを追加します。複雑なテストデータのために新しく構造体を定義する必要がないため、`cut_add_data()`よりも便利です。

例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    #include <gcutter.h>

    void data_translate (void);
    void test_translate (gconstpointer data);

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

    void
    data_translate(void)
    {
        gcut_add_datum("simple data",
                       "translated", G_TYPE_STRING, "first",
                       "input", G_TYPE_INT, 1,
                       NULL);
        gcut_add_datum("complex data",
                       "translated", G_TYPE_STRING, "a hundred eleven",
                       "input", G_TYPE_INT, 111,
                       NULL);
    }

    void
    test_translate(gconstpointer data)
    {
        cut_assert_equal_string(gcut_data_get_string(data, "translated"),
                                gcut_data_get_int(data, "input"));
    }

利用可能な型とその時の値は以下の通りです。

G_TYPE_CHAR | gcharの値。 例:
    1
    2
    3
    gcut_add_datum("data name",
                   "field-name", G_TYPE_CHAR, 'X',
                   NULL);
G_TYPE_STRING | const gchar *value 例:
    1
    2
    3
    gcut_add_datum("data name",
                   "field-name", G_TYPE_STRING, "string value",
                   NULL);
G_TYPE_INT | gintの値。 例:
    1
    2
    3
    gcut_add_datum("data name",
                   "field-name", G_TYPE_INT, 100,
                   NULL);
G_TYPE_UINT | guintの値。 例:
    1
    2
    3
    gcut_add_datum("data name",
                   "field-name", G_TYPE_UINT, 100,
                   NULL);
G_TYPE_INT64 | gint64の値。 例:
    1
    2
    3
    gcut_add_datum("data name",
                   "field-name", G_TYPE_INT64, G_GINT64_CONSTANT(100),
                   NULL);
G_TYPE_UINT64 | guint64の値。 例:
    1
    2
    3
    gcut_add_datum("data name",
                   "field-name", G_TYPE_UINT64, G_GUINT64_CONSTANT(100),
                   NULL);
G_TYPE_GTYPE | GTypeの値。 例:
    1
    2
    3
    gcut_add_datum("data name",
                   "field-name", G_TYPE_GTYPE, G_TYPE_OBJECT,
                   NULL);
GFlagsの型 | その型の値。 例:
    1
    2
    3
    gcut_add_datum("data name",
                   "field-name", GTK_TYPE_WIDGET_FLAGS, GTK_TOPLEVEL | GTK_MAPPED,
                   NULL);
GEnumの型 | その型の値。 例:
    1
    2
    3
    gcut_add_datum("data name",
                   "field-name", GTK_TYPE_WRAP_MODE, GTK_WRAP_NONE,
                   NULL);
G_TYPE_POINTER | gconstpointer value, GDestroyNotify notify valueが破棄されるときにnotifyが呼ばれます。 例:
    1
    2
    3
    gcut_add_datum("data name",
                   "field-name", G_TYPE_POINTER, my_structure_new(...), my_structure_free,
                   NULL);
注意: 値の所有者はCutterになります。解放しないで下さい。
GBoxedの型 | その型の値。 例:
    1
    2
    3
    4
    5
    6
    gcut_add_datum("data name",
                   "field-name", G_TYPE_HASH_TABLE,
                   gcut_hash_table_string_string_new("name1", "value1",
                                                     "name2", "value2",
                                                     NULL),
                   NULL);
注意: 値の所有者はCutterになります。解放しないで下さい。
G_TYPE_BOOLEAN | gbooleanの値。 例:
    1
    2
    3
    gcut_add_datum("data name",
                   "field-name", G_TYPE_BOOLEAN, TRUE,
                   NULL);
G_TYPE_DOUBLE | gdoubleの値。 例:
    1
    2
    3
    gcut_add_datum("data name",
                   "field-name", G_TYPE_DOUBLE, 2.9,
                   NULL);

`name` : | データの名前。
`first_field_name` : | 最初のフィールド名。
`...` : | 最初のフィールドの型と値。その後に、フィールドの名前と型と値の3つを任意の数だけ指定します。最後の引数は`NULL`にしてください。詳細は関数の説明文のところにあります。

1.0.6から

### gcut_data_has_field ()

    gboolean            gcut_data_has_field                 (gconstpointer data,
                                                             const gchar *field_name);

`data` : | `gcut_add_datum()`で追加したデータ。
`field_name` : | フィールド名。
戻り値 : | `data`に`field_name`フィールドがあれば`TRUE`、そうでなければ`FALSE`。

1.1.5から

### gcut_data_get_char()

    #define             gcut_data_get_char(data, field_name)

`field_name`フィールドの値を文字として取得します。

`data` : | `gcut_add_datum()`で追加したデータ。
`field_name` : | フィールド名。
戻り値 : | `field_name`に対応するフィールドの値。

1.1.3から

### gcut_data_get_string ()

    const gchar *       gcut_data_get_string                (gconstpointer data,
                                                             const gchar *field_name);

`field_name`フィールドの値を文字列として取得します。

`data` : | `gcut_add_datum()`で追加したデータ。
`field_name` : | フィールド名。
戻り値 : | `field_name`に対応するフィールドの値。

1.0.6から

### gcut_data_get_int ()

    gint                gcut_data_get_int                   (gconstpointer data,
                                                             const gchar *field_name);

`field_name`フィールドの値を整数として取得します。

`data` : | `gcut_add_datum()`で追加したデータ。
`field_name` : | フィールド名。
戻り値 : | `field_name`に対応するフィールドの値。

1.0.6から

### gcut_data_get_uint ()

    guint               gcut_data_get_uint                  (gconstpointer data,
                                                             const gchar *field_name);

`field_name`の値を符号なし整数として取得します。

`data` : | `gcut_add_datum()`で追加したデータ。
`field_name` : | フィールド名。
戻り値 : | `field_name`に対応するフィールドの値。

1.0.6から

### gcut_data_get_int64()

    #define             gcut_data_get_int64(data, field_name)

`field_name`フィールドの値を64bit整数として取得します。

`data` : | `gcut_add_datum()`で追加したデータ。
`field_name` : | フィールド名。
戻り値 : | `field_name`に対応するフィールドの値。

1.1.3から

### gcut_data_get_uint64()

    #define             gcut_data_get_uint64(data, field_name)

`field_name`の値を64bit符号なし整数として取得します。

`data` : | `gcut_add_datum()`で追加したデータ。
`field_name` : | フィールド名。
戻り値 : | `field_name`に対応するフィールドの値。

1.1.3から

### gcut_data_get_size()

    #define             gcut_data_get_size(data, field_name)

`field_name`フィールドの値をsize_tとして取得します。

`data` : | `gcut_add_datum()`で追加したデータ。
`field_name` : | フィールド名。
戻り値 : | `field_name`に対応するフィールドの値。

1.1.3から

### gcut_data_get_type ()

    GType               gcut_data_get_type                  (gconstpointer data,
                                                             const gchar *field_name);

`field_name`フィールドの値をGTypeとして取得します。

`data` : | `gcut_add_datum()`で追加したデータ。
`field_name` : | フィールド名。
戻り値 : | `field_name`に対応するフィールドの値。

1.0.6から

### gcut_data_get_flags ()

    guint               gcut_data_get_flags                 (gconstpointer data,
                                                             const gchar *field_name);

`field_name`の値をGFlags型の符号なし整数として取得します。

`data` : | `gcut_add_datum()`で追加したデータ。
`field_name` : | フィールド名。
戻り値 : | `field_name`に対応するフィールドの値。

1.0.6から

### gcut_data_get_enum ()

    gint                gcut_data_get_enum                  (gconstpointer data,
                                                             const gchar *field_name);

`field_name`フィールドの値をGEnum型の整数として取得します。

`data` : | `gcut_add_datum()`で追加したデータ。
`field_name` : | フィールド名。
戻り値 : | `field_name`に対応するフィールドの値。

1.0.6から

### gcut_data_get_pointer ()

    gconstpointer       gcut_data_get_pointer               (gconstpointer data,
                                                             const gchar *field_name);

`field_name`の値をポインタとして取得します。

`data` : | `gcut_add_datum()`で追加したデータ。
`field_name` : | フィールド名。
戻り値 : | `field_name`に対応するフィールドの値。

1.0.6から

### gcut_data_get_boxed ()

    gconstpointer       gcut_data_get_boxed                 (gconstpointer data,
                                                             const gchar *field_name);

`field_name`フィールドの値をGBoxed型の値として取得します。

`data` : | `gcut_add_datum()`で追加したデータ。
`field_name` : | フィールド名。
戻り値 : | `field_name`に対応するフィールドの値。

1.0.7から

### gcut_data_get_object()

    #define             gcut_data_get_object(data, field_name)

`field_name`フィールドの値をGObjectとして取得します。

`data` : | `gcut_add_datum()`で追加したデータ。
`field_name` : | フィールド名。
戻り値 : | `field_name`に対応するフィールドの値。

1.1.1から

### gcut_data_get_boolean()

    #define             gcut_data_get_boolean(data, field_name)

`field_name`の値を真偽値として取得します。

`data` : | `gcut_add_datum()`で追加したデータ。
`field_name` : | フィールド名。
戻り値 : | `field_name`に対応するフィールドの値。

1.1.3から

### gcut_data_get_double()

    #define             gcut_data_get_double(data, field_name)

`field_name`の値を倍精度浮動小数点数として取得します。

`data` : | `gcut_add_datum()`で追加したデータ。
`field_name` : | フィールド名。
戻り値 : | `field_name`に対応するフィールドの値。

1.1.3から