========================================================================
テスト仕様 (Test Specification)
========================================================================

0. 方針 (Policy)
------------------------------------------------------------------------
リファクタリングによって処理が変わっていないことを確認するためのテスト仕様．
各フェーズの適用タイミングは `PLAN_01_リファクタリング計画.txt` を参照する．

テストの種類:
    ・ビルドテスト: コンパイルエラーがないことを確認する
    ・回帰テスト: リファクタリング前後の出力が一致することを確認する
    ・手動テスト: 実機を使って動作を目視確認する


1. ビルドテスト (Build Test)
------------------------------------------------------------------------
全フェーズで実施する．

■ 手順
    1. Visual Studio で「ビルド」→「ソリューションのビルド」を実行する
    2. エラーが0件であることを確認する
    3. 警告が増加していないことを確認する（リファクタリング前の警告数を記録しておく）

■ 合格条件
    ・ビルドエラーが0件


2. 回帰テスト: 色補正処理（フェーズ2）
------------------------------------------------------------------------
リファクタリング前に基準データを作成し，リファクタリング後の出力と比較する．

2-1. 基準データの作成（リファクタリング前に実施）
    1. 実機でキャリブレーションを実行する
    2. 保存された以下のファイルを「基準データ」として別フォルダに保管する
        ・`TCC_RGB.csv`              ← チャート24色票のRGB値
        ・`Conv_RGB-sRGB{CN}.csv`   ← RGB→sRGB 変換行列
        ・`Conv_RGB-XYZ{CN}.csv`    ← RGB→XYZ 変換行列
        ・`Conv_sRGB-XYZ{CN}.csv`   ← sRGB→XYZ 変換行列
        ・`TCC_sRGB{CN}.csv`        ← チャートのsRGB変換値
        ・`sRGB{CN}_0001.jpg`       ← 撮影した sRGB 変換画像1枚

2-2. 比較（リファクタリング後に実施）
    1. 同一のキャリブレーション画像・撮影条件で再度実行する
       ※ 実機でのキャリブレーション再現が困難な場合は，
         TCC_RGB.csv を直接入力として行列計算のみ比較する
    2. 基準データと出力ファイルを比較する

■ 合格条件
    ・CSV の数値が全行・全列で一致する（または浮動小数点誤差 ±1e-6 以内）
    ・画像のピクセル値が全ピクセルで一致する


3. チャート検出テスト（フェーズ3）
------------------------------------------------------------------------
保存済みの実画像を入力として，チャートマスクの位置を比較する．

3-1. 基準データの作成（リファクタリング前に実施）
    1. キャリブレーション時に保存される `TCC_ROIs.jpg` を基準データとして保管する
       ※ TCC_ROIs.jpg はチャートの ROI マスク位置を緑色で重ねた確認画像

3-2. 比較（リファクタリング後に実施）
    1. 同一条件でキャリブレーションを実行する
    2. 出力された `TCC_ROIs.jpg` を基準データと目視比較する
       ※ 緑色のマスク位置が完全に一致していることを確認する

■ 合格条件
    ・マスクの位置・形状が基準データと目視で一致する


4. 手動テスト（全フェーズ）
------------------------------------------------------------------------
実機を使った動作確認．フェーズごとに実施する．

■ 確認項目
    ・アプリが正常に起動する
    ・カメラが自動で接続される（Lucam または ImagingSource）
    ・プレビューが表示される
    ・舌診チャートを映すとキャリブレーションが自動開始される
    ・キャリブレーション完了後に撮影ボタンが有効になる
    ・1枚撮影が正常に完了し，ファイルが保存される
    ・連続撮影が正常に完了し，ファイルが保存される
    ・光源の ON/OFF が切り替わる
    ・アプリを閉じてもエラーが出ない

■ 合格条件
    ・上記の全項目でエラー・クラッシュが発生しない
