diff options
author | Terry Jan Reedy <tjreedy@udel.edu> | 2016-11-07 22:15:01 (GMT) |
---|---|---|
committer | Terry Jan Reedy <tjreedy@udel.edu> | 2016-11-07 22:15:01 (GMT) |
commit | f46b7823e6c64c1e0b6dd67643a45c71f5900b05 (patch) | |
tree | 062be8e7e5bba0113d83b344b9542ef0b97f1e8e /Lib/idlelib/idle_test | |
parent | f5df73025d42de4269b8348c42d0a1aa2fa44649 (diff) | |
download | cpython-f46b7823e6c64c1e0b6dd67643a45c71f5900b05.zip cpython-f46b7823e6c64c1e0b6dd67643a45c71f5900b05.tar.gz cpython-f46b7823e6c64c1e0b6dd67643a45c71f5900b05.tar.bz2 |
Issue #28572: Add 10% to coverage of IDLE's test_configdialog.
Update and augment description of the configuration system.
Diffstat (limited to 'Lib/idlelib/idle_test')
-rw-r--r-- | Lib/idlelib/idle_test/test_configdialog.py | 129 |
1 files changed, 111 insertions, 18 deletions
diff --git a/Lib/idlelib/idle_test/test_configdialog.py b/Lib/idlelib/idle_test/test_configdialog.py index 70bd14e..81c57e8 100644 --- a/Lib/idlelib/idle_test/test_configdialog.py +++ b/Lib/idlelib/idle_test/test_configdialog.py @@ -1,30 +1,123 @@ -'''Test idlelib.configdialog. +"""Test idlelib.configdialog. -Coverage: 46% just by creating dialog. -The other half is code for working with user customizations. -''' -from idlelib.configdialog import ConfigDialog # always test import +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 -class ConfigDialogTest(unittest.TestCase): +# 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(''), +} - @classmethod - def setUpClass(cls): - cls.root = Tk() - cls.root.withdraw() +# 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) - @classmethod - def tearDownClass(cls): - cls.root.update_idletasks() - cls.root.destroy() - del cls.root +def setUpModule(): + global root, configure + idleConf.userCfg = testcfg + root = Tk() + root.withdraw() + configure = TestDialog(root, 'Test', _utest=True) - def test_configdialog(self): - d = ConfigDialog(self.root, 'Test', _utest=True) - d.remove_var_callbacks() + +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): + configure.fontName.set('Test Font') + expected = [ + ('main', 'EditorWindow', 'font', 'Test Font'), + ('main', 'EditorWindow', 'font-size', '10'), + ('main', 'EditorWindow', 'font-bold', False)] + self.assertEqual(changes, expected) + changes.clear() + configure.fontSize.set(12) + expected = [ + ('main', 'EditorWindow', 'font', 'Test Font'), + ('main', 'EditorWindow', 'font-size', '12'), + ('main', 'EditorWindow', 'font-bold', False)] + self.assertEqual(changes, expected) + changes.clear() + configure.fontBold.set(True) + expected = [ + ('main', 'EditorWindow', 'font', 'Test Font'), + ('main', 'EditorWindow', 'font-size', '12'), + ('main', 'EditorWindow', 'font-bold', True)] + 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__': |