Stage 3: chapter management — create/rename/delete/duplicate, sidebar list, select, read-only preview, word count, IPC + tests + e2e self-test

This commit is contained in:
avi 2026-08-16 14:34:34 -05:00
commit d3ab261346
11 changed files with 811 additions and 134 deletions

View file

@ -0,0 +1,39 @@
/* Selftest scenario - runs inside the renderer via executeJavaScript.
Injected only when FOLIO_SELF_TEST=1. Exercises the full
renderer -> preload -> IPC -> chapters chain. */
const BOOK_DIR = __BOOKDIR_VALUE__;
(async () => {
const out = {};
try {
out.folioType = typeof window.folio;
out.recentsCount = (await window.folio.getRecents()).length;
out.openBook = await window.folio.openBookPath(BOOK_DIR);
out.metaTitle = (await window.folio.getBookMeta()).title;
const created = await window.folio.createChapter("Introduction");
out.created = created && !created.error ? { id: created.id, title: created.title } : created;
const cid = created.id;
out.contentEmpty = await window.folio.getChapterContent(cid);
out.listLen1 = (await window.folio.getChapterList()).length;
out.renamed = await window.folio.renameChapter(cid, "Intro");
const dup = await window.folio.duplicateChapter(cid);
out.dup = dup && !dup.error ? { id: dup.id, title: dup.title } : dup;
const did = dup.id;
out.listLen2 = (await window.folio.getChapterList()).length;
out.deleted = await window.folio.deleteChapter(cid);
const remaining = (await window.folio.getChapterList())[0];
out.listLen3 = (await window.folio.getChapterList()).length;
out.reorderOk = await window.folio.reorderChapters([remaining.id]);
out.reorderErr = await window.folio.reorderChapters(["bogus-id"]);
out.dupContent = await window.folio.getChapterContent(did);
out.all = true;
} catch (e) {
out.error = String((e && e.message) || e);
}
return out;
})();