2018-06-18 16:47:59 +08:00
|
|
|
"Test mainmenu, coverage 100%."
|
|
|
|
# Reported as 88%; mocking turtledemo absence would have no point.
|
|
|
|
|
|
|
|
from idlelib import mainmenu
|
2021-01-29 07:13:22 +08:00
|
|
|
import re
|
2018-06-18 16:47:59 +08:00
|
|
|
import unittest
|
|
|
|
|
|
|
|
|
|
|
|
class MainMenuTest(unittest.TestCase):
|
|
|
|
|
|
|
|
def test_menudefs(self):
|
|
|
|
actual = [item[0] for item in mainmenu.menudefs]
|
|
|
|
expect = ['file', 'edit', 'format', 'run', 'shell',
|
2018-06-21 10:49:55 +08:00
|
|
|
'debug', 'options', 'window', 'help']
|
2018-06-18 16:47:59 +08:00
|
|
|
self.assertEqual(actual, expect)
|
|
|
|
|
|
|
|
def test_default_keydefs(self):
|
|
|
|
self.assertGreaterEqual(len(mainmenu.default_keydefs), 50)
|
|
|
|
|
2021-01-29 07:13:22 +08:00
|
|
|
def test_tcl_indexes(self):
|
|
|
|
# Test tcl patterns used to find menuitem to alter.
|
|
|
|
# On failure, change pattern here and in function(s).
|
|
|
|
# Patterns here have '.*' for re instead of '*' for tcl.
|
|
|
|
for menu, pattern in (
|
|
|
|
('debug', '.*tack.*iewer'), # PyShell.debug_menu_postcommand
|
|
|
|
('options', '.*ode.*ontext'), # EW.__init__, CodeContext.toggle...
|
|
|
|
('options', '.*ine.*umbers'), # EW.__init__, EW.toggle...event.
|
|
|
|
):
|
|
|
|
with self.subTest(menu=menu, pattern=pattern):
|
|
|
|
for menutup in mainmenu.menudefs:
|
|
|
|
if menutup[0] == menu:
|
|
|
|
break
|
|
|
|
else:
|
|
|
|
self.assertTrue(0, f"{menu} not in menudefs")
|
|
|
|
self.assertTrue(any(re.search(pattern, menuitem[0])
|
|
|
|
for menuitem in menutup[1]
|
|
|
|
if menuitem is not None), # Separator.
|
|
|
|
f"{pattern} not in {menu}")
|
|
|
|
|
2018-06-18 16:47:59 +08:00
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
unittest.main(verbosity=2)
|