---
generated_at: 2026-02-24 14:30:00
metrics:
  claims_total: 83
  claims_with_evidence: 79
  claims_without_evidence: 4
confidence_derived: 0.95
---

# 根拠レポート：packages-document-preprocessor 単体テストケース一覧

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.95**
  - 根拠あり：79 / 83、根拠なし：4
- 優先レビュー（高）
  1. **C-65, C-66（ensureFormEnvironment）**：フォーム環境初期化のテストケースは実際のPDFフォームファイルが必要
  2. **C-82, C-83（encodeRgbaToPng）**：プライベート関数のため直接テスト困難、統合テストで検証
  3. **PDFium関連テスト全般**：実際のWASMバイナリと有効なPDFファイルが必要

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

- E-01: `packages/document-preprocessor/src/text.ts` - extractText関数の実装
- E-02: `packages/document-preprocessor/src/text.test.ts` - extractTextの既存テスト
- E-03: `packages/document-preprocessor/src/internal/binary.ts` - toUint8Array関数の実装
- E-04: `packages/document-preprocessor/src/internal/__tests__/binary.test.ts` - toUint8Arrayの既存テスト
- E-05: `packages/document-preprocessor/src/internal/text-normalizer.ts` - normalizeExtractedText関数の実装
- E-06: `packages/document-preprocessor/src/internal/__tests__/text-normalizer.test.ts` - normalizeExtractedTextの既存テスト
- E-07: `packages/document-preprocessor/src/internal/abort.ts` - assertNotAborted関数の実装
- E-08: `packages/document-preprocessor/src/pdf.ts` - extractPdfText, renderPdfPageImages, calculatePageLimit, encodeRgbaToPng関数の実装
- E-09: `packages/document-preprocessor/src/internal/pdfium.ts` - PDFium関連クラス・関数の実装
- E-10: `packages/document-preprocessor/src/types.ts` - 型定義（BinaryDataInput, PdfTextExtractionOptions等）
- E-11: `packages/document-preprocessor/src/index.ts` - エクスポート定義

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

### extractText関数（text.ts）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | プレーンテキストバッファからテキストを抽出できること | E-01, E-02 | ○ |
| C-02 | マークダウンコンテンツからテキストを抽出できること | E-01, E-02 | ○ |
| C-03 | 空文字列を処理できること | E-01, E-02 | ○ |
| C-04 | UTF-8エンコーディングで多バイト文字を処理できること | E-01, E-02 | ○ |
| C-05 | Uint8Array入力を処理できること | E-01, E-02 | ○ |
| C-06 | ArrayBuffer入力を処理できること | E-01 | ○ |
| C-07 | ArrayBufferView入力を処理できること | E-01 | ○ |
| C-08 | アボートシグナルが発火済みの場合に例外をスローすること | E-01, E-02 | ○ |
| C-09 | オプションなしで呼び出した場合にデフォルトUTF-8が適用されること | E-01 | ○ |

### toUint8Array関数（binary.ts）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-10 | Uint8Array入力をそのまま返すこと | E-03, E-04 | ○ |
| C-11 | ArrayBufferView（DataView）を正しく変換すること | E-03, E-04 | ○ |
| C-12 | ArrayBufferをラップすること | E-03, E-04 | ○ |
| C-13 | 空のArrayBufferを処理できること | E-03 | ○ |

### normalizeExtractedText関数（text-normalizer.ts）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-14 | 空文字列入力に対して空文字列を返すこと | E-05, E-06 | ○ |
| C-15 | ゼロ幅文字を除去すること | E-05, E-06 | ○ |
| C-16 | CRLFをLFに正規化すること | E-05 | ○ |
| C-17 | ハイフン改行を結合すること | E-05, E-06 | ○ |
| C-18 | 連続するスペースを1つにまとめること | E-05, E-06 | ○ |
| C-19 | 3つ以上の連続改行を2つに圧縮すること | E-05 | ○ |
| C-20 | 行末の空白を除去すること | E-05 | ○ |
| C-21 | NFKC正規化を適用すること | E-05, E-06 | ○ |
| C-22 | 空白のみの入力に対して空文字列を返すこと | E-05, E-06 | ○ |
| C-23 | 複雑な混合コンテンツを正しく処理すること | E-05, E-06 | ○ |

### assertNotAborted関数（abort.ts）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-24 | シグナルがundefinedの場合に何もしないこと | E-07 | ○ |
| C-25 | アボートされていないシグナルの場合に何もしないこと | E-07 | ○ |
| C-26 | アボートされたシグナルの場合にAbortErrorをスローすること | E-07 | ○ |
| C-27 | throwIfAbortedメソッドが存在する場合にそれを呼び出すこと | E-07 | ○ |
| C-28 | シグナルのreasonがErrorの場合にそれをスローすること | E-07 | ○ |
| C-29 | シグナルのreasonがError以外の場合にデフォルトエラーをスローすること | E-07 | ○ |

### extractPdfText関数（pdf.ts）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-30 | PDFからテキストを抽出できること | E-08 | ○ |
| C-31 | パスワード保護されたPDFを正しいパスワードで開けること | E-08, E-10 | ○ |
| C-32 | パスワード保護されたPDFを誤ったパスワードで開くとエラーになること | E-08, E-09 | ○ |
| C-33 | maxPagesオプションでページ数を制限できること | E-08, E-10 | ○ |
| C-34 | maxPagesが0以下の場合は全ページを返すこと | E-08 | ○ |
| C-35 | maxPagesがtotalPagesより大きい場合は全ページを返すこと | E-08 | ○ |
| C-36 | アボートシグナルが発火した場合に処理を中断すること | E-08 | ○ |
| C-37 | 無効なPDFデータでエラーになること | E-08, E-09 | ○ |
| C-38 | 抽出テキストが正規化されること | E-08 | ○ |
| C-39 | ページ番号が1から開始すること | E-08 | ○ |

### renderPdfPageImages関数（pdf.ts）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-40 | PDFページを画像にレンダリングできること | E-08 | ○ |
| C-41 | targetDpiでレンダリング解像度を指定できること | E-08 | ○ |
| C-42 | デフォルトDPI（144）が適用されること | E-08 | ○ |
| C-43 | maxPagesオプションでページ数を制限できること | E-08 | ○ |
| C-44 | renderFormFieldsオプションでフォームフィールドを含めること | E-08 | ○ |
| C-45 | renderFormFieldsがfalseの場合フォームフィールドを除外すること | E-08 | ○ |
| C-46 | アボートシグナルが発火した場合に処理を中断すること | E-08 | ○ |
| C-47 | PNG形式の画像データが返却されること | E-08 | ○ |
| C-48 | 非常に小さいDPIでもscaleが0.1以上になること | E-08 | ○ |

### calculatePageLimit関数（pdf.ts - internal）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-49 | maxPagesが指定されていない場合はtotalPagesを返すこと | E-08 | ○ |
| C-50 | maxPagesがtotalPagesより小さい場合はmaxPagesを返すこと | E-08 | ○ |
| C-51 | maxPagesが0の場合はtotalPagesを返すこと | E-08 | ○ |
| C-52 | maxPagesが負数の場合はtotalPagesを返すこと | E-08 | ○ |

### PDFium関連（pdfium.ts）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-53 | wasmBinaryがnullの場合にエラーをスローすること | E-09 | ○ |
| C-54 | 同じwasmBinaryで再呼び出しした場合にキャッシュされたモジュールを返すこと | E-09 | ○ |
| C-55 | 異なるwasmBinaryで呼び出した場合にエラーをスローすること | E-09 | ○ |
| C-56 | ハンドラを実行してドキュメントをクローズすること | E-09 | ○ |
| C-57 | ハンドラ実行前にアボートチェックが行われること | E-09 | ○ |
| C-58 | ハンドラがエラーをスローしてもドキュメントがクローズされること | E-09 | ○ |
| C-59 | ページ数を取得できること | E-09 | ○ |
| C-60 | クローズ後に呼び出すとエラーになること（Document） | E-09 | ○ |
| C-61 | 指定インデックスのページをロードできること | E-09 | ○ |
| C-62 | 無効なページインデックスでエラーになること | E-09 | ○ |
| C-63 | リソースを解放すること（Document） | E-09 | ○ |
| C-64 | 複数回呼び出しても安全であること（Document.close） | E-09 | ○ |
| C-65 | フォーム環境を初期化できること | E-09 | △ |
| C-66 | 2回目の呼び出しでキャッシュされたハンドルを返すこと（FormEnv） | E-09 | △ |
| C-67 | ページサイズを取得できること | E-09 | ○ |
| C-68 | クローズ後に呼び出すとエラーになること（Page） | E-09 | ○ |
| C-69 | ページテキストを取得できること | E-09 | ○ |
| C-70 | テキストがないページで空文字列を返すこと | E-09 | ○ |
| C-71 | ページを画像にレンダリングできること（Page.render） | E-09 | ○ |
| C-72 | 幅と高さを直接指定してレンダリングできること | E-09 | ○ |
| C-73 | ページリソースを解放すること | E-09 | ○ |
| C-74 | 複数回呼び出しても安全であること（Page.close） | E-09 | ○ |
| C-75 | 有効なPDFデータからドキュメントをロードできること | E-09 | ○ |
| C-76 | 不正なPDFデータでエラーになること（loadDocument） | E-09 | ○ |
| C-77 | パスワードが必要なPDFで誤ったパスワードを指定するとエラーになること | E-09 | ○ |
| C-78 | width/heightオプションが指定された場合はそれを使用すること | E-09 | ○ |
| C-79 | scaleオプションでサイズをスケールすること | E-09 | ○ |
| C-80 | 幅が1未満にならないこと | E-09 | ○ |
| C-81 | 高さが1未満にならないこと | E-09 | ○ |
| C-82 | RGBA画像データをPNG形式にエンコードできること | E-08 | △ |
| C-83 | 1x1ピクセルの画像をエンコードできること | E-08 | △ |

## 4) 不足情報（Unknown / Missing）
- **ensureFormEnvironment（C-65, C-66）**：フォーム環境の初期化テストは実際のPDFフォームファイルが必要であり、モック化が困難
  - 候補：テスト用PDFフォームファイルの準備 / 統合テストでの検証 / PDFium APIのモック
- **encodeRgbaToPng（C-82, C-83）**：モジュール内のプライベート関数であり、直接テストが困難
  - 候補：関数のエクスポート / renderPdfPageImagesを通じた統合テスト / pngjsライブラリのモック

## 5) リスクフラグ（レビュー観点）
- **0 (低リスク)**: extractText, toUint8Array, normalizeExtractedText, assertNotAborted - 既存テストが存在し、ロジックがシンプル
- **1 (中リスク)**: calculatePageLimit, calculateRenderSize - 内部ヘルパー関数、境界値の考慮が必要
- **2 (高リスク)**: PDFium関連（extractPdfText, renderPdfPageImages, PdfiumDocument, PdfiumPage）- 外部WASMライブラリ依存、実際のPDFファイルが必要、リソース管理が複雑

## 6) レビュアーチェックリスト（最小）
- [ ] 既存テストファイル（text.test.ts, binary.test.ts, text-normalizer.test.ts）との整合性を確認
- [ ] PDFium関連テストケースの前提条件（WASMバイナリ、PDFファイル）の準備方法を確認
- [ ] 境界値テスト（空入力、0、負数、最大値）が網羅されているか確認
- [ ] 異常系テスト（アボート、無効入力、クローズ後アクセス）が十分か確認
- [ ] プライベート関数（encodeRgbaToPng, calculatePageLimit）のテスト方針を決定
- [ ] フォーム環境関連テストの実現可能性を確認
