---
generated_at: 2026-02-27 14:30:00
metrics:
  claims_total: 85
  claims_with_evidence: 80
  claims_without_evidence: 5
confidence_derived: 0.94
---

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

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.94**
  - 根拠あり：80 / 85、根拠なし：5
- 優先レビュー（高）
  1. **UT-RTT-080～083 (renderToString)**：runtime-coreのcreateRenderer依存のため、具体的な動作は外部モジュールに依存
  2. **UT-RTT-084 (render)**：createRendererの戻り値であり、具体動作はruntime-coreモジュールの実装に依存
  3. **UT-RTT-085 (createApp)**：createRendererの戻り値であり、具体動作はruntime-coreモジュールの実装に依存

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

- E-01: `packages/runtime-test/src/nodeOps.ts` — TestNodeTypes列挙型、NodeOpTypes列挙型、TestElement/TestText/TestComment型定義、nodeOps関数群(createElement, createText, createComment, setText, insert, remove, setElementText, parentNode, nextSibling, querySelector, setScopeId)の実装、logNodeOp/resetOps/dumpOps関数の実装
- E-02: `packages/runtime-test/src/patchProp.ts` — patchProp関数の実装、isOnによるイベントキー判定、on:xxx形式とonXxx形式のイベント名抽出ロジック、eventListenersの遅延初期化
- E-03: `packages/runtime-test/src/triggerEvent.ts` — triggerEvent関数の実装、isArrayによる配列/単一リスナー判定、payloadのスプレッド展開
- E-04: `packages/runtime-test/src/serialize.ts` — serialize, serializeInner, serializeElement, serializeText関数の実装、propsフィルタリング(isOn, null値, 空文字列)ロジック
- E-05: `packages/runtime-test/src/index.ts` — renderToString関数の実装、render/createAppのcreateRenderer由来エクスポート

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | createElement: 指定タグ名でTestElementが正しく生成される | E-01 (L74-93) | ○ |
| C-02 | createElement: 連続作成でidがインクリメントされる | E-01 (L57, L76) | ○ |
| C-03 | createElement: CREATE操作がlogNodeOpで記録される | E-01 (L84-89) | ○ |
| C-04 | createElement: markRawで非リアクティブ化される | E-01 (L91) | ○ |
| C-05 | createElement: 空文字列タグ名でも作成される | E-01 (L74) | ○ |
| C-06 | createText: 指定テキストでTestTextが正しく生成される | E-01 (L95-111) | ○ |
| C-07 | createText: CREATE操作がlogNodeOpで記録される | E-01 (L102-107) | ○ |
| C-08 | createText: markRawで非リアクティブ化される | E-01 (L109) | ○ |
| C-09 | createText: 空文字列でも作成される | E-01 (L95) | ○ |
| C-10 | createComment: 指定テキストでTestCommentが正しく生成される | E-01 (L113-129) | ○ |
| C-11 | createComment: CREATE操作がlogNodeOpで記録される | E-01 (L120-125) | ○ |
| C-12 | createComment: 空文字列でも作成される | E-01 (L113) | ○ |
| C-13 | setText: テキストノードのテキストが更新される | E-01 (L131-138) | ○ |
| C-14 | setText: SET_TEXT操作がlogNodeOpで記録される | E-01 (L132-136) | ○ |
| C-15 | setText: 空文字列でも更新される | E-01 (L137) | ○ |
| C-16 | insert: 子ノードが親ノードの末尾に挿入される | E-01 (L140-171, L164-166) | ○ |
| C-17 | insert: refノード指定で参照位置の前に挿入される | E-01 (L146-147, L167-169) | ○ |
| C-18 | insert: INSERT操作がlogNodeOpで記録される | E-01 (L154-159) | ○ |
| C-19 | insert: 既に別の親を持つ子ノードが移動される | E-01 (L161) | ○ |
| C-20 | insert: refが親の子ノードでない場合にエラーがスローされる | E-01 (L148-152) | ○ |
| C-21 | insert: refがnullの場合に末尾に挿入される | E-01 (L163-166) | ○ |
| C-22 | insert: 既存の親からの移動時にREMOVE操作がログ記録されない | E-01 (L161: remove(child, false)) | ○ |
| C-23 | remove: 子ノードが親から削除される | E-01 (L173-192) | ○ |
| C-24 | remove: REMOVE操作がlogNodeOpで記録される | E-01 (L176-181) | ○ |
| C-25 | remove: logOp=falseで操作がログ記録されない | E-01 (L173, L176) | ○ |
| C-26 | remove: parentNodeがnullの場合に何も起こらない | E-01 (L174-175) | ○ |
| C-27 | remove: parentのchildrenにchildが存在しない不整合時にエラー | E-01 (L186-189) | ○ |
| C-28 | setElementText: 子がテキストノードに置き換わる | E-01 (L195-216) | ○ |
| C-29 | setElementText: SET_ELEMENT_TEXT操作がlogNodeOpで記録される | E-01 (L196-200) | ○ |
| C-30 | setElementText: 既存子ノードのparentNodeがnullにクリアされる | E-01 (L201-203) | ○ |
| C-31 | setElementText: テキストノードのparentNodeが親Elementに設定される | E-01 (L212) | ○ |
| C-32 | setElementText: 空文字列でchildrenが空配列になる | E-01 (L204-205) | ○ |
| C-33 | setElementText: テキスト設定時にテキストノードにidが採番される | E-01 (L209) | ○ |
| C-34 | parentNode: ノードの親要素が返却される | E-01 (L218-220) | ○ |
| C-35 | parentNode: parentNodeがnullの場合にnullが返却される | E-01 (L219) | ○ |
| C-36 | nextSibling: 次の兄弟ノードが返却される | E-01 (L222-229) | ○ |
| C-37 | nextSibling: 最後の子ノードの場合にnullが返却される | E-01 (L228) | ○ |
| C-38 | nextSibling: parentNodeがnullの場合にnullが返却される | E-01 (L223-226) | ○ |
| C-39 | querySelector: 呼び出し時にエラーがスローされる | E-01 (L231-233) | ○ |
| C-40 | setScopeId: propsにスコープIDが空文字列で設定される | E-01 (L235-237) | ○ |
| C-41 | logNodeOp: 操作がrecordedNodeOpsに追加される | E-01 (L60-62) | ○ |
| C-42 | logNodeOp: 複数回呼び出しで操作が順番に蓄積される | E-01 (L60-62) | ○ |
| C-43 | resetOps: recordedNodeOpsが空配列にリセットされる | E-01 (L64-66) | ○ |
| C-44 | dumpOps: 記録済み操作がコピーとして返却される | E-01 (L68-72, L69: slice()) | ○ |
| C-45 | dumpOps: 呼び出し後にrecordedNodeOpsがリセットされる | E-01 (L70: resetOps()) | ○ |
| C-46 | dumpOps: 操作未記録の場合に空配列が返却される | E-01 (L69) | ○ |
| C-47 | patchProp: propsにキーと値が設定される | E-02 (L17) | ○ |
| C-48 | patchProp: PATCH操作がlogNodeOpで記録される | E-02 (L10-16) | ○ |
| C-49 | patchProp: onXxxキーでeventListenersにイベントが登録される | E-02 (L18-21) | ○ |
| C-50 | patchProp: on:xxxキーでコロン以降がイベント名として抽出される | E-02 (L19: key[2] === ':' ? key.slice(3)) | ○ |
| C-51 | patchProp: onXxxキーでイベント名がon除去後に小文字化される | E-02 (L19: key.slice(2).toLowerCase()) | ○ |
| C-52 | patchProp: イベント以外のキーではeventListenersが変更されない | E-02 (L18: isOn(key)による条件分岐) | ○ |
| C-53 | patchProp: eventListenersがnullの場合に新たにオブジェクトが初期化される | E-02 (L20: el.eventListeners \|\| (el.eventListeners = {})) | ○ |
| C-54 | patchProp: prevValueからnextValueへのプロパティ更新 | E-02 (L17) | ○ |
| C-55 | serialize: ELEMENTノードがHTML形式でシリアライズされる | E-04 (L10-19) | ○ |
| C-56 | serialize: TEXTノードがテキストとしてシリアライズされる | E-04 (L17-18) | ○ |
| C-57 | serialize: COMMENTノードがHTMLコメント形式でシリアライズされる | E-04 (L67) | ○ |
| C-58 | serialize: indent指定時にインデント付き出力 | E-04 (L51, L64) | ○ |
| C-59 | serialize: indent=0でインデントなし出力 | E-04 (L51, L64) | ○ |
| C-60 | serializeInner: 子ノードがシリアライズされた文字列が返却される | E-04 (L22-33) | ○ |
| C-61 | serializeInner: 複数子ノードが連結されて返却される | E-04 (L30) | ○ |
| C-62 | serializeInner: 子ノードが空で空文字列が返却される | E-04 (L28, L32) | ○ |
| C-63 | serializeInner: indent指定時に改行区切りで出力 | E-04 (L27, L29, L31) | ○ |
| C-64 | serializeElement: propsが属性付きでシリアライズされる | E-04 (L40-53) | ○ |
| C-65 | serializeElement: 空文字列propsがキーのみでシリアライズされる | E-04 (L45-46) | ○ |
| C-66 | serializeElement: onプレフィックスpropsがシリアライズから除外される | E-04 (L43: isOn(key)) | ○ |
| C-67 | serializeElement: null値propsがシリアライズから除外される | E-04 (L43: value == null) | ○ |
| C-68 | serializeElement: 子要素がネストしてシリアライズされる | E-04 (L54) | ○ |
| C-69 | serializeElement: propsが空の場合にタグのみ出力される | E-04 (L53) | ○ |
| C-70 | serializeText: TEXTノードがテキストそのままで返却される | E-04 (L59-68) | ○ |
| C-71 | serializeText: COMMENTノードがHTMLコメント形式で返却される | E-04 (L67) | ○ |
| C-72 | serializeText: indent指定時にパディング付きで返却される | E-04 (L64) | ○ |
| C-73 | triggerEvent: 単一リスナーが呼び出される | E-03 (L17-18) | ○ |
| C-74 | triggerEvent: 配列リスナーが全て呼び出される | E-03 (L13-16) | ○ |
| C-75 | triggerEvent: payloadがリスナーに引数として展開渡しされる | E-03 (L15, L18) | ○ |
| C-76 | triggerEvent: payload未指定で引数なし呼び出し | E-03 (L7: payload: any[] = []) | ○ |
| C-77 | triggerEvent: eventListenersがnullの場合に何も起こらない | E-03 (L10) | ○ |
| C-78 | triggerEvent: 存在しないイベント名で何も起こらない | E-03 (L11-12) | ○ |
| C-79 | triggerEvent: 空配列リスナーで何も起こらない | E-03 (L14: for文の条件) | ○ |
| C-80 | renderToString: VNodeがHTML内部文字列にレンダリングされる | E-05 (L20-24) | △ |
| C-81 | renderToString: ネストしたVNodeが正しくシリアライズされる | E-05 (L20-24) | △ |
| C-82 | renderToString: 空のVNodeで空文字列が返却される | E-05 (L20-24) | △ |
| C-83 | renderToString: 内部でcreateElement/render/serializeInnerが順に呼ばれる | E-05 (L21-23) | ○ |
| C-84 | render: VNodeがTestElementにレンダリングされる | E-05 (L12-14, L16) | △ |
| C-85 | createApp: アプリケーションインスタンスが作成される | E-05 (L12-14, L17) | △ |

## 4) 不足情報（Unknown / Missing）
- C-80, C-81, C-82: renderToStringの期待結果は、内部でruntime-coreの`render`関数が呼び出されるため、runtime-testモジュール単体では完全な動作検証根拠を提示できない。renderToString関数自体のコード（L20-24）は確認可能だが、`render(vnode, root)`の具体的な挙動はruntime-coreに依存する。
  - 候補：`packages/runtime-core/src/renderer.ts` / runtime-coreのテストケース
- C-84: `render`は`createRenderer`から生成されたものであり、具体的な動作仕様はruntime-coreモジュールの実装に依存する。
  - 候補：`packages/runtime-core/src/renderer.ts` / `packages/runtime-core/src/apiCreateApp.ts`
- C-85: `createApp`は`createRenderer`から生成されたものであり、具体的な動作仕様はruntime-coreモジュールの実装に依存する。
  - 候補：`packages/runtime-core/src/apiCreateApp.ts`

## 5) リスクフラグ（レビュー観点）
- **1: 中リスク** — render/createApp/renderToStringの6テストケース（UT-RTT-080～085）はruntime-coreモジュールとの結合テストに近く、単体テストとしての妥当性をレビューで確認する必要がある
- **0: 低リスク** — nodeOps, patchProp, triggerEvent, serializeの79テストケース（UT-RTT-001～079）はソースコードから直接導出されており、根拠が明確

## 6) レビュアーチェックリスト（最小）
- [ ] nodeOps.tsの各関数（createElement, createText, createComment, setText, insert, remove, setElementText, parentNode, nextSibling, querySelector, setScopeId, logNodeOp, resetOps, dumpOps）に対してテストケースが網羅されているか
- [ ] patchProp.tsのイベントリスナー登録ロジック（on:xxx形式とonXxx形式の両方、eventListenersの遅延初期化）が正しくテストされているか
- [ ] triggerEvent.tsの配列リスナーと単一リスナーの両パターン、およびペイロード渡しが網羅されているか
- [ ] serialize.tsのprops処理（isOnフィルタ、null値フィルタ、空文字列キーのみ出力）とインデント処理が正しくテストされているか
- [ ] render/createApp/renderToStringの単体テストとしての適切性（runtime-core依存の範囲）を確認
- [ ] 境界値テスト（空文字列、null、空配列、末尾ノード等）が主要な関数に対して設定されているか
- [ ] テストID略称RTT（Runtime-Test）が全テストケースで一貫しているか
