Test: Diagnose für Alt+F4 im Dialog (wer löst Alt+F4/Beenden aus)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
adminandClaude Opus 5.5 committed 2026-11-02 11:39:11 +01:00
1 parent bd45ffea17
commit 86192c853d
1 file changed
+20 -3
+20 -3
View File
@@ -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>"), "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()