[3.15] gh-155648: Write the empty and placeholder IDLE tests (GH-1562… · python/cpython@cd85453

GitHub

@@ -3,6 +3,7 @@

33Half the class creates dialog, half works with user customizations.

44"""

55fromidlelibimportconfigdialog

6+fromidlelib.editorimportEditorWindow

67fromtest.supportimportrequires

78requires('gui')

89importunittest

@@ -50,14 +51,28 @@ def tearDownModule():

5051root=dialog=None

[email protected]('Empty tests')

5454classConfigDialogTest(unittest.TestCase):

55+# The methods tested here are mocked out in the tests below.

56+57+defsetUp(self):

58+self.parent=dialog.parent

59+self.instance=mock.create_autospec(EditorWindow, instance=True)

60+dialog.parent=mock.Mock(instance_dict={self.instance: []})

61+62+deftearDown(self):

63+dialog.parent=self.parent

55645665deftest_deactivate_current_config(self):

57-pass

66+dialog.deactivate_current_config()

67+self.instance.RemoveKeybindings.assert_called_once_with()

586859-defactivate_config_changes(self):

60-pass

69+deftest_activate_config_changes(self):

70+dialog.activate_config_changes()

71+fornamein ('ResetColorizer', 'ResetFont', 'set_notabs_indentwidth',

72+'ApplyKeybindings', 'reset_help_menu_entries',

73+'update_cursor_blink'):

74+withself.subTest(name=name):

75+getattr(self.instance, name).assert_called_once_with()

617662776378classButtonTest(unittest.TestCase):

@@ -1296,13 +1311,123 @@ def test_context(self):

12961311self.assertEqual(extpage, {'CodeContext': {'maxlines': '1'}})

12971312129813131299-#unittest.skip("Nothing here yet TODO")

13001314classExtPageTest(unittest.TestCase):

1301-"""Test that the help source list works correctly."""

1315+"""Test that the extension page works correctly.

1316+1317+ The page loads the options of each extension from the default and

1318+ user config files, displays those of the selected extension, and

1319+ saves the changed ones to the user config file. ZzDummy is the

1320+ only extension shipped with IDLE.

1321+ """

13021322@classmethod

13031323defsetUpClass(cls):

1304-page=dialog.extpage

1324+page=cls.page=dialog.extpage

13051325dialog.note.select(page)

1326+page.update()

1327+1328+defsetUp(self):

1329+# Restore the option vars changed by the previous test.

1330+self.page.load_extensions()

1331+1332+deftearDown(self):

1333+self.page.ext_userCfg.remove_section('ZzDummy')

1334+1335+deftest_load_extensions(self):

1336+eq=self.assertEqual

1337+extensions=self.page.extensions

1338+eq(list(extensions), sorted(idleConf.GetExtensions(active_only=False)))

1339+opts=extensions['ZzDummy']

1340+# The 'enable' options come first, the others follow, both sorted.

1341+eq([opt['name'] foroptinopts],

1342+ ['enable', 'enable_editor', 'enable_shell', 'z-text'])

1343+eq([opt['type'] foroptinopts], ['bool', 'bool', 'bool', None])

1344+eq([opt['default'] foroptinopts], ['False', 'True', 'False', 'Z'])

1345+eq([opt['value'] foroptinopts], [False, True, False, 'Z'])

1346+foroptinopts:

1347+withself.subTest(name=opt['name']):

1348+eq(opt['var'].get(), str(opt['value']))

1349+1350+deftest_load_extensions_enable_first(self):

1351+# The 'enable' options come first even if they sort last.

1352+page=self.page

1353+page.ext_userCfg.SetOption('ZzDummy', 'a-text', 'A')

1354+page.load_extensions()

1355+self.assertEqual([opt['name'] foroptinpage.extensions['ZzDummy']],

1356+ ['enable', 'enable_editor', 'enable_shell',

1357+'a-text', 'z-text'])

1358+1359+deftest_load_extensions_user_value(self):

1360+# A user option overrides the default value, but not the default.

1361+page=self.page

1362+page.ext_userCfg.SetOption('ZzDummy', 'z-text', 'user')

1363+page.load_extensions()

1364+opt=page.extensions['ZzDummy'][-1]

1365+self.assertEqual(opt['name'], 'z-text')

1366+self.assertEqual(opt['default'], 'Z')

1367+self.assertEqual(opt['value'], 'user')

1368+self.assertEqual(opt['var'].get(), 'user')

1369+1370+deftest_extension_selected(self):

1371+eq=self.assertEqual

1372+page=self.page

1373+frame=page.config_frame['ZzDummy']

1374+# Deselecting hides the options of the current extension.

1375+page.extension_list.selection_clear(0, 'end')

1376+page.extension_selected(None)

1377+eq(page.current_extension, None)

1378+eq(page.details_frame.cget('text'), '')

1379+eq(frame.winfo_manager(), '')

1380+# Selecting shows the options of the selected extension.

1381+page.extension_list.selection_set(0)

1382+page.extension_selected(None)

1383+eq(page.current_extension, 'ZzDummy')

1384+eq(page.details_frame.cget('text'), 'ZzDummy')

1385+eq(frame.winfo_manager(), 'grid')

1386+1387+deftest_set_extension_value_changed(self):

1388+page=self.page

1389+opt=page.extensions['ZzDummy'][-1] # z-text, default 'Z'.

1390+opt['var'].set('user')

1391+self.assertTrue(page.set_extension_value('ZzDummy', opt))

1392+self.assertEqual(page.ext_userCfg.Get('ZzDummy', 'z-text'), 'user')

1393+# Saving the same value again is not a change.

1394+self.assertFalse(page.set_extension_value('ZzDummy', opt))

1395+1396+deftest_set_extension_value_default(self):

1397+page=self.page

1398+opt=page.extensions['ZzDummy'][-1]

1399+# The default value is not saved in the user config file.

1400+opt['var'].set('Z')

1401+self.assertFalse(page.set_extension_value('ZzDummy', opt))

1402+self.assertFalse(page.ext_userCfg.has_option('ZzDummy', 'z-text'))

1403+# Setting it back to the default removes the user option.

1404+page.ext_userCfg.SetOption('ZzDummy', 'z-text', 'user')

1405+self.assertTrue(page.set_extension_value('ZzDummy', opt))

1406+self.assertFalse(page.ext_userCfg.has_option('ZzDummy', 'z-text'))

1407+1408+deftest_set_extension_value_empty(self):

1409+# An empty value is replaced with the default.

1410+page=self.page

1411+opt=page.extensions['ZzDummy'][-1]

1412+opt['var'].set(' ')

1413+self.assertFalse(page.set_extension_value('ZzDummy', opt))

1414+self.assertEqual(opt['var'].get(), 'Z')

1415+1416+deftest_save_all_changed_extensions(self):

1417+page=self.page

1418+page.ext_userCfg.Save=Func()

1419+try:

1420+# Nothing is saved if nothing is changed.

1421+page.save_all_changed_extensions()

1422+self.assertEqual(page.ext_userCfg.Save.called, 0)

1423+page.extensions['ZzDummy'][0]['var'].set('True')

1424+page.extensions['ZzDummy'][-1]['var'].set('user')

1425+page.save_all_changed_extensions()

1426+self.assertEqual(page.ext_userCfg.Save.called, 1)

1427+self.assertEqual(page.ext_userCfg.Get('ZzDummy', 'enable'), 'True')

1428+self.assertEqual(page.ext_userCfg.Get('ZzDummy', 'z-text'), 'user')

1429+finally:

1430+delpage.ext_userCfg.Save

130614311307143213081433classHelpSourceTest(unittest.TestCase):