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()