---
generated_at: 2026-02-22 10:30:00
metrics:
  claims_total: 180
  claims_with_evidence: 175
  claims_without_evidence: 5
confidence_derived: 0.97
---

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

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.97**
  - 根拠あり：175 / 180、根拠なし：5
- 優先レビュー（高）
  1. **UT-BRW-078〜086**: BrowserStorageProvider - JSインタロップの動作は実行環境依存
  2. **UT-BRW-159〜161**: BrowserRenderTimer - レンダリングループの実際の動作確認が必要
  3. **UT-BRW-175〜180**: BrowserAppBuilder - アプリケーション起動シーケンスの統合テストが必要

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

- E-01: `src/Browser/Avalonia.Browser/KeyInterop.cs` - キーボード入力変換ロジック
- E-02: `src/Browser/Avalonia.Browser/BrowserDataFormatHelper.cs` - データ形式変換ヘルパー
- E-03: `src/Browser/Avalonia.Browser/Cursor.cs` - CSSカーソル実装
- E-04: `src/Browser/Avalonia.Browser/BrowserTopLevelImpl.cs` - トップレベル実装
- E-05: `src/Browser/Avalonia.Browser/BrowserInputHandler.cs` - 入力イベントハンドラ
- E-06: `src/Browser/Avalonia.Browser/ClipboardImpl.cs` - クリップボード実装
- E-07: `src/Browser/Avalonia.Browser/BrowserScreens.cs` - 画面管理
- E-08: `src/Browser/Avalonia.Browser/WindowingPlatform.cs` - ウィンドウイングプラットフォーム
- E-09: `src/Browser/Avalonia.Browser/BrowserDispatcherImpl.cs` - ディスパッチャ実装
- E-10: `src/Browser/Avalonia.Browser/Storage/BrowserStorageProvider.cs` - ストレージプロバイダ
- E-11: `src/Browser/Avalonia.Browser/Storage/BlobReadableStream.cs` - Blob読み取りストリーム
- E-12: `src/Browser/Avalonia.Browser/Storage/WriteableStream.cs` - 書き込みストリーム
- E-13: `src/Browser/Avalonia.Browser/Storage/BrowserLauncher.cs` - ブラウザランチャー
- E-14: `src/Browser/Avalonia.Browser/BrowserTextInputMethod.cs` - テキスト入力メソッド
- E-15: `src/Browser/Avalonia.Browser/BrowserNativeControlHost.cs` - ネイティブコントロールホスト
- E-16: `src/Browser/Avalonia.Browser/BrowserPlatformSettings.cs` - プラットフォーム設定
- E-17: `src/Browser/Avalonia.Browser/BrowserInsetsManager.cs` - インセットマネージャ
- E-18: `src/Browser/Avalonia.Browser/AvaloniaView.cs` - Avaloniaビュー
- E-19: `src/Browser/Avalonia.Browser/BrowserClipboardDataTransfer.cs` - クリップボードデータ転送
- E-20: `src/Browser/Avalonia.Browser/BrowserDragDataTransfer.cs` - ドラッグデータ転送
- E-21: `src/Browser/Avalonia.Browser/BrowserClipboardDataTransferItem.cs` - クリップボードアイテム
- E-22: `src/Browser/Avalonia.Browser/BrowserDragDataTransferItem.cs` - ドラッグアイテム
- E-23: `src/Browser/Avalonia.Browser/Rendering/BrowserRenderTimer.cs` - レンダリングタイマー
- E-24: `src/Browser/Avalonia.Browser/BrowserActivatableLifetime.cs` - アクティブ化ライフタイム
- E-25: `src/Browser/Avalonia.Browser/BrowserSystemNavigationManager.cs` - システムナビゲーション
- E-26: `src/Browser/Avalonia.Browser/BrowserSingleViewLifetime.cs` - シングルビューライフタイム
- E-27: `src/Browser/Avalonia.Browser/BrowserMouseDevice.cs` - マウスデバイス
- E-28: `src/Browser/Avalonia.Browser/JSObjectControlHandle.cs` - JSオブジェクトハンドル
- E-29: `src/Browser/Avalonia.Browser/BrowserAppBuilder.cs` - アプリビルダー

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

### KeyInterop (UT-BRW-001〜013)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | PhysicalKeyFromDomCodeが有効なDOMコードから物理キーを返す | E-01 (L11-199, L201-204) | ○ |
| C-02 | Numpadキーが正しく変換される | E-01 (L109-130) | ○ |
| C-03 | null/空文字列でPhysicalKey.Noneが返る | E-01 (L201-204) | ○ |
| C-04 | 未知のDOMコードでPhysicalKey.Noneが返る | E-01 (L201-204) | ○ |
| C-05 | KeyFromDomKeyがアルファベットキーを変換する | E-01 (L207-383, L385-420) | ○ |
| C-06 | 小文字アルファベットも正しく変換される | E-01 (L236-261) | ○ |
| C-07 | 修飾キーが物理キー位置で左右区別される | E-01 (L394-398) | ○ |
| C-08 | 数字キーがNumPadかメインか区別される | E-01 (L399-408) | ○ |
| C-09 | KeyFromDomKeyでnull/空文字列はKey.None | E-01 (L387-388) | ○ |
| C-10 | KeySymbolFromDomKeyが1文字を返す | E-01 (L422-433) | ○ |
| C-11 | サロゲートペアが正しく処理される | E-01 (L430) | ○ |
| C-12 | KeySymbolFromDomKeyでnull/空文字列はnull | E-01 (L424-425) | ○ |
| C-13 | 3文字以上の文字列はnullが返る | E-01 (L431) | ○ |

### BrowserDataFormatHelper (UT-BRW-014〜020)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-14 | text/plainがDataFormat.Textに変換される | E-02 (L13-16) | ○ |
| C-15 | FilesがDataFormat.Fileに変換される | E-02 (L17) | ○ |
| C-16 | text/で始まる形式が文字列DataFormatになる | E-02 (L18, L22-23) | ○ |
| C-17 | その他の形式がbyte[]DataFormatになる | E-02 (L19) | ○ |
| C-18 | DataFormat.Textがtext/plainに変換される | E-02 (L27-28) | ○ |
| C-19 | DataFormat.FileがFilesに変換される | E-02 (L30-31) | ○ |
| C-20 | DataFormat.Bitmapがimage/pngに変換される | E-02 (L33-34) | ○ |

### CssCursor (UT-BRW-021〜027)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-21 | StandardCursorTypeからCSSキーワードが生成される | E-03 (L13-15, L42-72) | ○ |
| C-22 | リサイズカーソルが正しく変換される | E-03 (L58-69) | ○ |
| C-23 | 未定義のカーソルタイプはdefaultになる | E-03 (L71) | ○ |
| C-24 | Base64画像からCSS cursor値が生成される | E-03 (L22-24) | ○ |
| C-25 | URLからCSS cursor値が生成される | E-03 (L37-40) | ○ |
| C-26 | CssCursorFactoryがCssCursorを生成する | E-03 (L89-92) | ○ |
| C-27 | ビットマップカーソルが生成される | E-03 (L79-87) | ○ |

### BrowserTopLevelImpl (UT-BRW-028〜039)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-28 | TryGetTopLevelが登録済みIDでTopLevelを返す | E-04 (L45-51) | ○ |
| C-29 | 未登録IDでnullが返る | E-04 (L45-51) | ○ |
| C-30 | PointToClientがPixelPointをPointに変換する | E-04 (L106) | ○ |
| C-31 | PointToScreenがPointをPixelPointに変換する | E-04 (L108) | ○ |
| C-32 | SetCursorがカーソルを設定する | E-04 (L110-118) | ○ |
| C-33 | 同じカーソルは再設定されない | E-04 (L113-114) | ○ |
| C-34 | nullカーソルはdefaultになる | E-04 (L112) | ○ |
| C-35 | CreatePopupがnullを返す | E-04 (L120-123) | ○ |
| C-36 | TryGetFeatureがIStorageProviderを返す | E-04 (L155-158) | ○ |
| C-37 | TryGetFeatureがIClipboardを返す | E-04 (L185-188) | ○ |
| C-38 | 未対応機能タイプでnullが返る | E-04 (L200) | ○ |
| C-39 | Disposeでサーフェスが破棄される | E-04 (L94-98) | ○ |

### BrowserInputHandler (UT-BRW-040〜059)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-40 | OnPointerMoveがマウス移動イベントを処理する | E-05 (L66-106) | ○ |
| C-41 | タッチ移動イベントが処理される | E-05 (L70-74) | ○ |
| C-42 | 左クリックイベントが処理される | E-05 (L108-128, L116) | ○ |
| C-43 | 右クリックイベントが処理される | E-05 (L118) | ○ |
| C-44 | タッチ開始イベントが処理される | E-05 (L113) | ○ |
| C-45 | 左ボタンリリースイベントが処理される | E-05 (L130-150, L137) | ○ |
| C-46 | タッチキャンセルイベントが処理される | E-05 (L152-163) | ○ |
| C-47 | 非タッチのキャンセルはfalseを返す | E-05 (L155, L162) | ○ |
| C-48 | ホイールイベントが処理される | E-05 (L165-170) | ○ |
| C-49 | ホイールデルタが正しく変換される | E-05 (L168) | ○ |
| C-50 | ドラッグエンターイベントが処理される | E-05 (L172-228, L176) | ○ |
| C-51 | ドロップイベントが処理される | E-05 (L179, L226-227) | ○ |
| C-52 | effectAllowedがcopyの場合Copy効果になる | E-05 (L196-198) | ○ |
| C-53 | effectAllowedがallの場合全効果が有効になる | E-05 (L210-214) | ○ |
| C-54 | 未知のドラッグタイプはfalseを返す | E-05 (L180-185) | ○ |
| C-55 | OnKeyDownがキーダウンイベントを処理する | E-05 (L230-240) | ○ |
| C-56 | 1文字キーでテキストイベントも発行される | E-05 (L234-237) | ○ |
| C-57 | OnKeyUpがキーアップイベントを処理する | E-05 (L242-245) | ○ |
| C-58 | RawTextEventがテキストイベントを発行する | E-05 (L331-342) | ○ |
| C-59 | InputRootがnullの場合falseが返る | E-05 (L333-341) | ○ |

### ClipboardImpl (UT-BRW-060〜064)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-60 | TryGetDataAsyncがクリップボードデータを取得する | E-06 (L15-19) | ○ |
| C-61 | クリップボードが空の場合nullが返る | E-06 (L18) | ○ |
| C-62 | SetDataAsyncがテキストデータを設定する | E-06 (L21-33, L47-53) | ○ |
| C-63 | ビットマップデータが設定できる | E-06 (L55-68) | ○ |
| C-64 | ClearAsyncがクリップボードをクリアする | E-06 (L105-106) | ○ |

### BrowserScreens (UT-BRW-065〜069)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-65 | Refreshが画面情報を更新する | E-07 (L17-31) | ○ |
| C-66 | GetAllScreenKeysが全画面キーを取得する | E-07 (L44-45) | ○ |
| C-67 | ScreenFromTopLevelCoreが現在画面を取得する | E-07 (L50-51) | ○ |
| C-68 | RequestScreenDetailsCoreが拡張詳細を要求する | E-07 (L58-70) | ○ |
| C-69 | 例外発生時falseが返る | E-07 (L64-68) | ○ |

### WindowingPlatform (UT-BRW-070〜072)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-70 | CreateWindowがNotSupportedExceptionをスローする | E-08 (L59) | ○ |
| C-71 | CreateTrayIconがnullを返す | E-08 (L72-75) | ○ |
| C-72 | Registerがサービスを登録する | E-08 (L83-121) | ○ |

### BrowserDispatcherImpl (UT-BRW-073〜077)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-73 | CurrentThreadIsLoopThreadがスレッド判定する | E-09 (L34) | ○ |
| C-74 | Signalがシグナルを発行する | E-09 (L41-49) | ○ |
| C-75 | 重複シグナルは発行されない | E-09 (L42-43) | ○ |
| C-76 | UpdateTimerがタイマーを更新する | E-09 (L51-64) | ○ |
| C-77 | タイマーがクリアされる | E-09 (L53-57) | ○ |

### BrowserStorageProvider (UT-BRW-078〜099)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-78 | OpenFilePickerAsyncがファイル選択ダイアログを開く | E-10 (L29-61) | ○ |
| C-79 | 複数ファイル選択が可能 | E-10 (L38) | ○ |
| C-80 | キャンセル時空配列が返る | E-10 (L47-50) | ○ |
| C-81 | SaveFilePickerAsyncが保存ダイアログを開く | E-10 (L63-91) | ○ |
| C-82 | 保存キャンセル時nullが返る | E-10 (L77-79) | ○ |
| C-83 | OpenFolderPickerAsyncがフォルダ選択を開く | E-10 (L99-113) | ○ |
| C-84 | TryGetWellKnownFolderAsyncが既知フォルダを取得する | E-10 (L135-150) | ○ |
| C-85 | 未定義の既知フォルダでArgumentOutOfRangeException | E-10 (L146) | ○ |
| C-86 | TryGetFileFromPathAsyncがnullを返す | E-10 (L125-128) | ○ |
| C-87 | JSStorageItem.Nameがファイル名を返す | E-10 (L198) | ○ |
| C-88 | GetBasicPropertiesAsyncがプロパティを取得する | E-10 (L201-211) | ○ |
| C-89 | SaveBookmarkAsyncがブックマークを保存する | E-10 (L215-225) | ○ |
| C-90 | CanBookmark=falseの場合nullが返る | E-10 (L217-219) | ○ |
| C-91 | DisposeでJSObjectが破棄される | E-10 (L271-275) | ○ |
| C-92 | OpenReadAsyncが読み取りストリームを返す | E-10 (L284-295) | ○ |
| C-93 | 権限がない場合UnauthorizedAccessException | E-10 (L291-294) | ○ |
| C-94 | OpenWriteAsyncが書き込みストリームを返す | E-10 (L297-311) | ○ |
| C-95 | GetItemsAsyncがアイテムを列挙する | E-10 (L320-361) | ○ |
| C-96 | CreateFileAsyncがファイルを作成する | E-10 (L363-380) | ○ |
| C-97 | CreateFolderAsyncがフォルダを作成する | E-10 (L382-399) | ○ |
| C-98 | GetFileAsyncが既存ファイルを取得する | E-10 (L421-439) | ○ |
| C-99 | 存在しないファイルでnullが返る | E-10 (L435-438) | ○ |

### BlobReadableStream (UT-BRW-100〜110)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-100 | CanReadがtrueを返す | E-11 (L25) | ○ |
| C-101 | CanWriteがfalseを返す | E-11 (L29) | ○ |
| C-102 | Lengthがストリーム長を返す | E-11 (L31) | ○ |
| C-103 | Positionが現在位置を返す | E-11 (L33-35) | ○ |
| C-104 | Position setがNotSupportedExceptionをスローする | E-11 (L36) | ○ |
| C-105 | Seek(Begin)で位置が設定される | E-11 (L41-49) | ○ |
| C-106 | Seek(Current)で相対位置が設定される | E-11 (L43-44) | ○ |
| C-107 | ReadがInvalidOperationExceptionをスローする | E-11 (L57-59) | ○ |
| C-108 | ReadAsyncがデータを読み取る | E-11 (L65-78) | ○ |
| C-109 | ストリーム末尾で0バイトが返る | E-11 (L67) | △ |
| C-110 | DisposeでJSObjectが破棄される | E-11 (L91-98) | ○ |

### WriteableStream (UT-BRW-111〜118)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-111 | CanWriteがtrueを返す | E-12 (L30) | ○ |
| C-112 | CanReadがfalseを返す | E-12 (L26) | ○ |
| C-113 | Seekが位置を設定する | E-12 (L50-59) | ○ |
| C-114 | SetLengthが長さを設定する | E-12 (L62-74) | ○ |
| C-115 | 長さ縮小時に位置が調整される | E-12 (L68-71) | ○ |
| C-116 | WriteがInvalidOperationExceptionをスローする | E-12 (L76-79) | ○ |
| C-117 | WriteAsyncがデータを書き込む | E-12 (L81-107) | ○ |
| C-118 | DisposeAsyncがCloseAsyncを呼ぶ | E-12 (L125-138) | ○ |

### BrowserLauncher (UT-BRW-119〜123)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-119 | LaunchUriAsyncが絶対URIでウィンドウを開く | E-13 (L10-18) | ○ |
| C-120 | 相対URIでfalseが返る | E-13 (L17-18) | ○ |
| C-121 | nullでArgumentNullExceptionがスローされる | E-13 (L12) | ○ |
| C-122 | LaunchFileAsyncがfalseを返す | E-13 (L21-26) | ○ |
| C-123 | ファイルでnullがArgumentNullExceptionをスローする | E-13 (L23) | ○ |

### BrowserTextInputMethod (UT-BRW-124〜131)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-124 | SetClientがクライアントを設定する | E-14 (L27-58) | ○ |
| C-125 | client=nullでIMEが非表示になる | E-14 (L55-57) | ○ |
| C-126 | SetCursorRectがカーソル位置を設定する | E-14 (L85-91) | ○ |
| C-127 | Resetが入力要素をクリアする | E-14 (L97-101) | ○ |
| C-128 | OnCompositionStartでIsComposing=true | E-14 (L125-132) | ○ |
| C-129 | OnCompositionUpdateがプリエディットを更新する | E-14 (L134-140) | ○ |
| C-130 | OnCompositionEndがコンポジションを終了する | E-14 (L142-155) | ○ |
| C-131 | data=nullでテキストイベントは発行されない | E-14 (L151-154) | ○ |

### BrowserNativeControlHost (UT-BRW-132〜138)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-132 | CreateDefaultChildがデフォルト子要素を作成する | E-15 (L19-23) | ○ |
| C-133 | IsCompatibleWithがJSObjectControlHandleでtrue | E-15 (L54) | ○ |
| C-134 | 他のハンドル型でfalseが返る | E-15 (L54) | ○ |
| C-135 | ShowInBoundsが要素を表示する | E-15 (L108-118) | ○ |
| C-136 | AttachedTo=nullでInvalidOperationException | E-15 (L112-113) | ○ |
| C-137 | HideWithSizeが要素を非表示にする | E-15 (L99-106) | ○ |
| C-138 | Disposeで子要素がリリースされる | E-15 (L67-75) | ○ |

### BrowserPlatformSettings (UT-BRW-139〜141)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-139 | GetColorValuesがカラー値を返す | E-16 (L23-32) | ○ |
| C-140 | ダークモード時はDarkが返る | E-16 (L29) | ○ |
| C-141 | OnValuesChangedがイベントを発行する | E-16 (L34-39) | ○ |

### BrowserInsetsManager (UT-BRW-142〜145)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-142 | IsSystemBarVisible getがフルスクリーン状態を返す | E-17 (L9-13) | ○ |
| C-143 | IsSystemBarVisible setがフルスクリーンを設定する | E-17 (L14-18) | ○ |
| C-144 | SafeAreaPaddingがパディングを返す | E-17 (L23-30) | ○ |
| C-145 | NotifySafeAreaPaddingChangedがイベントを発行する | E-17 (L35-38) | ○ |

### AvaloniaView (UT-BRW-146〜150)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-146 | divIdからビューが作成される | E-18 (L14-17) | ○ |
| C-147 | 要素が存在しない場合Exceptionがスローされる | E-18 (L16) | ○ |
| C-148 | JSObjectからビューが作成される | E-18 (L21-57) | ○ |
| C-149 | host=nullでArgumentNullExceptionがスローされる | E-18 (L23-26) | ○ |
| C-150 | Contentが取得/設定できる | E-18 (L59-63) | ○ |

### DataTransfer Classes (UT-BRW-151〜158)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-151 | BrowserClipboardDataTransfer.ProvideFormatsが形式を返す | E-19 (L18-19) | ○ |
| C-152 | ProvideItemsがアイテム配列を作成する | E-19 (L21-28) | ○ |
| C-153 | Disposeでリソースが解放される | E-19 (L30-39) | ○ |
| C-154 | BrowserDragDataTransfer.ProvideFormatsが形式を返す | E-20 (L18-19) | ○ |
| C-155 | DragのProvideItemsがアイテム配列を作成する | E-20 (L21-28) | ○ |
| C-156 | ClipboardItemのProvideFormatsが形式を返す | E-21 (L21-22) | ○ |
| C-157 | TryGetRawCoreAsyncがデータを取得する | E-21 (L24-31) | ○ |
| C-158 | DragItemのTryGetRawCoreがデータを取得する | E-22 (L22-27) | ○ |

### BrowserRenderTimer (UT-BRW-159〜161)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-159 | StartOnThisThreadがアニメーションフレームを開始する | E-23 (L36-44) | △ |
| C-160 | 既に開始済みの場合何もしない | E-23 (L38-39) | ○ |
| C-161 | Tickイベントハンドラが登録できる | E-23 (L21-33) | ○ |

### Lifetime/Navigation Classes (UT-BRW-162〜168)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-162 | visible時にActivatedが発行される | E-24 (L8-19) | ○ |
| C-163 | hidden時にDeactivatedが発行される | E-24 (L15-17) | ○ |
| C-164 | OnBackRequestedがイベントを発行する | E-25 (L11-17) | ○ |
| C-165 | イベント処理結果が返る | E-25 (L17) | ○ |
| C-166 | MainView getがビューを返す | E-26 (L13-19) | ○ |
| C-167 | View未初期化時InvalidOperationException | E-26 (L28-34) | ○ |
| C-168 | MainView setがビューを設定する | E-26 (L20-25) | ○ |

### Mouse/Handle Classes (UT-BRW-169〜174)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-169 | PointerIdが取得できる | E-27 (L9) | ○ |
| C-170 | 要素がある場合ポインタキャプチャが設定される | E-27 (L27-32) | ○ |
| C-171 | 要素がnullの場合キャプチャがリリースされる | E-27 (L31-32) | ○ |
| C-172 | JSObjectからハンドルが作成される | E-28 (L14-18) | ○ |
| C-173 | DestroyでJSObjectが破棄される | E-28 (L29-34) | ○ |
| C-174 | 既に破棄済みの場合何もしない | E-28 (L31) | ○ |

### BrowserAppBuilder (UT-BRW-175〜180)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-175 | StartBrowserAppAsyncがアプリを開始する | E-29 (L74-119) | △ |
| C-176 | mainDivId=nullでArgumentNullException | E-29 (L78-81) | ○ |
| C-177 | SetupBrowserAppAsyncがバックエンドを設定する | E-29 (L130-137) | △ |
| C-178 | PreSetupBrowserがオプションを設定する | E-29 (L139-161) | ○ |
| C-179 | デフォルトパスリゾルバが設定される | E-29 (L142) | ○ |
| C-180 | UseBrowserがプラットフォームを設定する | E-29 (L163-171) | ○ |

## 4) 不足情報（Unknown / Missing）
- **C-109**: BlobReadableStreamの末尾読み取りテストは、実際のBlobオブジェクトを使用した統合テストで確認が必要
- **C-159**: BrowserRenderTimerのアニメーションフレーム開始は、ブラウザ環境でのみ動作確認可能
- **C-175, C-177**: アプリ起動シーケンスは統合テストで確認が必要
  - 候補：Avalonia.Browser.Tests / ブラウザ統合テスト / E2Eテスト

## 5) リスクフラグ（レビュー観点）
- **リスク1（中）**: JSインタロップを使用するクラス（Storage, Clipboard等）はモック化が必要
- **リスク1（中）**: ブラウザ固有のAPI（requestAnimationFrame等）はモック化またはブラウザ環境でのテストが必要
- **リスク0（低）**: 純粋なC#ロジック（KeyInterop, BrowserDataFormatHelper等）は単体テスト容易

## 6) レビュアーチェックリスト（最小）
- [ ] KeyInterop: DOM KeyCode/Keyの全パターンがカバーされているか確認
- [ ] BrowserInputHandler: タッチ/マウス/ペンの全ポインタタイプがテストされているか確認
- [ ] Storage系: 権限エラー/キャンセル/ファイル未発見のエッジケースが網羅されているか確認
- [ ] Stream系: 境界値（0バイト、最大サイズ等）のテストが含まれているか確認
- [ ] JSインタロップ: モック戦略が適切か確認
- [ ] 非同期処理: キャンセレーショントークンの処理が正しいか確認
