---
generated_at: 2026-03-01 12:00:00
metrics:
  claims_total: 118
  claims_with_evidence: 115
  claims_without_evidence: 3
confidence_derived: 0.97
---

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

## 本レポートについて

### 目的
本レポートは、生成された設計書・ドキュメントの信頼性を検証し、人間レビュアーが効率的にレビューできるようにすることを目的としています。

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.97**
  - 根拠あり：115 / 118、根拠なし：3
- 優先レビュー（高）
  1. **C-055 (UT-TIN-055)**: AltGr偽LeftCtrl検出 - タイミング依存ロジックの検証が実環境でのみ確認可能
  2. **C-056 (UT-TIN-056)**: AltGr+手動Ctrl検出 - タイミング依存ロジック(50msの閾値)の正確な検証が困難
  3. **C-110 (UT-TIN-110)**: Keypadモードの動作 - Feature_KeypadModeEnabled::IsEnabled()の条件がコード外で決定される

## 2) 参照した情報（Evidence一覧）
> ここに「実在するもの」だけ列挙。抽出フェーズで付けたIDをそのまま出す。

- E-01: `src/terminal/input/terminalInput.hpp` - TerminalInputクラスの宣言、公開メソッド・列挙型・構造体の定義
- E-02: `src/terminal/input/terminalInput.cpp` - TerminalInputクラスの実装（HandleKey、HandleFocus、SetInputMode等）
- E-03: `src/terminal/input/mouseInput.cpp` - マウス入力処理の実装（HandleMouse、IsTrackingMouseInput、ShouldSendAlternateScroll等）
- E-04: `src/terminal/input/mouseInputState.cpp` - マウス入力状態管理の実装（UseAlternateScreenBuffer、UseMainScreenBuffer）
- E-05: `src/terminal/input/sources.inc` - モジュールの説明文（Console Virtual Terminal Input）
- E-06: `src/terminal/input/precomp.h` - プリコンパイルヘッダー

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-001 | デフォルトコンストラクタで正しく初期化されること | E-01 (L50), E-02 (L29-32) | ○ |
| C-002 | コンストラクタ後にキーボードマップが初期化されていること | E-02 (L31, L327-532) | ○ |
| C-003 | MakeUnhandledが空のoptionalを返すこと | E-02 (L81-84) | ○ |
| C-004 | MakeOutputが有効な文字列でOutputTypeを返すこと | E-02 (L86-89) | ○ |
| C-005 | MakeOutputが空文字列でもOutputTypeを返すこと | E-02 (L86-89) | ○ |
| C-006 | SetInputModeでLineFeedモード有効化 | E-02 (L34-61) | ○ |
| C-007 | SetInputModeでLineFeedモード無効化 | E-02 (L34-61) | ○ |
| C-008 | トラッキングモード変更時に他のトラッキングモードがクリアされること | E-02 (L38-43) | ○ |
| C-009 | トラッキングモード変更時にマウス状態がリセットされること | E-02 (L41-42) | ○ |
| C-010 | エンコーディングモード有効化時に他のエンコーディングモードがクリアされること | E-02 (L47-50) | ○ |
| C-011 | エンコーディングモード無効化時に他のエンコーディングモードが維持されること | E-02 (L47: enabled条件) | ○ |
| C-012 | キーマップ関連モード変更時にキーボードマップが再生成されること | E-02 (L56-60) | ○ |
| C-013 | SendC1モード有効時にCSI/SS3がC1制御文字になること | E-02 (L358-367) | ○ |
| C-014 | GetInputModeが有効なモードに対してtrueを返すこと | E-02 (L63-66), E-01 (L81) | ○ |
| C-015 | GetInputModeが無効なモードに対してfalseを返すこと | E-02 (L63-66) | ○ |
| C-016 | ResetInputModesで全モードがデフォルト値にリセットされること | E-02 (L68-74) | ○ |
| C-017 | リセット時にマウス状態がクリアされること | E-02 (L71-72) | ○ |
| C-018 | リセット時にキーボードマップが再生成されること | E-02 (L73) | ○ |
| C-019 | ForceDisableWin32InputModeでtrue設定 | E-02 (L76-79) | ○ |
| C-020 | ForceDisableWin32InputModeでfalse設定 | E-02 (L76-79) | ○ |
| C-021 | KEY_EVENT以外のイベントでMakeUnhandledが返ること | E-02 (L108-111) | ○ |
| C-022 | Win32モード有効時にWin32出力が生成されること | E-02 (L118-121) | ○ |
| C-023 | Win32モード有効でも強制無効化時は通常VTになること | E-02 (L118) | ○ |
| C-024 | キーリリースで空出力 | E-02 (L131-147) | ○ |
| C-025 | 最後に押されたキーのリリースで_lastVirtualKeyCodeリセット | E-02 (L133-137) | ○ |
| C-026 | NumLock有効時のAltリリースでUnicode文字が出力 | E-02 (L140-143) | ○ |
| C-027 | リーディングサロゲートが保存されること | E-02 (L150-153) | ○ |
| C-028 | サロゲートペアが正しく結合されて出力 | E-02 (L618-629) | ○ |
| C-029 | VK_PACKETでUnicode文字がそのまま出力 | E-02 (L164-167) | ○ |
| C-030 | AutoRepeatモード無効時に繰り返しキー押下が抑制 | E-02 (L171-176) | ○ |
| C-031 | AutoRepeatモード有効時に繰り返しキー押下が処理 | E-02 (L171) | ○ |
| C-032 | 修飾キー単体で空出力 | E-02 (L180-183) | ○ |
| C-033 | カーソルキー上のVTシーケンスが正しいこと | E-02 (L434-435) | ○ |
| C-034 | CursorKeyモード有効時にSS3プレフィックス | E-02 (L434) | ○ |
| C-035 | Shift+カーソルキーで修飾子付きシーケンス | E-02 (L340-341) | ○ |
| C-036 | F1キーのVTシーケンス | E-02 (L414) | ○ |
| C-037 | F5キーのVTシーケンス | E-02 (L423-428) | ○ |
| C-038 | Ctrl+Shift+F5で修飾子付きシーケンス | E-02 (L345-346) | ○ |
| C-039 | BackspaceでDEL出力 | E-02 (L377-379) | ○ |
| C-040 | BackarrowKeyモード有効時にBS出力 | E-02 (L377-379) | ○ |
| C-041 | Ctrl+Backspaceで出力反転 | E-02 (L378-380) | ○ |
| C-042 | TabキーでHT出力 | E-02 (L388) | ○ |
| C-043 | Shift+TabでCSI Z | E-02 (L387, L390) | ○ |
| C-044 | EnterでCR出力 | E-02 (L396-397) | ○ |
| C-045 | LineFeedモード有効時にCR LF | E-02 (L396) | ○ |
| C-046 | Ctrl+EnterでLF | E-02 (L399) | ○ |
| C-047 | Alt+キーでESCプレフィックス | E-02 (L637-644) | ○ |
| C-048 | Ctrl+SpaceでNUL | E-02 (L237, L588-597) | ○ |
| C-049 | Insert/Delete/PageUp/PageDownのシーケンス | E-02 (L445-447) | ○ |
| C-050 | Home/Endのシーケンス | E-02 (L440-441) | ○ |
| C-051 | Pauseキーで^Z | E-02 (L371) | ○ |
| C-052 | VT52モードでカーソルキーがESCプレフィックス | E-02 (L496-500) | ○ |
| C-053 | VT52モードでF1がESC P | E-02 (L484) | ○ |
| C-054 | Alt+Numpad入力で空出力 | E-02 (L209-212) | ○ |
| C-055 | AltGr偽LeftCtrl検出（タイミング依存） | E-02 (L191-198) | △ |
| C-056 | AltGr+手動Ctrl検出（50ms閾値） | E-02 (L191-198) | △ |
| C-057 | テンキーReturnキーが通常Returnと同じ | E-02 (L404) | ○ |
| C-058 | virtualKeyCode=0でUnicodeCharがそのまま出力 | E-02 (L164-167) | ○ |
| C-059 | UnicodeCharもマップもない場合に空出力 | E-02 (L260-263) | ○ |
| C-060 | FocusEventモード有効時にフォーカスインシーケンス | E-02 (L317-325, L530) | ○ |
| C-061 | FocusEventモード有効時にフォーカスアウトシーケンス | E-02 (L317-325, L531) | ○ |
| C-062 | FocusEventモード無効時にMakeUnhandled | E-02 (L319-322) | ○ |
| C-063 | SendC1モード有効時のフォーカスシーケンス | E-02 (L358-367, L530-531) | ○ |
| C-064 | DefaultMouseTracking有効時にIsTrackingMouseInputがtrue | E-03 (L277-280) | ○ |
| C-065 | ButtonEventMouseTracking有効時にIsTrackingMouseInputがtrue | E-03 (L277-280) | ○ |
| C-066 | AnyEventMouseTracking有効時にIsTrackingMouseInputがtrue | E-03 (L277-280) | ○ |
| C-067 | 全トラッキングモード無効時にIsTrackingMouseInputがfalse | E-03 (L277-280) | ○ |
| C-068 | ShouldSendAlternateScrollの全条件一致でtrue | E-03 (L488-494) | ○ |
| C-069 | メインバッファ使用時にShouldSendAlternateScrollがfalse | E-03 (L490, L493) | ○ |
| C-070 | AlternateScrollモード無効時にfalse | E-03 (L491, L493) | ○ |
| C-071 | ホイール以外のボタンでfalse | E-03 (L492-493) | ○ |
| C-072 | delta=0のホイールでfalse | E-03 (L492) | ○ |
| C-073 | 水平ホイールでもtrue | E-03 (L492) | ○ |
| C-074 | DefaultMouseTrackingで左ボタン押下のデフォルトシーケンス | E-03 (L295-389, L400-417) | ○ |
| C-075 | SGRエンコーディングで左ボタン押下のSGRシーケンス | E-03 (L368-374, L471-477) | ○ |
| C-076 | SGRエンコーディングでボタンリリースのシーケンス | E-03 (L368-374, L476) | ○ |
| C-077 | UTF8エンコーディングでマウスイベントのシーケンス | E-03 (L364-366, L430-457) | ○ |
| C-078 | 右ボタン押下で正しいボタンエンコード | E-03 (L158-159) | ○ |
| C-079 | 中ボタン押下で正しいボタンエンコード | E-03 (L163-164) | ○ |
| C-080 | マウスホイール上スクロールのシーケンス | E-03 (L165-166) | ○ |
| C-081 | マウスホイール下スクロールのシーケンス | E-03 (L165-166) | ○ |
| C-082 | 水平ホイール右スクロールのシーケンス | E-03 (L168-169) | ○ |
| C-083 | 水平ホイール左スクロールのシーケンス | E-03 (L168-169) | ○ |
| C-084 | Shift修飾子付きマウスクリック | E-03 (L181) | ○ |
| C-085 | Ctrl修飾子付きマウスクリック | E-03 (L183) | ○ |
| C-086 | Alt修飾子付きマウスクリック | E-03 (L182) | ○ |
| C-087 | ButtonEventMouseTrackingでボタン押下中ホバー送信 | E-03 (L354) | ○ |
| C-088 | ButtonEventMouseTrackingでボタンなしホバー抑制 | E-03 (L354) | ○ |
| C-089 | AnyEventMouseTrackingでボタンなしホバー送信 | E-03 (L355) | ○ |
| C-090 | 同じ座標・同じボタンのホバーイベント抑制 | E-03 (L336-338) | ○ |
| C-091 | トラッキング無効時に代替スクロール実行 | E-03 (L383-386) | ○ |
| C-092 | 代替スクロール下方向 | E-03 (L500-512) | ○ |
| C-093 | 代替スクロール水平右 | E-03 (L513-520) | ○ |
| C-094 | 代替スクロール水平左 | E-03 (L513-523) | ○ |
| C-095 | トラッキング無効かつ代替スクロール条件不成立で空optional | E-03 (L388) | ○ |
| C-096 | デフォルトエンコーディングで座標>94で空 | E-03 (L12, L406) | ○ |
| C-097 | デフォルトエンコーディングで座標=94で正常出力 | E-03 (L12, L406) | ○ |
| C-098 | UTF8エンコーディングで座標>SHORT_MAX-33で空 | E-03 (L446) | ○ |
| C-099 | 座標(0,0)でのマウスイベント(VT座標変換) | E-03 (L254-257) | ○ |
| C-100 | ホイールデルタ蓄積でWHEEL_DELTA未満は出力なし | E-03 (L306-323) | ○ |
| C-101 | ホイールデルタ蓄積後の発火 | E-03 (L306-327) | ○ |
| C-102 | ホイールデルタ符号変更でリセット | E-03 (L297-304) | ○ |
| C-103 | SGRエンコーディングのホバー値 | E-03 (L222-223) | ○ |
| C-104 | SGRエンコーディングのドラッグ | E-03 (L370-374) | ○ |
| C-105 | ButtonEvent/AnyEventモードでlastPos/lastButton更新 | E-03 (L357-362) | ○ |
| C-106 | UseAlternateScreenBufferでinAlternateBufferがtrue | E-04 (L16-19) | ○ |
| C-107 | UseMainScreenBufferでinAlternateBufferがfalse | E-04 (L27-30) | ○ |
| C-108 | UseAlternateScreenBufferの冪等性 | E-04 (L18) | ○ |
| C-109 | UseMainScreenBufferの冪等性 | E-04 (L29) | ○ |
| C-110 | Keypadモード有効時のテンキーSS3シーケンス | E-02 (L454-475) | △ |
| C-111 | VT52モード+Keypadモードのテンキーシーケンス | E-02 (L506-527) | ○ |
| C-112 | Alt+BackspaceのESCプレフィックス | E-02 (L334-337, L379) | ○ |
| C-113 | ダブルクリックが通常クリックと同じエンコード | E-03 (L148-150) | ○ |
| C-114 | Defaultモードでのホバー抑制 | E-03 (L353) | ○ |
| C-115 | F20キーのVTシーケンス | E-02 (L423-428) | ○ |
| C-116 | Deleteキーのシーケンス | E-02 (L446) | ○ |
| C-117 | PageUpキーのシーケンス | E-02 (L447) | ○ |
| C-118 | PageDownキーのシーケンス | E-02 (L447) | ○ |

## 4) 不足情報（Unknown / Missing）
- **C-055, C-056**: AltGr偽LeftCtrl検出のタイミング依存ロジック。`GetTickCount64()`による50ms閾値の判定は、単体テストではモックやスタブが必要。コード上のロジックは確認できるが、実際のキーボードレイアウト依存の動作を完全に検証するには追加情報が必要。
  - 候補：実際のキーボードレイアウト定義 / テスト用モックの設計 / Windows APIのスタブ実装
- **C-110**: `Feature_KeypadModeEnabled::IsEnabled()`はコンパイル時またはランタイムのフィーチャーフラグで制御される。この関数の実装はterminal-inputモジュール外にあるため、テスト時のフラグ状態を制御する方法に関する情報が不足。
  - 候補：Feature flagの定義ファイル / テスト時のフィーチャーフラグ制御方法

## 5) リスクフラグ（レビュー観点）
- **1 (中リスク)**: AltGrキー処理のタイミング依存テスト（C-055, C-056） - 実行環境に依存する可能性があり、CIでの再現性に注意が必要
- **1 (中リスク)**: Feature_KeypadModeEnabled依存テスト（C-110） - フィーチャーフラグの有効/無効によりテスト結果が変わる可能性
- **0 (低リスク)**: Win32 APIに依存するキーボード状態取得（_getKeyboardState, ToUnicodeEx） - テスト時にはモック化が必要だが、ロジック自体は明確

## 6) レビュアーチェックリスト（最小）
- [ ] 全公開メソッド（14メソッド）に対してテストケースが存在することを確認
- [ ] 各モード（LineFeed, Ansi, AutoRepeat, Keypad, CursorKey, BackarrowKey, Win32, SendC1等）に対する切り替えテストが網羅されていることを確認
- [ ] マウストラッキングの3モード（Default, ButtonEvent, AnyEvent）について、各モードの動作差異がテストされていることを確認
- [ ] マウスエンコーディングの3方式（Default, UTF8, SGR）について、各方式のシーケンス生成がテストされていることを確認
- [ ] 境界値テスト（座標上限94/SHORT_MAX-33、ホイールデルタ蓄積）がカバーされていることを確認
- [ ] AltGr偽Ctrl検出のタイミングロジック（50ms閾値）のテスト方法が適切であることを確認
- [ ] Feature_KeypadModeEnabled依存のテストケースについて、フィーチャーフラグの制御方法を検討
- [ ] サロゲートペア処理のテストが正しく前半・後半ペアを扱っていることを確認
