71 lines
2.3 KiB
JavaScript
71 lines
2.3 KiB
JavaScript
const test = require("node:test");
|
|
const assert = require("node:assert/strict");
|
|
const state = require("../assets/scripts/pages/archive-world-state.js");
|
|
|
|
test("fresh state applies defaults", () => {
|
|
assert.deepEqual(state.fresh(" Ada ", "moss"), {
|
|
version: 1,
|
|
name: "Ada",
|
|
palette: "moss",
|
|
discovered: [],
|
|
complete: false,
|
|
position: { x: 640, y: 830 },
|
|
soundEnabled: false
|
|
});
|
|
});
|
|
|
|
test("names are trimmed, collapsed, and limited to twenty characters", () => {
|
|
assert.equal(state.validateName(" Archive Guest "), "Archive Guest");
|
|
assert.equal(state.validateName(""), null);
|
|
assert.equal(state.validateName("x".repeat(21)), null);
|
|
});
|
|
|
|
test("only declared palettes are accepted", () => {
|
|
assert.equal(state.validatePalette("berry"), "berry");
|
|
assert.equal(state.validatePalette("ultraviolet"), null);
|
|
});
|
|
|
|
test("discoveries are deduplicated and completion requires all landmarks", () => {
|
|
let current = state.fresh("Ada", "brass");
|
|
current = state.discover(current, "gate");
|
|
current = state.discover(current, "gate");
|
|
assert.deepEqual(current.discovered, ["gate"]);
|
|
assert.equal(current.complete, false);
|
|
|
|
for (const id of state.LANDMARK_IDS) current = state.discover(current, id);
|
|
assert.equal(current.complete, true);
|
|
});
|
|
|
|
test("normalization filters unknown discoveries and clamps position", () => {
|
|
const candidate = {
|
|
version: 1,
|
|
name: "Zaine",
|
|
palette: "brass",
|
|
discovered: ["gate", "gate", "missing"],
|
|
complete: true,
|
|
position: { x: -20, y: 5000 },
|
|
soundEnabled: true
|
|
};
|
|
assert.deepEqual(state.normalize(candidate), {
|
|
version: 1,
|
|
name: "Zaine",
|
|
palette: "brass",
|
|
discovered: ["gate"],
|
|
complete: false,
|
|
position: { x: 36, y: 924 },
|
|
soundEnabled: true
|
|
});
|
|
});
|
|
|
|
test("parse rejects malformed, unsupported, and incomplete saves", () => {
|
|
assert.equal(state.parse("{"), null);
|
|
assert.equal(state.parse(JSON.stringify({ version: 2 })), null);
|
|
assert.equal(state.parse(JSON.stringify(state.fresh("", "brass"))), null);
|
|
});
|
|
|
|
test("a valid save round-trips and reset creates an empty state", () => {
|
|
const saved = state.discover(state.fresh("Mira", "berry"), "garden");
|
|
assert.deepEqual(state.parse(JSON.stringify(saved)), saved);
|
|
assert.deepEqual(state.fresh("Mira", "berry").discovered, []);
|
|
});
|