---
generated_at: 2026-01-28 18:30:00
metrics:
  claims_total: 91
  claims_with_evidence: 91
  claims_without_evidence: 0
confidence_derived: 1.00
---

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

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**1.00**
  - 根拠あり：91 / 91、根拠なし：0
- 優先レビュー（高）
  1. **UT-NEWS-039** combineStoryDateWithCurrentYear：日付計算ロジックの複雑性
  2. **UT-NEWS-083〜088** semanticFeaturedArticleTitleFromStoryHTML：HTML解析ロジック
  3. **UT-NEWS-079〜081** midnightUTCMonthAndDayJSONTransformer：日付パースロジック

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

- E-01: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/NewsViewController.swift`
- E-02: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/NewsCollectionViewCell.swift`
- E-03: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/NewsCollectionViewHeader.swift`
- E-04: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/NewsCollectionViewCell+WMFFeedContentDisplaying.swift`
- E-05: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/WMFFeedNewsStory.h`
- E-06: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/WMFFeedNewsStory.m`
- E-07: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/WMFFeedNewsStory+LocalizedStrings.swift`
- E-08: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/SideScrollingCollectionViewCell.swift`

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

### NewsViewController（E-01）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | init(stories:dataStore:contentGroup:theme:)でプロパティが正しく初期化される | E-01 L19-27 | ○ |
| C-02 | hidesBottomBarWhenPushedがtrueに設定される | E-01 L26 | ○ |
| C-03 | contentGroupIDURIStringがobjectIDから設定される | E-01 L23 | ○ |
| C-04 | contentGroupがnilの場合はcontentGroupIDURIStringもnil | E-01 L23 | ○ |
| C-05 | init(coder:)でfatalErrorが発生する | E-01 L29-31 | ○ |
| C-06 | viewDidLoadでセルとヘッダーが登録される | E-01 L35-36 | ○ |
| C-07 | collectionView.allowsSelectionがfalseに設定される | E-01 L37 | ○ |
| C-08 | viewWillAppearでconfigureNavigationBarが呼ばれる | E-01 L40-43 | ○ |
| C-09 | ナビゲーションバータイトルがinTheNewsTitleに設定される | E-01 L45-48 | ○ |
| C-10 | metricsでinterSectionSpacing=0, interItemSpacing=22が返される | E-01 L50-52 | ○ |
| C-11 | estimatedHeightForHeaderでセクション0は親クラスの結果を返す | E-01 L55-58 | ○ |
| C-12 | estimatedHeightForHeaderでheaderTitleありは57を返す | E-01 L59 | ○ |
| C-13 | estimatedHeightForHeaderでheaderTitleなしは0を返す | E-01 L59 | ○ |
| C-14 | estimatedHeightForItemAtでplaceholderCellでサイズ計算 | E-01 L62-76 | ○ |
| C-15 | placeholderCellがnilの場合はデフォルト値350を返す | E-01 L63-66 | ○ |
| C-16 | storyがnilの場合はデフォルト値を返す | E-01 L67-69 | ○ |
| C-17 | apply(theme:)でbackgroundColorが設定される | E-01 L78-85 | ○ |
| C-18 | viewIfLoadedがnilの場合は早期リターン | E-01 L80-82 | ○ |
| C-19 | readMoreArticlePreviewActionSelectedでArticleCoordinatorが開始 | E-01 L87-94 | ○ |
| C-20 | readMoreArticlePreviewActionSelectedでpreviewedIndexがnil | E-01 L93 | ○ |
| C-21 | navigationControllerがnilの場合は早期リターン | E-01 L89 | ○ |
| C-22 | collectionViewFooterButtonWasPressedでpopViewController | E-01 L98-100 | ○ |
| C-23 | numberOfSectionsがstories.count + 1を返す | E-01 L106-108 | ○ |
| C-24 | storiesが空の場合は1を返す | E-01 L107 | ○ |
| C-25 | numberOfItemsInSectionでセクション0は0を返す | E-01 L110-112 | ○ |
| C-26 | numberOfItemsInSectionでセクション1以上は1を返す | E-01 L111 | ○ |
| C-27 | cellForItemAtでNewsCollectionViewCellが設定される | E-01 L114-126 | ○ |
| C-28 | NewsCollectionViewCellでない場合はそのまま返す | E-01 L116-118 | ○ |
| C-29 | viewForSupplementaryでセクション0は親クラスのビューを返す | E-01 L128-131 | ○ |
| C-30 | viewForSupplementaryでヘッダーはNewsCollectionViewHeaderを返す | E-01 L133-140 | ○ |
| C-31 | viewForSupplementaryでフッターは親クラスのビューを返す | E-01 L141-142 | ○ |
| C-32 | willDisplayでselectionDelegateが設定される | E-01 L149-154 | ○ |
| C-33 | willDisplayでNewsCollectionViewCellでない場合は早期リターン | E-01 L150-152 | ○ |
| C-34 | didEndDisplayingでselectionDelegateがnil | E-01 L156-161 | ○ |
| C-35 | headerDateFormatterが正しく設定される | E-01 L163-170 | ○ |
| C-36 | story(for:)でセクション0はnilを返す | E-01 L172-177 | ○ |
| C-37 | story(for:)でセクション1以上は対応するストーリーを返す | E-01 L176 | ○ |
| C-38 | story(for:)でセクションが範囲外の場合 | E-01 L176 | ○ |
| C-39 | combineStoryDateWithCurrentYearで日付が結合される | E-01 L179-196 | ○ |
| C-40 | combineStoryDateWithCurrentYearで無効な日付はnil | E-01 L192-195 | ○ |
| C-41 | headerTitle(for:)でフォーマットされた日付文字列を返す | E-01 L198-206 | ○ |
| C-42 | headerTitle(for:)でstoryがnilはnilを返す | E-01 L199-201 | ○ |
| C-43 | headerTitle(for:)でmidnightUTCMonthAndDayがnilはnilを返す | E-01 L199-201 | ○ |
| C-44 | sideScrollingCollectionViewCellでArticleCoordinatorが開始 | E-01 L211-219 | ○ |
| C-45 | sideScrollingCollectionViewCellでnavigationControllerがnilは早期リターン | E-01 L213-215 | ○ |
| C-46 | eventLoggingCategoryが.feedを返す | E-01 L224-226 | ○ |
| C-47 | eventLoggingLabelが.newsを返す | E-01 L228-230 | ○ |
| C-48 | contextMenuでUIContextMenuConfigurationが返される | E-01 L235-254 | ○ |
| C-49 | contextMenuでarticleURLがnilはnilを返す | E-01 L236-238 | ○ |
| C-50 | contextMenuでpreviewedIndexが設定される | E-01 L240 | ○ |
| C-51 | willCommitPreviewでArticleCoordinatorが開始 | E-01 L256-270 | ○ |
| C-52 | willCommitPreviewでpreviewedIndexがnil | E-01 L268 | ○ |
| C-53 | willCommitPreviewでpeekVCが取得できない場合はassertionFailure | E-01 L257-260 | ○ |

### NewsCollectionViewCell（E-02）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-54 | updateFonts(with:)でupdateDescriptionHTMLStyleが呼ばれる | E-02 L5-8 | ○ |
| C-55 | updateBackgroundColorOfLabels()でcollectionView.backgroundColorが更新 | E-02 L10-13 | ○ |
| C-56 | stylesが正しいHtmlUtils.Stylesを返す | E-02 L15-17 | ○ |
| C-57 | updateDescriptionHTMLStyle()でattributedTextが設定される | E-02 L19-25 | ○ |
| C-58 | descriptionHTMLがnilの場合はtextがnil | E-02 L20-22 | ○ |
| C-59 | descriptionHTMLのdidSetでupdateDescriptionHTMLStyleが呼ばれる | E-02 L27-30 | ○ |
| C-60 | NewsExploreCollectionViewCell.apply(theme:)で背景色が設定される | E-02 L34-38 | ○ |

### NewsCollectionViewHeader（E-03）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-61 | awakeFromNib()でupdateFontsとwmf_configureSubviewsForDynamicTypeが呼ばれる | E-03 L6-10 | ○ |
| C-62 | apply(theme:)でbackgroundColorとtextColorが設定される | E-03 L12-15 | ○ |
| C-63 | traitCollectionDidChange(_:)でupdateFonts()が呼ばれる | E-03 L17-20 | ○ |
| C-64 | updateFonts()でlabel.fontがboldSubheadlineに設定される | E-03 L22-24 | ○ |

### NewsCollectionViewCell+WMFFeedContentDisplaying（E-04）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-65 | configure(with:)でdescriptionHTMLが設定される | E-04 L7 | ○ |
| C-66 | showArticles=trueでarticlesが設定される | E-04 L9-13 | ○ |
| C-67 | showArticles=falseでarticlesは更新されない | E-04 L9 | ○ |
| C-68 | accessibilityLanguageが設定される | E-04 L17 | ○ |
| C-69 | semanticContentAttributeOverrideが設定される | E-04 L18 | ○ |
| C-70 | 画像URLが存在する場合にimageViewが表示される | E-04 L21-25 | ○ |
| C-71 | layoutOnly=trueの場合は画像をロードしない | E-04 L23-25 | ○ |
| C-72 | 画像URLが存在しない場合にimageViewが非表示 | E-04 L26-28 | ○ |
| C-73 | テーマが適用される | E-04 L29 | ○ |
| C-74 | contentOffsetがリセットされる | E-04 L30 | ○ |

### WMFFeedNewsStory（E-05, E-06, E-07）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-75 | JSONKeyPathsByPropertyKeyで正しいマッピングが返される | E-06 L13-18 | ○ |
| C-76 | articlePreviewsJSONTransformerで配列変換器が返される | E-06 L20-22 | ○ |
| C-77 | dateRegularExpressionで正規表現が返される | E-06 L24-31 | ○ |
| C-78 | dateFormatterで正しいフォーマッターが返される | E-06 L33-45 | ○ |
| C-79 | midnightUTCMonthAndDayJSONTransformerでHTMLコメント内の日付が抽出される | E-06 L47-63 | ○ |
| C-80 | マッチしない文字列の場合はnilを返す | E-06 L52-55 | ○ |
| C-81 | 無効な日付文字列の場合はnilを返す | E-06 L56-61 | ○ |
| C-82 | modelVersionで5が返される | E-06 L65-67 | ○ |
| C-83 | semanticFeaturedArticleTitleFromStoryHTMLでタイトルが抽出される | E-06 L69-117 | ○ |
| C-84 | 相対パス(./)からタイトルが抽出される | E-06 L109-110 | ○ |
| C-85 | 絶対URLからタイトルが抽出される | E-06 L111-114 | ○ |
| C-86 | picturedテキストが見つからない場合はnilを返す | E-06 L71-74 | ○ |
| C-87 | <aタグが見つからない場合はnilを返す | E-06 L76-79 | ○ |
| C-88 | href属性が見つからない場合はnilを返す | E-06 L101-104 | ○ |
| C-89 | languageVariantCodePropagationSubelementKeysで正しい配列が返される | E-06 L119-121 | ○ |
| C-90 | localizedPicturedText(forWikiLanguage:)でローカライズ文字列が返される | E-07 L4-6 | ○ |
| C-91 | languageCodeがnilの場合はデフォルト値が返される | E-07 L5 | ○ |

## 4) 不足情報（Unknown / Missing）
- なし
  - 全てのテストケースはソースコードから直接抽出されており、根拠あり

## 5) リスクフラグ（レビュー観点）
- **リスクレベル 1（中リスク）**: `combineStoryDateWithCurrentYear` - 日付計算ロジックが複雑で、年またぎの挙動が要確認
- **リスクレベル 1（中リスク）**: `semanticFeaturedArticleTitleFromStoryHTML` - HTML解析ロジックが複雑で、様々なHTMLパターンへの対応が必要
- **リスクレベル 0（低リスク）**: その他のメソッド - 単純なプロパティアクセスやUI設定

## 6) レビュアーチェックリスト（最小）
- [ ] 日付計算ロジック（combineStoryDateWithCurrentYear）のテストケースが年またぎを考慮しているか
- [ ] HTML解析ロジック（semanticFeaturedArticleTitleFromStoryHTML）のテストケースが様々なHTMLパターンをカバーしているか
- [ ] 境界値テスト（空配列、nil値）が網羅されているか
- [ ] UICollectionViewのデリゲートメソッドのテストケースが正しいセクション/インデックス処理を検証しているか
- [ ] テーマ適用のテストケースがダークモード/ライトモード両方を考慮しているか
