https://github.com/python/cpython/commit/7d619c2fea131722d0bfdad150c081c44cc0abd7
commit: 7d619c2fea131722d0bfdad150c081c44cc0abd7
branch: main
author: Serhiy Storchaka <[email protected]>
committer: serhiy-storchaka <[email protected]>
date: 2026-07-05T13:51:34+03:00
summary:

gh-69134: Wait until mapped in SimpleDialog keyboard tests (GH-152690)

The SimpleDialog keyboard tests generate key events after focus_force(),
which on Windows are dropped until the toplevel is mapped, so they could
fail intermittently (seen on the Windows10 buildbot as
test_return_no_default).  Wait until the window is mapped in each of
these tests, as GH-152599 did for the other keyboard tests.

Co-authored-by: Claude Opus 4.8 <[email protected]>

files:
M Lib/test/test_tkinter/test_simpledialog.py

diff --git a/Lib/test/test_tkinter/test_simpledialog.py 
b/Lib/test/test_tkinter/test_simpledialog.py
index 5c739d9ad6e6422..33a0173ba67adb9 100644
--- a/Lib/test/test_tkinter/test_simpledialog.py
+++ b/Lib/test/test_tkinter/test_simpledialog.py
@@ -44,6 +44,7 @@ def test_use_ttk(self):
         self.assertEqual(str(d.root.cget('background')),
                          ttk.Style(d.root).lookup('.', 'background'))
         # The bindings work with the themed buttons too.
+        self.require_mapped(d.root)
         d._buttons[0].focus_force()
         d.root.update()
         d.root.event_generate('<Return>')
@@ -139,6 +140,7 @@ def test_alt_key(self):
         # Alt + an underlined character (the "underline" button option) invokes
         # the matching button (cf. tk::AmpWidget in tk::MessageBox).
         d = self.create(buttons=['Yes', {'text': 'No', 'underline': 0}])
+        self.require_mapped(d.root)
         d._buttons[0].focus_force()
         d.root.update()
         d.root.event_generate('<Alt-n>')  # "No" -> underline 0 -> "N"
@@ -149,6 +151,7 @@ def test_return_invokes_focused_button(self):
         # <Return> invokes the button with the focus, even if it is not the
         # default and the focus was not moved by keyboard traversal.
         d = self.create(buttons=['Yes', 'No'])  # default 0
+        self.require_mapped(d.root)
         d._buttons[1].focus_force()
         d.root.update()
         d.root.event_generate('<Return>')
@@ -158,6 +161,7 @@ def test_return_invokes_focused_button(self):
     def test_focus_next_then_return(self):
         # <Tab> moves the focus to the next button; <Return> invokes it.
         d = self.create(buttons=['Yes', 'No'])
+        self.require_mapped(d.root)
         d._buttons[0].focus_force()
         d.root.update()
         d._buttons[0].event_generate('<Tab>')
@@ -169,6 +173,7 @@ def test_focus_next_then_return(self):
     def test_focus_prev_then_return(self):
         # <Shift-Tab> moves the focus to the previous button.
         d = self.create(buttons=['Yes', 'No'])
+        self.require_mapped(d.root)
         d._buttons[1].focus_force()
         d.root.update()
         d._buttons[1].event_generate('<Shift-Tab>')
@@ -180,6 +185,7 @@ def test_focus_prev_then_return(self):
     def test_return_activates_default(self):
         # <Return> with the focus off the buttons invokes the default button.
         d = self.create()  # default 0
+        self.require_mapped(d.root)
         d.root.focus_force()  # the dialog, not a button, has the focus
         d.root.update()
         d.root.event_generate('<Return>')
@@ -190,6 +196,7 @@ def test_return_no_default(self):
         # With no default button, <Return> off the buttons rings the bell and
         # leaves the dialog open instead of activating a button.
         d = self.create(default=None)
+        self.require_mapped(d.root)
         d.root.focus_force()  # the dialog, not a button, has the focus
         d.root.update()
         bells = []

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]

Reply via email to