---
generated_at: 2026-03-01 12:00:00
metrics:
  claims_total: 142
  claims_with_evidence: 137
  claims_without_evidence: 5
confidence_derived: 0.96
---

# 根拠レポート：cascadia-TerminalConnection 単体テストケース一覧

## 本レポートについて

### 目的
本レポートは、生成された単体テストケース一覧の信頼性を検証し、人間レビュアーが効率的にレビューできるようにすることを目的としています。

### チェック方法
以下の観点でドキュメントの内容（Claim：主張）を検証しています：

1. **根拠の有無確認**：各主張に対して、ソースコード・既存設計書・要件定義書などの根拠（Evidence）が存在するか
2. **根拠との整合性**：主張の内容が根拠と矛盾していないか
3. **網羅性**：参照すべき情報源を適切にカバーしているか

### 信頼度スコアの算出
- **confidence_derived** = 根拠あり件数 / 総主張件数
- 状態「○」：根拠あり、「△」：根拠不足または要確認

### 本レポートの使い方
1. まず「サマリー」で全体の信頼度と優先レビュー項目を確認
2. 「Claims と根拠の対応」で △ の項目を重点的にレビュー
3. 「不足情報」で補完が必要な情報源を確認

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.96**
  - 根拠あり：137 / 142、根拠なし：5
- 優先レビュー（高）
  1. **C-100, C-101（IsAzureConnectionAvailable）**：AzureClientIDの値はビルド構成に依存しヘッダファイル（AzureClientID.h）の中身が直接確認できなかったため、テストの前提条件が正確か要確認
  2. **C-084, C-085, C-086（ConnectionInformation::CreateConnection）**：RoActivateInstanceによるWinRTオブジェクト生成はランタイム環境に大きく依存し、単体テストでのモック化が必要
  3. **C-039, C-040, C-041（ConptyConnection::Start）**：ConPTY API（ConptyCreatePseudoConsole等）の呼び出しはOSレベルの依存があり、テスト環境でのモック化が必要

## 2) 参照した情報（Evidence一覧）
> ここに「実在するもの」だけ列挙。

- E-01: `src/cascadia/TerminalConnection/BaseTerminalConnection.h` - BaseTerminalConnectionテンプレートクラスの定義
- E-02: `src/cascadia/TerminalConnection/ConptyConnection.h` - ConptyConnectionクラスの宣言
- E-03: `src/cascadia/TerminalConnection/ConptyConnection.cpp` - ConptyConnectionクラスの実装
- E-04: `src/cascadia/TerminalConnection/AzureConnection.h` - AzureConnectionクラスの宣言
- E-05: `src/cascadia/TerminalConnection/AzureConnection.cpp` - AzureConnectionクラスの実装
- E-06: `src/cascadia/TerminalConnection/EchoConnection.h` - EchoConnectionクラスの宣言
- E-07: `src/cascadia/TerminalConnection/EchoConnection.cpp` - EchoConnectionクラスの実装
- E-08: `src/cascadia/TerminalConnection/ConnectionInformation.h` - ConnectionInformationクラスの宣言
- E-09: `src/cascadia/TerminalConnection/ConnectionInformation.cpp` - ConnectionInformationクラスの実装
- E-10: `src/cascadia/TerminalConnection/CTerminalHandoff.h` - CTerminalHandoffクラスの宣言
- E-11: `src/cascadia/TerminalConnection/CTerminalHandoff.cpp` - CTerminalHandoffクラスの実装
- E-12: `src/cascadia/TerminalConnection/AzureClient.h` - AzureException / Tenant構造体の定義
- E-13: `src/cascadia/TerminalConnection/init.cpp` - DLLエントリポイント
- E-14: `src/cascadia/TerminalConnection/ITerminalConnection.idl` - ITerminalConnectionインターフェース定義
- E-15: `src/cascadia/TerminalConnection/ConptyConnection.idl` - ConptyConnectionランタイムクラス定義
- E-16: `src/cascadia/TerminalConnection/AzureConnection.idl` - AzureConnectionランタイムクラス定義
- E-17: `src/cascadia/TerminalConnection/EchoConnection.idl` - EchoConnectionランタイムクラス定義
- E-18: `src/cascadia/TerminalConnection/ConnectionInformation.idl` - ConnectionInformationランタイムクラス定義

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-001 | BaseTerminalConnection::SessionIdがセッションIDを返す | E-01 (L10-13) | ○ |
| C-002 | 初期状態でデフォルトGUIDが返る | E-01 (L104) | ○ |
| C-003 | State()が接続状態を返す | E-01 (L15-17) | ○ |
| C-004 | 初期状態でNotConnectedが返る | E-01 (L107) | ○ |
| C-005 | _transitionToStateで上位状態へ遷移可能 | E-01 (L38-55) | ○ |
| C-006 | 状態遷移時にStateChangedイベントが発火 | E-01 (L52) | ○ |
| C-007 | 下位状態への遷移は拒否される | E-01 (L44-46) | ○ |
| C-008 | 同じ状態への遷移は許可される | E-01 (L44) `state < _connectionState` | ○ |
| C-009 | _isStateOneOfで現在状態が含まれる判定 | E-01 (L63-78) | ○ |
| C-010 | _isStateOneOfで現在状態が含まれない判定 | E-01 (L63-78) | ○ |
| C-011 | _isStateAtOrBeyondで状態以上の判定 | E-01 (L86-92) | ○ |
| C-012 | _isStateAtOrBeyondで状態未満の判定 | E-01 (L86-92) | ○ |
| C-013 | _isConnectedでConnected時true | E-01 (L99-102) | ○ |
| C-014 | _isConnectedでNotConnected時false | E-01 (L99-102) | ○ |
| C-015 | _isConnectedでConnecting時false | E-01 (L99-102) | ○ |
| C-016 | unbox_prop_orでプロパティ値取得 | E-01 (L24-27) | ○ |
| C-017 | unbox_prop_orで存在しないキーのデフォルト値 | E-01 (L24-27) | ○ |
| C-018 | ConptyConnectionコンストラクタ | E-03 (L197-202) | ○ |
| C-019 | CreateSettingsで全パラメータ格納 | E-03 (L206-243) | ○ |
| C-020 | CreateSettingsでenvironmentOverridesが格納される | E-03 (L228-236) | ○ |
| C-021 | CreateSettingsでenvironmentOverrides=nullptrの場合 | E-03 (L228) | ○ |
| C-022 | CreateSettingsでinitialEnvironment空の場合 | E-03 (L238-240) | ○ |
| C-023 | CreateSettingsでinitialEnvironment非空の場合 | E-03 (L238-242) | ○ |
| C-024 | Initializeでプロパティがメンバに反映 | E-03 (L245-319) | ○ |
| C-025 | Initializeでsettings=null時デフォルト維持 | E-03 (L247, L315-318) | ○ |
| C-026 | inheritCursor=trueでフラグ設定 | E-03 (L269-273) | ○ |
| C-027 | textMeasurement=graphemesでフラグ | E-03 (L278-280) | ○ |
| C-028 | textMeasurement=wcswidthでフラグ | E-03 (L281-284) | ○ |
| C-029 | textMeasurement=consoleでフラグ | E-03 (L285-288) | ○ |
| C-030 | reloadEnvironmentVariables=trueで環境再生成 | E-03 (L295-298) | ○ |
| C-031 | sessionIdが空GUIDの場合に新GUID生成 | E-03 (L315-318) | ○ |
| C-032 | InitializeFromHandoffでin=null時E_UNEXPECTED | E-03 (L332) | ○ |
| C-033 | InitializeFromHandoffでout=null時E_UNEXPECTED | E-03 (L332) | ○ |
| C-034 | InitializeFromHandoffでstartupInfo=null時E_UNEXPECTED | E-03 (L332) | ○ |
| C-035 | InitializeFromHandoffの正常初期化 | E-03 (L330-378) | ○ |
| C-036 | Commandline()の返却値 | E-03 (L380-383) | ○ |
| C-037 | StartingTitle()の返却値 | E-03 (L385-388) | ○ |
| C-038 | ShowWindow()の返却値 | E-03 (L390-393) | ○ |
| C-039 | Start()の新規接続時動作 | E-03 (L395-472) | ○ |
| C-040 | Start()のハンドオフ接続時動作 | E-03 (L425-444) | ○ |
| C-041 | Start()のプロセス起動失敗時 | E-03 (L474-506) | ○ |
| C-042 | Start()のディレクトリエラー | E-03 (L483-487) | ○ |
| C-043 | Start()の昇格要求エラー | E-03 (L489-493) | ○ |
| C-044 | WriteInputの接続中書き込み | E-03 (L548-595) | ○ |
| C-045 | WriteInputの未接続時無視 | E-03 (L552-555) | ○ |
| C-046 | WriteInputのパイプ切断時 | E-03 (L583-585) | ○ |
| C-047 | Resizeの接続中サイズ変更 | E-03 (L597-607) | ○ |
| C-048 | Resizeの未接続時メンバ更新のみ | E-03 (L599-600, L603) | ○ |
| C-049 | Resizeのゼロサイズ境界値 | E-03 (L605) ClampToShortMax | ○ |
| C-050 | ResetSizeの基本動作 | E-03 (L609-615) | ○ |
| C-051 | ResetSizeの未接続時 | E-03 (L611) | ○ |
| C-052 | ClearBufferの基本動作 | E-03 (L617-625) | ○ |
| C-053 | ClearBufferのkeepCursorRow=true | E-03 (L623) | ○ |
| C-054 | ClearBufferの未接続時 | E-03 (L621) | ○ |
| C-055 | ShowHideの接続中動作 | E-03 (L627-638) | ○ |
| C-056 | ShowHideの未接続時 | E-03 (L635-637) | ○ |
| C-057 | ReparentWindowの接続前保存 | E-03 (L640-654) | ○ |
| C-058 | ReparentWindowの接続中変更 | E-03 (L650-653) | ○ |
| C-059 | RootProcessHandleの返却値 | E-03 (L656-660) | ○ |
| C-060 | Closeの基本動作 | E-03 (L662-698) | ○ |
| C-061 | Closeでスレッド終了待機 | E-03 (L671-688) | ○ |
| C-062 | Closeの二重呼び出し安全性 | E-03 (L665) _transitionToState | ○ |
| C-063 | _formatStatusの基本フォーマット | E-03 (L525-528) | ○ |
| C-064 | _formatStatusの最大値 | E-03 (L525-528) | ○ |
| C-065 | NewConnectionイベント登録 | E-03 (L841) | ○ |
| C-066 | NewConnectionイベント解除 | E-03 (L842) | ○ |
| C-067 | EchoConnectionコンストラクタ | E-07 (L12) | ○ |
| C-068 | EchoConnection::Start(空実装) | E-07 (L14-16) | ○ |
| C-069 | EchoConnection::WriteInputの通常文字エコー | E-07 (L18-37) | ○ |
| C-070 | EchoConnection::WriteInputの制御文字変換 | E-07 (L23-26) | ○ |
| C-071 | EchoConnection::WriteInputの0x7f変換 | E-07 (L27-30) | ○ |
| C-072 | EchoConnection::WriteInputの空バッファ | E-07 (L20-22) | ○ |
| C-073 | EchoConnection::WriteInputの0x00変換 | E-07 (L23-26) `wch < 0x20`条件 | ○ |
| C-074 | EchoConnection::WriteInputの0x1F変換 | E-07 (L23-26) | ○ |
| C-075 | EchoConnection::WriteInputの0x20(スペース) | E-07 (L31-35) | ○ |
| C-076 | EchoConnection::Resize(空実装) | E-07 (L40-42) | ○ |
| C-077 | EchoConnection::Close(空実装) | E-07 (L44-46) | ○ |
| C-078 | EchoConnection::Initialize(空実装) | E-06 (L19) | ○ |
| C-079 | EchoConnection::SessionIdが空GUID | E-06 (L21) | ○ |
| C-080 | EchoConnection::StateがConnected固定 | E-06 (L22) | ○ |
| C-081 | ConnectionInformationコンストラクタ | E-09 (L7-11) | ○ |
| C-082 | ConnectionInformation::ClassName getter | E-08 (L30) | ○ |
| C-083 | ConnectionInformation::ClassName setter | E-08 (L31) | ○ |
| C-084 | CreateConnectionの正常生成 | E-09 (L25-58) | ○ |
| C-085 | CreateConnectionの無効クラス名 | E-09 (L47-49) | ○ |
| C-086 | CreateConnectionのインターフェース不一致 | E-09 (L53-59) | ○ |
| C-087 | CreateConnectionの例外時nullptr | E-09 (L61-65) | ○ |
| C-088 | s_setCallbackのコールバック登録 | E-11 (L19-22) | ○ |
| C-089 | s_StartListeningのCOM登録 | E-11 (L31-46) | ○ |
| C-090 | s_StopListeningのCOM解除 | E-11 (L55-66) | ○ |
| C-091 | s_StopListeningの二重呼び出し安全性 | E-11 (L59-63) | ○ |
| C-092 | EstablishPtyHandoffの正常呼び出し | E-11 (L84-101) | ○ |
| C-093 | EstablishPtyHandoffのコールバック未登録時 | E-11 (L87) | ○ |
| C-094 | AzureException::IsErrorPayloadでtrue | E-12 (L13-26) | ○ |
| C-095 | AzureException::IsErrorPayloadでfalse | E-12 (L15-17) | ○ |
| C-096 | AzureException::IsErrorPayloadで非文字列error | E-12 (L19-22) | ○ |
| C-097 | AzureExceptionコンストラクタ | E-12 (L28-31) | ○ |
| C-098 | AzureException::GetCode | E-12 (L34-37) | ○ |
| C-099 | AzureConnection::ConnectionType | E-05 (L65-68) | ○ |
| C-100 | IsAzureConnectionAvailableでtrue | E-05 (L73-76) | △ |
| C-101 | IsAzureConnectionAvailableでfalse | E-05 (L73-76) | △ |
| C-102 | AzureConnection::Initialize正常系 | E-05 (L78-91) | ○ |
| C-103 | AzureConnection::Initializeでnull設定時 | E-05 (L80, L87-90) | ○ |
| C-104 | AzureConnection::Start | E-05 (L132-158) | ○ |
| C-105 | WriteInputのTermConnected状態WebSocket送信 | E-05 (L207-212) | ○ |
| C-106 | WriteInputのバックスペース処理 | E-05 (L215-221) | ○ |
| C-107 | WriteInputのDEL処理 | E-05 (L215) UNICODE_DEL | ○ |
| C-108 | WriteInputのCR入力完了 | E-05 (L230-236) | ○ |
| C-109 | WriteInputのNotConnected時無視 | E-05 (L202-205) | ○ |
| C-110 | WriteInputの空バッファ | E-05 (L215) `data.size() > 0` ガード | ○ |
| C-111 | WriteInputの空入力でのBS処理 | E-05 (L217-218) `_userInput.size() > 0` ガード | ○ |
| C-112 | Resizeの未接続時サイズ保存 | E-05 (L253-257) | ○ |
| C-113 | Resizeの接続中API呼び出し | E-05 (L258-271) | ○ |
| C-114 | Closeの基本動作 | E-05 (L278-304) | ○ |
| C-115 | CloseでinputEvent通知 | E-05 (L282) | ○ |
| C-116 | Closeでスレッド終了待機 | E-05 (L293-300) | ○ |
| C-117 | _ReadUserInputの正常入力 | E-05 (L160-187) | ○ |
| C-118 | _ReadUserInputのClosing時nullopt | E-05 (L164-167, L179-182) | ○ |
| C-119 | _ParsePreferredShellTypeで存在時 | E-05 (L745-757) | ○ |
| C-120 | _ParsePreferredShellTypeでキー不在時デフォルト | E-05 (L750-753, L756) | ○ |
| C-121 | _ParsePreferredShellTypeでpropertiesキー不在 | E-05 (L747-754, L756) | ○ |
| C-122 | _WriteStringWithNewlineの文字列出力 | E-05 (L97-101) | ○ |
| C-123 | _WriteStringWithNewlineの空文字列 | E-05 (L97-101) | ○ |
| C-124 | _SendRequestReturningJsonのGET | E-05 (L829-853) | ○ |
| C-125 | _SendRequestReturningJsonのPOST | E-05 (L829-853) | ○ |
| C-126 | _SendRequestReturningJsonのReferer設定 | E-05 (L842-845) | ○ |
| C-127 | _SendRequestReturningJsonのAzureエラー伝播 | E-05 (L851) THROW_IF_AZURE_ERROR | ○ |
| C-128 | _SendRequestReturningJsonのメソッド自動判定(GET) | E-05 (L831-834) | ○ |
| C-129 | _SendRequestReturningJsonのメソッド自動判定(POST) | E-05 (L831-834) | ○ |
| C-130 | _setAccessTokenの設定 | E-05 (L855-859) | ○ |
| C-131 | _StoreCredentialのクレデンシャル保存 | E-05 (L1066-1080) | ○ |
| C-132 | _RemoveCredentialsの全削除 | E-05 (L1084-1109) | ○ |
| C-133 | _RemoveCredentialsのクレデンシャル未保存時 | E-05 (L1093-1098) | ○ |
| C-134 | _WaitForUserの認証成功 | E-05 (L886-931) | ○ |
| C-135 | _WaitForUserのauthorization_pendingリトライ | E-05 (L921-925) | ○ |
| C-136 | _WaitForUserの期限切れ | E-05 (L900, L930) | ○ |
| C-137 | _WaitForUserのClosing時キャンセル | E-05 (L905-909) | ○ |
| C-138 | _PopulateTenantListのテナント取得 | E-05 (L937-947) | ○ |
| C-139 | _RefreshTokensのトークン更新 | E-05 (L953-970) | ○ |
| C-140 | DllMainのDLL_PROCESS_ATTACH | E-13 (L21-25) | ○ |
| C-141 | DllMainのDLL_PROCESS_DETACH | E-13 (L26-30) | ○ |
| C-142 | DllMainのnullプロバイダガード | E-13 (L27-29) | ○ |

## 4) 不足情報（Unknown / Missing）
- **AzureClientID.h の内容が未確認**：AzureClientIDの実際の値はビルドパイプラインで設定されるため、ローカルビルドでは `L"0"` となる可能性がある。IsAzureConnectionAvailableのテスト前提条件が環境によって異なる（C-100, C-101）。
  - 候補：AzureClientID.h / ビルド定義ファイル / CI/CD設定
- **ConPTY API のモック方式**：ConptyCreatePseudoConsole等のOS APIをテストで使用する方法が不明（C-039, C-040, C-041）。
  - 候補：モックライブラリ / テスト用ラッパー / 統合テストとして実施
- **WinRT RoActivateInstanceのテスト方法**：ConnectionInformation::CreateConnectionで使用されるRoActivateInstanceはWinRTランタイムに依存（C-084, C-085, C-086）。
  - 候補：WinRTテスト環境 / COM モック / E2Eテスト

## 5) リスクフラグ（レビュー観点）
- **1（中リスク）**：IsAzureConnectionAvailableのテストはビルド環境に依存する（C-100, C-101）。AzureClientID.hの実際の値を確認する必要がある。
- **1（中リスク）**：ConptyConnection::Start, Close, WriteInputのテストはOS依存のConPTY APIを使用するため、モック化または統合テストとしての実施を検討する必要がある。
- **1（中リスク）**：AzureConnectionのHTTP/WebSocket関連テスト（_SendRequestReturningJson, _WaitForUser, _RunConnectState等）はネットワーク依存のため、HTTPクライアントのモック化が必要。
- **0（低リスク）**：EchoConnectionは完全にローカルで動作し、外部依存がないため、テストの信頼性は高い。
- **0（低リスク）**：BaseTerminalConnectionのテンプレートメソッドは純粋なロジックであり、外部依存がない。

## 6) レビュアーチェックリスト（最小）
- [ ] AzureClientID.hの内容を確認し、IsAzureConnectionAvailableテストの前提条件が正しいか検証する
- [ ] ConPTY API呼び出しのモック化方針を決定する（Start, Close, WriteInput, Resize等）
- [ ] WinRT RoActivateInstanceのテスト方針を決定する（ConnectionInformation::CreateConnection）
- [ ] AzureConnectionのHTTP/WebSocket通信テストでモック化する範囲を確認する
- [ ] EchoConnectionのWriteInputテストで全制御文字範囲（0x00-0x1F, 0x7F）のカバレッジを確認する
- [ ] BaseTerminalConnectionの状態遷移テストでスレッドセーフ性を検証する方針を決定する
- [ ] _formatStatusのフォーマット文字列が実際のWindowsエラーコード表示と一致するか確認する
