@@ -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):