1 "Test mainmenu, coverage 100%."
2 # Reported as 88%; mocking turtledemo absence would have no point.
3
4 from idlelib import mainmenu
5 import re
6 import unittest
7
8
9 class ESC[4;38;5;81mMainMenuTest(ESC[4;38;5;149munittestESC[4;38;5;149m.ESC[4;38;5;149mTestCase):
10
11 def test_menudefs(self):
12 actual = [item[0] for item in mainmenu.menudefs]
13 expect = ['file', 'edit', 'format', 'run', 'shell',
14 'debug', 'options', 'window', 'help']
15 self.assertEqual(actual, expect)
16
17 def test_default_keydefs(self):
18 self.assertGreaterEqual(len(mainmenu.default_keydefs), 50)
19
20 def test_tcl_indexes(self):
21 # Test tcl patterns used to find menuitem to alter.
22 # On failure, change pattern here and in function(s).
23 # Patterns here have '.*' for re instead of '*' for tcl.
24 for menu, pattern in (
25 ('debug', '.*tack.*iewer'), # PyShell.debug_menu_postcommand
26 ('options', '.*ode.*ontext'), # EW.__init__, CodeContext.toggle...
27 ('options', '.*ine.*umbers'), # EW.__init__, EW.toggle...event.
28 ):
29 with self.subTest(menu=menu, pattern=pattern):
30 for menutup in mainmenu.menudefs:
31 if menutup[0] == menu:
32 break
33 else:
34 self.assertTrue(0, f"{menu} not in menudefs")
35 self.assertTrue(any(re.search(pattern, menuitem[0])
36 for menuitem in menutup[1]
37 if menuitem is not None), # Separator.
38 f"{pattern} not in {menu}")
39
40
41 if __name__ == '__main__':
42 unittest.main(verbosity=2)