From 86192c853dbcf0de89d2885842e2c7f0ea9aa815 Mon Sep 17 00:00:00 2001 From: Handy-Insel Date: Mon, 2 Nov 2026 11:39:11 +0100 Subject: [PATCH] =?UTF-8?q?Test:=20Diagnose=20f=C3=BCr=20Alt+F4=20im=20Dia?= =?UTF-8?q?log=20(wer=20l=C3=B6st=20Alt+F4/Beenden=20aus)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- tests/test_gui.py | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/tests/test_gui.py b/tests/test_gui.py index 97a9b57..2c760fc 100644 --- a/tests/test_gui.py +++ b/tests/test_gui.py @@ -231,17 +231,34 @@ def test_alt_f4_im_assistent_fragt_und_schliesst_nur_assistent(home): lauf.pruefen() -def test_alt_f4_im_dialog_schliesst_nur_den_dialog(lauf_mit_daten): +def test_alt_f4_im_dialog_schliesst_nur_den_dialog(lauf_mit_daten, monkeypatch): + from provtool.gui import rahmen from provtool.gui.dialogs import InfoDialog lauf = lauf_mit_daten + protokoll: list[str] = [] # Diagnose: wer hat Alt+F4 bzw. Beenden ausgelöst? + alt_f4, beenden = rahmen.Hauptrahmen.alt_f4, type(lauf.app).beenden + + def alt_f4_spion(self, widget): + protokoll.append(f"alt_f4(widget={widget}, sperre={self.root.grab_current()}, " + f"popup={self._offenes_popup()}, fokus={self.root.focus_get()})\n" + + "".join(traceback.format_stack(limit=8))) + return alt_f4(self, widget) + + def beenden_spion(self): + protokoll.append("beenden()\n" + "".join(traceback.format_stack(limit=10))) + return beenden(self) + monkeypatch.setattr(rahmen.Hauptrahmen, "alt_f4", alt_f4_spion) + monkeypatch.setattr(type(lauf.app), "beenden", beenden_spion) + lauf.ablauf([ (IMMER, lambda: InfoDialog(lauf.root).zeigen(), "Info öffnen"), (lambda: lauf.dialog(InfoDialog) is not None, lambda: lauf.dialog(InfoDialog).event_generate(""), "Alt+F4 im Dialog"), (lambda: lauf.dialog(InfoDialog) is None, lambda: None, "Dialog geschlossen"), ], sekunden=8) - assert lauf.lebt, "Alt+F4 im Dialog darf nicht das ganze Programm beenden" - assert not lauf.uebrig, lauf.uebrig + diagnose = "\n---\n".join(protokoll) + "\nFehler:\n" + "\n".join(lauf.fehler) + assert lauf.lebt, "Alt+F4 im Dialog darf nicht das ganze Programm beenden\n" + diagnose + assert not lauf.uebrig, f"{lauf.uebrig}\n{diagnose}" lauf.pruefen()