完成50%
This commit is contained in:
@@ -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;
|
||||
});
|
||||
Reference in New Issue
Block a user