reported as 88 mocking turtledemo absence would have no point test tcl patterns used to find menuitem to alter on failure change pattern here and in functions patterns here have for re instead of for tcl reported as 88 mocking turtledemo absence would have no point 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 pyshell debug_menu_postcommand ew __init__ codecontext toggle ew __init__ ew toggle event separator
"Test mainmenu, coverage 100%."


from idlelib import mainmenu
import re
import unittest


class MainMenuTest(unittest.TestCase):

    def test_menudefs(self):
        actual = [item[0] for item in mainmenu.menudefs]
        expect = ['file', 'edit', 'format', 'run', 'shell',
                  'debug', 'options', 'window', 'help']
        self.assertEqual(actual, expect)

    def test_default_keydefs(self):
        self.assertGreaterEqual(len(mainmenu.default_keydefs), 50)

    def test_tcl_indexes(self):
        
        
        
        for menu, pattern in (
            ('debug', '.*tack.*iewer'),  
            ('options', '.*ode.*ontext'),  
            ('options', '.*ine.*umbers'),  
            ):
            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),  
                                f"{pattern} not in {menu}")


if __name__ == '__main__':
    unittest.main(verbosity=2)