Files
2026-08-05 16:25:24 +08:00

32 lines
1.2 KiB
JavaScript

import assert from "node:assert/strict";
import test from "node:test";
import {
assertWritableChangePath,
extractPagePaths,
joinDeckPath,
normalizeRelativePath,
titleFromManifest,
} from "../editor/lib.js";
const yaml = `---
version: v2
title: "测试文稿"
pages:
- pages/01.page
- 'pages/02.page' # comment
theme:
colors: {}
`;
test("parses PPTD manifests and keeps file access inside the project", () => {
assert.deepEqual(extractPagePaths(yaml), ["pages/01.page", "pages/02.page"]);
assert.deepEqual(extractPagePaths('{"pages":["a.page","folder/b.page"]}'), ["a.page", "folder/b.page"]);
assert.equal(titleFromManifest(yaml, "fallback"), "测试文稿");
assert.equal(joinDeckPath("deck", "pages/01.page"), "deck/pages/01.page");
assert.equal(joinDeckPath("deck", "deck/pages/01.page"), "deck/pages/01.page");
assert.equal(assertWritableChangePath("deck", "pages/01.page"), "deck/pages/01.page");
assert.throws(() => normalizeRelativePath("../secret"), /不允许越过/);
assert.throws(() => normalizeRelativePath("/absolute/path"), /绝对路径/);
assert.throws(() => assertWritableChangePath("deck", "media/image.png"), /仅允许编辑/);
});