# -*- coding: utf-8 -*- import io p = 'pruef-verwaltung-schmuck.mjs' s = io.open(p, encoding='utf-8').read() # --- Glas-Abschnitt: es traegt jetzt nur noch das Detailblatt Unschaerfe --- alt = ''' console.log("\\n===== 2. TRAEGT ALLES GLAS, WORAUF GELESEN WIRD? ====="); const glas = await seite.evaluate(() => { const pruefen = [".vw-karte", ".vw-filter-knopf", ".vw-wer"]; const raus = {}; for (const w of pruefen) { const el = document.querySelector("#vw-bereich " + w); if (!el) { raus[w] = "(nicht gefunden)"; continue; } const st = getComputedStyle(el); raus[w] = st.backdropFilter || st.webkitBackdropFilter || "keins"; } return raus; }); for (const [w, wert] of Object.entries(glas)) { if (wert === "(nicht gefunden)") continue; pruefe(` ${w} hat Rueckseiten-Unschaerfe`, /blur/.test(wert), wert.slice(0, 34)); }''' neu = ''' console.log("\\n===== 2. BLEIBT DER TEXT VOM BILD GETRENNT? ====="); /* Frueher wurde hier "traegt alles Glas?" geprueft. Das war zu teuer: Eine Rueckseiten-Unschaerfe kostet Rechenzeit PRO ELEMENT, und zwar bei jeder Bewegung neu. Mit sechs Kacheln fiel die Bildrate auf 6,4 Bilder je Sekunde, bei echter Mausbewegung sogar auf 4,5. Entscheidend ist nicht die Unschaerfe, sondern dass der Text nicht auf dem Bild steht. Das leistet auch eine dichte Flaeche -- und die kostet nichts. Genau das wird jetzt geprueft. */ const flaechen = await seite.evaluate(() => { const el = document.querySelector("#vw-probe .vw-karte"); if (!el) return null; const st = getComputedStyle(el); return { hintergrund: st.backgroundImage, unschaerfe: st.backdropFilter }; }); pruefe("die Kachel hat eine eigene Flaeche unter dem Text", flaechen && /gradient/.test(flaechen.hintergrund), flaechen ? "Verlauf vorhanden" : "keine Kachel"); /* Das Detailblatt behaelt die Unschaerfe: Davon gibt es immer nur genau eines, und es liegt gross ueber der Seite -- dort faellt die Rechenzeit einmal an, nicht pro Listeneintrag. */ const blatt = await seite.evaluate(() => { const el = document.querySelector(".vw-detail-blatt"); if (!el) return "(nicht auf der Seite)"; return getComputedStyle(el).backdropFilter || "keins"; }); if (blatt !== "(nicht auf der Seite)") { pruefe("das Detailblatt behaelt seine Unschaerfe", /blur/.test(blatt), blatt.slice(0, 30)); } /* Die Bildrate ist selbst ein Pruefpunkt. Ohne ihn waere jederzeit ein weiterer huebscher Effekt dazugekommen, der die Seite still wieder zaeh macht. */ const bildrate = await seite.evaluate(() => new Promise((fertig) => { let n = 0; const start = performance.now(); const zaehl = () => { n++; if (performance.now() - start < 1200) requestAnimationFrame(zaehl); else fertig(n / ((performance.now() - start) / 1000)); }; requestAnimationFrame(zaehl); })); pruefe("die Seite laeuft in Ruhe fluessig (ueber 45 Bilder/s)", bildrate > 45, bildrate.toFixed(1) + " Bilder/s");''' assert alt in s, 'Glas-Abschnitt nicht gefunden' s = s.replace(alt, neu, 1) # --- Lampen-Abschnitt: sie ist bewusst abgeschaltet --- alt2 = ''' pruefe("Buehne und Lampe stecken in einem isolierten Raum", extra.raumIsoliert === "isolate", extra.raumIsoliert);''' neu2 = ''' pruefe("Buehne und Lampe stecken in einem isolierten Raum", extra.raumIsoliert === "isolate", extra.raumIsoliert); /* Die Vollbild-Zeigerlampe ist ABGESCHALTET -- eine Entscheidung, kein Versehen. Zusammen mit den Glasflaechen kostete sie zwei Drittel der Bildrate: Jede ihrer Bewegungen zwang jede Flaeche darueber zum Neurechnen. Das Licht, das dem Zeiger folgt, gibt es weiterhin auf den Kacheln selbst. Es ist billig, weil es nur die Kachel unter dem Zeiger betrifft statt des ganzen Bildschirms. */ const lampeAus = await seite.evaluate(() => getComputedStyle(document.querySelector(".vw-lampe")).display); pruefe("die Vollbild-Lampe ist bewusst aus", lampeAus === "none", lampeAus);''' assert alt2 in s, 'Lampen-Abschnitt nicht gefunden' s = s.replace(alt2, neu2, 1) # --- Die alten Lampen-Pruefungen entfernen --- for weg in [ ''' pruefe("die Lampe beleuchtet, statt zu ueberdecken", extra.mischung === "soft-light", extra.mischung);''', ''' pruefe("sie folgt dem Zeiger", extra.mx === "1050px" && extra.my === "380px", extra.mx + " / " + extra.my);''', ''' pruefe("und war vor der ersten Zeigerbewegung aus", extra.lampeAn === true);''', ]: if weg in s: s = s.replace(weg, '', 1) io.open(p, 'w', encoding='utf-8', newline='').write(s) print('Test an die neue Aufteilung angepasst')