diff options
author | Steve Dower <steve.dower@microsoft.com> | 2017-02-04 14:55:16 -0800 |
---|---|---|
committer | Steve Dower <steve.dower@microsoft.com> | 2017-02-04 14:55:16 -0800 |
commit | b53654b6dbfce8318a7d4d1cdaddca7a7fec194b (patch) | |
tree | 204df61b2fb23424603db767732db35a687529c6 /Lib/idlelib/idle_test/test_configdialog.py | |
parent | e1ac7d87afad9c07ec25e5705bb135b71347b581 (diff) | |
parent | 2296b978597ce62ec2185b78a43811610af2c0ea (diff) | |
download | cpython-b53654b6dbfce8318a7d4d1cdaddca7a7fec194b.tar.gz |
Issue #29416: Prevent infinite loop in pathlib.Path.mkdir
Diffstat (limited to 'Lib/idlelib/idle_test/test_configdialog.py')
-rw-r--r-- | Lib/idlelib/idle_test/test_configdialog.py | 135 |
1 files changed, 115 insertions, 20 deletions
diff --git a/Lib/idlelib/idle_test/test_configdialog.py b/Lib/idlelib/idle_test/test_configdialog.py index 5c09790c64..3f94493733 100644 --- a/Lib/idlelib/idle_test/test_configdialog.py +++ b/Lib/idlelib/idle_test/test_configdialog.py @@ -1,32 +1,127 @@ -'''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 -from idlelib import macosxSupport as macosx +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() - macosx._initializeTkVariantTests(cls.root) +# 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_dialog(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): + # 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__': |