diff --git a/server/pruef-anruf.mjs b/server/pruef-anruf.mjs index 188b8384..0300d83b 100644 --- a/server/pruef-anruf.mjs +++ b/server/pruef-anruf.mjs @@ -1015,12 +1015,37 @@ melde("=== 8. Zu dritt ==="); .map((m) => m.muted)); { + /* ==== JEDES GESPRAECH FAENGT LEISE AN (20.09.2026) ========== + + Filipe: "es soll ohne lautsprecher anfangen das gespraech und + nur wenn man drauf klickt soll es laut werden ... es soll + nicht raushaengen oder so, das ist nicht cool." + + Diese Pruefung stand hier genau ANDERSHERUM und ist beim + Umbau rot geworden -- richtig so, sie hat die Aenderung + bemerkt. Der Grund fuer die Umkehr steht bei `hoeren` in + anruf.js: Ein Anruf, der beim Annehmen sofort aus den + Lautsprechern kommt, ist im schlimmsten Fall fuer alle + Zuschauer zu hoeren, bevor jemand reagieren kann. Das laesst + sich nicht zurueckholen. */ const vorher = await stumm(a); /* Die ANZAHL gehoert in die Bedingung: `every` ist auf einer leeren Liste wahr, und dann waere diese Pruefung gruen, ohne ein einziges Element gesehen zu haben. */ - ok(vorher.length >= 2 && vorher.every((m) => m === false), - `vorher hoert DogFather beide (${vorher.length} Stroeme, keiner stumm)`); + ok(vorher.length >= 2 && vorher.every((m) => m === true), + `das Gespraech faengt LEISE an (${vorher.length} Stroeme, alle stumm)`); + + /* UND MAN SIEHT ES. Leise anfangen ohne Hinweis waere die + naechste Sackgasse: "ich hoere nichts" ohne einen Grund und + ohne einen Weg. */ + const balken = await a.se.evaluate(() => { + const b = document.getElementById("anruf-stumm"); + return b ? { da: !b.hidden, text: b.textContent.trim(), + hoch: Math.round(b.getBoundingClientRect().height) } : null; + }); + ok(balken?.da === true, `ein Hinweis sagt es ("${balken?.text}")`); + ok((balken?.hoch || 0) >= 44, + ` und er ist selbst antippbar (${balken?.hoch} px hoch)`); const knopf = await a.se.evaluate(() => { const k = document.getElementById("anruf-hoeren"); @@ -1032,26 +1057,31 @@ melde("=== 8. Zu dritt ==="); durchgestrichene Zeichen den Zustand und das Wort nur die Sache. Geprueft wird deshalb aria-pressed; der Text bleibt gleich und beweist nichts mehr. */ - ok(knopf?.an === "true", - `der Lautsprecher-Knopf ist da und steht auf an („${knopf?.text}")`); + ok(knopf?.an === "false", + `der Lautsprecher-Knopf steht auf AUS ("${knopf?.text}")`); + /* ---- UND EIN DRUCK MACHT IHN LAUT ------------------------- */ await a.se.click("#anruf-hoeren"); await a.se.waitForTimeout(300); const nachher = await stumm(a); - ok(nachher.length >= 2 && nachher.every((m) => m === true), - `nach dem Druecken ist ALLES stumm (${nachher.length} Stroeme)`); + ok(nachher.length >= 2 && nachher.every((m) => m === false), + `nach dem Druecken hoert er alle (${nachher.length} Stroeme, keiner stumm)`); const knopf2 = await a.se.evaluate(() => { const k = document.getElementById("anruf-hoeren"); - return { text: k.textContent.trim(), an: k.getAttribute("aria-pressed") }; + const b = document.getElementById("anruf-stumm"); + return { an: k.getAttribute("aria-pressed"), balken: b ? !b.hidden : null }; }); - ok(knopf2.an === "false", - `und der Knopf steht auf aus (aria-pressed="${knopf2.an}")`); + ok(knopf2.an === "true", + `und der Knopf steht auf an (aria-pressed="${knopf2.an}")`); + ok(knopf2.balken === false, + "der Hinweis verschwindet in dem Moment, in dem er ueberfluessig wird"); /* NUR BEI IHM. Ein Schalter, der bei den anderen mitwirkt, - waere kein Lautsprecher, sondern eine Fernbedienung. */ + waere kein Lautsprecher, sondern eine Fernbedienung. + Bei ihr ist ALLES stumm -- sie hat ihren Ton nie angemacht. */ const beiB = await stumm(b); - ok(beiB.length >= 2 && beiB.every((m) => m === false), - `bei der rechten Hand aendert sich nichts (${beiB.length} Stroeme, keiner stumm)`); + ok(beiB.length >= 2 && beiB.every((m) => m === true), + `bei der rechten Hand aendert sich nichts (${beiB.length} Stroeme, alle noch stumm)`); } /* Einer legt auf -- fuer die anderen laeuft es weiter. */ @@ -1065,15 +1095,19 @@ melde("=== 8. Zu dritt ==="); `und bei DogFather ist genau ein Strom weniger (${zA.stroeme})`); /* DIE FALLE: Die Runde hat sich geaendert, die Elemente wurden - neu gebaut. Bliebe der Schalter dabei auf der Strecke, wuerde - DogFather ploetzlich wieder mithoeren -- ohne dass irgendwo - etwas anders aussieht. */ + neu gebaut. Bliebe der Schalter dabei auf der Strecke, stuende + der Ton ploetzlich anders -- ohne dass irgendwo etwas anders + aussieht. + + RICHTUNG UMGEDREHT AM 20.09.2026: DogFather hat den Ton oben + eingeschaltet, also muss er JETZT hoeren. Die Falle ist + dieselbe geblieben, nur der erwartete Zustand nicht. */ const nachWechsel = await stumm(a); - ok(nachWechsel.length === 1 && nachWechsel[0] === true, - `und der Lautsprecher bleibt aus, obwohl neu gezeichnet wurde (${nachWechsel.length} Strom)`); + ok(nachWechsel.length === 1 && nachWechsel[0] === false, + `und der eingeschaltete Ton ueberlebt das Neuzeichnen (${nachWechsel.length} Strom)`); const knopfNoch = await a.se.evaluate(() => document.getElementById("anruf-hoeren")?.getAttribute("aria-pressed")); - ok(knopfNoch === "false", "auch der Knopf steht noch richtig"); + ok(knopfNoch === "true", "auch der Knopf steht noch richtig"); await a.se.click("#anruf-auflegen"); await b.se.click("#anruf-auflegen"); diff --git a/workspace/anruf-probe.html b/workspace/anruf-probe.html index 1d9df34a..1a95cc5c 100644 --- a/workspace/anruf-probe.html +++ b/workspace/anruf-probe.html @@ -16,15 +16,15 @@ verdeckt. Gefunden hat es pruef-struktur. Richtig sind `gate.css` (die Farbwerte des Hauses) und `haus.css`. --> - - + + - +