"""Test idlelib.configdialog. Half the class creates dialog, half works with user customizations. Coverage: 46% just by creating dialog, 56% with current tests. """ from idlelib.configdialog import ConfigDialog, idleConf # test import from test.support import requires requires('gui') from tkinter import Tk import unittest import idlelib.config as config # Tests should not depend on fortuitous user configurations. # They must not affect actual user .cfg files. # Use solution from test_config: empty parsers with no filename. usercfg = idleConf.userCfg testcfg = { 'main': config.IdleUserConfParser(''), 'highlight': config.IdleUserConfParser(''), 'keys': config.IdleUserConfParser(''), 'extensions': config.IdleUserConfParser(''), } # ConfigDialog.changedItems is a 3-level hierarchical dictionary of # pending changes that mirrors the multilevel user config dict. # For testing, record args in a list for comparison with expected. changes = [] class TestDialog(ConfigDialog): def AddChangedItem(self, *args): changes.append(args) def setUpModule(): global root, configure idleConf.userCfg = testcfg root = Tk() root.withdraw() configure = TestDialog(root, 'Test', _utest=True) def tearDownModule(): global root, configure idleConf.userCfg = testcfg configure.remove_var_callbacks() del configure root.update_idletasks() root.destroy() del root class FontTabTest(unittest.TestCase): def setUp(self): changes.clear() def test_font(self): # Set values guaranteed not to be defaults. dfont = idleConf.GetFont(root, 'main', 'EditorWindow') dsize = str(dfont[1]) dbold = dfont[2] == 'bold' configure.fontName.set('Test Font') expected = [ ('main', 'EditorWindow', 'font', 'Test Font'), ('main', 'EditorWindow', 'font-size', dsize), ('main', 'EditorWindow', 'font-bold', dbold)] self.assertEqual(changes, expected) changes.clear() configure.fontSize.set(20) expected = [ ('main', 'EditorWindow', 'font', 'Test Font'), ('main', 'EditorWindow', 'font-size', '20'), ('main', 'EditorWindow', 'font-bold', dbold)] self.assertEqual(changes, expected) changes.clear() configure.fontBold.set(not dbold) expected = [ ('main', 'EditorWindow', 'font', 'Test Font'), ('main', 'EditorWindow', 'font-size', '20'), ('main', 'EditorWindow', 'font-bold', not dbold)] self.assertEqual(changes, expected) #def test_sample(self): pass # TODO def test_tabspace(self): configure.spaceNum.set(6) self.assertEqual(changes, [('main', 'Indent', 'num-spaces', 6)]) class HighlightTest(unittest.TestCase): def setUp(self): changes.clear() #def test_colorchoose(self): pass # TODO class KeysTest(unittest.TestCase): def setUp(self): changes.clear() class GeneralTest(unittest.TestCase): def setUp(self): changes.clear() def test_startup(self): configure.radioStartupEdit.invoke() self.assertEqual(changes, [('main', 'General', 'editor-on-startup', 1)]) def test_autosave(self): configure.radioSaveAuto.invoke() self.assertEqual(changes, [('main', 'General', 'autosave', 1)]) def test_editor_size(self): configure.entryWinHeight.insert(0, '1') self.assertEqual(changes, [('main', 'EditorWindow', 'height', '140')]) changes.clear() configure.entryWinWidth.insert(0, '1') self.assertEqual(changes, [('main', 'EditorWindow', 'width', '180')]) #def test_help_sources(self): pass # TODO if __name__ == '__main__': unittest.main(verbosity=2)