From bbb08a677ed8fc9f825facfc48fb4c2a229c638b Mon Sep 17 00:00:00 2001 From: root Date: Mon, 1 Jun 2026 04:57:41 +1000 Subject: [PATCH] test(workers): pdf/image test fixtures born_digital.pdf (pdftotext extractable), scanned.pdf (image-only, OCR fallback target), eng_text.png (clear Tesseract-readable text). Co-Authored-By: Claude Opus 4.7 --- workers/tests/fixtures/README.md | 9 +++++++++ workers/tests/fixtures/born_digital.pdf | Bin 0 -> 2471 bytes workers/tests/fixtures/eng_text.png | Bin 0 -> 2723 bytes workers/tests/fixtures/scanned.pdf | Bin 0 -> 5053 bytes 4 files changed, 9 insertions(+) create mode 100644 workers/tests/fixtures/README.md create mode 100644 workers/tests/fixtures/born_digital.pdf create mode 100644 workers/tests/fixtures/eng_text.png create mode 100644 workers/tests/fixtures/scanned.pdf diff --git a/workers/tests/fixtures/README.md b/workers/tests/fixtures/README.md new file mode 100644 index 0000000..aab8a4f --- /dev/null +++ b/workers/tests/fixtures/README.md @@ -0,0 +1,9 @@ +# Test fixtures + +Used by `tests/test_pdf.py` and `tests/test_image.py`. Three invariants: + +1. **`born_digital.pdf`** — must contain the literal string `void-workers` when extracted via `pdftotext`. Generated from `/tmp/text.ps` then `ps2pdf`. +2. **`scanned.pdf`** — `pdftotext` must return **near-empty** output (the OCR fallback test depends on this). Generated by converting `eng_text.png` to a single-page image-only PDF: `convert -density 200 eng_text.png scanned.pdf`. +3. **`eng_text.png`** — must contain the literal string `blackflame palette`, rendered clearly enough for Tesseract to read it. Generated with `convert -size 800x200 xc:white -font DejaVu-Sans -pointsize 36 -fill black -annotate +50+100 "blackflame palette" eng_text.png`. + +Regenerate via the snippets in `../../docs/superpowers/plans/2026-06-01-void-v2-plan4-workers.md` Task B1. diff --git a/workers/tests/fixtures/born_digital.pdf b/workers/tests/fixtures/born_digital.pdf new file mode 100644 index 0000000000000000000000000000000000000000..f5c97ada6c6dd36a1e035e8239f3b318deca1bfa GIT binary patch literal 2471 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 literal 0 HcmV?d00001 diff --git a/workers/tests/fixtures/scanned.pdf b/workers/tests/fixtures/scanned.pdf new file mode 100644 index 0000000000000000000000000000000000000000..1981493647b61f1bfe083ced2bdefacac19a938a GIT binary patch literal 5053 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 literal 0 HcmV?d00001