feat: improve RenPy conversion and support MIST runtime
CI / frontend (push) Failing after 15s
CI / backend (push) Failing after 37s

This commit is contained in:
mrleo1nid committed 2026-10-25 23:16:33 +03:00
1 parent f7f7f5b1b3
commit f9eb5c1212
44 files changed
+2822 -174

No files matched your search

+46
View File
@@ -69,6 +69,52 @@ test("a screen renders its widgets, conditions, loops and interpolated text", ()
assert.equal(root.querySelector(".pg-sbtn").style.background, "#123", "style hud_button applies");
});
test("ui.interact receives repeated Returns without hiding an existing screen", () => {
const { manager, py } = setup();
manager.show("hud");
const before = manager.snapshot();
const values = [];
const builtins = manager.builtins();
const cancel = manager.interact((value) => values.push(value));
manager.run(builtins.Return("tick"), null);
cancel();
assert.deepEqual(values, ["tick"]);
assert.deepEqual(manager.snapshot(), before);
manager.interact((value) => values.push(value));
manager.run(builtins.Return(0), null);
assert.deepEqual(values, ["tick", 0]);
const cancelled = manager.interact((value) => values.push(value));
cancelled();
manager.run(builtins.Return("stale"), null);
assert.deepEqual(values, ["tick", 0]);
manager.destroy();
});
test("gallery buttons honor unlock conditions and close back to the same screen", () => {
const { manager, py } = setup();
const builtins = manager.builtins();
const gallery = py.instantiate(builtins.Gallery, []);
const invoke = (name, ...args) => builtins.Gallery.find(name).value(gallery, ...args);
invoke("button", "art");
invoke("image", "art.png");
invoke("condition", "money > 10");
const value = invoke("make_button", "art", "thumb.png", "locked.png");
assert.equal(value.kw.sensitive, true);
manager.show("hud");
manager.run(value.kw.action, null);
assert.ok(manager.layer.querySelector(".pg-gallery img[src='/f/art.png']"));
const close = [...manager.layer.querySelectorAll(".pg-gallery button")].find((b) => b.textContent === "Закрыть");
click(close);
assert.equal(manager.layer.querySelector(".pg-gallery"), null);
assert.equal(manager.snapshot()[0].name, "hud");
py.scope.set("money", 0);
assert.equal(invoke("Action", "art"), null);
const locked = invoke("make_button", "art", "thumb.png", "locked.png");
assert.equal(locked.kw.sensitive, false);
assert.equal(locked.kw.idle, "locked.png");
manager.destroy();
});
test("conditions follow the game state when the screen refreshes", async () => {
const { manager, store } = setup();
manager.show("hud");