Files
Trilium/scripts/electron-repros/printpdf-page-range/index.html
2026-04-15 22:43:34 +03:00

69 lines
2.8 KiB
HTML

<!DOCTYPE html>
<html>
<head>
<title>printToPDF Repro</title>
<style>
body { font-family: system-ui; padding: 20px; }
#log { white-space: pre-wrap; font-family: monospace; background: #f0f0f0; padding: 12px; margin-top: 16px; border-radius: 4px; max-height: 400px; overflow-y: auto; }
button { margin: 4px; padding: 8px 16px; cursor: pointer; }
.pass { color: green; } .fail { color: red; }
</style>
</head>
<body>
<h2>Electron printToPDF — Page Range State Corruption Repro</h2>
<p>Click <b>Run Test Sequence</b> to reproduce the bug. It will:</p>
<ol>
<li>Print with no page range (should succeed)</li>
<li>Print with page range "999" (should fail — page doesn't exist)</li>
<li>Print with no page range again (does it still work?)</li>
</ol>
<button id="run">Run Test Sequence</button>
<button id="run-fresh">Run Step 3 Only (fresh, no prior failure)</button>
<div id="log"></div>
<script>
const { ipcRenderer } = require("electron");
const logEl = document.getElementById("log");
function log(msg, cls) {
const line = document.createElement("div");
line.textContent = msg;
if (cls) line.className = cls;
logEl.appendChild(line);
logEl.scrollTop = logEl.scrollHeight;
}
async function runStep(step, pageRanges, description) {
log(`\n--- Step ${step}: ${description} (pageRanges=${JSON.stringify(pageRanges)}) ---`);
const result = await ipcRenderer.invoke("print-test", { pageRanges, step });
if (result.ok) {
log(` ✓ SUCCESS (buffer: ${result.size} bytes)`, "pass");
} else {
log(` ✗ FAILED: ${result.error}`, "fail");
}
return result;
}
document.getElementById("run").addEventListener("click", async () => {
logEl.textContent = "";
log("=== Test Sequence: state corruption after failed pageRanges ===");
await runStep(1, "", "No page range (baseline)");
await runStep(2, "999", "Invalid page range (expect failure)");
await runStep(3, "", "No page range again (does state persist?)");
log("\n=== Done ===");
log("If Step 3 fails with 'Page range exceeds page count',");
log("it confirms an Electron/Chromium state corruption bug.");
});
document.getElementById("run-fresh").addEventListener("click", async () => {
logEl.textContent = "";
log("=== Control: single call with no page range ===");
await runStep("C", "", "No page range (no prior failure)");
log("\n=== Done ===");
});
</script>
</body>
</html>