Pruebas con motor real en Chromium.
Requisitos: Python 3 con numpy, Poppler, Node.js y playwright.
Desde esta carpeta: mkdir -p app tmp; copiar index.html, app.js, motor.js, _headers y logo a app; añadir vendor/gs.js y gs.wasm del despliegue.
python3 tests/make-fixtures.py
node tests/browser.cjs
Para edge.cjs, crear tmp/already.pdf desde small-out.pdf y un tmp/encrypted.pdf con Ghostscript y una contraseña de prueba.
CHROMIUM_PATH permite usar un ejecutable Chromium concreto; si se omite, se usa el de Playwright.
El fixture grande ocupa aproximadamente 1,13 GB en disco.

Beta 3: añadir reparar.js y vendor/qpdf/ al árbol app.
Crear tmp/bom.pdf y tmp/bomlarge.pdf anteponiendo bytes EF BB BF a los fixtures originales. Hacerlo por bloques para no copiar 1 GB completo en RAM.
node tests/repair.cjs
node tests/repair-large.cjs
Las pruebas verifican que la reparación no se cargue para PDF correctos o protegidos, que se active ante un fallo de cabecera y que se rechace contenido irrecuperable.
