"""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 class DummyUserConfParser(config.IdleUserConfParser): def Save(self): pass # 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': DummyUserConfParser(''), 'highlight': DummyUserConfParser(''), 'keys': DummyUserConfParser(''), 'extensions': DummyUserConfParser(''), } root = None configure = None class TestDialog(ConfigDialog): pass 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 = usercfg configure.remove_var_callbacks() del configure root.update_idletasks() root.destroy() del root class PageTest(unittest.TestCase): def setUp(self): self.page = config.Page() def tearDown(self): del self.page def test_additem(self): page = self.page page.additem('EditorWindow', 'font', 'Test Font') expected = {'EditorWindow': {'font': 'Test Font'}} self.assertEqual(page, expected) def test_apply(self): page = self.page page.additem('EditorWindow', 'font-size', 20) new_items = {'font': 'Test Font', 'font-size': '10'} expected = {'font': 'Test Font', 'font-size': '20'} page.apply('EditorWindow', new_items) self.assertEqual(new_items, expected) # apply = page.apply('TestEdit', new_items) # self.assertRaises(KeyError, apply) def test_delete_section(self): page = self.page page.additem('EditorWindow', 'font-size', 20) page.additem('General', 'editor-on-startup', 1) page.delete_section('EditorWindow') expected = {'General': {'editor-on-startup', '1'}} self.assertEqual(page, expected) class ChangesTest(unittest.TestCase): def setUpClass(self): self.changes = config.Changes() def tearDownClass(self): del self.changes def setUp(self): self.changes.clear() def test_font(self): # Set values guaranteed not to be defaults. changes = self.changes default_font = idleConf.GetFont(root, 'main', 'EditorWindow') default_size = str(default_font[1]) default_bold = default_font[2] == 'bold' configure.font_name.set('Test Font') expected = {'EditorWindow': {'font': 'Test Font', 'font-size': default_size, 'font-bold': default_bold}} self.assertEqual(changes.main, expected) changes.clear() configure.font_size.set(20) expected = {'EditorWindow': {'font': 'Test Font', 'font-size': '20', 'font-bold': default_bold}} self.assertEqual(changes.main, expected) changes.clear() configure.font_bold.set(not default_bold) expected = {'EditorWindow': {'font': 'Test Font', 'font-size': '20', 'font-bold': not default_bold}} self.assertEqual(changes.main, expected) def test_tabspace(self): configure.space_num.set(6) self.assertEqual(self.changes.main, {'Indent': {'num-spaces', 6}}) def test_startup(self): configure.radio_startup_edit.invoke() self.assertEqual(changes.main, {'General': {'editor-on-startup': '1'}}) def test_autosave(self): configure.radio_save_auto.invoke() self.assertEqual(changes.main, {'General': {'autosave': '1'}}) def test_editor_size(self): configure.entry_win_height.insert(0, '1') self.assertEqual(changes.main, {'EditorWindow': {'height': '140'}}) changes.clear() configure.entry_win_width.insert(0, '1') self.assertEqual(changes.main, {'EditorWindow': {'width': '180'}}) def test_save_new_config(self): pass def test_save_all(self): changes = self.changes configure.space_num.set(6) changes.save_all() self.assertTrue(idleConf.userCfg['main'].Save.called)