y
This commit is contained in:
parent
61718e2981
commit
f657b6a4a4
94 changed files with 3970 additions and 1241 deletions
46
scripts/history_binary_regression_audit.js
Normal file
46
scripts/history_binary_regression_audit.js
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
"use strict";
|
||||
|
||||
const path = require("path");
|
||||
global.window = global;
|
||||
|
||||
const encoder = new TextEncoder();
|
||||
const decoder = new TextDecoder();
|
||||
global.TarinaiSaveCodec = {
|
||||
encodeBinarySnapshot(snapshot) {
|
||||
return encoder.encode(JSON.stringify(snapshot));
|
||||
},
|
||||
decodeBinarySnapshot(bytes) {
|
||||
return JSON.parse(decoder.decode(bytes));
|
||||
},
|
||||
};
|
||||
global.TarinaiSnapshot = {
|
||||
createSnapshot(world) {
|
||||
return { v: 1, a: "tj1", value: world.value, time: world.time };
|
||||
},
|
||||
};
|
||||
global.TarinaiRestoreCoordinator = {
|
||||
restoreSnapshot(snapshot, world) {
|
||||
world.value = snapshot.value;
|
||||
world.time = snapshot.time;
|
||||
},
|
||||
};
|
||||
|
||||
require(path.join(__dirname, "..", "js", "history_system.js"));
|
||||
|
||||
const world = { value: 1, time: 10 };
|
||||
if (!global.TarinaiHistory.capture(world, "first")) throw new Error("initial history capture failed");
|
||||
if (!(world._undoStack[0].bytes instanceof Uint8Array)) throw new Error("history entry is not binary");
|
||||
if ("snapshot" in world._undoStack[0] || "patch" in world._undoStack[0]) throw new Error("legacy object history payload remains");
|
||||
if (global.TarinaiHistory.capture(world, "duplicate")) throw new Error("duplicate snapshot was not suppressed");
|
||||
|
||||
world.value = 2;
|
||||
world.time = 20;
|
||||
if (!global.TarinaiHistory.capture(world, "second")) throw new Error("second history capture failed");
|
||||
world.value = 3;
|
||||
world.time = 30;
|
||||
let result = global.TarinaiHistory.undo(world);
|
||||
if (!result.ok || world.value !== 2 || world.time !== 20) throw new Error("undo did not restore the binary snapshot");
|
||||
result = global.TarinaiHistory.redo(world);
|
||||
if (!result.ok || world.value !== 3 || world.time !== 30) throw new Error("redo did not restore the captured current state");
|
||||
|
||||
console.log("[OK] binary undo/redo history, duplicate suppression, and synchronous restore passed");
|
||||
Loading…
Add table
Add a link
Reference in a new issue