import { describe, expect, it } from "vitest"; import { switchCharacterAndSyncHeight } from "../src/ui/panel.js"; // Ruling 68: applyCharacter setzt state.currentHeightFactor bei jedem Figurenwechsel neu // (0,93 für die weibliche Figur gegenüber 1 beim Mannequin), aber lil-gui merkt das nicht von // selbst — der Regler liest params.height nur beim Bau des Panels. Ohne Nachführen zeigt der // Regler nach dem Wechsel weiter den alten Wert; zieht man ihn dann, rechnet applyHeight vom // falschen Ausgangswert los und überschreibt die korrekte Größe mit einem Sprung. Der Test // hält darum den Zustand NACH dem Wechsel fest (angezeigter Wert == tatsächlicher // Höhenfaktor), nicht bloß, dass irgendeine Funktion aufgerufen wurde. describe("switchCharacterAndSyncHeight", () => { it("führt den Höhe-Regler nach einem Wechsel auf den tatsächlichen Wert nach (Ruling 68)", async () => { const state = { currentCharacterName: "Mannequin", currentHeightFactor: 1 }; const characterModule = { state, // Bildet applyCharacter nach: setzt currentHeightFactor passend zur Figur neu. switchCharacter: async (name) => { state.currentCharacterName = name; state.currentHeightFactor = name === "Superhero Female" ? 0.93 : 1; }, }; const params = { height: 1 }; let displayCalls = 0; const heightController = { updateDisplay: () => { displayCalls++; } }; await switchCharacterAndSyncHeight(characterModule, params, heightController, "Superhero Female"); expect(params.height).toBe(0.93); expect(displayCalls).toBe(1); }); it("führt auch nach, wenn switchCharacter wegen gleichnamiger Figur nichts tut", async () => { // switchCharacter im echten Modul kehrt früh zurück, wenn der Name unverändert ist // (state.busy-Wache) — der Regler soll trotzdem korrekt bleiben, nicht veraltet. const state = { currentCharacterName: "Mannequin", currentHeightFactor: 1 }; const characterModule = { state, switchCharacter: async () => {} }; const params = { height: 1 }; let displayCalls = 0; const heightController = { updateDisplay: () => { displayCalls++; } }; await switchCharacterAndSyncHeight(characterModule, params, heightController, "Mannequin"); expect(params.height).toBe(1); expect(displayCalls).toBe(1); }); });