bpo-30779: IDLE: fix changes.delete_section calls in configdialog (#2667)

Also improve test of config.ConfigChanges.delete_section.
Original patch by Cheryl Sabella.
This commit is contained in:
csabella 2017-07-11 19:09:44 -04:00 committed by terryjreedy
parent f52325598e
commit 6d13b22e3a
3 changed files with 9 additions and 5 deletions

View File

@ -794,7 +794,8 @@ class ConfigChanges(dict):
add_option: Add option and value to changes. add_option: Add option and value to changes.
save_option: Save option and value to config parser. save_option: Save option and value to config parser.
save_all: Save all the changes to the config parser and file. save_all: Save all the changes to the config parser and file.
delete_section: Delete section if it exists. delete_section: If section exists,
delete from changes, userCfg, and file.
clear: Clear all changes by clearing each page. clear: Clear all changes by clearing each page.
""" """
def __init__(self): def __init__(self):

View File

@ -839,7 +839,7 @@ class ConfigDialog(Toplevel):
return return
self.deactivate_current_config() self.deactivate_current_config()
# Remove key set from changes, config, and file. # Remove key set from changes, config, and file.
changes.remove(keyset_name) changes.delete_section('keys', keyset_name)
# Reload user key set list. # Reload user key set list.
item_list = idleConf.GetSectionList('user', 'keys') item_list = idleConf.GetSectionList('user', 'keys')
item_list.sort() item_list.sort()
@ -873,7 +873,7 @@ class ConfigDialog(Toplevel):
return return
self.deactivate_current_config() self.deactivate_current_config()
# Remove theme from changes, config, and file. # Remove theme from changes, config, and file.
changes.delete_section('highlight') changes.delete_section('highlight', theme_name)
# Reload user theme list. # Reload user theme list.
item_list = idleConf.GetSectionList('user', 'highlight') item_list = idleConf.GetSectionList('user', 'highlight')
item_list.sort() item_list.sort()

View File

@ -188,6 +188,7 @@ class ChangesTest(unittest.TestCase):
userkeys.remove_section('Ksec') userkeys.remove_section('Ksec')
def test_save_help(self): def test_save_help(self):
# Any change to HelpFiles overwrites entire section.
changes = self.changes changes = self.changes
changes.save_option('main', 'HelpFiles', 'IDLE', 'idledoc') changes.save_option('main', 'HelpFiles', 'IDLE', 'idledoc')
changes.add_option('main', 'HelpFiles', 'ELDI', 'codeldi') changes.add_option('main', 'HelpFiles', 'ELDI', 'codeldi')
@ -207,10 +208,12 @@ class ChangesTest(unittest.TestCase):
changes.delete_section('main', 'fake') # Test no exception. changes.delete_section('main', 'fake') # Test no exception.
self.assertEqual(changes, self.loaded) # Test nothing deleted. self.assertEqual(changes, self.loaded) # Test nothing deleted.
for cfgtype, section in (('main', 'Msec'), ('keys', 'Ksec')): for cfgtype, section in (('main', 'Msec'), ('keys', 'Ksec')):
testcfg[cfgtype].SetOption(section, 'name', 'value')
changes.delete_section(cfgtype, section) changes.delete_section(cfgtype, section)
with self.assertRaises(KeyError): with self.assertRaises(KeyError):
changes[cfgtype][section] # Test section gone. changes[cfgtype][section] # Test section gone from changes
# TODO Test change to userkeys and maybe save call. testcfg[cfgtype][section] # and from mock userCfg.
# TODO test for save call.
def test_clear(self): def test_clear(self):
changes = self.load() changes = self.load()