Catch2  Compile-time configuration

# これは何?

https://github.com/catchorg/Catch2/blob/master/docs/configuration.md commit 88e912b4d13b5e22c4e91323372597e4c4f667d1 の和訳
変な訳なのはご容赦ください。ほとんど google 翻訳ともいう。
原文で compile toggle と表現しているものは、コンパイルスイッチと訳しています。

# Compile-time configuration

**Contents**
[main()/ implementation](#main-implementation)
[Prefixing Catch macros](#prefixing-catch-macros)
[Terminal colour](#terminal-colour)
[Console width](#console-width)
[stdout](#stdout)
[Other toggles](#other-toggles)
[Windows header clutter](#windows-header-clutter)
[Enabling stringification](#enabling-stringification)

Catch はできる限り "そのままで動く" ように設計しています。ほとんどの人は一つだけ設定が必要です、それは Catch に、どのソースファイルを全実装の宿主とするかを教えることです。 (```CATCH_CONFIG_MAIN```)

それでも、細かい制御が要る場合もあります。 このような場合のために、Catchは、ビルドの方法を設定するための、マクロ群を提供します。

## main()/ implementation

	CATCH_CONFIG_MAIN	// これを実装ファイルに指定し、main()を定義する
	CATCH_CONFIG_RUNNER	// これを実装ファイルに指定する

Catchはヘッダーだけですが、内部的にはインターフェースヘッダーと実装を含むヘッダーに分かれています。 テストプロジェクトの1つのソースファイルだけが実装ヘッダーをコンパイルする必要があり、これはこれらのマクロの1つを使用して制御されます。これらの識別子の1つは、プロジェクトの*唯一つ実装ファイル*に Catch の include 前に定義する必要があります。

# Reporter / Listener interfaces

    CATCH_CONFIG_EXTERNAL_INTERFACES  // Reporter/Listener の実装に必要なヘッダと成す

ユーザー定義の Reporter/Listener に必要な Catch のさまざまな機能を有効にします。 これは、新しい Reporter と Listener をこのファイルとメインファイルで定義できることを意味します。

暗黙的に `CATCH_CONFIG_MAIN` と `CATCH_CONFIG_RUNNER` の両方が定義されます。

## Prefixing Catch macros

	CATCH_CONFIG_PREFIX_ALL

テストコードをきれいに整理しておくために、Catchは短いマクロ名（```TEST_CASE``` や ```REQUIRE```など）を使用します。 これらは、プラットフォームヘッダーまたはテスト対象のシステムの識別子と競合することがあります。 この場合、上記の識別子を定義することができます。 これにより、すべてのCatchユーザーマクロの先頭に```CATCH_```（```CATCH_TEST_CASE```や```CATCH_REQUIRE```など）が付きます。

## Terminal colour

	CATCH_CONFIG_COLOUR_NONE	// すべてのテキストの色付けを完全に無効にする
	CATCH_CONFIG_COLOUR_WINDOWS	// Win32コンソールAPIを強制的に使用する
	CATCH_CONFIG_COLOUR_ANSI	// ANSIカラーコードを強制的に使用する

そうです、私は英国人ですので、"カラー"のスペルは'u'を含み続けていきます。

ターミナルに出力を送信するときに、可能であると判断すれば、Catch は 色付けしたテキストを使用します。 Windowsでは Win32 API の ```SetConsoleTextAttribute``` が使用されます。 POSIX システムでは、ANSIカラーエスケープコードがストリームに挿入されます。

より細かい制御のために、上記の識別子の1つを定義することができます（これらは相互に排他的ですが、チェックされていないため、混在させると予期せぬ動作をする可能性があります）

注: ANSIカラーコードを使用する場合、 ```isatty()``` の定義を含んだ "unistd.h" が include 可能でなければなりません。

典型的な使い方では、メインソースファイルで #include "catch.hpp" の前に ```＃define``` を置くべきですが、 IDE やビルドシステムがあなたのために提供されたものであれば、あなたのプロジェクト全体で定義しても構いません。

## Console width

	CATCH_CONFIG_CONSOLE_WIDTH = x // この x は数値

Catch は、コンソールが一定の文字数に収まるように出力を整形します。 インデントが広範囲に使用され、コントロールされていないラインラップがこれを壊すので、これは特に重要です。
デフォルトでは、コンソールの幅は80と仮定されていますが、これは上記の識別子を異なる値に定義することによって制御できます。

## stdout

	CATCH_CONFIG_NOSTDOUT

Catchは ```std::cout```、 ```std::cerr``` と ```std::clog``` を直接使うのではなく、 ```Catch::cout()```、```Catch::cerr(）``` と ```Catch::clog()``` をそれぞれ呼び出します。 上記の識別子が定義されている場合、これらの関数は未実装のままであり、それらを自分で実装する必要があります。 これらの実装は次のとおりです。

    std::ostream& cout();
    std::ostream& cerr();
    std::ostream& clog();

これは、特定の組み込みシステムなど、標準の iostream を提供しない特定のプラットフォームで役に立ちます。

## Other toggles

    CATCH_CONFIG_COUNTER                    // 一意なテストケース名の生成に __COUNTER__ を使います
    CATCH_CONFIG_WINDOWS_SEH                // Windows で SEH 処理を有効にする
    CATCH_CONFIG_FAST_COMPILE               // コンパイル速度のためにいくつかの(少しマイナーな)機能を犠牲にする
    CATCH_CONFIG_DISABLE_MATCHERS           // このコンパイル単位で Matchers をコンパイルしない
    CATCH_CONFIG_POSIX_SIGNALS              // POSIX signal 処理を有効にする
    CATCH_CONFIG_WINDOWS_CRTDBG             // Windows の CRT デバッグヒープを使ったリークチェックを有効にする
    CATCH_CONFIG_DISABLE_STRINGIFICATION    // 元の式の文字列を無効にする
    CATCH_CONFIG_DISABLE                    // アサーションとテストケースの登録を無効にする

MinGW のいくつかのバージョンには、必要な Win32 API のサポートがないため、CATCHでは現在 `CATCH_CONFIG_WINDOWS_SEH` が MSVC でコンパイルされているときのみ有効です。

`CATCH_CONFIG_POSIX_SIGNALS`は、Catchが `Cygwin` でコンパイルされている場合を除いて、デフォルトでオンになっています。 ( `Cygwin` 環境下ではデフォルトで無効になっていますが、 `CATCH_CONFIG_POSIX_SIGNALS`を定義することで強制的に有効にすることができます）。

`CATCH_CONFIG_WINDOWS_CRTDBG` はデフォルトでオフです。 有効にすると、Windows の CRT を使用してメモリリークがチェックされ、テストの実行が完了した後に表示されます。

これらコンパイルスイッチは、コンパイルスイッチの `_NO_` 形式を使用して無効にすることができます。例えば `CATCH_CONFIG_NO_WINDOWS_SEH`。

### `CATCH_CONFIG_FAST_COMPILE`
このフラグを定義すると、2つの変更を加えることで、テストファイルのコンパイル速度を約20％向上させることができます。

* `-b`（`--break`）フラグは、失敗したテストと同じスタックフレーム内ではなく、*下*のスタックフレーム内で、Catch にブレークさせデバッガーに入る。
* 非例外マクロ群（{`REQUIRE`、` CHECK`} {`_`、` _FALSE`、 `_FALSE`}は、ローカル try-cache ブロックを使用しなくなります。 これにより、例外の翻訳は無効になりますが、誤った否定にはなりません。

`CATCH_CONFIG_FAST_COMPILE` は、単一のテストバイナリにリンクされているすべての翻訳単位で定義されているか、定義されていないか、` -b`フラグをセットして予期しない例外をスローする動作は予測できません。

### `CATCH_CONFIG_DISABLE_MATCHERS`
`CATCH_CONFIG_DISABLE_MATCHERS` が定義されている場合、Catch の Matchers のすべての ifdef は、翻訳単位から除外されます。 そうすることで、その TU のコンパイルが高速化されます。

注：Catch のメインと同じファイルに `CATCH_CONFIG_DISABLE_MATCHERS` を定義した場合、どこかで Matchers を使用するとテスト実行ファイルのリンクができなくなります。

### `CATCH_CONFIG_DISABLE_STRINGIFICATION`
このコンパイルスイッチにより、VS 2017のバグを回避することができます。 詳細については、[既知の制限事項](https://github.com/catchorg/Catch2/blob/master/docs/limitations.md#visual-studio-2017----raw-string-literal-in-assert-fails-to-compile)を参照してください

### `CATCH_CONFIG_DISABLE`
このコンパイルスイッチは、与えられたファイルから Catch のほとんどを削除します。 つまり、 `TEST_CASE` は登録されておらず、アサーションはno-opsになります。 外部ファイルではなく、実装ファイル（つまり、内部リンケージを持つ関数）内でテストを保持するのに便利です。

この機能は実験的なもので、いつでも変更される可能性があります。

_Doctestの `DOCTEST_CONFIG_DISABLE` に触発されたものです。_

## Windows header clutter
Windows の Catchには `windows.h` が含まれています。 実装ファイル内のグローバルな名前空間の混乱を最小限に抑えるため、それを含める前に `NOMINMAX` と `WIN32_LEAN_AND_MEAN` を定義します。この動作は、2つのマクロを使用して制御できます。

    CATCH_CONFIG_NO_NOMINMAX            // Catch に NOMINMAX マクロの使用を止めさせる
    CATCH_CONFIG_NO_WIN32_LEAN_AND_MEAN // Catch に WIN32_LEAN_AND_MEAN マクロの使用を止めさせる

## Enabling stringification
デフォルトでは、Catchはいくつかの型を標準ライブラリからストリング化しません。 これは、デフォルトでさまざまな標準ライブラリのヘッダーを引きずり込むことを避けるためです。 ただし、Catchにはこれらのマクロが含まれており、次のマクロを使用してそれらを提供するように構成できます。

    CATCH_CONFIG_ENABLE_PAIR_STRINGMAKER    // std::pair でテンプレート特殊化した StringMaker を提供する
    CATCH_CONFIG_ENABLE_TUPLE_STRINGMAKER   // std::tupple でテンプレート特殊化した StringMaker を提供する
    CATCH_CONFIG_ENABLE_CHRONO_STRINGMAKER  // std::chrono::duration, std::chrono::timepoint でテンプレート特殊化した StringMaker を提供する
    CATCH_CONFIG_ENABLE_ALL_STRINGMAKERS    // 上記すべてを定義する


---