---
generated_at: 2026-01-28 10:30:00
metrics:
  claims_total: 90
  claims_with_evidence: 90
  claims_without_evidence: 0
confidence_derived: 1.00
---

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

## 本レポートについて

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

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

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

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

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

---

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

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

- E-01: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/TableOfContentsItem.swift`
- E-02: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/TableOfContentsViewController.swift`
- E-03: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/TableOfContentsAnimator.swift`
- E-04: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/TableOfContentsCell.swift`
- E-05: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/TableOfContentsHeader.swift`
- E-06: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/TableOfContentsPresentationController.swift`
- E-07: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/ArticleTableOfContentsDisplayController.swift`
- E-08: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/ArticleViewController+TableOfContents.swift`

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

### TableOfContentsItem（E-01）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | itemTypeはindentationLevel < 1でprimary、それ以外でsecondaryを返す | E-01: L31-33 `var itemType: TableOfContentsItemType { return indentationLevel < 1 ? .primary : .secondary }` | ○ |
| C-02 | shouldBeHighlightedAlongWithItemは親子関係を判定する | E-01: L36-38 `return item.id == rootItemId \|\| item.rootItemId == id` | ○ |
| C-03 | Equatableはidで比較する | E-01: L40-42 `return lhs.id == rhs.id` | ○ |
| C-04 | TableOfContentsItemTypeのtitleTextStyleはprimaryでgeorgiaTitle3 | E-01: L9-16 switch文でprimaryは.georgiaTitle3を返す | ○ |

### TableOfContentsViewController（E-02）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-05 | itemsプロパティはdelegateからtableOfContentsItemsを取得、nilなら空配列 | E-02: L85-87 `return delegate?.tableOfContentsItems ?? []` | ○ |
| C-06 | selectInitialItemIfNecessaryはindexOfSelectedItem=-1かつitemsが空でない場合のみ動作 | E-02: L113-118 guard文で条件確認 | ○ |
| C-07 | selectItem(at:)は範囲外indexでassertionFailure | E-02: L121-124 `guard index < items.count else { assertionFailure(...) }` | ○ |
| C-08 | scrollToItem(at:)は既に表示されている場合スクロールしない | E-02: L163-165 `guard !(tableView.indexPathsForVisibleRows?.contains(indexPath) ?? true)` | ○ |
| C-09 | handleTableOfContentsCloseGestureはisVisible=trueかつstate=.endedで動作 | E-02: L62-67 guard文で条件確認 | ○ |
| C-10 | apply(theme:)はdisplayMode=modalでpaperBackground、inlineでmidBackground | E-02: L310-322 if displayMode == .modal分岐 | ○ |
| C-11 | tableView:numberOfRowsInSectionはitems.countを返す | E-02: L223-225 `return items.count` | ○ |
| C-12 | tableView:didSelectRowAtはdelegateのdidSelectItemを呼ぶ | E-02: L281-286 `delegate?.tableOfContentsController(self, didSelectItem: items[index])` | ○ |
| C-13 | accessibilityPerformEscapeはdidRequestCloseを呼ぶ | E-02: L301-303 `return didRequestClose(nil)` | ○ |

### TableOfContentsCell（E-04）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-14 | titleIndentationLevel=0でtitleLabelTopConstraint.constant=19 | E-04: L12 `titleLabelTopConstraint.constant = titleIndentationLevel == 0 ? 19 : 11` | ○ |
| C-15 | indentationConstraintはindentationWidth * (1 + titleIndentationLevel)で計算 | E-04: L13 `indentationConstraint.constant = indentationWidth * CGFloat(1 + titleIndentationLevel)` | ○ |
| C-16 | titleIndentationLevel=0でaccessibilityTraits = .header | E-04: L14-15 `if titleIndentationLevel == 0 { accessibilityTraits = .header }` | ○ |
| C-17 | titleIndentationLevel>0でaccessibilityValueが設定される | E-04: L16-18 accessibilityValue設定処理 | ○ |
| C-18 | setSectionSelectedはtitleIndentationLevel=0の場合のみインジケータ表示 | E-04: L74-80 `if selected { setSelectionIndicatorVisible(titleIndentationLevel == 0) }` | ○ |
| C-19 | prepareForReuseでプロパティがリセットされる | E-04: L88-95 各プロパティの初期化処理 | ○ |

### TableOfContentsHeader（E-05）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-20 | headerTextForURLは英語ロケールで大文字化 | E-05: L18-25 `if Locale.current.isEnglish { return headerString.uppercased(...) }` | ○ |
| C-21 | articleURL setterでcontentsLabel.textが更新される | E-05: L12-14 `self.contentsLabel.text = self.headerTextForURL(newURL)` | ○ |

### TableOfContentsAnimator（E-03）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-22 | initでisPresenting=true、isInteractive=false | E-03: L30-41 初期化処理 | ○ |
| C-23 | transitionDuration(using:)は0.4を返す | E-03: L115-117 `return 0.4` | ○ |
| C-24 | tocMultiplierはdisplaySide=leftで-1.0、rightで1.0 | E-03: L129-136 switch文での値設定 | ○ |
| C-25 | animateTransitionはisPresentingでプレゼンテーション/ディスミスを分岐 | E-03: L119-127 if isPresenting分岐 | ○ |
| C-26 | gestureRecognizerShouldBeginはdisplayMode=modalでのみtrueの可能性 | E-03: L313-316 `guard displayMode == .modal else { return false }` | ○ |
| C-27 | tableOfContentsPresentationControllerDidTapBackgroundはdelegateを呼ぶ | E-03: L62-64 `delegate?.tableOfContentsAnimatorDidTapBackground(self)` | ○ |

### TableOfContentsPresentationController（E-06）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-28 | frameOfPresentedViewInContainerViewはcontainerView=nilで.zero | E-06: L183-186 `guard let containerView = containerView else { return .zero }` | ○ |
| C-29 | frameOfPresentedViewInContainerViewはdisplaySide=rightでx座標オフセット | E-06: L198-204 `case .right: frame.origin.x += bgWidth` | ○ |
| C-30 | togglePresentingViewControllerAccessibilityで可視性を切り替え | E-06: L116-118 `self.presentingViewController.view.accessibilityElementsHidden = !accessible` | ○ |
| C-31 | didTapでtapDelegateを呼ぶ | E-06: L111-113 `self.tapDelegate?.tableOfContentsPresentationControllerDidTapBackground(self)` | ○ |
| C-32 | presentationTransitionDidEndでcompleted=falseならbackgroundView削除 | E-06: L153-158 if !completed分岐 | ○ |

### ArticleTableOfContentsDisplayController（E-07）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-33 | initでstackViewにinlineContainerView、separatorView、articleViewが追加される | E-07: L38-42 addArrangedSubview呼び出し | ○ |
| C-34 | showはdisplayModeでshowInline/showModalを分岐 | E-07: L70-77 switch viewController.displayMode | ○ |
| C-35 | hideはdisplayModeでhideInline/hideModalを分岐 | E-07: L79-86 switch viewController.displayMode | ○ |
| C-36 | showInlineでUserDefaultsにtrueを保存 | E-07: L119 `UserDefaults.standard.wmf_setTableOfContentsIsVisibleInline(true)` | ○ |
| C-37 | hideInlineでUserDefaultsにfalseを保存 | E-07: L127 `UserDefaults.standard.wmf_setTableOfContentsIsVisibleInline(false)` | ○ |
| C-38 | updateでhorizontalSizeClass=compactならmodal | E-07: L140-144 `let isCompact = ... viewController.displayMode = isCompact ? .modal : .inline` | ○ |
| C-39 | selectAndScrollはsectionIdが見つからない場合早期リターン | E-07: L206-212 guard letでindexを取得 | ○ |
| C-40 | showModalはpresentedViewController!=nilで早期リターン | E-07: L88-91 guard文での条件確認 | ○ |

## 4) 不足情報（Unknown / Missing）
- なし - 全テストケースはソースコードに基づいて生成されている

## 5) リスクフラグ（レビュー観点）
- 0: 低リスク - 全テストケースが実装コードに基づいており、根拠が明確

## 6) レビュアーチェックリスト（最小）
- [ ] テストケースがソースコードの主要なメソッドを網羅しているか確認
- [ ] 境界値テストが適切に含まれているか確認
- [ ] エラーハンドリングのテストケースが含まれているか確認
- [ ] アクセシビリティ関連のテストケースが含まれているか確認
- [ ] UITableViewDataSource/Delegateメソッドのテストケースが含まれているか確認
