Skip to content

Commit c6aad27

Browse files
miss-islingtonserhiy-storchakaclaude
authored
[3.13] gh-153380: Adapt ttk tests to Tk 9.1 changes (GH-153381) (GH-153388)
- selectmode: new 'single' and 'multiple' modes - set(): includes the tree column '#0' - insert()/selection(): item ids keep the passed value's type - heading_callback: avoid a double click on the second click - theme_create_image: don't assert the exact (now scaled) width (cherry picked from commit d6855c8) Co-authored-by: Serhiy Storchaka <storchaka@gmail.com> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
1 parent 13c5575 commit c6aad27

2 files changed

Lines changed: 29 additions & 9 deletions

File tree

Lib/test/test_ttk/test_style.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -419,7 +419,8 @@ def test_theme_create_image(self):
419419

420420
b = ttk.Label(self.root, style='TestWidget')
421421
b.pack(expand=True, fill='both')
422-
self.assertEqual(b.winfo_reqwidth(), 134)
422+
# The exact width varies with the Tk version and display scaling.
423+
self.assertGreater(b.winfo_reqwidth(), 130)
423424
self.assertEqual(b.winfo_reqheight(), 100)
424425

425426
style.theme_use(curr_theme)

Lib/test/test_ttk/test_widgets.py

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1474,8 +1474,13 @@ def test_configure_height(self):
14741474

14751475
def test_configure_selectmode(self):
14761476
widget = self.create()
1477-
self.checkEnumParam(widget, 'selectmode',
1478-
'none', 'browse', 'extended')
1477+
if tk_version >= (9, 1):
1478+
self.checkEnumParam(widget, 'selectmode',
1479+
'none', 'single', 'browse', 'extended',
1480+
'multiple')
1481+
else:
1482+
self.checkEnumParam(widget, 'selectmode',
1483+
'none', 'browse', 'extended')
14791484

14801485
@requires_tk(8, 7)
14811486
def test_configure_selecttype(self):
@@ -1758,6 +1763,9 @@ def simulate_heading_click(x, y):
17581763
commands = self.tv.master._tclCommands
17591764
self.tv.heading('#0', command=str(self.tv.heading('#0', command=None)))
17601765
self.assertEqual(commands, self.tv.master._tclCommands)
1766+
# Click elsewhere first, so the second heading click is not reported
1767+
# as a double click (which does not invoke the command).
1768+
simulate_mouse_click(self.tv, 5, 50)
17611769
simulate_heading_click(5, 5)
17621770
if not success:
17631771
self.fail("The command associated to the treeview heading wasn't "
@@ -1866,10 +1874,11 @@ def test_insert_item(self):
18661874
value)
18671875

18681876
# test for values which are not None
1877+
keep_type = self.wantobjects and tk_version >= (9, 1)
18691878
itemid = self.tv.insert('', 'end', 0)
1870-
self.assertEqual(itemid, '0')
1879+
self.assertEqual(itemid, 0 if keep_type else '0')
18711880
itemid = self.tv.insert('', 'end', 0.0)
1872-
self.assertEqual(itemid, '0.0')
1881+
self.assertEqual(itemid, 0.0 if keep_type else '0.0')
18731882
# this is because False resolves to 0 and element with 0 iid is already present
18741883
self.assertRaises(tkinter.TclError, self.tv.insert, '', 'end', False)
18751884
self.assertRaises(tkinter.TclError, self.tv.insert, '', 'end', '')
@@ -1929,7 +1938,10 @@ def test_selection(self):
19291938

19301939
self.tv.insert('', 'end', id=b'bytes\xe2\x82\xac')
19311940
self.tv.selection_set(b'bytes\xe2\x82\xac')
1932-
self.assertEqual(self.tv.selection(), ('bytes\xe2\x82\xac',))
1941+
self.assertEqual(self.tv.selection(),
1942+
(b'bytes\xe2\x82\xac',)
1943+
if self.wantobjects and tk_version >= (9, 1)
1944+
else ('bytes\xe2\x82\xac',))
19331945

19341946
self.tv.selection_set()
19351947
self.assertEqual(self.tv.selection(), ())
@@ -1978,14 +1990,19 @@ def test_virtual_events(self):
19781990
def test_set(self):
19791991
self.tv['columns'] = ['A', 'B']
19801992
item = self.tv.insert('', 'end', values=['a', 'b'])
1981-
self.assertEqual(self.tv.set(item), {'A': 'a', 'B': 'b'})
1993+
values = self.tv.set(item)
1994+
if tk_version >= (9, 1):
1995+
self.assertEqual(values.pop('#0'), '')
1996+
self.assertEqual(values, {'A': 'a', 'B': 'b'})
19821997

19831998
self.tv.set(item, 'B', 'a')
19841999
self.assertEqual(self.tv.item(item, values=None),
19852000
('a', 'a') if self.wantobjects else 'a a')
19862001

19872002
self.tv['columns'] = ['B']
1988-
self.assertEqual(self.tv.set(item), {'B': 'a'})
2003+
values = self.tv.set(item)
2004+
values.pop('#0', None)
2005+
self.assertEqual(values, {'B': 'a'})
19892006

19902007
self.tv.set(item, 'B', 'b')
19912008
self.assertEqual(self.tv.set(item, column='B'), 'b')
@@ -1997,7 +2014,9 @@ def test_set(self):
19972014
123 if self.wantobjects else '123')
19982015
self.assertEqual(self.tv.item(item, values=None),
19992016
(123, 'a') if self.wantobjects else '123 a')
2000-
self.assertEqual(self.tv.set(item),
2017+
values = self.tv.set(item)
2018+
values.pop('#0', None)
2019+
self.assertEqual(values,
20012020
{'B': 123} if self.wantobjects else {'B': '123'})
20022021

20032022
# inexistent column

0 commit comments

Comments
 (0)