---
generated_at: 2026-01-28 10:30:00
metrics:
  claims_total: 114
  claims_with_evidence: 110
  claims_without_evidence: 4
confidence_derived: 0.96
---

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

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.96**
  - 根拠あり：110 / 114、根拠なし：4
- 優先レビュー（高）
  1. **FlowLayout.invalidateLayout(with:)のitemSize計算式**：レイアウト計算の具体的な数式は実行時の検証が必要
  2. **ReachabilityNotifier関連テスト**：ネットワーク状態監視の詳細な挙動確認が必要
  3. **キーボード対応の詳細なinset計算**：safeAreaInsetsとの組み合わせの検証が必要
  4. **MagicWordUtils関連のローカライズテスト**：各言語の対応状況の網羅性確認が必要

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

- E-01: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/InsertMediaViewController.swift`
- E-02: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/InsertMediaSearchViewController.swift`
- E-03: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/InsertMediaSettingsViewController.swift`
- E-04: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/InsertMediaSelectedImageViewController.swift`
- E-05: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/InsertMediaSearchResultsCollectionViewController.swift`
- E-06: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/InsertMediaSearchResultCollectionViewCell.swift`
- E-07: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/InsertMediaSearchResultPreviewingViewController.swift`
- E-08: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/InsertMediaSelectedImageView.swift`
- E-09: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/InsertMediaImageInfoView.swift`
- E-10: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/InsertMediaSettingsButtonView.swift`
- E-11: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/InsertMediaSettingsTextTableViewCell.swift`
- E-12: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/InsertMediaSettingsImageView.swift`
- E-13: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/Advanced Settings/InsertMediaAdvancedSettingsViewController.swift`
- E-14: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/Advanced Settings/InsertMediaImageTypeSettingsViewController.swift`
- E-15: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/Advanced Settings/InsertMediaImageSizeSettingsViewController.swift`
- E-16: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/Advanced Settings/InsertMediaImagePositionSettingsViewController.swift`
- E-17: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/Advanced Settings/InsertMediaCustomImageSizeSettingTableViewCell.swift`
- E-18: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/Advanced Settings/InsertMediaLabelTableFooterView.swift`
- E-19: `/Users/tomoka.baba/Work/wikipedia-ios-main/WikipediaUnitTests/Code/Wikitext Tests/InsertMediaSettingsViewControllerTests.swift`

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

### InsertMediaSearchResult クラス
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 (UT-INM-001) | 全パラメータを指定して初期化できること | E-05 (init関数定義 L62-68) | ○ |
| C-02 (UT-INM-002) | オプショナルパラメータなしで初期化できること | E-05 (デフォルトパラメータ L62) | ○ |
| C-03 (UT-INM-003) | 正の幅でURLが返却されること | E-05 (imageURL(for:) L70-77) | ○ |
| C-04 (UT-INM-004) | 幅が0の場合nilが返却されること | E-05 (guard width > 0 L71-74) | ○ |
| C-05 (UT-INM-005) | 幅が負の場合nilが返却されること | E-05 (guard width > 0 L71-74) | ○ |

### InsertMediaSettingsViewController.Settings.Advanced 列挙型
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-06 (UT-INM-006) | rightの表示タイトルが正しいこと | E-03 (ImagePosition.displayTitle L54-67) | ○ |
| C-07 (UT-INM-007) | leftの表示タイトルが正しいこと | E-03 (ImagePosition.displayTitle L54-67) | ○ |
| C-08 (UT-INM-008) | centerの表示タイトルが正しいこと | E-03 (ImagePosition.displayTitle L54-67) | ○ |
| C-09 (UT-INM-009) | noneの表示タイトルが正しいこと | E-03 (ImagePosition.displayTitle L54-67) | ○ |
| C-10 (UT-INM-010) | thumbnailの表示タイトルが正しいこと | E-03 (ImageType.displayTitle L78-94) | ○ |
| C-11 (UT-INM-011) | framelessの表示タイトルが正しいこと | E-03 (ImageType.displayTitle L78-94) | ○ |
| C-12 (UT-INM-012) | frameの表示タイトルが正しいこと | E-03 (ImageType.displayTitle L78-94) | ○ |
| C-13 (UT-INM-013) | basicの表示タイトルが正しいこと | E-03 (ImageType.displayTitle L78-94) | ○ |
| C-14 (UT-INM-014) | defaultの表示タイトルが正しいこと | E-03 (ImageSize.displayTitle L100-107) | ○ |
| C-15 (UT-INM-015) | customの表示タイトルが正しいこと | E-03 (ImageSize.displayTitle L100-107) | ○ |
| C-16 (UT-INM-016) | defaultのrawValueが正しいこと | E-03 (ImageSize.rawValue L117-124, defaultSize L113-114) | ○ |
| C-17 (UT-INM-017) | customのrawValueが正しいこと | E-03 (ImageSize.rawValue L117-124) | ○ |

### InsertMediaSettingsViewController.imageInsertInfo
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-18 (UT-INM-018) | 英語サイトでデフォルト設定のWikitextが生成されること | E-03 (imageInsertInfo L389-433), E-19 (testENImageInsertWikitextSettingsDefault L14-23) | ○ |
| C-19 (UT-INM-019) | 英語サイトでカスタム設定のWikitextが生成されること | E-03 (imageInsertInfo L389-433), E-19 (testENImageInsertWikitextSettingsNoWrapBasicCustomSizeCaptionAlt L25-34) | ○ |
| C-20 (UT-INM-020) | 英語サイトでキャプションとaltTextなしのWikitextが生成されること | E-03 (imageInsertInfo L389-433), E-19 (testENImageInsertWikitextSettingsNoWrapBasicCustomSize L36-45) | ○ |
| C-21 (UT-INM-021) | ドイツ語サイトでデフォルト設定のWikitextが生成されること | E-03 (localizedFileTitle, localizedImageTypeName, etc.), E-19 (testDEImageInsertWikitextSettingsDefault L47-56) | ○ |
| C-22 (UT-INM-022) | ドイツ語サイトでカスタム設定のWikitextが生成されること | E-03, E-19 (testDEImageInsertWikitextSettingsNoWrapBasicCustomSizeCaptionAlt L58-67) | ○ |
| C-23 (UT-INM-023) | settingsがnilの場合シンプルなWikitextが生成されること | E-03 (guard let mediaSettings = settings L396-398) | ○ |
| C-24 (UT-INM-024) | キャプションのみ設定されている場合のWikitextが生成されること | E-03 (switch case L408-428) | ○ |
| C-25 (UT-INM-025) | altTextのみ設定されている場合のWikitextが生成されること | E-03 (switch case L408-428) | ○ |

### InsertMediaSearchViewController
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-26 (UT-INM-026) | 記事タイトルとサイトURLで初期化できること | E-02 (init L22-26) | ○ |
| C-27 (UT-INM-027) | siteURLがnilの場合Commonsがデフォルトになること | E-02 (init L24 commonsAPIURLComponents) | ○ |
| C-28 (UT-INM-028) | 検索語で検索が実行されること | E-02 (search(for:) L46-116) | ○ |
| C-29 (UT-INM-029) | 空白のみの検索語で記事タイトル検索にフォールバックすること | E-02 (guard searchTerm.wmf_hasNonWhitespaceText L49-51) | ○ |
| C-30 (UT-INM-030) | 検索結果が12件未満の場合全文検索も実行されること | E-02 (else if resultsArray.count < 12 L103-108) | ○ |
| C-31 (UT-INM-031) | 検索エラー時にdelegateに通知されること | E-02 (failure closure L54-58) | ○ |
| C-32 (UT-INM-032) | 記事タイトルで検索が実行されること | E-02 (searchForArticleTitle L118-122) | ○ |
| C-33 (UT-INM-033) | articleTitleがnilの場合何も実行されないこと | E-02 (if let articleTitle L119-121) | ○ |

### InsertMediaViewController
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-34 (UT-INM-034) | 初期化時に子ViewControllerが正しく設定されること | E-01 (init L16-25) | ○ |
| C-35 (UT-INM-035) | 選択された画像がある場合設定画面に遷移すること | E-01 (goToMediaSettings L131-143) | ○ |
| C-36 (UT-INM-036) | 選択された画像がない場合遷移しないこと | E-01 (guard, assertionFailure L132-138) | ○ |
| C-37 (UT-INM-037) | 画像選択前はnextButtonが無効であること | E-01 (nextButton.isEnabled = false L33) | ○ |
| C-38 (UT-INM-038) | 画像選択後はnextButtonが有効になること | E-01 (didSetSelectedImage L196-198) | ○ |
| C-39 (UT-INM-039) | 検索結果が正しく設定されること | E-01 (insertMediaSearchViewController didFind L167-170) | ○ |
| C-40 (UT-INM-040) | ネットワークエラー時にnoInternetConnectionが表示されること | E-01 (didFailWithError L176-188, wmf_isNetworkConnectionError L179) | ○ |
| C-41 (UT-INM-041) | キャンセルエラー時にemptyViewが非表示になること | E-01 (NSURLErrorCancelled L181-182) | ○ |
| C-42 (UT-INM-042) | その他のエラー時にnoSearchResultsが表示されること | E-01 (else L183-184) | ○ |

### InsertMediaSearchResultsCollectionViewController
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-43 (UT-INM-043) | searchResultsを設定するとreloadが呼ばれること | E-05 (searchResults didSet L91-94) | ○ |
| C-44 (UT-INM-044) | 選択されたセルの画像が取得できること | E-05 (selectedImage L97-105) | ○ |
| C-45 (UT-INM-045) | 選択がない場合nilが返却されること | E-05 (guard selectedIndexPath L99-103) | ○ |
| C-46 (UT-INM-046) | imageInfoが正しく設定されること | E-05 (setImageInfo L134-137) | ○ |
| C-47 (UT-INM-047) | セクション数が1であること | E-05 (numberOfSections L229-231) | ○ |
| C-48 (UT-INM-048) | アイテム数がsearchResultsの数と一致すること | E-05 (numberOfItemsInSection L233-235) | ○ |
| C-49 (UT-INM-049) | セル選択時にdelegateに通知されること | E-05 (didSelectItemAt L248-251) | ○ |
| C-50 (UT-INM-050) | アイテムがない場合emptyViewが表示されること | E-05 (updateEmptyState, isEmptyDidChange L157-191) | ○ |
| C-51 (UT-INM-051) | アイテムがある場合emptyViewが非表示になること | E-05 (isEmptyDidChange L183-191) | ○ |

### InsertMediaSelectedImageViewController
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-52 (UT-INM-052) | 選択された画像が取得できること | E-04 (image property L12-14) | ○ |
| C-53 (UT-INM-053) | 選択されたsearchResultが取得できること | E-04 (searchResult property L16-18) | ○ |
| C-54 (UT-INM-054) | searchResult選択時に画像が読み込まれること | E-04 (insertMediaSearchResultsCollectionViewControllerDidSelect L59-82) | ○ |
| C-55 (UT-INM-055) | imageURLがnilの場合処理が中断されること | E-04 (guard let imageURL L62-65) | ○ |
| C-56 (UT-INM-056) | 画像読み込みエラー時にactivityIndicatorが停止すること | E-04 (configure completion, guard error == nil L72-74) | ○ |

### InsertMediaSelectedImageView
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-57 (UT-INM-057) | 画像とsearchResultが正しく設定されること | E-08 (configure L45-56) | ○ |
| C-58 (UT-INM-058) | 画像読み込みエラー時にcompletionがエラーで呼ばれること | E-08 (wmf_setImage failure L47-48) | ○ |

### InsertMediaSearchResultCollectionViewCell
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-59 (UT-INM-059) | imageURLとcaptionが正しく設定されること | E-06 (configure L39-44) | ○ |
| C-60 (UT-INM-060) | 選択時にselectedImageViewが表示されること | E-06 (isSelected didSet L46-50) | ○ |
| C-61 (UT-INM-061) | 非選択時にselectedImageViewが非表示になること | E-06 (isSelected didSet L49) | ○ |
| C-62 (UT-INM-062) | リセット時にimageViewとcaptionがクリアされること | E-06 (reset L33-37) | ○ |

### InsertMediaImageInfoView
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-63 (UT-INM-063) | searchResultの情報が正しく表示されること | E-09 (configure L19-42) | ○ |
| C-64 (UT-INM-064) | showImageDescription=falseの場合descriptionLabelが非表示になること | E-09 (L22-27) | ○ |
| C-65 (UT-INM-065) | showLicenseName=falseの場合licenseLabelが非表示になること | E-09 (L33-37) | ○ |
| C-66 (UT-INM-066) | moreInformationURLがある場合actionが実行されること | E-09 (showMoreInformation L55-61) | ○ |
| C-67 (UT-INM-067) | moreInformationURLがnilの場合assertionFailureが発生すること | E-09 (guard let url, assertionFailure L56-58) | ○ |

### InsertMediaSettingsImageView
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-68 (UT-INM-068) | 設定した画像が正しく表示されること | E-12 (image didSet L9-12) | ○ |
| C-69 (UT-INM-069) | 設定した説明が正しく表示されること | E-12 (imageDescription didSet L15-18) | ○ |
| C-70 (UT-INM-070) | 設定したタイトルがボタンに表示されること | E-12 (title didSet L21-24) | ○ |
| C-71 (UT-INM-071) | titleURLがある場合actionが実行されること | E-12 (performTitleAction L47-53) | ○ |
| C-72 (UT-INM-072) | titleURLがnilの場合assertionFailureが発生すること | E-12 (guard let url, assertionFailure L48-50) | ○ |

### InsertMediaSettingsButtonView
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-73 (UT-INM-073) | 設定したタイトルがボタンに表示されること | E-10 (buttonTitle didSet L7-11) | ○ |
| C-74 (UT-INM-074) | buttonActionが実行されること | E-10 (delegateButtonAction L25-27) | ○ |

### InsertMediaSettingsTextTableViewCell
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-75 (UT-INM-075) | 設定したヘッダーが表示されること | E-11 (headerText didSet L9-12) | ○ |
| C-76 (UT-INM-076) | 設定したフッターが表示されること | E-11 (footerText didSet L14-17) | ○ |
| C-77 (UT-INM-077) | TextViewが正しく設定されること | E-11 (textViewConfigured L24-38) | ○ |
| C-78 (UT-INM-078) | 再利用時にラベルとtextViewがリセットされること | E-11 (prepareForReuse L52-57) | ○ |
| C-79 (UT-INM-079) | learnMoreURLがある場合actionが実行されること | E-11 (performLearnMoreAction L59-65) | ○ |
| C-80 (UT-INM-080) | learnMoreURLがnilの場合assertionFailureが発生すること | E-11 (guard let url, assertionFailure L60-62) | ○ |

### InsertMediaAdvancedSettingsViewController
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-81 (UT-INM-081) | 現在の設定値が正しく取得できること | E-13 (advancedSettings L10-12) | ○ |
| C-82 (UT-INM-082) | textWrapがオフの場合imagePositionが無効化されること | E-13 (toggleImagePositionEnabledState, viewModels isEnabled L47) | ○ |
| C-83 (UT-INM-083) | textWrapがオンの場合imagePositionが有効化されること | E-13 (viewModels isEnabled L47) | ○ |
| C-84 (UT-INM-084) | セクション数が1であること | E-13 (numberOfSections L128-130) | ○ |
| C-85 (UT-INM-085) | 行数がviewModelsの数と一致すること | E-13 (numberOfRowsInSection L132-134) | ○ |
| C-86 (UT-INM-086) | 行選択時にonSelectionが実行されること | E-13 (didSelectRowAt L164-167) | ○ |

### InsertMediaImageTypeSettingsViewController
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-87 (UT-INM-087) | 選択されたImageTypeが取得できること | E-14 (selectedImageType L10-15) | ○ |
| C-88 (UT-INM-088) | 未選択の場合デフォルト値が返却されること | E-14 (guard let selectedIndexPath, return .thumbnail L11-13) | ○ |
| C-89 (UT-INM-089) | 新しい行選択時に既存のチェックマークが削除されること | E-14 (willSelectRowAt L128-137) | ○ |
| C-90 (UT-INM-090) | 行選択時にチェックマークが付与されること | E-14 (didSelectRowAt L139-143) | ○ |

### InsertMediaImagePositionSettingsViewController
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-91 (UT-INM-091) | textWrappingが有効な場合選択された位置が返却されること | E-16 (selectedImagePosition L9-17) | ○ |
| C-92 (UT-INM-092) | textWrappingが無効な場合noneが返却されること | E-16 (guard isTextWrappingEnabled L10-12) | ○ |
| C-93 (UT-INM-093) | 未選択の場合デフォルト値が返却されること | E-16 (guard let selectedIndexPath, return .right L13-15) | ○ |

### InsertMediaImageSizeSettingsViewController
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-94 (UT-INM-094) | customSwitch.isOnでカスタムサイズが返却されること | E-15 (selectedImageSize L12-23) | ○ |
| C-95 (UT-INM-095) | customSwitch.isOffでデフォルトサイズが返却されること | E-15 (guard customSwitch.isOn L14-20) | ○ |
| C-96 (UT-INM-096) | 幅が数値でない場合デフォルトサイズが返却されること | E-15 (guard let width = Int(widthString) L16) | ○ |
| C-97 (UT-INM-097) | 高さが数値でない場合デフォルトサイズが返却されること | E-15 (guard let height = Int(heightString) L18) | ○ |

### InsertMediaCustomImageSizeSettingTableViewCell
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-98 (UT-INM-098) | 各要素が正しく設定されること | E-17 (configure L10-18) | ○ |
| C-99 (UT-INM-099) | 無効化時にtextFieldも無効化されること | E-17 (isUserInteractionEnabled didSet L31-36) | ○ |

### InsertMediaLabelTableFooterView
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-100 (UT-INM-100) | テキストが正しく設定されること | E-18 (init(text:) L7-10) | ○ |

### InsertMediaSearchResultPreviewingViewController
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-101 (UT-INM-101) | imageURLとsearchResultが正しく設定されること | E-07 (init L18-22) | ○ |
| C-102 (UT-INM-102) | searchResult.imageInfo.filePageURLが返却されること | E-07 (searchResultImageURL L14-16) | ○ |
| C-103 (UT-INM-103) | imageInfoがnilの場合nilが返却されること | E-07 (optional chaining L15) | ○ |

### FlowLayout
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-104 (UT-INM-104) | itemSizeが正しく計算されること | E-05 (FlowLayout.invalidateLayout L25-37) | △ |

### InsertMediaSettingsViewController 追加テスト
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-105 (UT-INM-105) | 現在の設定が正しく取得できること | E-03 (settings L147-153) | ○ |
| C-106 (UT-INM-106) | 空白のみのcaptionはnilとして扱われること | E-03 (wmf_hasNonWhitespaceText L150) | ○ |
| C-107 (UT-INM-107) | searchResult.filePageURLが優先されること | E-03 (imageTitle L155-157) | ○ |
| C-108 (UT-INM-108) | filePageURLがnilの場合imageInfo.filePageURLが返却されること | E-03 (imageTitle ?? L156) | ○ |
| C-109 (UT-INM-109) | セクション数が1であること | E-03 (numberOfSections L530-532) | ○ |
| C-110 (UT-INM-110) | 行数がviewModelsの数と一致すること | E-03 (numberOfRowsInSection L534-536) | ○ |
| C-111 (UT-INM-111) | キャプション入力時にnextButtonの色が変わること | E-03 (textViewDidChange L604-613) | ○ |
| C-112 (UT-INM-112) | キャプションが空の場合nextButtonがsecondaryTextカラーになること | E-03 (textViewDidChange L611) | ○ |
| C-113 (UT-INM-113) | キーボード表示時にtableViewのcontentInsetが調整されること | E-03 (keyboardWillShow L279-292) | △ |
| C-114 (UT-INM-114) | キーボード非表示時にtableViewのcontentInsetがリセットされること | E-03 (keyboardWillHide L294-298) | △ |

## 4) 不足情報（Unknown / Missing）

1. **FlowLayout.invalidateLayout(with:)のitemSize計算式（C-104）**
   - 理由：レイアウト計算の数式は実行時の検証が必要であり、単体テストでの確認が困難
   - 候補：UIテスト / Snapshotテスト / 手動テスト

2. **キーボード対応のcontentInset計算（C-113, C-114）**
   - 理由：実際のキーボードフレームとsafeAreaInsetsの組み合わせは実行時に変わる可能性がある
   - 候補：UIテスト / 実機テスト

3. **MagicWordUtils関連のローカライズテスト**
   - 理由：各言語のMagicWord対応状況は外部依存であり、網羅的なテストが困難
   - 候補：言語ごとの個別テストケース追加 / 統合テスト

4. **ReachabilityNotifier関連の挙動**
   - 理由：ネットワーク状態監視はシステム依存であり、モック化が必要
   - 候補：依存性注入によるテスト / ネットワーク状態のモック

## 5) リスクフラグ（レビュー観点）

| リスクレベル | 項目 | 理由 |
|---|---|---|
| 1: 中リスク | Wikitext生成ロジック（C-18〜C-25） | 多言語対応の複雑さ、MagicWordの正確性が重要 |
| 1: 中リスク | 画像URL生成（C-03〜C-05） | 外部サービス依存、URLフォーマットの変更リスク |
| 0: 低リスク | UI状態管理（C-37〜C-42） | ユーザー体験に直結、既存テストでカバー済み |
| 0: 低リスク | 列挙型displayTitle（C-06〜C-17） | ローカライズ文字列、実装が単純 |

## 6) レビュアーチェックリスト（最小）

- [ ] Wikitext生成テスト（UT-INM-018〜UT-INM-025）の期待値が実際のWikipedia仕様と一致しているか
- [ ] 多言語対応テスト（UT-INM-021, UT-INM-022）で対象言語が十分にカバーされているか
- [ ] 境界値テスト（UT-INM-004, UT-INM-005）でassertionFailureの発生が適切か
- [ ] delegate通知テスト（UT-INM-039〜UT-INM-042）でエラーハンドリングが網羅されているか
- [ ] 既存の単体テスト（E-19）との整合性が取れているか
- [ ] UIコンポーネントのテーマ適用テストが必要かどうか検討
