@@ -61,7 +61,6 @@ def setUp(self):
6161 self .widget = ttk .Button (self .root , width = 0 , text = "Text" )
6262 self .widget .pack ()
6363
64-
6564 def test_identify (self ):
6665 self .widget .update ()
6766 self .assertEqual (self .widget .identify (
@@ -74,7 +73,6 @@ def test_identify(self):
7473 self .assertRaises (tkinter .TclError , self .widget .identify , 5 , None )
7574 self .assertRaises (tkinter .TclError , self .widget .identify , 5 , '' )
7675
77-
7876 def test_widget_state (self ):
7977 # XXX not sure about the portability of all these tests
8078 self .assertEqual (self .widget .state (), ())
@@ -287,6 +285,7 @@ class EntryTest(AbstractWidgetTest, unittest.TestCase):
287285 'show' , 'state' , 'style' , 'takefocus' , 'textvariable' ,
288286 'validate' , 'validatecommand' , 'width' , 'xscrollcommand' ,
289287 )
288+ IDENTIFY_AS = 'Entry.field' if sys .platform == 'darwin' else 'textarea'
290289
291290 def setUp (self ):
292291 super ().setUp ()
@@ -319,30 +318,23 @@ def test_configure_validatecommand(self):
319318 widget = self .create ()
320319 self .checkCommandParam (widget , 'validatecommand' )
321320
322-
323321 def test_bbox (self ):
324322 self .assertIsBoundingBox (self .entry .bbox (0 ))
325323 self .assertRaises (tkinter .TclError , self .entry .bbox , 'noindex' )
326324 self .assertRaises (tkinter .TclError , self .entry .bbox , None )
327325
328-
329326 def test_identify (self ):
330327 self .entry .pack ()
331328 self .entry .update ()
332329
333330 # 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 )
339332 self .assertEqual (self .entry .identify (- 1 , - 1 ), "" )
340333
341334 self .assertRaises (tkinter .TclError , self .entry .identify , None , 5 )
342335 self .assertRaises (tkinter .TclError , self .entry .identify , 5 , None )
343336 self .assertRaises (tkinter .TclError , self .entry .identify , 5 , '' )
344337
345-
346338 def test_validation_options (self ):
347339 success = []
348340 test_invalid = lambda : success .append (True )
@@ -370,7 +362,6 @@ def test_validation_options(self):
370362 self .entry ['validatecommand' ] = True
371363 self .assertRaises (tkinter .TclError , self .entry .validate )
372364
373-
374365 def test_validation (self ):
375366 validation = []
376367 def validate (to_insert ):
@@ -388,7 +379,6 @@ def validate(to_insert):
388379 self .assertEqual (validation , [False , True ])
389380 self .assertEqual (self .entry .get (), 'a' )
390381
391-
392382 def test_revalidation (self ):
393383 def validate (content ):
394384 for letter in content :
@@ -424,6 +414,7 @@ class ComboboxTest(EntryTest, unittest.TestCase):
424414 'validate' , 'validatecommand' , 'values' ,
425415 'width' , 'xscrollcommand' ,
426416 )
417+ IDENTIFY_AS = 'Combobox.button' if sys .platform == 'darwin' else 'textarea'
427418
428419 def setUp (self ):
429420 super ().setUp ()
@@ -439,7 +430,8 @@ def test_configure_height(self):
439430 def _show_drop_down_listbox (self ):
440431 width = self .combo .winfo_width ()
441432 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' )
443435 self .combo .event_generate ('<ButtonPress-1>' , x = x , y = y )
444436 self .combo .event_generate ('<ButtonRelease-1>' , x = x , y = y )
445437 self .combo .update_idletasks ()
@@ -461,7 +453,6 @@ def test_virtual_event(self):
461453
462454 self .assertTrue (success )
463455
464-
465456 def test_configure_postcommand (self ):
466457 success = []
467458
@@ -477,7 +468,6 @@ def test_configure_postcommand(self):
477468 self ._show_drop_down_listbox ()
478469 self .assertEqual (len (success ), 1 )
479470
480-
481471 def test_configure_values (self ):
482472 def check_get_current (getval , currval ):
483473 self .assertEqual (self .combo .get (), getval )
@@ -592,7 +582,6 @@ def test_add(self):
592582 other_child .destroy ()
593583 self .assertRaises (tkinter .TclError , self .paned .pane , 0 )
594584
595-
596585 def test_forget (self ):
597586 self .assertRaises (tkinter .TclError , self .paned .forget , None )
598587 self .assertRaises (tkinter .TclError , self .paned .forget , 0 )
@@ -601,7 +590,6 @@ def test_forget(self):
601590 self .paned .forget (0 )
602591 self .assertRaises (tkinter .TclError , self .paned .forget , 0 )
603592
604-
605593 def test_insert (self ):
606594 self .assertRaises (tkinter .TclError , self .paned .insert , None , 0 )
607595 self .assertRaises (tkinter .TclError , self .paned .insert , 0 , None )
@@ -636,7 +624,6 @@ def test_insert(self):
636624 self .assertEqual (self .paned .panes (),
637625 (str (child3 ), str (child2 ), str (child )))
638626
639-
640627 def test_pane (self ):
641628 self .assertRaises (tkinter .TclError , self .paned .pane , 0 )
642629
@@ -653,7 +640,6 @@ def test_pane(self):
653640 self .assertRaises (tkinter .TclError , self .paned .pane , 0 ,
654641 badoption = 'somevalue' )
655642
656-
657643 def test_sashpos (self ):
658644 self .assertRaises (tkinter .TclError , self .paned .sashpos , None )
659645 self .assertRaises (tkinter .TclError , self .paned .sashpos , '' )
@@ -801,7 +787,6 @@ def test_custom_event(self):
801787
802788 self .assertFalse (failure )
803789
804-
805790 def test_get (self ):
806791 if self .wantobjects :
807792 conv = lambda x : x
@@ -819,7 +804,6 @@ def test_get(self):
819804 self .assertRaises (tkinter .TclError , self .scale .get , '' , 0 )
820805 self .assertRaises (tkinter .TclError , self .scale .get , 0 , '' )
821806
822-
823807 def test_set (self ):
824808 if self .wantobjects :
825809 conv = lambda x : x
@@ -952,7 +936,6 @@ def test_tab_identifiers(self):
952936 else :
953937 self .fail ("Tab with text 'a' not found" )
954938
955-
956939 def test_add_and_hidden (self ):
957940 self .assertRaises (tkinter .TclError , self .nb .hide , - 1 )
958941 self .assertRaises (tkinter .TclError , self .nb .hide , 'hi' )
@@ -981,7 +964,6 @@ def test_add_and_hidden(self):
981964 # but the tab next to it (not hidden) is the one selected now
982965 self .assertEqual (self .nb .index ('current' ), curr + 1 )
983966
984-
985967 def test_forget (self ):
986968 self .assertRaises (tkinter .TclError , self .nb .forget , - 1 )
987969 self .assertRaises (tkinter .TclError , self .nb .forget , 'hi' )
@@ -997,7 +979,6 @@ def test_forget(self):
997979 self .assertEqual (self .nb .index (self .child1 ), 1 )
998980 self .assertNotEqual (child1_index , self .nb .index (self .child1 ))
999981
1000-
1001982 def test_index (self ):
1002983 self .assertRaises (tkinter .TclError , self .nb .index , - 1 )
1003984 self .assertRaises (tkinter .TclError , self .nb .index , None )
@@ -1007,7 +988,6 @@ def test_index(self):
1007988 self .assertEqual (self .nb .index (self .child2 ), 1 )
1008989 self .assertEqual (self .nb .index ('end' ), 2 )
1009990
1010-
1011991 def test_insert (self ):
1012992 # moving tabs
1013993 tabs = self .nb .tabs ()
@@ -1040,7 +1020,6 @@ def test_insert(self):
10401020 self .assertRaises (tkinter .TclError , self .nb .insert , None , 0 )
10411021 self .assertRaises (tkinter .TclError , self .nb .insert , None , None )
10421022
1043-
10441023 def test_select (self ):
10451024 self .nb .pack ()
10461025 self .nb .update ()
@@ -1060,7 +1039,6 @@ def test_select(self):
10601039 self .nb .update ()
10611040 self .assertTrue (tab_changed )
10621041
1063-
10641042 def test_tab (self ):
10651043 self .assertRaises (tkinter .TclError , self .nb .tab , - 1 )
10661044 self .assertRaises (tkinter .TclError , self .nb .tab , 'notab' )
@@ -1074,7 +1052,6 @@ def test_tab(self):
10741052 self .assertEqual (self .nb .tab (self .child1 , text = None ), 'abc' )
10751053 self .assertEqual (self .nb .tab (self .child1 , 'text' ), 'abc' )
10761054
1077-
10781055 def test_configure_tabs (self ):
10791056 self .assertEqual (len (self .nb .tabs ()), 2 )
10801057
@@ -1083,14 +1060,14 @@ def test_configure_tabs(self):
10831060
10841061 self .assertEqual (self .nb .tabs (), ())
10851062
1086-
10871063 def test_traversal (self ):
10881064 self .nb .pack ()
10891065 self .nb .update ()
10901066
10911067 self .nb .select (0 )
10921068
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 )
10941071 simulate_mouse_click (self .nb , 5 , 5 )
10951072 self .nb .focus_force ()
10961073 self .nb .event_generate ('<Control-Tab>' )
@@ -1103,15 +1080,24 @@ def test_traversal(self):
11031080 self .assertEqual (self .nb .select (), str (self .child2 ))
11041081
11051082 self .nb .tab (self .child1 , text = 'a' , underline = 0 )
1083+ self .nb .tab (self .child2 , text = 'e' , underline = 0 )
11061084 self .nb .enable_traversal ()
11071085 self .nb .focus_force ()
1108- self .assertEqual (self .nb .identify (5 , 5 ), 'focus' )
1086+ self .assertEqual (self .nb .identify (5 , 5 ), focus_identify_as )
11091087 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
11101090 if sys .platform == 'darwin' :
1111- self .nb .event_generate ('<Option-a>' )
1091+ begin = '<Left>'
1092+ end = '<Right>'
11121093 else :
1113- self .nb .event_generate ('<Alt-a>' )
1094+ begin = '<Alt-a>'
1095+ end = '<Alt-e>'
1096+ self .nb .event_generate (begin )
11141097 self .assertEqual (self .nb .select (), str (self .child1 ))
1098+ self .nb .event_generate (end )
1099+ self .assertEqual (self .nb .select (), str (self .child2 ))
1100+
11151101
11161102@add_standard_options (IntegerSizeTests , StandardTtkOptionsTests )
11171103class SpinboxTest (EntryTest , unittest .TestCase ):
@@ -1122,6 +1108,7 @@ class SpinboxTest(EntryTest, unittest.TestCase):
11221108 'takefocus' , 'textvariable' , 'to' , 'validate' , 'validatecommand' ,
11231109 'values' , 'width' , 'wrap' , 'xscrollcommand' ,
11241110 )
1111+ IDENTIFY_AS = 'Spinbox.field' if sys .platform == 'darwin' else 'textarea'
11251112
11261113 def setUp (self ):
11271114 super ().setUp ()
@@ -1370,7 +1357,6 @@ def test_bbox(self):
13701357 child1 = self .tv .insert (item_id , 'end' )
13711358 self .assertEqual (self .tv .bbox (child1 ), '' )
13721359
1373-
13741360 def test_children (self ):
13751361 # no children yet, should get an empty tuple
13761362 self .assertEqual (self .tv .get_children (), ())
@@ -1398,7 +1384,6 @@ def test_children(self):
13981384 self .tv .set_children ('' )
13991385 self .assertEqual (self .tv .get_children (), ())
14001386
1401-
14021387 def test_column (self ):
14031388 # return a dict with all options/values
14041389 self .assertIsInstance (self .tv .column ('#0' ), dict )
@@ -1424,7 +1409,6 @@ def test_column(self):
14241409 self .assertRaises (tkinter .TclError , self .tv .column , '#0' ,
14251410 ** kw )
14261411
1427-
14281412 def test_delete (self ):
14291413 self .assertRaises (tkinter .TclError , self .tv .delete , '#0' )
14301414
@@ -1448,7 +1432,6 @@ def test_delete(self):
14481432 self .tv .delete (item1 , item2 )
14491433 self .assertFalse (self .tv .get_children ())
14501434
1451-
14521435 def test_detach_reattach (self ):
14531436 item_id = self .tv .insert ('' , 'end' )
14541437 item2 = self .tv .insert (item_id , 'end' )
@@ -1490,7 +1473,6 @@ def test_detach_reattach(self):
14901473 self .assertEqual (self .tv .get_children (), ())
14911474 self .assertEqual (self .tv .get_children (item_id ), ())
14921475
1493-
14941476 def test_exists (self ):
14951477 self .assertEqual (self .tv .exists ('something' ), False )
14961478 self .assertEqual (self .tv .exists ('' ), True )
@@ -1501,7 +1483,6 @@ def test_exists(self):
15011483 # in the tcl interpreter since tk requires an item.
15021484 self .assertRaises (tkinter .TclError , self .tv .exists , None )
15031485
1504-
15051486 def test_focus (self ):
15061487 # nothing is focused right now
15071488 self .assertEqual (self .tv .focus (), '' )
@@ -1516,7 +1497,6 @@ def test_focus(self):
15161497 # try focusing inexistent item
15171498 self .assertRaises (tkinter .TclError , self .tv .focus , 'hi' )
15181499
1519-
15201500 def test_heading (self ):
15211501 # check a dict is returned
15221502 self .assertIsInstance (self .tv .heading ('#0' ), dict )
@@ -1568,7 +1548,6 @@ def simulate_heading_click(x, y):
15681548 #self.tv.heading('#0', command='I dont exist')
15691549 #simulate_heading_click(5, 5)
15701550
1571-
15721551 def test_index (self ):
15731552 # item 'what' doesn't exist
15741553 self .assertRaises (tkinter .TclError , self .tv .index , 'what' )
@@ -1599,7 +1578,6 @@ def test_index(self):
15991578 self .tv .delete (item1 )
16001579 self .assertRaises (tkinter .TclError , self .tv .index , c2 )
16011580
1602-
16031581 def test_insert_item (self ):
16041582 # parent 'none' doesn't exist
16051583 self .assertRaises (tkinter .TclError , self .tv .insert , 'none' , 'end' )
@@ -1676,7 +1654,6 @@ def test_insert_item(self):
16761654 self .assertRaises (tkinter .TclError , self .tv .insert , '' , 'end' , False )
16771655 self .assertRaises (tkinter .TclError , self .tv .insert , '' , 'end' , '' )
16781656
1679-
16801657 def test_selection (self ):
16811658 self .assertRaises (TypeError , self .tv .selection , 'spam' )
16821659 # item 'none' doesn't exist
@@ -1747,7 +1724,6 @@ def test_selection(self):
17471724 self .tv .selection_toggle ((c1 , c3 ))
17481725 self .assertEqual (self .tv .selection (), (c3 , item2 ))
17491726
1750-
17511727 def test_set (self ):
17521728 self .tv ['columns' ] = ['A' , 'B' ]
17531729 item = self .tv .insert ('' , 'end' , values = ['a' , 'b' ])
@@ -1780,7 +1756,6 @@ def test_set(self):
17801756 # inexistent item
17811757 self .assertRaises (tkinter .TclError , self .tv .set , 'notme' )
17821758
1783-
17841759 def test_tag_bind (self ):
17851760 events = []
17861761 item1 = self .tv .insert ('' , 'end' , tags = ['call' ])
@@ -1813,7 +1788,6 @@ def test_tag_bind(self):
18131788 for evt in zip (events [::2 ], events [1 ::2 ]):
18141789 self .assertEqual (evt , (1 , 2 ))
18151790
1816-
18171791 def test_tag_configure (self ):
18181792 # Just testing parameter passing for now
18191793 self .assertRaises (TypeError , self .tv .tag_configure )
0 commit comments