---
generated_at: 2026-03-01 12:00:00
metrics:
  claims_total: 150
  claims_with_evidence: 145
  claims_without_evidence: 5
confidence_derived: 0.97
---

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

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.97**
  - 根拠あり：145 / 150、根拠なし：5
- 優先レビュー（高）
  1. **C-134 (SetBackgroundColorChangedCallback)**: コールバック実行タイミングの詳細な検証にはRenderer内部のスレッド動作の把握が必要
  2. **C-135 (SetFrameColorChangedCallback)**: 同上
  3. **C-136 (SetRendererEnteredErrorStateCallback)**: PaintFrame失敗時のコールバック動作はリトライロジックとの連携確認が必要
  4. **C-143 (PaintFrame正常)**: PaintFrame内部は多数の依存(IRenderData, IRenderEngine)のモック化が必要
  5. **C-149 (FontResource operator HFONT)**: Win32 API(AddFontMemResourceEx, CreateFontIndirectA)に依存、テスト環境での動作確認が必要

## 2) 参照した情報（Evidence一覧）
> ここに「実在するもの」だけ列挙。

- E-01: `src/renderer/base/CSSLengthPercentage.cpp` - FromString/Resolve実装
- E-02: `src/renderer/inc/CSSLengthPercentage.h` - CSSLengthPercentage構造体定義 (ReferenceFrame列挙型)
- E-03: `src/renderer/base/FontInfoBase.cpp` - FontInfoBase各メソッド実装
- E-04: `src/renderer/inc/FontInfoBase.hpp` - FontInfoBaseクラス宣言
- E-05: `src/renderer/base/FontInfoDesired.cpp` - FontInfoDesired各メソッド実装
- E-06: `src/renderer/inc/FontInfoDesired.hpp` - FontInfoDesiredクラス宣言
- E-07: `src/renderer/base/fontinfo.cpp` - FontInfo各メソッド実装
- E-08: `src/renderer/inc/FontInfo.hpp` - FontInfoクラス宣言
- E-09: `src/renderer/base/RenderSettings.cpp` - RenderSettings各メソッド実装
- E-10: `src/renderer/inc/RenderSettings.hpp` - RenderSettingsクラス宣言 (Mode列挙型)
- E-11: `src/renderer/base/RenderEngineBase.cpp` - RenderEngineBase各デフォルト実装
- E-12: `src/renderer/inc/RenderEngineBase.hpp` - RenderEngineBaseクラス宣言
- E-13: `src/renderer/base/renderer.cpp` - Renderer各メソッド実装
- E-14: `src/renderer/base/renderer.hpp` - Rendererクラス宣言 (InhibitionSource列挙型、メンバ変数)
- E-15: `src/renderer/base/FontResource.cpp` - FontResource各メソッド実装
- E-16: `src/renderer/inc/FontResource.hpp` - FontResourceクラス宣言
- E-17: `src/renderer/base/FontCache.h` - FontCache名前空間 (GetCached/getFontCollection)
- E-18: `src/renderer/inc/IFontDefaultList.hpp` - IFontDefaultListインターフェース

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | パーセント単位のパース (`value /= 100.0f`, ReferenceFrame::FontSize) | E-01 L25-26 | ○ |
| C-02 | px単位のパース (`value /= 96.0f`, ReferenceFrame::Absolute) | E-01 L29-32 | ○ |
| C-03 | pt単位のパース (`value /= 72.0f`, ReferenceFrame::Absolute) | E-01 L35-38 | ○ |
| C-04 | ch単位のパース (ReferenceFrame::AdvanceWidth) | E-01 L39-42 | ○ |
| C-05 | 単位なし数値のパース (ReferenceFrame::FontSize) | E-01 L22-23, L49-52 | ○ |
| C-06 | 不正単位での空オブジェクト返却 | E-01 L44-46 | ○ |
| C-07 | 非数値文字列での空オブジェクト返却 (`str == end`) | E-01 L16-18 | ○ |
| C-08 | 空文字列での空オブジェクト返却 | E-01 L16-18 | ○ |
| C-09 | ERANGE時の空オブジェクト返却 (`errnoRef == ERANGE`) | E-01 L16-18 | ○ |
| C-10 | Resolve: Absolute参照フレーム (`_value * dpi`) | E-01 L60-61 | ○ |
| C-11 | Resolve: FontSize参照フレーム (`_value * fontSize`) | E-01 L62-63 | ○ |
| C-12 | Resolve: AdvanceWidth参照フレーム (`_value * advanceWidth`) | E-01 L64-65 | ○ |
| C-13 | Resolve: None参照フレーム (fallback返却) | E-01 L66-67, E-02 L10-11 | ○ |
| C-14 | FontInfoBaseコンストラクタの初期化 | E-03 L7-19, E-04 | ○ |
| C-15 | FontInfoBase::operator== 同一比較 | E-03 L21-28 | ○ |
| C-16 | FontInfoBase::operator== 異なる比較 | E-03 L21-28 | ○ |
| C-17 | GetFamily | E-03 L30-33 | ○ |
| C-18 | GetWeight | E-03 L43-46 | ○ |
| C-19 | GetFaceName | E-03 L48-51 | ○ |
| C-20 | GetCodePage | E-03 L53-56 | ○ |
| C-21 | FillLegacyNameBuffer 正常 | E-03 L64-69 | ○ |
| C-22 | FillLegacyNameBuffer 切り詰め | E-03 L66 (`std::min(std::size(buffer) - 1, ...)`) | ○ |
| C-23 | FillLegacyNameBuffer 空名前 | E-03 L66-68 | ○ |
| C-24 | SetFromEngine | E-03 L72-81 | ○ |
| C-25 | WasDefaultRasterSetFromEngine | E-03 L38-41 | ○ |
| C-26 | IsDefaultRasterFontNoSize (true) | E-03 L85-88 | ○ |
| C-27 | IsDefaultRasterFontNoSize (false) | E-03 L85-88 | ○ |
| C-28 | IsTrueTypeFont (true) | E-03 L112-115 | ○ |
| C-29 | IsTrueTypeFont (false) | E-03 L112-115 | ○ |
| C-30 | ValidateFont DEFAULT_TT_FONT_FACENAME置換 | E-03 L90-110 | ○ |
| C-31 | ValidateFont ラスタフォントスキップ | E-03 L93 | ○ |
| C-32 | s_SetFontDefaultList | E-03 L117-122 | ○ |
| C-33 | FontInfoDesiredパラメータコンストラクタ | E-05 L8-17 | ○ |
| C-34 | FontInfoDesired(FontInfo)コンストラクタ | E-05 L19-24 | ○ |
| C-35 | SetCellSize/GetCellWidth/GetCellHeight | E-05 L26-50 | ○ |
| C-36 | SetEnableBuiltinGlyphs/GetEnableBuiltinGlyphs | E-05 L32-55 | ○ |
| C-37 | SetEnableColorGlyphs/GetEnableColorGlyphs | E-05 L37-60 | ○ |
| C-38 | GetFontSize | E-05 L62-65 | ○ |
| C-39 | GetEngineSize TrueType (width=0) | E-05 L67-76 | ○ |
| C-40 | GetEngineSize 非TrueType | E-05 L67-76 | ○ |
| C-41 | IsDefaultRasterFont (WasDefaultRasterSetFromEngine) | E-05 L81-88 | ○ |
| C-42 | IsDefaultRasterFont (空名前+0x0) | E-05 L85-87 | ○ |
| C-43 | IsDefaultRasterFont (空名前+8x12) | E-05 L85-87 | ○ |
| C-44 | IsDefaultRasterFont (非デフォルト) | E-05 L81-88 | ○ |
| C-45 | FontInfoコンストラクタ | E-07 L8-20 | ○ |
| C-46 | FontInfo::operator== 同一 | E-07 L22-27 | ○ |
| C-47 | FontInfo::operator== 異なる | E-07 L22-27 | ○ |
| C-48 | GetSize | E-07 L34-37 | ○ |
| C-49 | GetUnscaledSize | E-07 L29-32 | ○ |
| C-50 | FontInfo::SetFromEngine | E-07 L39-53 | ○ |
| C-51 | GetFallback/SetFallback | E-07 L55-63 | ○ |
| C-52 | _ValidateCoordSize width=0 -> 1 | E-07 L77-79 | ○ |
| C-53 | _ValidateCoordSize height=0 -> {8,12} | E-07 L82-89 | ○ |
| C-54 | _ValidateCoordSize デフォルトラスタバイパス | E-07 L74 | ○ |
| C-55 | _ValidateCoordSize {1,1} 補正なし | E-07 L70-91 | ○ |
| C-56 | RenderSettingsコンストラクタ初期化 | E-09 L14-31, E-10 L54 | ○ |
| C-57 | SetRenderMode/GetRenderMode 有効化 | E-09 L59-73 | ○ |
| C-58 | SetRenderMode/GetRenderMode 無効化 | E-09 L59-73 | ○ |
| C-59 | SetColorTableEntry/GetColorTableEntry | E-09 L94-108 | ○ |
| C-60 | SetColorTableEntry 範囲外例外 | E-09 L96 (`_colorTable.at(tableIndex)`) | ○ |
| C-61 | GetColorTableEntry 範囲外例外 | E-09 L107 (`_colorTable.at(tableIndex)`) | ○ |
| C-62 | GetColorTable | E-09 L77-80 | ○ |
| C-63 | ResetColorTable | E-09 L84-87 | ○ |
| C-64 | SaveDefaultSettings/RestoreDefaultSettings | E-09 L36-52 | ○ |
| C-65 | RestoreDefaultSettings Mode::ScreenReversed/SynchronizedOutput リセット | E-09 L51 | ○ |
| C-66 | RestoreDefaultSettings ユーザー設定保持 | E-09 L49-51 | ○ |
| C-67 | RestoreDefaultIndexed256ColorTable | E-09 L112-115 | ○ |
| C-68 | RestoreDefaultColorTableEntry | E-09 L119-122 | ○ |
| C-69 | SetColorAlias/GetColorAlias | E-09 L130-145 | ○ |
| C-70 | SetColorAliasIndex/GetColorAliasIndex | E-09 L152-169 | ○ |
| C-71 | SetColorAliasIndex TABLE_SIZE以上無視 | E-09 L154-157 | ○ |
| C-72 | RestoreDefaultColorAliasIndex | E-09 L171-174 | ○ |
| C-73 | GetAttributeColors 基本 | E-09 L183-226 | ○ |
| C-74 | GetAttributeColors IntenseIsBright | E-09 L191, L195 | ○ |
| C-75 | GetAttributeColors Faint | E-09 L192, L198-201 | ○ |
| C-76 | GetAttributeColors ReverseVideo | E-09 L193, L203-205 | ○ |
| C-77 | GetAttributeColors ScreenReversed | E-09 L193 | ○ |
| C-78 | GetAttributeColors ReverseVideo+ScreenReversed 二重反転 | E-09 L193 (XOR演算) | ○ |
| C-79 | GetAttributeColors Invisible | E-09 L206-209 | ○ |
| C-80 | GetAttributeColorsWithAlpha 前景アルファ | E-09 L240 | ○ |
| C-81 | GetAttributeColorsWithAlpha デフォルト背景透過 | E-09 L243 | ○ |
| C-82 | GetAttributeColorsWithAlpha 非デフォルト背景不透過 | E-09 L243-246 | ○ |
| C-83 | GetAttributeUnderlineColor デフォルト=前景 | E-09 L263-266 | ○ |
| C-84 | GetAttributeUnderlineColor 明示色 | E-09 L268-269 | ○ |
| C-85 | GetAttributeUnderlineColor Invisible | E-09 L270-273 | ○ |
| C-86 | ToggleBlinkRendition | E-09 L292-295 | ○ |
| C-87 | RenderEngineBase::InvalidateSelection S_OK | E-11 L10-13 | ○ |
| C-88 | RenderEngineBase::InvalidateHighlight S_OK | E-11 L15-18 | ○ |
| C-89 | InvalidateTitle タイトル変更検知 | E-11 L20-28 | ○ |
| C-90 | InvalidateTitle 同一スキップ | E-11 L20-28 | ○ |
| C-91 | UpdateTitle 更新実行 | E-11 L30-41 | ○ |
| C-92 | UpdateTitle 同一時S_FALSE | E-11 L33-39 | ○ |
| C-93 | NotifyNewText S_FALSE | E-11 L43-46 | ○ |
| C-94 | UpdateSoftFont S_FALSE | E-11 L48-53 | ○ |
| C-95 | PrepareRenderInfo S_FALSE | E-11 L55-58 | ○ |
| C-96 | ResetLineTransform S_FALSE | E-11 L60-63 | ○ |
| C-97 | PrepareLineTransform S_FALSE | E-11 L65-70 | ○ |
| C-98 | PaintImageSlice S_FALSE | E-11 L72-77 | ○ |
| C-99 | RequiresContinuousRedraw false | E-11 L84-87 | ○ |
| C-100 | WaitUntilCanRender Sleep(8) | E-11 L91-95 | ○ |
| C-101 | UpdateHyperlinkHoveredId 空実装 | E-11 L97-99 | ○ |
| C-102 | s_IsSoftFontChar 範囲内true | E-13 L940-943 | ○ |
| C-103 | s_IsSoftFontChar 範囲外false | E-13 L940-943 | ○ |
| C-104 | s_IsSoftFontChar 2文字false (v.size()==1チェック) | E-13 L942 | ○ |
| C-105 | s_IsSoftFontChar 空文字列false | E-13 L942 | ○ |
| C-106 | s_IsSoftFontChar 下限境界 | E-13 L942 | ○ |
| C-107 | s_IsSoftFontChar 上限境界 | E-13 L942 | ○ |
| C-108 | s_IsSoftFontChar 下限-1 | E-13 L942 | ○ |
| C-109 | s_IsSoftFontChar 上限+1 | E-13 L942 | ○ |
| C-110 | s_GetGridlines NoUnderline | E-13 L1351-1352 | ○ |
| C-111 | s_GetGridlines SinglyUnderlined | E-13 L1353-1354 | ○ |
| C-112 | s_GetGridlines DoublyUnderlined | E-13 L1355-1357 | ○ |
| C-113 | s_GetGridlines CurlyUnderlined | E-13 L1358-1360 | ○ |
| C-114 | s_GetGridlines DottedUnderlined | E-13 L1361-1363 | ○ |
| C-115 | s_GetGridlines DashedUnderlined | E-13 L1364-1366 | ○ |
| C-116 | s_GetGridlines Strikethrough | E-13 L1343-1346 | ○ |
| C-117 | s_GetGridlines Top/Bottom/Left/Right | E-13 L1323-1341 | ○ |
| C-118 | s_GetGridlines HyperlinkUnderline | E-13 L1373-1376 | ○ |
| C-119 | _timerSaturatingAdd 通常加算 | E-13 L297-305 | ○ |
| C-120 | _timerSaturatingAdd オーバーフロー飽和 | E-13 L300-303 | ○ |
| C-121 | _timerSaturatingAdd 最大値同士 | E-13 L300-303 | ○ |
| C-122 | _timerSaturatingSub 通常減算 | E-13 L307-315 | ○ |
| C-123 | _timerSaturatingSub アンダーフロー飽和 | E-13 L310-313 | ○ |
| C-124 | _timerSaturatingSub 同一値 | E-13 L307-315 | ○ |
| C-125 | _timerToMillis 正常変換 | E-13 L317-320 | ○ |
| C-126 | _timerToMillis 最大値 | E-13 L319 (`std::min<TimerRepr>(t / 10000, DWORD_MAX)`) | ○ |
| C-127 | _timerToMillis ゼロ | E-13 L319 | ○ |
| C-128 | RegisterTimer | E-13 L147-162 | ○ |
| C-129 | IsTimerRunning 初期状態 | E-13 L164-168, L156-157 (初期値TimerReprMax) | ○ |
| C-130 | StartTimer/IsTimerRunning | E-13 L176-179, L186-205 | ○ |
| C-131 | StopTimer/IsTimerRunning | E-13 L207-212 | ○ |
| C-132 | GetTimerInterval | E-13 L170-174 | ○ |
| C-133 | AddRenderEngine/RemoveRenderEngine | E-14 L69-70 | ○ |
| C-134 | SetBackgroundColorChangedCallback + TriggerRedrawAll | E-13 L653-656, E-14 L72 | △ |
| C-135 | SetFrameColorChangedCallback + TriggerRedrawAll | E-13 L658-661, E-14 L73 | △ |
| C-136 | SetRendererEnteredErrorStateCallback | E-13 L357-360, E-14 L74 | △ |
| C-137 | GetRenderData | E-13 L44-47 | ○ |
| C-138 | NotifyPaintFrame | E-13 L109-113 | ○ |
| C-139 | AllowCursorVisibility enable=true | E-13 L552-561 | ○ |
| C-140 | AllowCursorVisibility enable=false | E-13 L552-561 | ○ |
| C-141 | AllowCursorBlinking enable=false | E-13 L563-572 | ○ |
| C-142 | UpdateHyperlinkHoveredId | E-14 L76 | ○ |
| C-143 | PaintFrame 正常 | E-13 L328-368 | △ |
| C-144 | PaintFrame 最大リトライ後失敗 | E-13 L332-365 | ○ |
| C-145 | PaintFrame リトライ成功 | E-13 L332-348 | ○ |
| C-146 | FontResourceコンストラクタ | E-15 L79-88 | ○ |
| C-147 | SetTargetSize サイズ変更 | E-15 L90-97 | ○ |
| C-148 | SetTargetSize 同一サイズ | E-15 L92-93 | ○ |
| C-149 | operator HFONT 生成 | E-15 L99-106 | △ |
| C-150 | operator HFONT 空パターン | E-15 L101 | ○ |

## 4) 不足情報（Unknown / Missing）
- **C-134, C-135**: コールバック呼び出しの実証にはRendererの内部スレッド動作およびTriggerRedrawAllの結合的な動作確認が必要。コード上はコールバック呼び出し箇所が明確に存在するが、実際のコールバック実行にはエンジン登録やNotifyPaintFrameの事前呼出しが必要。
  - 候補：結合テスト / モックエンジンによるE2Eテスト
- **C-136**: PaintFrameのリトライ失敗時のコールバック実行は、IRenderEngineモックを用いて全試行を失敗させる必要がある。
  - 候補：IRenderEngineモック / PaintFrameの直接テスト
- **C-143**: PaintFrameの正常動作テストは多数のIRenderData/IRenderEngineメソッドのモック化が必要。
  - 候補：統合テスト / モックフレームワーク利用
- **C-149**: FontResource::operator HFONT はWin32 API (AddFontMemResourceEx, CreateFontIndirectA) に依存。テスト環境(特に非Windows環境)での動作確認に制限がある。
  - 候補：Windows環境でのプラットフォーム固有テスト

## 5) リスクフラグ（レビュー観点）
- **リスク1 (中)**: RenderSettingsのGetAttributeColors内のFeature_AdjustIndistinguishableTextはコンパイル時フラグに依存。テスト時のビルド構成により動作が変わる可能性がある。
- **リスク0 (低)**: RenderEngineBaseのデフォルト実装(C-87〜C-101)は定数返却が大半であり、テスト観点としての重要度は低い。
- **リスク1 (中)**: FontResource関連(C-146〜C-150)はWin32 APIに強く依存し、クロスプラットフォームでの単体テスト実行が困難。モック化またはプラットフォーム条件付きテストが必要。
- **リスク0 (低)**: FontCache(FontCache.h)はヘッダオンリーのインライン関数であり、DWriteFactory等のCOM依存が強いため今回のCSVではテストケース化していない。必要に応じて結合テストでカバーすべき。

## 6) レビュアーチェックリスト（最小）
- [ ] CSSLengthPercentage::FromStringの各単位変換係数(96, 72, 100)がソースコードと一致しているか
- [ ] FontInfoBase::ValidateFont のDEFAULT_TT_FONT_FACENAMEブランチがIFontDefaultListのモックで正しくテスト可能か
- [ ] RenderSettings::GetAttributeColorsの条件分岐(Intense, Faint, ReverseVideo, ScreenReversed, Invisible)が全て網羅されているか
- [ ] RenderSettings::SetColorAliasIndex のTABLE_SIZE境界値テスト(C-71)が正しいか確認
- [ ] Renderer::PaintFrameのリトライロジック(maxRetriesForRenderEngine=5, バックオフ計算)が正確にテストされるか
- [ ] FontResource::_regenerateFont / _resizeBitPattern はprivateメソッドだがoperator HFONTを通じて間接的にテスト可能か
- [ ] FontCache::GetCached / details::getFontCollection はDWriteFactory等のCOM依存が強く、単体テスト対象外としたことが妥当か
- [ ] 静的関数 `_IsAllSpaces`(renderer.cpp内)は無名名前空間のため直接テスト不可であることを確認
