2025-03-24 22:56:10 +01:00

126 lines
4.4 KiB
JavaScript

import { __awaiter } from "tslib";
import sync, { cancelSync, flushSync } from "../";
import { onNextFrame } from "../on-next-frame";
describe("onNextFrame", () => {
it("fires callback on following frame", () => {
return new Promise((resolve) => onNextFrame(resolve));
});
});
describe("sync", () => {
it("fires callbacks in the correct order", () => {
return new Promise((resolve, reject) => {
const order = [];
sync.read(() => order.push(0));
sync.update(() => order.push(1));
sync.preRender(() => order.push(2));
sync.render(() => order.push(3));
sync.postRender(() => {
order.push(4);
if (order[0] === 0 &&
order[1] === 1 &&
order[2] === 2 &&
order[3] === 3 &&
order[4] === 4) {
resolve();
}
else {
reject(order);
}
});
});
});
it("cancels callbacks", () => {
return new Promise((resolve, reject) => {
let hasFired = false;
const process = sync.render(() => (hasFired = true));
sync.update(() => cancelSync.render(process));
sync.postRender(() => (hasFired ? reject(hasFired) : resolve()));
});
});
it("fires callback on current frame if scheduled with `true` within the same step", () => {
return new Promise((resolve, reject) => {
let v = 0;
sync.update(({ timestamp: prevTimestamp }) => {
v++;
sync.update(({ timestamp }) => {
v++;
if (timestamp !== prevTimestamp) {
reject(`${timestamp} ${prevTimestamp}`);
}
}, false, true);
});
sync.render(() => (v === 2 ? resolve() : reject(v)));
});
});
it("fires callback on next frame if scheduled with `true` outside the same step", () => {
return new Promise((resolve, reject) => {
let v = 0;
sync.update(() => v++);
sync.update(() => v++, false, true);
sync.render(() => (v === 2 ? resolve() : reject()));
});
});
it("uses default elapsed time if first fire", () => {
return new Promise((resolve, reject) => {
sync.update(({ delta: defaultElapsed }) => {
setTimeout(() => sync.update(({ delta }) => delta === defaultElapsed
? resolve()
: reject(defaultElapsed, delta)), 50);
});
});
});
it("correctly cancels", () => {
return new Promise((resolve, reject) => {
const callback = () => reject();
sync.read(() => cancelSync.update(callback));
sync.update(callback);
sync.render(() => resolve());
});
});
it("correctly keeps alive", () => {
return new Promise((resolve) => {
let v = 0;
sync.update(() => v++, true);
sync.render(() => v === 2 && resolve(), true);
});
});
it("correctly cancels a keepAlive process", () => {
return new Promise((resolve, reject) => {
let updateCount = 0;
let renderCount = 0;
const update = sync.update(() => {
updateCount++;
if (updateCount === 4)
cancelSync.update(update);
}, true);
sync.render(() => {
renderCount++;
if (renderCount === 6) {
if (renderCount !== updateCount) {
resolve();
}
else {
reject([renderCount, updateCount]);
}
}
}, true);
});
});
it("correctly keeps alive after a flush", () => __awaiter(void 0, void 0, void 0, function* () {
const promise = new Promise((resolve) => {
let v = 0;
sync.update(() => {
if (v === 2)
flushSync.update();
}, true);
sync.update(() => {
v++;
if (v > 6)
resolve(true);
}, true);
});
flushSync.update();
return expect(promise).resolves.toBe(true);
}));
});
//# sourceMappingURL=test.js.map