---
generated_at: 2026-03-01 12:00:00
metrics:
  claims_total: 123
  claims_with_evidence: 119
  claims_without_evidence: 4
confidence_derived: 0.97
---

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

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.97**
  - 根拠あり：119 / 123、根拠なし：4
- 優先レビュー（高）
  1. **C-022 (UT-WTC-022)**：AutomationPeerの再利用動作はフレームワーク内部動作に依存し、ソースコードから直接確認困難
  2. **C-105 (UT-WTC-105)**：ColorTable=null時のマーシャリング動作はランタイム依存で根拠不足
  3. **C-106 (UT-WTC-106)**：Marshal.SizeOfの期待サイズはColorTableのマーシャリング挙動に依存
  4. **C-120 (UT-WTC-120)**：ITerminalConnection.WriteInput(null)の挙動は実装依存

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

- E-01: `src/cascadia/WpfTerminalControl/TerminalControl.xaml.cs` — TerminalControlクラスの実装
- E-02: `src/cascadia/WpfTerminalControl/TerminalContainer.cs` — TerminalContainerクラスの実装
- E-03: `src/cascadia/WpfTerminalControl/ITerminalConnection.cs` — ITerminalConnectionインターフェース定義
- E-04: `src/cascadia/WpfTerminalControl/TerminalOutputEventArgs.cs` — TerminalOutputEventArgsクラスの実装
- E-05: `src/cascadia/WpfTerminalControl/TerminalTheme.cs` — TerminalTheme構造体・CursorStyle enum定義
- E-06: `src/cascadia/WpfTerminalControl/NativeMethods.cs` — NativeMethodsクラス（P/Invoke、enum、構造体）
- E-07: `src/cascadia/WpfTerminalControl/TerminalControl.xaml` — XAML定義（UI構造）
- E-08: `src/cascadia/WpfTerminalControl/WpfTerminalControl.csproj` — プロジェクト定義（C#、WPF、.NET）

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-001 | TerminalControlコンストラクタでイベントハンドラが登録される | E-01 (L27-36) | ○ |
| C-002 | RowsプロパティがtermContainer.Rowsを返す | E-01 (L41) | ○ |
| C-003 | ColumnsプロパティがtermContainer.Columnsを返す | E-01 (L46) | ○ |
| C-004 | AutoResize getがtermContainer.AutoResizeを返す | E-01 (L54) | ○ |
| C-005 | AutoResize setがtermContainer.AutoResizeに設定する | E-01 (L55) | ○ |
| C-006 | AutoResize falseの設定 | E-01 (L55) | ○ |
| C-007 | Connection setがtermContainer.Connectionに伝搬する | E-01 (L63) | ○ |
| C-008 | SetThemeでtermContainer.SetThemeが呼ばれる | E-01 (L82-103) | ○ |
| C-009 | externalBackground指定時にBackgroundが設定される | E-01 (L99-102) | ○ |
| C-010 | externalBackground=defaultの場合にBackgroundが変更されない | E-01 (L99) | ○ |
| C-011 | PresentationSource=nullで早期リターン | E-01 (L83-88) | ○ |
| C-012 | DefaultBackgroundのBGR→RGB変換 | E-01 (L93-95) | ○ |
| C-013 | GetSelectedTextが選択テキストを返す | E-01 (L111), E-02 (L156-164) | ○ |
| C-014 | 未選択時にGetSelectedTextが空文字列を返す | E-01 (L111), E-02 (L163) | ○ |
| C-015 | ResizeAsyncがtermContainer.Resizeを呼ぶ | E-01 (L121-130) | ○ |
| C-016 | ResizeAsync rows=1, columns=1 | E-01 (L123), E-02 (L195-225) | ○ |
| C-017 | TriggerResizeがDPIスケール適用後にリサイズする | E-01 (L137-151) | ○ |
| C-018 | TriggerResize Width=0で(0,0)を返す | E-01 (L143-146) | ○ |
| C-019 | TriggerResize Height=0で(0,0)を返す | E-01 (L143-146) | ○ |
| C-020 | TriggerResize Width=0かつHeight=0で(0,0)を返す | E-01 (L143-146) | ○ |
| C-021 | OnCreateAutomationPeerがTermControlAutomationPeerを返す | E-01 (L154-165) | ○ |
| C-022 | 既存peerの再利用 | E-01 (L156-157) | △ |
| C-023 | OnRenderSizeChanged AutoResize=trueでTerminalControlSizeが更新される | E-01 (L168-195) | ○ |
| C-024 | OnRenderSizeChanged AutoResize=falseでマージン再計算 | E-01 (L184-192) | ○ |
| C-025 | 負のnewSizeWidthが0にクリップされる | E-01 (L173) | ○ |
| C-026 | CalculateMarginsで正しくマージンが計算される | E-01 (L202-235) | ○ |
| C-027 | controlSize=defaultでActualWidth/Heightが使用される | E-01 (L207-214) | ○ |
| C-028 | TerminalRendererSize=0でマージン0 | E-01 (L218-226) | ○ |
| C-029 | 負のマージンが0にクリップされる | E-01 (L231-232) | ○ |
| C-030 | delta蓄積がlineDelta以上でスクロール実行 | E-01 (L248-266) | ○ |
| C-031 | delta蓄積がlineDelta未満でスクロール不実行 | E-01 (L253-256) | ○ |
| C-032 | 負のdeltaで下方向スクロール | E-01 (L260) | ○ |
| C-033 | TermControl_TerminalScrolledでスクロールバーパラメータ更新 | E-01 (L268-277) | ○ |
| C-034 | bufferSize=viewHeightでMaximum=0 | E-01 (L273) | ○ |
| C-035 | Scrollbar_ScrollでtermContainer.UserScrollが呼ばれる | E-01 (L279-283) | ○ |
| C-036 | TermControlAutomationPeer.IsContentElementCore=false | E-01 (L292-295) | ○ |
| C-037 | TermControlAutomationPeer.IsControlElementCore=false | E-01 (L297-300) | ○ |
| C-038 | TerminalContainerコンストラクタの初期化 | E-02 (L32-42) | ○ |
| C-039 | Connection設定で既存イベント解除と新規登録 | E-02 (L96-121) | ○ |
| C-040 | 初回Connection設定でカーソル表示シーケンス | E-02 (L104-111) | ○ |
| C-041 | Connection=nullでカーソル非表示シーケンス | E-02 (L117-119) | ○ |
| C-042 | Connection設定でStart()呼び出し | E-02 (L114) | ○ |
| C-043 | UserScrollでNativeMethods呼び出し | E-02 (L127-130) | ○ |
| C-044 | UserScroll viewTop=0 | E-02 (L129) | ○ |
| C-045 | SetThemeでNativeMethods呼び出しとリサイズ | E-02 (L138-150) | ○ |
| C-046 | RenderSize.IsEmptyでリサイズスキップ | E-02 (L145-149) | ○ |
| C-047 | TerminalControlSize.Width=0でリサイズスキップ | E-02 (L146) | ○ |
| C-048 | GetSelectedTextで選択アクティブ時にテキスト返却 | E-02 (L158-161) | ○ |
| C-049 | 選択非アクティブ時にstring.Empty | E-02 (L163) | ○ |
| C-050 | Resize(Size)で行列数更新 | E-02 (L170-188) | ○ |
| C-051 | Resize(Size) Width=0でArgumentException | E-02 (L172-175) | ○ |
| C-052 | Resize(Size) Height=0でArgumentException | E-02 (L172-175) | ○ |
| C-053 | Resize(Size) Connection=nullで例外なし | E-02 (L187) | ○ |
| C-054 | Resize(uint,uint)で行列数更新 | E-02 (L195-225) | ○ |
| C-055 | Resize(uint,uint) rows=0でArgumentException | E-02 (L197-200) | ○ |
| C-056 | Resize(uint,uint) columns=0でArgumentException | E-02 (L202-205) | ○ |
| C-057 | Resize(uint,uint) rows=1, columns=1 | E-02 (L195-225) | ○ |
| C-058 | Resize(uint,uint) Connection=nullで例外なし | E-02 (L224) | ○ |
| C-059 | CalculateRowsAndColumnsで行列数計算 | E-02 (L232-237) | ○ |
| C-060 | RaiseResizedIfDrawSpaceIncreasedでConnection.Resize呼び出し | E-02 (L242-250) | ○ |
| C-061 | スペース増加なしでResizeスキップ | E-02 (L246) | ○ |
| C-062 | RaiseResizedIfDrawSpaceIncreased Connection=null | E-02 (L248) | ○ |
| C-063 | WndProc WM_GETOBJECTでhandled=false | E-02 (L259-268) | ○ |
| C-064 | WndProc 通常メッセージでbase.WndProc | E-02 (L267) | ○ |
| C-065 | OnCreateAutomationPeerがnull返却 | E-02 (L271-274) | ○ |
| C-066 | OnDpiChanged terminalポインタ有効 | E-02 (L277-283) | ○ |
| C-067 | OnDpiChanged terminal=IntPtr.Zero | E-02 (L279) | ○ |
| C-068 | BuildWindowCoreでCreateTerminalとコールバック登録 | E-02 (L286-304) | ○ |
| C-069 | 非デフォルトDPIでTerminalDpiChanged呼び出し | E-02 (L298-301) | ○ |
| C-070 | デフォルトDPIでTerminalDpiChanged非呼び出し | E-02 (L298) | ○ |
| C-071 | DestroyWindowCoreでDestroyTerminalとポインタリセット | E-02 (L307-311) | ○ |
| C-072 | UnpackKeyMessageでvkey/scanCode/flags抽出 | E-02 (L313-319) | ○ |
| C-073 | 拡張キーフラグの抽出 | E-02 (L317) | ○ |
| C-074 | UnpackCharMessageで文字抽出 | E-02 (L321-325) | ○ |
| C-075 | WM_SETFOCUSでTerminalSetFocused(true) | E-02 (L339-340) | ○ |
| C-076 | WM_KILLFOCUSでTerminalSetFocused(false) | E-02 (L342-343) | ○ |
| C-077 | WM_MOUSEACTIVATEでFocusとSetFocus | E-02 (L345-348) | ○ |
| C-078 | WM_KEYDOWNでTerminalSendKeyEvent | E-02 (L350-355) | ○ |
| C-079 | WM_KEYUPでTerminalSendKeyEvent(false) | E-02 (L357-364) | ○ |
| C-080 | WM_SYSKEYDOWNでTerminalSendKeyEvent | E-02 (L349) | ○ |
| C-081 | WM_CHARでTerminalSendCharEvent | E-02 (L366-372) | ○ |
| C-082 | WM_WINDOWPOSCHANGED AutoResize=trueでリサイズ | E-02 (L374-404) | ○ |
| C-083 | WM_WINDOWPOSCHANGED AutoResize=falseでCalculateResize | E-02 (L397-401) | ○ |
| C-084 | SWP_NOSIZEでリサイズスキップ | E-02 (L376-380) | ○ |
| C-085 | cx=0, cy=0でリサイズスキップ | E-02 (L377) | ○ |
| C-086 | WM_MOUSEWHEELでUserScrolledイベント発火 | E-02 (L406-409) | ○ |
| C-087 | hwnd不一致でメッセージ無視 | E-02 (L335) | ○ |
| C-088 | Connection_TerminalOutputで有効データ送信 | E-02 (L416-424) | ○ |
| C-089 | terminal=IntPtr.Zeroで送信スキップ | E-02 (L418) | ○ |
| C-090 | e.Data=nullで送信スキップ | E-02 (L418) | ○ |
| C-091 | e.Data=""で送信スキップ | E-02 (L418) | ○ |
| C-092 | OnScrollでTerminalScrolledイベント発火 | E-02 (L426-429) | ○ |
| C-093 | TerminalScrolledハンドラ未登録で例外なし | E-02 (L428) | ○ |
| C-094 | OnWriteでConnection.WriteInput呼び出し | E-02 (L431-434) | ○ |
| C-095 | OnWrite Connection=nullで例外なし | E-02 (L433) | ○ |
| C-096 | TerminalOutputEventArgsコンストラクタでData設定 | E-04 (L19-22) | ○ |
| C-097 | data=nullでData=null | E-04 (L21) | ○ |
| C-098 | data=""でData="" | E-04 (L21) | ○ |
| C-099 | Dataプロパティがget-only | E-04 (L27) | ○ |
| C-100 | DefaultBackgroundフィールド設定・取得 | E-05 (L62) | ○ |
| C-101 | DefaultForegroundフィールド設定・取得 | E-05 (L67) | ○ |
| C-102 | DefaultSelectionBackgroundフィールド設定・取得 | E-05 (L72) | ○ |
| C-103 | CursorStyleフィールド設定・取得 | E-05 (L76) | ○ |
| C-104 | ColorTable 16色配列設定・取得 | E-05 (L82) | ○ |
| C-105 | ColorTable=nullのマーシャリング動作 | E-05 (L81-82) | △ |
| C-106 | StructLayout(Sequential)のメモリレイアウト | E-05 (L55-56) | △ |
| C-107 | CursorStyle.BlinkingBlock=0 | E-05 (L18) | ○ |
| C-108 | CursorStyle.SteadyBar=6 | E-05 (L48) | ○ |
| C-109 | CursorStyleの7種類定義 | E-05 (L13-49) | ○ |
| C-110 | USER_DEFAULT_SCREEN_DPI=96 | E-06 (L14) | ○ |
| C-111 | WM_SETFOCUS=0x0007 | E-06 (L27) | ○ |
| C-112 | WM_MOUSEWHEEL=0x020A | E-06 (L92) | ○ |
| C-113 | SWP_NOSIZE=0x0001 | E-06 (L161) | ○ |
| C-114 | SetWindowPosFlags Flags属性によるビット演算 | E-06 (L95-96) | ○ |
| C-115 | TilSize XとYフィールド | E-06 (L256-268) | ○ |
| C-116 | TilPoint XとYフィールド | E-06 (L243-254) | ○ |
| C-117 | WINDOWPOS全フィールド | E-06 (L231-240) | ○ |
| C-118 | ITerminalConnection.Start呼び出し | E-03 (L25-26) | ○ |
| C-119 | ITerminalConnection.WriteInput呼び出し | E-03 (L28-29) | ○ |
| C-120 | ITerminalConnection.WriteInput(null)の挙動 | E-03 (L29) | △ |
| C-121 | ITerminalConnection.Resize呼び出し | E-03 (L31-36) | ○ |
| C-122 | ITerminalConnection.Close呼び出し | E-03 (L38-41) | ○ |
| C-123 | ITerminalConnection.TerminalOutputイベント | E-03 (L18) | ○ |

## 4) 不足情報（Unknown / Missing）
- **C-022**: `FrameworkElementAutomationPeer.FromElement`が既存peerを返す具体的条件はWPFフレームワークの内部実装に依存。ソースコードの分岐ロジック自体は確認済みだが、WPFランタイムの振る舞いまでは検証不可。
  - 候補：WPF Automation Peer公式ドキュメント / WPFソースコード
- **C-105**: `ColorTable=null`時の`MarshalAs(UnmanagedType.ByValArray, SizeConst=16)`の挙動は.NETランタイムのマーシャリング実装に依存。
  - 候補：.NET P/Invokeマーシャリング仕様 / ランタイムテスト
- **C-106**: `TerminalTheme`構造体の正確なメモリサイズは、`uint`(4byte) x 3 + `CursorStyle`(uint=4byte) + `uint[16]`(64byte) = 80byte が期待されるが、パディングの影響は環境依存。
  - 候補：.NET StructLayout仕様 / Marshal.SizeOf実行結果
- **C-120**: `ITerminalConnection`はインターフェースであり、`WriteInput(null)`の挙動は実装クラスに依存する。インターフェース自体にnullチェックの規定はない。
  - 候補：各ITerminalConnection実装クラスのソースコード

## 5) リスクフラグ（レビュー観点）
- **リスク 1（中）**: TerminalContainer.Connection setterのリセットシーケンス送信（C-040, C-041）は、ターミナル初期化タイミングに依存する可能性がある。VTシーケンスの正確性はターミナルエミュレータの仕様に依存。
- **リスク 1（中）**: NativeMethodsのP/Invoke呼び出し（C-068, C-071等）は、ネイティブDLL `Microsoft.Terminal.Control.dll` が存在し正しく動作する環境でないとテスト不可。モック化が必要。
- **リスク 0（低）**: CursorStyleやWindowMessage等のenum値テスト（C-107〜C-114）は定数確認であり、変更リスクは低い。
- **リスク 1（中）**: WPFのDispatcher.InvokeAsync/BeginInvokeを使用するメソッド（C-030〜C-034等）はUIスレッドテストの配慮が必要。

## 6) レビュアーチェックリスト（最小）
- [ ] TerminalContainer.Connection setterのVTシーケンス（`\x001bc\x1b]104\x1b\\`、`\x1b[?25h`、`\x1b[?25l`）が正しいか確認
- [ ] NativeMethodsのP/Invoke署名（DllImport属性）がネイティブDLLの実際のエクスポート関数と一致するか確認
- [ ] TerminalTheme構造体のメモリレイアウトがネイティブ側の`TerminalTheme`構造体（HwndTerminal.hpp）と一致するか確認
- [ ] TerminalControl.SetThemeのBGR→RGB変換ロジック（ビットシフト演算）が正しいか確認
- [ ] WM_WINDOWPOSCHANGEDハンドラのAutoResize=true/false分岐が意図通りか確認
- [ ] UnpackKeyMessage/UnpackCharMessageのビットマスク演算が正しいか確認
