@@ -61,7 +61,6 @@ def setUp(self):
61
61
self .widget = ttk .Button (self .root , width = 0 , text = "Text" )
62
62
self .widget .pack ()
63
63
64
-
65
64
def test_identify (self ):
66
65
self .widget .update ()
67
66
self .assertEqual (self .widget .identify (
@@ -74,7 +73,6 @@ def test_identify(self):
74
73
self .assertRaises (tkinter .TclError , self .widget .identify , 5 , None )
75
74
self .assertRaises (tkinter .TclError , self .widget .identify , 5 , '' )
76
75
77
-
78
76
def test_widget_state (self ):
79
77
# XXX not sure about the portability of all these tests
80
78
self .assertEqual (self .widget .state (), ())
@@ -287,6 +285,7 @@ class EntryTest(AbstractWidgetTest, unittest.TestCase):
287
285
'show' , 'state' , 'style' , 'takefocus' , 'textvariable' ,
288
286
'validate' , 'validatecommand' , 'width' , 'xscrollcommand' ,
289
287
)
288
+ IDENTIFY_AS = 'Entry.field' if sys .platform == 'darwin' else 'textarea'
290
289
291
290
def setUp (self ):
292
291
super ().setUp ()
@@ -319,30 +318,23 @@ def test_configure_validatecommand(self):
319
318
widget = self .create ()
320
319
self .checkCommandParam (widget , 'validatecommand' )
321
320
322
-
323
321
def test_bbox (self ):
324
322
self .assertIsBoundingBox (self .entry .bbox (0 ))
325
323
self .assertRaises (tkinter .TclError , self .entry .bbox , 'noindex' )
326
324
self .assertRaises (tkinter .TclError , self .entry .bbox , None )
327
325
328
-
329
326
def test_identify (self ):
330
327
self .entry .pack ()
331
328
self .entry .update ()
332
329
333
330
# bpo-27313: macOS Cocoa widget differs from X, allow either
334
- if sys .platform == 'darwin' :
335
- self .assertIn (self .entry .identify (5 , 5 ),
336
- ("textarea" , "Combobox.button" ) )
337
- else :
338
- self .assertEqual (self .entry .identify (5 , 5 ), "textarea" )
331
+ self .assertEqual (self .entry .identify (5 , 5 ), self .IDENTIFY_AS )
339
332
self .assertEqual (self .entry .identify (- 1 , - 1 ), "" )
340
333
341
334
self .assertRaises (tkinter .TclError , self .entry .identify , None , 5 )
342
335
self .assertRaises (tkinter .TclError , self .entry .identify , 5 , None )
343
336
self .assertRaises (tkinter .TclError , self .entry .identify , 5 , '' )
344
337
345
-
346
338
def test_validation_options (self ):
347
339
success = []
348
340
test_invalid = lambda : success .append (True )
@@ -370,7 +362,6 @@ def test_validation_options(self):
370
362
self .entry ['validatecommand' ] = True
371
363
self .assertRaises (tkinter .TclError , self .entry .validate )
372
364
373
-
374
365
def test_validation (self ):
375
366
validation = []
376
367
def validate (to_insert ):
@@ -388,7 +379,6 @@ def validate(to_insert):
388
379
self .assertEqual (validation , [False , True ])
389
380
self .assertEqual (self .entry .get (), 'a' )
390
381
391
-
392
382
def test_revalidation (self ):
393
383
def validate (content ):
394
384
for letter in content :
@@ -424,6 +414,7 @@ class ComboboxTest(EntryTest, unittest.TestCase):
424
414
'validate' , 'validatecommand' , 'values' ,
425
415
'width' , 'xscrollcommand' ,
426
416
)
417
+ IDENTIFY_AS = 'Combobox.button' if sys .platform == 'darwin' else 'textarea'
427
418
428
419
def setUp (self ):
429
420
super ().setUp ()
@@ -439,7 +430,8 @@ def test_configure_height(self):
439
430
def _show_drop_down_listbox (self ):
440
431
width = self .combo .winfo_width ()
441
432
x , y = width - 5 , 5
442
- self .assertRegex (self .combo .identify (x , y ), r'.*downarrow\Z' )
433
+ if sys .platform != 'darwin' : # there's no down arrow on macOS
434
+ self .assertRegex (self .combo .identify (x , y ), r'.*downarrow\Z' )
443
435
self .combo .event_generate ('<ButtonPress-1>' , x = x , y = y )
444
436
self .combo .event_generate ('<ButtonRelease-1>' , x = x , y = y )
445
437
self .combo .update_idletasks ()
@@ -461,7 +453,6 @@ def test_virtual_event(self):
461
453
462
454
self .assertTrue (success )
463
455
464
-
465
456
def test_configure_postcommand (self ):
466
457
success = []
467
458
@@ -477,7 +468,6 @@ def test_configure_postcommand(self):
477
468
self ._show_drop_down_listbox ()
478
469
self .assertEqual (len (success ), 1 )
479
470
480
-
481
471
def test_configure_values (self ):
482
472
def check_get_current (getval , currval ):
483
473
self .assertEqual (self .combo .get (), getval )
@@ -592,7 +582,6 @@ def test_add(self):
592
582
other_child .destroy ()
593
583
self .assertRaises (tkinter .TclError , self .paned .pane , 0 )
594
584
595
-
596
585
def test_forget (self ):
597
586
self .assertRaises (tkinter .TclError , self .paned .forget , None )
598
587
self .assertRaises (tkinter .TclError , self .paned .forget , 0 )
@@ -601,7 +590,6 @@ def test_forget(self):
601
590
self .paned .forget (0 )
602
591
self .assertRaises (tkinter .TclError , self .paned .forget , 0 )
603
592
604
-
605
593
def test_insert (self ):
606
594
self .assertRaises (tkinter .TclError , self .paned .insert , None , 0 )
607
595
self .assertRaises (tkinter .TclError , self .paned .insert , 0 , None )
@@ -636,7 +624,6 @@ def test_insert(self):
636
624
self .assertEqual (self .paned .panes (),
637
625
(str (child3 ), str (child2 ), str (child )))
638
626
639
-
640
627
def test_pane (self ):
641
628
self .assertRaises (tkinter .TclError , self .paned .pane , 0 )
642
629
@@ -653,7 +640,6 @@ def test_pane(self):
653
640
self .assertRaises (tkinter .TclError , self .paned .pane , 0 ,
654
641
badoption = 'somevalue' )
655
642
656
-
657
643
def test_sashpos (self ):
658
644
self .assertRaises (tkinter .TclError , self .paned .sashpos , None )
659
645
self .assertRaises (tkinter .TclError , self .paned .sashpos , '' )
@@ -801,7 +787,6 @@ def test_custom_event(self):
801
787
802
788
self .assertFalse (failure )
803
789
804
-
805
790
def test_get (self ):
806
791
if self .wantobjects :
807
792
conv = lambda x : x
@@ -819,7 +804,6 @@ def test_get(self):
819
804
self .assertRaises (tkinter .TclError , self .scale .get , '' , 0 )
820
805
self .assertRaises (tkinter .TclError , self .scale .get , 0 , '' )
821
806
822
-
823
807
def test_set (self ):
824
808
if self .wantobjects :
825
809
conv = lambda x : x
@@ -952,7 +936,6 @@ def test_tab_identifiers(self):
952
936
else :
953
937
self .fail ("Tab with text 'a' not found" )
954
938
955
-
956
939
def test_add_and_hidden (self ):
957
940
self .assertRaises (tkinter .TclError , self .nb .hide , - 1 )
958
941
self .assertRaises (tkinter .TclError , self .nb .hide , 'hi' )
@@ -981,7 +964,6 @@ def test_add_and_hidden(self):
981
964
# but the tab next to it (not hidden) is the one selected now
982
965
self .assertEqual (self .nb .index ('current' ), curr + 1 )
983
966
984
-
985
967
def test_forget (self ):
986
968
self .assertRaises (tkinter .TclError , self .nb .forget , - 1 )
987
969
self .assertRaises (tkinter .TclError , self .nb .forget , 'hi' )
@@ -997,7 +979,6 @@ def test_forget(self):
997
979
self .assertEqual (self .nb .index (self .child1 ), 1 )
998
980
self .assertNotEqual (child1_index , self .nb .index (self .child1 ))
999
981
1000
-
1001
982
def test_index (self ):
1002
983
self .assertRaises (tkinter .TclError , self .nb .index , - 1 )
1003
984
self .assertRaises (tkinter .TclError , self .nb .index , None )
@@ -1007,7 +988,6 @@ def test_index(self):
1007
988
self .assertEqual (self .nb .index (self .child2 ), 1 )
1008
989
self .assertEqual (self .nb .index ('end' ), 2 )
1009
990
1010
-
1011
991
def test_insert (self ):
1012
992
# moving tabs
1013
993
tabs = self .nb .tabs ()
@@ -1040,7 +1020,6 @@ def test_insert(self):
1040
1020
self .assertRaises (tkinter .TclError , self .nb .insert , None , 0 )
1041
1021
self .assertRaises (tkinter .TclError , self .nb .insert , None , None )
1042
1022
1043
-
1044
1023
def test_select (self ):
1045
1024
self .nb .pack ()
1046
1025
self .nb .update ()
@@ -1060,7 +1039,6 @@ def test_select(self):
1060
1039
self .nb .update ()
1061
1040
self .assertTrue (tab_changed )
1062
1041
1063
-
1064
1042
def test_tab (self ):
1065
1043
self .assertRaises (tkinter .TclError , self .nb .tab , - 1 )
1066
1044
self .assertRaises (tkinter .TclError , self .nb .tab , 'notab' )
@@ -1074,7 +1052,6 @@ def test_tab(self):
1074
1052
self .assertEqual (self .nb .tab (self .child1 , text = None ), 'abc' )
1075
1053
self .assertEqual (self .nb .tab (self .child1 , 'text' ), 'abc' )
1076
1054
1077
-
1078
1055
def test_configure_tabs (self ):
1079
1056
self .assertEqual (len (self .nb .tabs ()), 2 )
1080
1057
@@ -1083,14 +1060,14 @@ def test_configure_tabs(self):
1083
1060
1084
1061
self .assertEqual (self .nb .tabs (), ())
1085
1062
1086
-
1087
1063
def test_traversal (self ):
1088
1064
self .nb .pack ()
1089
1065
self .nb .update ()
1090
1066
1091
1067
self .nb .select (0 )
1092
1068
1093
- self .assertEqual (self .nb .identify (5 , 5 ), 'focus' )
1069
+ focus_identify_as = 'focus' if sys .platform != 'darwin' else ''
1070
+ self .assertEqual (self .nb .identify (5 , 5 ), focus_identify_as )
1094
1071
simulate_mouse_click (self .nb , 5 , 5 )
1095
1072
self .nb .focus_force ()
1096
1073
self .nb .event_generate ('<Control-Tab>' )
@@ -1103,15 +1080,24 @@ def test_traversal(self):
1103
1080
self .assertEqual (self .nb .select (), str (self .child2 ))
1104
1081
1105
1082
self .nb .tab (self .child1 , text = 'a' , underline = 0 )
1083
+ self .nb .tab (self .child2 , text = 'e' , underline = 0 )
1106
1084
self .nb .enable_traversal ()
1107
1085
self .nb .focus_force ()
1108
- self .assertEqual (self .nb .identify (5 , 5 ), 'focus' )
1086
+ self .assertEqual (self .nb .identify (5 , 5 ), focus_identify_as )
1109
1087
simulate_mouse_click (self .nb , 5 , 5 )
1088
+ # on macOS Emacs-style keyboard shortcuts are region-dependent;
1089
+ # let's use the regular arrow keys instead
1110
1090
if sys .platform == 'darwin' :
1111
- self .nb .event_generate ('<Option-a>' )
1091
+ begin = '<Left>'
1092
+ end = '<Right>'
1112
1093
else :
1113
- self .nb .event_generate ('<Alt-a>' )
1094
+ begin = '<Alt-a>'
1095
+ end = '<Alt-e>'
1096
+ self .nb .event_generate (begin )
1114
1097
self .assertEqual (self .nb .select (), str (self .child1 ))
1098
+ self .nb .event_generate (end )
1099
+ self .assertEqual (self .nb .select (), str (self .child2 ))
1100
+
1115
1101
1116
1102
@add_standard_options (IntegerSizeTests , StandardTtkOptionsTests )
1117
1103
class SpinboxTest (EntryTest , unittest .TestCase ):
@@ -1122,6 +1108,7 @@ class SpinboxTest(EntryTest, unittest.TestCase):
1122
1108
'takefocus' , 'textvariable' , 'to' , 'validate' , 'validatecommand' ,
1123
1109
'values' , 'width' , 'wrap' , 'xscrollcommand' ,
1124
1110
)
1111
+ IDENTIFY_AS = 'Spinbox.field' if sys .platform == 'darwin' else 'textarea'
1125
1112
1126
1113
def setUp (self ):
1127
1114
super ().setUp ()
@@ -1370,7 +1357,6 @@ def test_bbox(self):
1370
1357
child1 = self .tv .insert (item_id , 'end' )
1371
1358
self .assertEqual (self .tv .bbox (child1 ), '' )
1372
1359
1373
-
1374
1360
def test_children (self ):
1375
1361
# no children yet, should get an empty tuple
1376
1362
self .assertEqual (self .tv .get_children (), ())
@@ -1398,7 +1384,6 @@ def test_children(self):
1398
1384
self .tv .set_children ('' )
1399
1385
self .assertEqual (self .tv .get_children (), ())
1400
1386
1401
-
1402
1387
def test_column (self ):
1403
1388
# return a dict with all options/values
1404
1389
self .assertIsInstance (self .tv .column ('#0' ), dict )
@@ -1424,7 +1409,6 @@ def test_column(self):
1424
1409
self .assertRaises (tkinter .TclError , self .tv .column , '#0' ,
1425
1410
** kw )
1426
1411
1427
-
1428
1412
def test_delete (self ):
1429
1413
self .assertRaises (tkinter .TclError , self .tv .delete , '#0' )
1430
1414
@@ -1448,7 +1432,6 @@ def test_delete(self):
1448
1432
self .tv .delete (item1 , item2 )
1449
1433
self .assertFalse (self .tv .get_children ())
1450
1434
1451
-
1452
1435
def test_detach_reattach (self ):
1453
1436
item_id = self .tv .insert ('' , 'end' )
1454
1437
item2 = self .tv .insert (item_id , 'end' )
@@ -1490,7 +1473,6 @@ def test_detach_reattach(self):
1490
1473
self .assertEqual (self .tv .get_children (), ())
1491
1474
self .assertEqual (self .tv .get_children (item_id ), ())
1492
1475
1493
-
1494
1476
def test_exists (self ):
1495
1477
self .assertEqual (self .tv .exists ('something' ), False )
1496
1478
self .assertEqual (self .tv .exists ('' ), True )
@@ -1501,7 +1483,6 @@ def test_exists(self):
1501
1483
# in the tcl interpreter since tk requires an item.
1502
1484
self .assertRaises (tkinter .TclError , self .tv .exists , None )
1503
1485
1504
-
1505
1486
def test_focus (self ):
1506
1487
# nothing is focused right now
1507
1488
self .assertEqual (self .tv .focus (), '' )
@@ -1516,7 +1497,6 @@ def test_focus(self):
1516
1497
# try focusing inexistent item
1517
1498
self .assertRaises (tkinter .TclError , self .tv .focus , 'hi' )
1518
1499
1519
-
1520
1500
def test_heading (self ):
1521
1501
# check a dict is returned
1522
1502
self .assertIsInstance (self .tv .heading ('#0' ), dict )
@@ -1568,7 +1548,6 @@ def simulate_heading_click(x, y):
1568
1548
#self.tv.heading('#0', command='I dont exist')
1569
1549
#simulate_heading_click(5, 5)
1570
1550
1571
-
1572
1551
def test_index (self ):
1573
1552
# item 'what' doesn't exist
1574
1553
self .assertRaises (tkinter .TclError , self .tv .index , 'what' )
@@ -1599,7 +1578,6 @@ def test_index(self):
1599
1578
self .tv .delete (item1 )
1600
1579
self .assertRaises (tkinter .TclError , self .tv .index , c2 )
1601
1580
1602
-
1603
1581
def test_insert_item (self ):
1604
1582
# parent 'none' doesn't exist
1605
1583
self .assertRaises (tkinter .TclError , self .tv .insert , 'none' , 'end' )
@@ -1676,7 +1654,6 @@ def test_insert_item(self):
1676
1654
self .assertRaises (tkinter .TclError , self .tv .insert , '' , 'end' , False )
1677
1655
self .assertRaises (tkinter .TclError , self .tv .insert , '' , 'end' , '' )
1678
1656
1679
-
1680
1657
def test_selection (self ):
1681
1658
self .assertRaises (TypeError , self .tv .selection , 'spam' )
1682
1659
# item 'none' doesn't exist
@@ -1747,7 +1724,6 @@ def test_selection(self):
1747
1724
self .tv .selection_toggle ((c1 , c3 ))
1748
1725
self .assertEqual (self .tv .selection (), (c3 , item2 ))
1749
1726
1750
-
1751
1727
def test_set (self ):
1752
1728
self .tv ['columns' ] = ['A' , 'B' ]
1753
1729
item = self .tv .insert ('' , 'end' , values = ['a' , 'b' ])
@@ -1780,7 +1756,6 @@ def test_set(self):
1780
1756
# inexistent item
1781
1757
self .assertRaises (tkinter .TclError , self .tv .set , 'notme' )
1782
1758
1783
-
1784
1759
def test_tag_bind (self ):
1785
1760
events = []
1786
1761
item1 = self .tv .insert ('' , 'end' , tags = ['call' ])
@@ -1813,7 +1788,6 @@ def test_tag_bind(self):
1813
1788
for evt in zip (events [::2 ], events [1 ::2 ]):
1814
1789
self .assertEqual (evt , (1 , 2 ))
1815
1790
1816
-
1817
1791
def test_tag_configure (self ):
1818
1792
# Just testing parameter passing for now
1819
1793
self .assertRaises (TypeError , self .tv .tag_configure )
0 commit comments