完成50%

This commit is contained in:
2026-07-23 08:23:59 +08:00
parent 9b0ad62df4
commit f1edc6b533
218 changed files with 24318 additions and 5514 deletions
@@ -0,0 +1,52 @@
const fs = require("node:fs");
const path = require("node:path");
const assert = require("node:assert/strict");
const root = path.resolve(__dirname, "..");
const modulePath = path.join(root, "utils", "discard-confirmation.js");
const loadModule = async () => {
const source = fs.readFileSync(modulePath, "utf8");
return import(`data:text/javascript;base64,${Buffer.from(source).toString("base64")}`);
};
const run = async () => {
const { createDiscardConfirmation } = await loadModule();
const visibility = [];
const controller = createDiscardConfirmation((visible) => {
visibility.push(visible);
});
const first = controller.request();
const repeated = controller.request();
assert.strictEqual(repeated, first, "重复请求必须复用同一个等待 Promise");
assert.deepEqual(visibility, [true], "重复请求不得重复打开确认框");
controller.cancel();
assert.equal(await first, false, "取消必须让等待者得到 false");
assert.deepEqual(visibility, [true, false], "取消必须关闭确认框");
const confirmed = controller.request();
controller.confirm();
assert.equal(await confirmed, true, "确认必须让等待者得到 true");
const disposed = controller.request();
controller.dispose();
assert.equal(await disposed, false, "页面卸载必须释放等待者并返回 false");
const afterDispose = controller.request();
assert.notStrictEqual(afterDispose, disposed, "释放后必须能建立新的确认周期");
controller.cancel();
assert.equal(await afterDispose, false);
assert.throws(
() => createDiscardConfirmation(null),
/setVisible 必须是函数/,
"必须拒绝无法同步可见状态的消费者",
);
console.log("DISCARD-CONFIRMATION-RUNTIME-SMOKE PASS");
};
run().catch((error) => {
console.error(error);
process.exitCode = 1;
});