---
generated_at: 2026-02-22 10:30:00
metrics:
  claims_total: 100
  claims_with_evidence: 100
  claims_without_evidence: 0
confidence_derived: 1.00
---

# 根拠レポート：Avalonia.DesignerSupport 単体テストケース一覧

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**1.00**
  - 根拠あり：100 / 100、根拠なし：0
- 優先レビュー（高）
  1. **UT-DES-001〜009（DesignWindowLoader）**：XAMLローダーの中核機能、AvaloniaLocator依存のモック設計が必要
  2. **UT-DES-010〜016（RemoteDesignerEntryPoint）**：コマンドライン解析とトランスポート作成、エントリーポイントのテスト
  3. **UT-DES-030〜047（HtmlWebSocketTransport）**：WebSocket通信とメッセージパース、セキュリティ関連（CORS検証）

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

- E-01: `src/Avalonia.DesignerSupport/DesignWindowLoader.cs` - デザイナーウィンドウ読み込みクラス（74行）
- E-02: `src/Avalonia.DesignerSupport/Remote/RemoteDesignerEntryPoint.cs` - リモートデザイナーエントリーポイント（253行）
- E-03: `src/Avalonia.DesignerSupport/Remote/PreviewerWindowingPlatform.cs` - プレビューウィンドウプラットフォーム（67行）
- E-04: `src/Avalonia.DesignerSupport/Remote/FileWatcherTransport.cs` - ファイル監視トランスポート（97行）
- E-05: `src/Avalonia.DesignerSupport/Remote/HtmlTransport/HtmlTransport.cs` - HTMLWebSocketトランスポート（369行）
- E-06: `src/Avalonia.DesignerSupport/Remote/HtmlTransport/SimpleWebSocketHttpServer.cs` - 簡易WebSocket HTTPサーバー（473行）
- E-07: `src/Avalonia.DesignerSupport/Remote/DetachableTransportConnection.cs` - 分離可能トランスポート接続（42行）
- E-08: `src/Avalonia.DesignerSupport/Remote/Stubs.cs` - 各種スタブクラス群（306行）
- E-09: `src/Avalonia.DesignerSupport/Remote/PreviewerWindowImpl.cs` - プレビューウィンドウ実装（175行）

## 3) Claims と根拠の対応（レビューの主戦場）

### DesignWindowLoader (E-01)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 (UT-DES-001) | 有効なXAMLからWindowが作成されること | E-01: LoadDesignerWindow メソッド（行17-72） | ○ |
| C-02 (UT-DES-002) | nullのXAMLが渡された場合例外がスローされる | E-01: stream生成時（行26）でnull参照例外 | ○ |
| C-03 (UT-DES-003) | 空文字のXAMLが渡された場合例外がスローされる | E-01: loader.Load（行42-47）で解析エラー | ○ |
| C-04 (UT-DES-004) | renderScalingが正しく適用される | E-01: offscreenImpl.RenderScaling設定（行52-53） | ○ |
| C-05 (UT-DES-005) | renderScalingが0の場合の挙動 | E-01: renderScaling引数の処理（行20, 52-53） | ○ |
| C-06 (UT-DES-006) | assemblyPathがnullの場合baseUriがnull | E-01: 条件分岐（行29-36）でnullチェック | ○ |
| C-07 (UT-DES-007) | xamlFileProjectPathがnullでデフォルト適用 | E-01: "/Fake.xaml"設定（行31-32） | ○ |
| C-08 (UT-DES-008) | 非Windowコントロールのラッピング | E-01: Window作成（行50） | ○ |
| C-09 (UT-DES-009) | SizeToContent設定 | E-01: IsSet確認とSizeToContent設定（行57-68） | ○ |

### RemoteDesignerEntryPoint (E-02)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-10 (UT-DES-010) | コマンドライン引数のパース | E-02: ParseCommandLineArgs（行74-112） | ○ |
| C-11 (UT-DES-011) | 必須引数不足時の終了 | E-02: PrintUsage呼び出し（行98, 101-102, 106, 109-110） | ○ |
| C-12 (UT-DES-012) | --methodオプションのパース | E-02: method引数処理（行89-90） | ○ |
| C-13 (UT-DES-013) | --html-urlオプションのパース | E-02: html-url引数処理（行91-92） | ○ |
| C-14 (UT-DES-014) | tcp-bsonスキームでBsonTcpTransport作成 | E-02: CreateTransport（行117-119） | ○ |
| C-15 (UT-DES-015) | fileスキームでFileWatcherTransport作成 | E-02: CreateTransport（行122-125） | ○ |
| C-16 (UT-DES-016) | 未対応スキームでPrintUsage | E-02: CreateTransport（行126） | ○ |

### PreviewerWindowingPlatform (E-03)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-17 (UT-DES-017) | CreateWindowでWindowStub返却 | E-03: CreateWindow（行23） | ○ |
| C-18 (UT-DES-018) | CreateEmbeddableWindowでPreviewerWindowImpl返却 | E-03: CreateEmbeddableWindow（行26-45） | ○ |
| C-19 (UT-DES-019) | 既存ウィンドウのDispose | E-03: CreateEmbeddableWindow（行28-38） | ○ |
| C-20 (UT-DES-020) | InitializeでAvaloniaLocatorにサービス登録 | E-03: Initialize（行50-63） | ○ |
| C-21 (UT-DES-021) | CreateTrayIconでnull返却 | E-03: CreateTrayIcon（行21） | ○ |
| C-22 (UT-DES-022) | GetWindowsZOrderでzOrderクリア | E-03: GetWindowsZOrder（行47-48） | ○ |

### FileWatcherTransport (E-04)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-23 (UT-DES-023) | コンストラクタでパス設定 | E-04: コンストラクタ（行17-21） | ○ |
| C-24 (UT-DES-024) | Disposeで_disposed=true | E-04: Dispose（行23-26） | ○ |
| C-25 (UT-DES-025) | Sendでコンソール出力 | E-04: Send/Dump（行28-49） | ○ |
| C-26 (UT-DES-026) | StartでUpdaterThread開始 | E-04: Start（行63-66） | ○ |
| C-27 (UT-DES-027) | ファイル変更時OnMessage発火 | E-04: UpdaterThread（行69-87） | ○ |
| C-28 (UT-DES-028) | 変更なし時OnMessage非発火 | E-04: UpdaterThread条件分岐（行74） | ○ |
| C-29 (UT-DES-029) | PreviewerMethodでHtml返却 | E-04: PreviewerMethod（行89） | ○ |

### HtmlWebSocketTransport (E-05)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-30 (UT-DES-030) | HTTPスキームで初期化 | E-05: コンストラクタ（行42-86） | ○ |
| C-31 (UT-DES-031) | 非HTTPスキームでArgumentException | E-05: スキームチェック（行44-45） | ○ |
| C-32 (UT-DES-032) | FrameMessage送信で_lastFrameMessage更新 | E-05: Send（行218-225） | ○ |
| C-33 (UT-DES-033) | RequestViewportResizeMessage無視 | E-05: Send（行226-229） | ○ |
| C-34 (UT-DES-034) | その他メッセージ転送 | E-05: Send（行230） | ○ |
| C-35 (UT-DES-035) | StartでClientSupportedPixelFormatsMessage発火 | E-05: Start（行233-239） | ○ |
| C-36 (UT-DES-036) | Disposeでリソース解放 | E-05: Dispose（行211-216） | ○ |
| C-37 (UT-DES-037) | IsValidOriginでOrigin一致チェック | E-05: IsValidOrigin（行134-138） | ○ |
| C-38 (UT-DES-038) | vscode-webview対応 | E-05: IsValidOrigin（行137） | ○ |
| C-39 (UT-DES-039) | 不正Origin拒否 | E-05: IsValidOrigin（行134-138） | ○ |
| C-40 (UT-DES-040) | frame-receivedメッセージパース | E-05: ParseMessage（行304-306） | ○ |
| C-41 (UT-DES-041) | pointer-pressedメッセージパース | E-05: ParseMessage（行318-326） | ○ |
| C-42 (UT-DES-042) | pointer-releasedメッセージパース | E-05: ParseMessage（行308-316） | ○ |
| C-43 (UT-DES-043) | pointer-movedメッセージパース | E-05: ParseMessage（行328-335） | ○ |
| C-44 (UT-DES-044) | scrollメッセージパース | E-05: ParseMessage（行337-346） | ○ |
| C-45 (UT-DES-045) | 未知メッセージでnull返却 | E-05: ParseMessage（行349） | ○ |
| C-46 (UT-DES-046) | 修飾キーパース | E-05: ParseInputModifiers（行352-358） | ○ |
| C-47 (UT-DES-047) | 空修飾キーでnull | E-05: ParseInputModifiers（行353-354） | ○ |

### SimpleWebSocketHttpServer (E-06)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-48 (UT-DES-048) | コンストラクタでアドレス・ポート設定 | E-06: コンストラクタ（行105-109） | ○ |
| C-49 (UT-DES-049) | ListenでTcpListener開始 | E-06: Listen（行98-103） | ○ |
| C-50 (UT-DES-050) | AcceptAsyncでリクエスト受信 | E-06: AcceptAsync/AcceptAsyncImpl（行20-96） | ○ |
| C-51 (UT-DES-051) | Listen未呼出でInvalidOperationException | E-06: AcceptAsyncImpl（行31-32） | ○ |
| C-52 (UT-DES-052) | Disposeでリスナー停止 | E-06: Dispose（行111-115） | ○ |
| C-53 (UT-DES-053) | WebSocketリクエスト識別 | E-06: SimpleWebSocketHttpRequest（行134-144） | ○ |
| C-54 (UT-DES-054) | 通常HTTPリクエスト識別 | E-06: SimpleWebSocketHttpRequest（行134-144） | ○ |
| C-55 (UT-DES-055) | RespondAsyncでHTTPレスポンス送信 | E-06: RespondAsync（行147-155） | ○ |
| C-56 (UT-DES-056) | AcceptWebSocketでハンドシェイク | E-06: AcceptWebSocket（行158-177） | ○ |
| C-57 (UT-DES-057) | SendMessage(string)でテキスト送信 | E-06: SendMessage（行289-293） | ○ |
| C-58 (UT-DES-058) | SendMessage(bool,byte[])でバイナリ送信 | E-06: SendMessage（行294-298） | ○ |
| C-59 (UT-DES-059) | 125バイト以下のフレームヘッダー | E-06: SendFrame（行307-309） | ○ |
| C-60 (UT-DES-060) | 中サイズフレームヘッダー | E-06: SendFrame（行312-316） | ○ |
| C-61 (UT-DES-061) | 大サイズフレームヘッダー | E-06: SendFrame（行319-323） | ○ |
| C-62 (UT-DES-062) | ReceiveMessageでテキスト受信 | E-06: ReceiveMessage（行388-432） | ○ |
| C-63 (UT-DES-063) | Closeフレームでnull返却 | E-06: ReceiveMessage（行396-397） | ○ |
| C-64 (UT-DES-064) | PingでPong返信 | E-06: ReceiveMessage（行398-399） | ○ |
| C-65 (UT-DES-065) | フラグメントメッセージ結合 | E-06: ReceiveMessage（行413-428） | ○ |
| C-66 (UT-DES-066) | Disposeでストリーム解放 | E-06: Dispose（行283-287） | ○ |
| C-67 (UT-DES-067) | AsStringでUTF8変換 | E-06: AsString（行467-469） | ○ |

### DetachableTransportConnection (E-07)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-68 (UT-DES-068) | コンストラクタで内部接続設定 | E-07: コンストラクタ（行11-15） | ○ |
| C-69 (UT-DES-069) | Disposeでハンドラ解除 | E-07: Dispose（行17-22） | ○ |
| C-70 (UT-DES-070) | FireOnMessageでイベント発火 | E-07: FireOnMessage（行24） | ○ |
| C-71 (UT-DES-071) | Sendで内部接続転送 | E-07: Send（行26-29） | ○ |
| C-72 (UT-DES-072) | Dispose後のSendでnull | E-07: Send null条件演算子（行28） | ○ |
| C-73 (UT-DES-073) | Startで内部接続開始 | E-07: Start（行39） | ○ |

### Stubs (E-08)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-74 (UT-DES-074) | WindowStubデフォルト初期化 | E-08: WindowStubプロパティ定義（行22-52） | ○ |
| C-75 (UT-DES-075) | WindowStub親指定時のPopupPositioner設定 | E-08: コンストラクタ（行54-62） | ○ |
| C-76 (UT-DES-076) | CreatePopupでWindowStub返却 | E-08: CreatePopup（行39） | ○ |
| C-77 (UT-DES-077) | PointToClientで座標変換 | E-08: PointToClient（行88） | ○ |
| C-78 (UT-DES-078) | PointToScreenで座標変換 | E-08: PointToScreen（行90） | ○ |
| C-79 (UT-DES-079) | TryGetFeatureでIStorageProvider | E-08: TryGetFeature（行205-209） | ○ |
| C-80 (UT-DES-080) | TryGetFeatureでIScreenImpl | E-08: TryGetFeature（行211-215） | ○ |
| C-81 (UT-DES-081) | TryGetFeatureで未対応機能null | E-08: TryGetFeature（行217） | ○ |
| C-82 (UT-DES-082) | ClipboardStub.ClearAsync | E-08: ClearAsync（行224） | ○ |
| C-83 (UT-DES-083) | ClipboardStub.TryGetDataAsync | E-08: TryGetDataAsync（行228） | ○ |
| C-84 (UT-DES-084) | CursorFactoryStub.GetCursor | E-08: GetCursor（行237） | ○ |
| C-85 (UT-DES-085) | CursorFactoryStub.CreateCursor | E-08: CreateCursor（行238） | ○ |
| C-86 (UT-DES-086) | IconLoaderStub.LoadIcon(string) | E-08: LoadIcon（行256） | ○ |
| C-87 (UT-DES-087) | IconLoaderStub.LoadIcon(Stream) | E-08: LoadIcon（行258） | ○ |
| C-88 (UT-DES-088) | ScreenStub.GetAllScreenKeys | E-08: GetAllScreenKeys（行265） | ○ |
| C-89 (UT-DES-089) | NoopStorageProvider.OpenFilePickerAsync | E-08: OpenFilePickerAsync（行283-286） | ○ |
| C-90 (UT-DES-090) | NoopStorageProvider.SaveFilePickerAsync | E-08: SaveFilePickerAsync（行289-292） | ○ |
| C-91 (UT-DES-091) | NoopStorageProvider.OpenFolderPickerAsync | E-08: OpenFolderPickerAsync（行300-303） | ○ |

### PreviewerWindowImpl (E-09)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-92 (UT-DES-092) | コンストラクタでClientSize=1x1初期化 | E-09: コンストラクタ（行18-22） | ○ |
| C-93 (UT-DES-093) | OnMessageでRenderScaling更新 | E-09: OnMessage（行50-63） | ○ |
| C-94 (UT-DES-094) | ResizeでRequestViewportResizeMessage送信 | E-09: Resize（行65-80） | ○ |
| C-95 (UT-DES-095) | ResizeでMaxAutoSizeHint制限 | E-09: Resize（行68-71） | ○ |
| C-96 (UT-DES-096) | TryGetFeatureでIStorageProvider | E-09: TryGetFeature（行103-108） | ○ |
| C-97 (UT-DES-097) | TryGetFeatureでIScreenImpl | E-09: TryGetFeature（行110-114） | ○ |
| C-98 (UT-DES-098) | DesktopScalingで1.0返却 | E-09: DesktopScaling（行40） | ○ |
| C-99 (UT-DES-099) | MaxAutoSizeHintで4096x4096返却 | E-09: MaxAutoSizeHint（行48） | ○ |
| C-100 (UT-DES-100) | NeedsManagedDecorationsでfalse返却 | E-09: NeedsManagedDecorations（行101） | ○ |

## 4) 不足情報（Unknown / Missing）
- 根拠なしの項目はありません。すべてのテストケースがソースコードの解析に基づいて生成されています。

## 5) リスクフラグ（レビュー観点）
- **0（低リスク）**: すべてのテストケースに対応するソースコードが存在
- **注意点**:
  - UT-DES-001〜009: AvaloniaLocatorのモック設計が複雑になる可能性あり
  - UT-DES-030〜047: WebSocket通信のテストには実際のネットワーク接続または高度なモックが必要
  - UT-DES-050〜065: TCP/ソケット通信のテストには統合テスト的なアプローチも検討

## 6) レビュアーチェックリスト（最小）
- [ ] 高優先度テストケース（UT-DES-001〜016, UT-DES-030〜047）のテスト設計が適切か確認
- [ ] AvaloniaLocatorへの依存箇所のモック戦略を確認
- [ ] WebSocket/TCP通信テストの実装方針を確認（統合テスト vs 単体テスト）
- [ ] セキュリティ関連テスト（CORS検証：UT-DES-037〜039）の網羅性を確認
- [ ] 境界値テスト（UT-DES-059〜061）のフレームサイズ閾値が仕様と一致するか確認
