## Multi Process Multi Process — マルチプロセスでテストを走らせるためのユーティリティ。 |

## Functions

CutSubProcess * | cut_take_new_sub_process ()
cut_boolean | cut_sub_process_run ()
void | cut_sub_process_run_async ()
cut_boolean | cut_sub_process_wait ()
cut_boolean | cut_sub_process_is_success ()
cut_boolean | cut_sub_process_is_running ()
const char * | cut_sub_process_get_test_directory ()
void | cut_sub_process_set_test_directory ()
const char * | cut_sub_process_get_source_directory ()
void | cut_sub_process_set_source_directory ()
cut_boolean | cut_sub_process_get_multi_thread ()
void | cut_sub_process_set_multi_thread ()
int | cut_sub_process_get_max_threads ()
void | cut_sub_process_set_max_threads ()
const char ** | cut_sub_process_get_exclude_files ()
void | cut_sub_process_set_exclude_files ()
const char ** | cut_sub_process_get_exclude_directories ()
void | cut_sub_process_set_exclude_directories ()
const char ** | cut_sub_process_get_target_test_case_names ()
void | cut_sub_process_set_target_test_case_names ()
const char ** | cut_sub_process_get_target_test_names ()
void | cut_sub_process_set_target_test_names ()
double | cut_sub_process_get_elapsed ()
double | cut_sub_process_get_total_elapsed ()
cut_boolean | cut_sub_process_is_crashed ()
cut_boolean | cut_sub_process_get_fatal_failures ()
void | cut_sub_process_set_fatal_failures ()
CutSubProcessGroup * | cut_take_new_sub_process_group ()
void | cut_sub_process_group_add ()
cut_boolean | cut_sub_process_group_run ()
void | cut_sub_process_group_run_async ()
cut_boolean | cut_sub_process_group_wait ()

## Types and Values

| CutSubProcess
| CutSubProcessGroup

## 説明

もしテスト対象のソフトウェアがマルチプロセスやマルチスレッドでの使用をサポートしているなら、それらの機能をテストする必要があります。そのようなテストために、CutSubProcessとCutSubProcessGroupを使うことができます。

CutSubProcessはテストを別のプロセスで走らせ、その結果をメインプロセスに転送します。このため、別のプロセス上でのテスト結果もメインプロセス上でのテスト結果と同じように見えます。

CutSubProcessGroupはいくつかのCutSubProcessをまとめて実行するための便利オブジェクトです。

## Functions

### cut_take_new_sub_process ()

    CutSubProcess *
    cut_take_new_sub_process (const char *test_directory);

`test_directory`以下のテストを実行するサブcutterプロセスを作り、それを返します。返されたサブcutterプロセスの所有者はCutterです。

#### Parameters

テストディレクトリ | サブcutterプロセスのテストがあるディレクトリ。 |

#### Returns

CutSubProcessオブジェクト。

Since: 1.0.4

### cut_sub_process_run ()

    CutSubProcessGroupはいくつかのCutSubProcessをまとめて実行するための便利オブジェクトです。

サブcutterプロセスを実行します。

#### Parameters

sub_process | CutSubProcessオブジェクト。 |

#### Returns

もし、`sub_process`が正常に終了した場合は`CUT_TRUE`、そうでない場合は`CUT_FALSE`。

Since: 1.0.4

### cut_sub_process_run_async ()

    CutSubProcessGroupはいくつかのCutSubProcessをまとめて実行するための便利オブジェクトです。

非同期でサブcutterコマンドを実行します。`sub_process`の結果は`cut_sub_process_wait()`で取得できます。

#### Parameters

sub_process | CutSubProcessオブジェクト。 |

Since: 1.0.4

### cut_sub_process_wait ()

    CutSubProcessGroupはいくつかのCutSubProcessをまとめて実行するための便利オブジェクトです。

非同期で実行されたサブcutterプロセスの終了を待ち、結果を返します。

#### Parameters

sub_process | CutSubProcessオブジェクト。 |

#### Returns

もし、`sub_process`が正常に終了した場合は`CUT_TRUE`、そうでない場合は`CUT_FALSE`。

Since: 1.0.4

### cut_sub_process_is_success ()

    CutSubProcessGroupはいくつかのCutSubProcessをまとめて実行するための便利オブジェクトです。

`sub_process`が正常に終了したかどうかを返します。

#### Parameters

sub_process | CutSubProcessオブジェクト。 |

#### Returns

もし、`sub_process`が正常に終了した場合は`CUT_TRUE`、そうでない場合は`CUT_FALSE`。

Since: 1.0.4

### cut_sub_process_is_running ()

    CutSubProcessGroupはいくつかのCutSubProcessをまとめて実行するための便利オブジェクトです。

`sub_process`が実行中かどうかを返します。

#### Parameters

sub_process | CutSubProcessオブジェクト。 |

#### Returns

`sub_process`が実行中の場合は`CUT_TRUE`、そうでない場合は`CUT_FALSE`。

Since: 1.0.4

### cut_sub_process_get_test_directory ()

    const char *
    cut_sub_process_get_test_directory (CutSubProcess *sub_process);

実行対象のテストがあるディレクトリを返します。

#### Parameters

sub_process | CutSubProcessオブジェクト。 |

#### Returns

テストディレクトリ

Since: 1.0.4

### cut_sub_process_set_test_directory ()

    void
    cut_sub_process_set_test_directory (CutSubProcess *sub_process,
                                        const char *test_directory);

実行対象のテストがあるディレクトリとして`test_directory`を指定します。これは必須のコマンドライン引数であるTEST_DIRECTORYと同じ意味を持ちます。

#### Parameters

sub_process | CutSubProcessオブジェクト。 |
テストディレクトリ | テストディレクトリ |

Since: 1.0.4

### cut_sub_process_get_source_directory ()

    const char *
    cut_sub_process_get_source_directory (CutSubProcess *sub_process);

ソースファイルがあるディレクトリを返します。

#### Parameters

sub_process | CutSubProcessオブジェクト。 |

#### Returns

ソースディレクトリ。

Since: 1.0.4

### cut_sub_process_set_source_directory ()

    void
    cut_sub_process_set_source_directory (CutSubProcess *sub_process,
                                          const char *source_directory);

ソースファイルがあるディレクトリとして`source_directory`を指定します。これは--source-directoryコマンドラインオプションと同じ意味を持ちます。

#### Parameters

sub_process | CutSubProcessオブジェクト。 |
ソースディレクトリ。 | ソースディレクトリ。 |

Since: 1.0.4

### cut_sub_process_get_multi_thread ()

    CutSubProcessGroupはいくつかのCutSubProcessをまとめて実行するための便利オブジェクトです。

`sub_process`をマルチスレッドモードで実行するかどうかを返します。

#### Parameters

sub_process | CutSubProcessオブジェクト。 |

#### Returns

`sub_process`がマルチスレッドモードで実行されるなら`CUT_TRUE`、そうでなければ`CUT_FALSE`。

Since: 1.0.4

### cut_sub_process_set_multi_thread ()

    void
    cut_sub_process_set_multi_thread (CutSubProcess *sub_process,
                                      cut_boolean multi_thread);

`sub_process`がマルチスレッドモードで実行されるかどうかを指定します。これは--multi-threadコマンドラインオプションと同じ意味を持ちます。

#### Parameters

sub_process | CutSubProcessオブジェクト。 |
multi_thread | マルチスレッドモードで実行するなら`CUT_TRUE`。 |

Since: 1.0.4

### cut_sub_process_get_max_threads ()

    CutSubProcessGroupはいくつかのCutSubProcessをまとめて実行するための便利オブジェクトです。

`sub_process`中で同時に動く最大スレッド数を返します。

#### Parameters

sub_process | CutSubProcessオブジェクト。 |

#### Returns

`sub_process`中で同時に動く最大スレッド数。

Since: 1.0.5

### cut_sub_process_set_max_threads ()

    void
    cut_sub_process_set_max_threads (CutSubProcess *sub_process,
                                     int max_threads);

`sub_process`中で同時に動く最大スレッド数を設定します。-1は制限がないことを意味します。これは--max-threadsコマンドラインオプションと同じ意味を持ちます。

#### Parameters

sub_process | CutSubProcessオブジェクト。 |
max_threads | 同時に動く最大スレッド数。 |

Since: 1.0.5

### cut_sub_process_get_exclude_files ()

    const char **
    cut_sub_process_get_exclude_files (CutSubProcess *sub_process);

テスト対象ファイルから除外されるファイル名を返します。

#### Parameters

sub_process | CutSubProcessオブジェクト。 |

#### Returns

テスト対象ファイルから除外されるファイル名。

Since: 1.0.4

### cut_sub_process_set_exclude_files ()

    void
    cut_sub_process_set_exclude_files (CutSubProcess *sub_process,
                                       const char **files);

テスト対象から除外されるファイル名を指定します。これは--exclude-fileコマンドラインオプションと同じ意味を持ちます。

#### Parameters

sub_process | CutSubProcessオブジェクト。 |
files | テスト対象ファイルから除外されるファイル名。 |

Since: 1.0.4

### cut_sub_process_get_exclude_directories ()

    const char **
    cut_sub_process_get_exclude_directories
                                   (CutSubProcess *sub_process);

テスト対象ディレクトリから除外されるディレクトリ名を返します。

#### Parameters

sub_process | CutSubProcessオブジェクト。 |

#### Returns

テスト対象ディレクトリから除外されるディレクトリ名。

Since: 1.0.4

### cut_sub_process_set_exclude_directories ()

    void
    cut_sub_process_set_exclude_directories
                                   (CutSubProcess *sub_process,
                                    const char **directories);

テスト対象ディレクトリから除外されるディレクトリ名を指定します。これは--exclude-directoryコマンドラインオプションと同じ意味を持ちます。

#### Parameters

sub_process | CutSubProcessオブジェクト。 |
directories | テスト対象ディレクトリから除外されるディレクトリ名。 |

Since: 1.0.4

### cut_sub_process_get_target_test_case_names ()

    const char **
    cut_sub_process_get_target_test_case_names
                                   (CutSubProcess *sub_process);

実行されるテストケース名を返します。

#### Parameters

sub_process | CutSubProcessオブジェクト。 |

#### Returns

実行されるテストケース名。

Since: 1.0.4

### cut_sub_process_set_target_test_case_names ()

    void
    cut_sub_process_set_target_test_case_names
                                   (CutSubProcess *sub_process,
                                    const char **names);

実行されるテストケース名を指定します。これは--test-caseコマンドラインオプションと同じ意味を持ちます。

#### Parameters

sub_process | CutSubProcessオブジェクト。 |
names | 実行されるテストケース名。 |

Since: 1.0.4

### cut_sub_process_get_target_test_names ()

    const char **
    cut_sub_process_get_target_test_names (CutSubProcess *sub_process);

実行されるテスト名を返します。

#### Parameters

sub_process | CutSubProcessオブジェクト。 |

#### Returns

実行されるテスト名。

Since: 1.0.4

### cut_sub_process_set_target_test_names ()

    void
    cut_sub_process_set_target_test_names (CutSubProcess *sub_process,
                                           const char **names);

実行されるテスト名を指定します。これは--testコマンドラインオプションと同じ意味を持ちます。

#### Parameters

sub_process | CutSubProcessオブジェクト。 |
names | 実行されるテスト名。 |

Since: 1.0.4

### cut_sub_process_get_elapsed ()

    CutSubProcessGroupはいくつかのCutSubProcessをまとめて実行するための便利オブジェクトです。

`sub_process`を実行していた間の時間を取得します。

#### Parameters

sub_process | CutSubProcessオブジェクト。 |

#### Returns

`sub_process`を実行していた間の時間。

Since: 1.0.4

### cut_sub_process_get_total_elapsed ()

    CutSubProcessGroupはいくつかのCutSubProcessをまとめて実行するための便利オブジェクトです。

各テストで使われた時間の合計を返します。

#### Parameters

sub_process | CutSubProcessオブジェクト。 |

#### Returns

各テストで使われた時間の合計。

Since: 1.0.4

### cut_sub_process_is_crashed ()

    CutSubProcessGroupはいくつかのCutSubProcessをまとめて実行するための便利オブジェクトです。

`sub_process`が異常終了したかどうかを返します。

#### Parameters

sub_process | CutSubProcessオブジェクト。 |

#### Returns

`sub_process`が異常終了したときは`CUT_TRUE`、そうでない場合は`CUT_FALSE`。

Since: 1.0.4

### cut_sub_process_get_fatal_failures ()

    CutSubProcessGroupはいくつかのCutSubProcessをまとめて実行するための便利オブジェクトです。

`sub_process`が「失敗は致命的」モードで動くかどうかを返します。「失敗は致命的」モードの詳細は`cut_sub_process_set_fatal_failures()`を見てください。

#### Parameters

sub_process | CutSubProcessオブジェクト。 |

#### Returns

`sub_process`が「失敗は致命的」モードで実行されるなら`CUT_TRUE`、そうでなければ`CUT_FALSE`。

Since: 1.0.4

### cut_sub_process_set_fatal_failures ()

    void
    cut_sub_process_set_fatal_failures (CutSubProcess *sub_process,
                                        cut_boolean fatal_failures);

`sub_process`が「失敗は致命的」モードで実行されるかどうかを設定します。このモードではすべての失敗は致命的な問題として扱われます。つまり、失敗時にテストが異常終了します。いくつかの環境ではブレークポイントが設定されます。

--fatal-failuresコマンドラインオプションと同じ意味を持ちます。

#### Parameters

sub_process | CutSubProcessオブジェクト。 |
fatal_failures | 「失敗は致命的」モードで実行するなら`CUT_TRUE`。 |

Since: 1.0.4

### cut_take_new_sub_process_group ()

    CutSubProcessGroup *
    cut_take_new_sub_process_group (void);

サブcuterプロセスのグループを作ります。作られたグループの所有者はCutterです。

#### Returns

CutSubProcessGroupオブジェクト。

Since: 1.0.4

### cut_sub_process_group_add ()

    void
    cut_sub_process_group_add (CutSubProcessGroup *group,
                               CutSubProcess *sub_process);

`sub_process`を`group`に追加します。

#### Parameters

group | CutSubProcessGroupオブジェクト。 |
sub_process | CutSubProcessオブジェクト。 |

Since: 1.0.4

### cut_sub_process_group_run ()

    CutSubProcessGroupはいくつかのCutSubProcessをまとめて実行するための便利オブジェクトです。

`group`内のすべてのサブcutterプロセスを実行し、その結果を返します。

#### Parameters

group | CutSubProcessGroupオブジェクト。 |

#### Returns

`group`内のすべてのサブcutterプロセスが正常終了したら`CUT_TRUE`、そうでない場合は`CUT_FALSE`。

Since: 1.0.4

### cut_sub_process_group_run_async ()

    void
    cut_sub_process_group_run_async (CutSubProcessGroup *group);

`group`内のすべてのサブcutterプロセスを非同期で実行します。実行結果は`cut_sub_process_group_wait()`で取得できます。

#### Parameters

group | CutSubProcessGroupオブジェクト。 |

Since: 1.0.4

### cut_sub_process_group_wait ()

    CutSubProcessGroupはいくつかのCutSubProcessをまとめて実行するための便利オブジェクトです。

`group`内の非同期で実行されたすべてのサブcutterプロセスの終了を待ち、終了結果を返します。

#### Parameters

group | CutSubProcessGroupオブジェクト。 |

#### Returns

`group`内のすべてのサブcutterプロセスが正常終了したら`CUT_TRUE`、そうでない場合は`CUT_FALSE`。

Since: 1.0.4

## Types and Values

### CutSubProcess

    typedef struct _CutSubProcess CutSubProcess;

サブcutterプロセスを表現するオブジェクトです。サブcutterプロセスのパラメタとテスト結果を持っています。

例:

    1
    2
    3
    4
    5
    CutSubProcess *sub_process;

    sub_process = cut_take_new_sub_process("test-dir");
    cut_sub_process_set_multi_thread(sub_process, TRUE);
    cut_assert_true(cut_sub_process_run(sub_process));

Since: 1.0.4

### CutSubProcessGroup

    typedef struct _CutSubProcessGroup CutSubProcessGroup;

サブcutterプロセスを実行するオブジェクトです。このオブジェクトは便利にテストを書くために導入されています。

例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CutSubProcess *sub_process1, *sub_process2, *sub_process3;
    CutSubProcessGroup *group;

    sub_process1 = cut_take_new_sub_process("test-dir1");
    sub_process2 = cut_take_new_sub_process("test-dir2");
    sub_process3 = cut_take_new_sub_process("test-dir3");

    group = cut_take_new_sub_process_group();
    cut_sub_process_group_add(group, sub_process1);
    cut_sub_process_group_add(group, sub_process2);
    cut_sub_process_group_add(group, sub_process3);
    cut_assert_true(cut_sub_process_group_run(group));

Since: 1.0.4