---
generated_at: 2026-02-22 12:00:00
metrics:
  claims_total: 109
  claims_with_evidence: 109
  claims_without_evidence: 0
confidence_derived: 1.00
---

# 根拠レポート: backend-metal-osx 単体テストケース一覧

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**1.00**
  - 根拠あり：109 / 109、根拠なし：0
- 優先レビュー（高）
  1. 該当なし - 全テストケースに根拠が存在します

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

- E-01: `backends/imgui_impl_metal.h` - Metal バックエンドヘッダーファイル（行1-79）
- E-02: `backends/imgui_impl_metal.mm` - Metal バックエンド実装ファイル（行1-655）
- E-03: `backends/imgui_impl_osx.h` - OSX バックエンドヘッダーファイル（行1-55）
- E-04: `backends/imgui_impl_osx.mm` - OSX バックエンド実装ファイル（行1-839）
- E-05: `docs/code-to-docs/単体テストケース一覧/plan.md` - プロジェクト計画書

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

### Metal バックエンド (imgui_impl_metal.mm)

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | ImGui_ImplMetal_Init: 有効なMTLDeviceで初期化が成功すること | E-02 (行129-145) | ○ |
| C-02 | ImGui_ImplMetal_Init: 二重初期化時にアサートが発生すること | E-02 (行133) `IM_ASSERT(io.BackendRendererUserData == nullptr)` | ○ |
| C-03 | ImGui_ImplMetal_Init: BackendFlagsにRendererHasVtxOffsetが設定されること | E-02 (行138) | ○ |
| C-04 | ImGui_ImplMetal_Init: BackendFlagsにRendererHasTexturesが設定されること | E-02 (行139) | ○ |
| C-05 | ImGui_ImplMetal_Shutdown: 正常にシャットダウンできること | E-02 (行147-162) | ○ |
| C-06 | ImGui_ImplMetal_Shutdown: 未初期化時にアサートが発生すること | E-02 (行151) `IM_ASSERT(bd != nullptr)` | ○ |
| C-07 | ImGui_ImplMetal_Shutdown: BackendFlagsがクリアされること | E-02 (行160) | ○ |
| C-08 | ImGui_ImplMetal_NewFrame: 有効なRenderPassDescriptorで新規フレームが開始できること | E-02 (行164-175) | ○ |
| C-09 | ImGui_ImplMetal_NewFrame: 未初期化時にアサートが発生すること | E-02 (行167) `IM_ASSERT(bd != nil)` | ○ |
| C-10 | ImGui_ImplMetal_NewFrame: depthStencilStateがnilの場合にCreateDeviceObjectsが呼ばれること | E-02 (行173-174) | ○ |
| C-11 | ImGui_ImplMetal_RenderDrawData: 有効な描画データがレンダリングされること | E-02 (行222-337) | ○ |
| C-12 | ImGui_ImplMetal_RenderDrawData: フレームバッファサイズが0以下の場合にスキップされること | E-02 (行230) | ○ |
| C-13 | ImGui_ImplMetal_RenderDrawData: CmdListsが空の場合にスキップされること | E-02 (行230) | ○ |
| C-14 | ImGui_ImplMetal_RenderDrawData: ユーザーコールバックが呼び出されること | E-02 (行274-281) | ○ |
| C-15 | ImGui_ImplMetal_RenderDrawData: ResetRenderStateコールバックでレンダー状態がリセットされること | E-02 (行278-279) | ○ |
| C-16 | ImGui_ImplMetal_RenderDrawData: ElemCountが0の場合にスキップされること | E-02 (行296-297) | ○ |
| C-17 | ImGui_ImplMetal_RenderDrawData: クリップ領域がフレームバッファ境界にクランプされること | E-02 (行289-293) | ○ |
| C-18 | ImGui_ImplMetal_RenderDrawData: クリップ領域が無効な場合にスキップされること | E-02 (行294-295) | ○ |
| C-19 | ImGui_ImplMetal_RenderDrawData: Retina表示でFramebufferScaleが適用されること | E-02 (行261) | ○ |
| C-20 | ImGui_ImplMetal_UpdateTexture: WantCreateステータスでテクスチャが作成されること | E-02 (行353-385) | ○ |
| C-21 | ImGui_ImplMetal_UpdateTexture: WantUpdatesステータスでテクスチャが更新されること | E-02 (行386-398) | ○ |
| C-22 | ImGui_ImplMetal_UpdateTexture: WantDestroyステータスでテクスチャが破棄されること | E-02 (行400-403) | ○ |
| C-23 | ImGui_ImplMetal_UpdateTexture: UnusedFramesが0の場合はWantDestroyでも破棄されないこと | E-02 (行400) `tex->UnusedFrames > 0` | ○ |
| C-24 | ImGui_ImplMetal_CreateDeviceObjects: DepthStencilStateが作成されること | E-02 (行406-418) | ○ |
| C-25 | ImGui_ImplMetal_DestroyDeviceObjects: 全テクスチャが破棄されること | E-02 (行420-427) | ○ |
| C-26 | ImGui_ImplMetal_DestroyDeviceObjects: renderPipelineStateCacheがクリアされること | E-02 (行429) | ○ |
| C-27 | MetalBuffer initWithBuffer: バッファとlastReuseTimeが初期化されること | E-02 (行435-443) | ○ |
| C-28 | FramebufferDescriptor initWithRenderPassDescriptor: RenderPassDescriptorからプロパティが正しく抽出されること | E-02 (行449-458) | ○ |
| C-29 | FramebufferDescriptor copyWithZone: コピーが正しく作成されること | E-02 (行461-469) | ○ |
| C-30 | FramebufferDescriptor hash: 一意のハッシュ値が生成されること | E-02 (行471-479) | ○ |
| C-31 | FramebufferDescriptor isEqual: 同じプロパティを持つオブジェクトがtrueを返すこと | E-02 (行481-490) | ○ |
| C-32 | FramebufferDescriptor isEqual: 異なるプロパティを持つオブジェクトがfalseを返すこと | E-02 (行481-490) | ○ |
| C-33 | FramebufferDescriptor isEqual: 異なるクラスのオブジェクトがfalseを返すこと | E-02 (行484-485) | ○ |
| C-34 | MetalTexture initWithTexture: テクスチャが正しく初期化されること | E-02 (行497-502) | ○ |
| C-35 | MetalContext init: コンテキストが正しく初期化されること | E-02 (行509-517) | ○ |
| C-36 | MetalContext dequeueReusableBufferOfLength: 十分なサイズの再利用可能バッファが返却されること | E-02 (行537-548) | ○ |
| C-37 | MetalContext dequeueReusableBufferOfLength: キャッシュにない場合は新規バッファが作成されること | E-02 (行551-553) | ○ |
| C-38 | MetalContext dequeueReusableBufferOfLength: 古いバッファがパージされること | E-02 (行527-535) | ○ |
| C-39 | MetalContext renderPipelineStateForFramebufferDescriptor: パイプライン状態が作成されること | E-02 (行557-648) | ○ |
| C-40 | MetalContext renderPipelineStateForFramebufferDescriptor: シェーダーコンパイル失敗時にnilが返却されること | E-02 (行598-602, 644-645) | ○ |
| C-41 | GetMachAbsoluteTimeInSeconds: 現在時刻（秒）が返却されること | E-02 (行94) | ○ |
| C-42 | ImGui_ImplMetal_SetupRenderState: レンダー状態が正しく設定されること | E-02 (行177-219) | ○ |

### OSX バックエンド (imgui_impl_osx.mm)

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-43 | ImGui_ImplOSX_Init: 有効なNSViewで初期化が成功すること | E-04 (行408-502) | ○ |
| C-44 | ImGui_ImplOSX_Init: 二重初期化時にアサートが発生すること | E-04 (行413) `IM_ASSERT(io.BackendPlatformUserData == nullptr)` | ○ |
| C-45 | ImGui_ImplOSX_Init: マウスカーソルが初期化されること | E-04 (行427-438) | ○ |
| C-46 | ImGui_ImplOSX_Init: クリップボードハンドラが設定されること | E-04 (行443-467) | ○ |
| C-47 | ImGui_ImplOSX_Init: 通知オブザーバが登録されること | E-04 (行469-476) | ○ |
| C-48 | ImGui_ImplOSX_Init: KeyEventResponderがビューに追加されること | E-04 (行480-482) | ○ |
| C-49 | ImGui_ImplOSX_Shutdown: 正常にシャットダウンできること | E-04 (行504-526) | ○ |
| C-50 | ImGui_ImplOSX_Shutdown: 未初期化時にアサートが発生すること | E-04 (行507) `IM_ASSERT(bd != nullptr)` | ○ |
| C-51 | ImGui_ImplOSX_Shutdown: 通知オブザーバが解除されること | E-04 (行509-510) | ○ |
| C-52 | ImGui_ImplOSX_Shutdown: イベントモニターが解除されること | E-04 (行511-515) | ○ |
| C-53 | ImGui_ImplOSX_NewFrame: ディスプレイサイズが設定されること | E-04 (行625-637) | ○ |
| C-54 | ImGui_ImplOSX_NewFrame: 未初期化時にアサートが発生すること | E-04 (行628) `IM_ASSERT(bd != nullptr)` | ○ |
| C-55 | ImGui_ImplOSX_NewFrame: DeltaTimeが計算されること | E-04 (行639-645) | ○ |
| C-56 | ImGui_ImplOSX_NewFrame: Retina対応でDisplayFramebufferScaleが設定されること | E-04 (行634-636) | ○ |
| C-57 | ImGui_ImplOSX_NewFrame: viewがnilの場合にDisplaySizeが更新されないこと | E-04 (行632) `if (view)` | ○ |
| C-58 | ImGui_ImplOSX_KeyCodeToImGuiKey: kVK_ANSI_AがImGuiKey_Aに変換されること | E-04 (行277) | ○ |
| C-59 | ImGui_ImplOSX_KeyCodeToImGuiKey: kVK_ReturnがImGuiKey_Enterに変換されること | E-04 (行342) | ○ |
| C-60 | ImGui_ImplOSX_KeyCodeToImGuiKey: kVK_EscapeがImGuiKey_Escapeに変換されること | E-04 (行346) | ○ |
| C-61 | ImGui_ImplOSX_KeyCodeToImGuiKey: 修飾キーが正しく変換されること | E-04 (行351) | ○ |
| C-62 | ImGui_ImplOSX_KeyCodeToImGuiKey: ファンクションキーが正しく変換されること | E-04 (行360) | ○ |
| C-63 | ImGui_ImplOSX_KeyCodeToImGuiKey: 未定義キーコードがImGuiKey_Noneを返すこと | E-04 (行391) `default: return ImGuiKey_None` | ○ |
| C-64 | ImGui_ImplOSX_HandleEvent: 左マウスボタン押下イベントが処理されること | E-04 (行679-688) | ○ |
| C-65 | ImGui_ImplOSX_HandleEvent: 右マウスボタン押下イベントが処理されること | E-04 (行679-688) | ○ |
| C-66 | ImGui_ImplOSX_HandleEvent: マウス移動イベントが処理されること | E-04 (行701-714) | ○ |
| C-67 | ImGui_ImplOSX_HandleEvent: スクロールホイールイベントが処理されること | E-04 (行716-757) | ○ |
| C-68 | ImGui_ImplOSX_HandleEvent: キー押下イベントが処理されること | E-04 (行759-770) | ○ |
| C-69 | ImGui_ImplOSX_HandleEvent: キー離上イベントが処理されること | E-04 (行759-770) | ○ |
| C-70 | ImGui_ImplOSX_HandleEvent: 修飾キー変更イベントが処理されること | E-04 (行772-807) | ○ |
| C-71 | ImGui_ImplOSX_HandleEvent: キーリピートイベントがスキップされること | E-04 (行761-762) | ○ |
| C-72 | ImGui_ImplOSX_HandleEvent: 別ウィンドウのイベントが処理されないこと | E-04 (行675-676) | ○ |
| C-73 | ImGui_ImplOSX_HandleEvent: キャンセルされたスクロールイベントがスキップされること | E-04 (行730-731) | ○ |
| C-74 | ImGui_ImplOSX_HandleEvent: 高精度スクロールのスケーリングが適用されること | E-04 (行741-745) | ○ |
| C-75 | ImGui_ImplOSX_HandleEvent: フリップビューでY座標が反転されること | E-04 (行707-710) | ○ |
| C-76 | ImGui_ImplOSX_UpdateMouseCursor: 指定されたカーソルが表示されること | E-04 (行528-559) | ○ |
| C-77 | ImGui_ImplOSX_UpdateMouseCursor: NoMouseCursorChange設定時にカーソルが変更されないこと | E-04 (行532-533) | ○ |
| C-78 | ImGui_ImplOSX_UpdateMouseCursor: MouseDrawCursor時にOSカーソルが非表示になること | E-04 (行536-543) | ○ |
| C-79 | ImGui_ImplOSX_UpdateGamepads: ゲームパッド入力が処理されること | E-04 (行561-615) | ○ |
| C-80 | ImGui_ImplOSX_UpdateGamepads: ゲームパッド未接続時にフラグがクリアされること | E-04 (行570-574) | ○ |
| C-81 | ImGuiObserver onApplicationBecomeActive: フォーカス取得イベントが送信されること | E-04 (行255-259) | ○ |
| C-82 | ImGuiObserver onApplicationBecomeInactive: フォーカス喪失イベントが送信されること | E-04 (行261-265) | ○ |
| C-83 | KeyEventResponder setImePosX:imePosY: IME位置が設定されること | E-04 (行140-144) | ○ |
| C-84 | KeyEventResponder updateImePosWithView: IME矩形が更新されること | E-04 (行146-156) | ○ |
| C-85 | KeyEventResponder updateImePosWithView: windowがnilの場合は何もしないこと | E-04 (行149-150) | ○ |
| C-86 | KeyEventResponder insertText:replacementRange: テキスト入力がImGuiに送信されること | E-04 (行179-190) | ○ |
| C-87 | KeyEventResponder insertText:replacementRange: NSAttributedStringがNSStringに変換されること | E-04 (行184-187) | ○ |
| C-88 | KeyEventResponder acceptsFirstResponder: YESが返却されること | E-04 (行192-195) | ○ |
| C-89 | KeyEventResponder keyDown: ImGui_ImplOSX_HandleEventが呼び出されること | E-04 (行164-171) | ○ |
| C-90 | KeyEventResponder keyUp: ImGui_ImplOSX_HandleEventが呼び出されること | E-04 (行173-177) | ○ |
| C-91 | KeyEventResponder hasMarkedText: NOが返却されること | E-04 (行216-219) | ○ |
| C-92 | KeyEventResponder markedRange: NSNotFoundの範囲が返却されること | E-04 (行221-224) | ○ |
| C-93 | KeyEventResponder selectedRange: NSNotFoundの範囲が返却されること | E-04 (行226-229) | ○ |
| C-94 | KeyEventResponder firstRectForCharacterRange:actualRange: IME矩形が返却されること | E-04 (行211-214) | ○ |
| C-95 | GetMouseSource: NSEventSubtypeTabletPointがPenを返すこと | E-04 (行654-659) | ○ |
| C-96 | GetMouseSource: NSEventSubtypeMouseEventがMouseを返すこと | E-04 (行666-668) | ○ |
| C-97 | ImGui_ImplOSX_AddTrackingArea: イベントモニターが登録されること | E-04 (行812-834) | ○ |
| C-98 | ImGui_ImplOSX_AddTrackingArea: モニター登録済みの場合は何もしないこと | E-04 (行820-821) | ○ |
| C-99 | Platform_SetClipboardTextFn: クリップボードにテキストが設定されること | E-04 (行443-448) | ○ |
| C-100 | Platform_GetClipboardTextFn: クリップボードからテキストが取得されること | E-04 (行450-467) | ○ |
| C-101 | Platform_GetClipboardTextFn: クリップボードが空の場合にnullptrが返却されること | E-04 (行454-455, 458-459) | ○ |
| C-102 | Platform_SetImeDataFn: IME表示時にInputContextがアクティブになること | E-04 (行485-491) | ○ |
| C-103 | Platform_SetImeDataFn: IME非表示時にInputContextが非アクティブになること | E-04 (行492-497) | ○ |

### C++ API (IMGUI_IMPL_METAL_CPP)

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-104 | ImGui_ImplMetal_Init (C++): MTL::Deviceで初期化できること | E-02 (行100-103) | ○ |
| C-105 | ImGui_ImplMetal_NewFrame (C++): MTL::RenderPassDescriptorで新規フレームが開始できること | E-02 (行105-108) | ○ |
| C-106 | ImGui_ImplMetal_RenderDrawData (C++): C++ APIで描画データがレンダリングされること | E-02 (行110-118) | ○ |
| C-107 | ImGui_ImplMetal_CreateDeviceObjects (C++): MTL::Deviceでデバイスオブジェクトが作成されること | E-02 (行120-123) | ○ |
| C-108 | ImGui_ImplOSX_Init (C++): void*で初期化できること | E-04 (行397-399) | ○ |
| C-109 | ImGui_ImplOSX_NewFrame (C++): void*で新規フレームが開始できること | E-04 (行401-403) | ○ |

## 4) 不足情報（Unknown / Missing）
- 該当なし - 全テストケースにソースコードからの根拠が存在します。

## 5) リスクフラグ（レビュー観点）
- **リスクレベル: 0（低リスク）**
  - 全テストケースがソースコードの実装に基づいて生成されています
  - Metal/OSXバックエンドは公式ImGuiリポジトリの一部であり、安定したコードベースです
  - Objective-C++とC++の両方のAPIをカバーしています

## 6) レビュアーチェックリスト（最小）
- [ ] Metal初期化・終了処理のテストケース（UT-MOS-001〜007）が網羅的か確認
- [ ] OSX初期化・終了処理のテストケース（UT-MOS-043〜052）が網羅的か確認
- [ ] キーボード入力処理のテストケース（UT-MOS-058〜063, 068〜071）でキーマッピングが正確か確認
- [ ] マウス入力処理のテストケース（UT-MOS-064〜067, 072〜075）でイベント処理が正確か確認
- [ ] テクスチャ管理のテストケース（UT-MOS-020〜023）でライフサイクルが正確か確認
- [ ] バッファ管理のテストケース（UT-MOS-036〜038）でメモリ管理が正確か確認
- [ ] C++ API（IMGUI_IMPL_METAL_CPP）のテストケース（UT-MOS-104〜109）がObjC APIと整合性があるか確認
- [ ] ゲームパッド処理のテストケース（UT-MOS-079〜080）で入力マッピングが正確か確認
