1'''Test idlelib.config. 2 3Much is tested by opening config dialog live or in test_configdialog. 4Coverage: 27% 5''' 6from sys import modules 7from test.support import captured_stderr 8from tkinter import Tk 9import unittest 10from idlelib import config 11 12# Tests should not depend on fortuitous user configurations. 13# They must not affect actual user .cfg files. 14# Replace user parsers with empty parsers that cannot be saved. 15 16idleConf = config.idleConf 17usercfg = idleConf.userCfg 18testcfg = {} 19usermain = testcfg['main'] = config.IdleUserConfParser('') # filename 20userhigh = testcfg['highlight'] = config.IdleUserConfParser('') 21userkeys = testcfg['keys'] = config.IdleUserConfParser('') 22 23def setUpModule(): 24 idleConf.userCfg = testcfg 25 26def tearDownModule(): 27 idleConf.userCfg = usercfg 28 29 30class CurrentColorKeysTest(unittest.TestCase): 31 """ Test colorkeys function with user config [Theme] and [Keys] patterns. 32 33 colorkeys = config.IdleConf.current_colors_and_keys 34 Test all patterns written by IDLE and some errors 35 Item 'default' should really be 'builtin' (versus 'custom). 36 """ 37 colorkeys = idleConf.current_colors_and_keys 38 default_theme = 'IDLE Classic' 39 default_keys = idleConf.default_keys() 40 41 def test_old_builtin_theme(self): 42 # On initial installation, user main is blank. 43 self.assertEqual(self.colorkeys('Theme'), self.default_theme) 44 # For old default, name2 must be blank. 45 usermain.read_string(''' 46 [Theme] 47 default = True 48 ''') 49 # IDLE omits 'name' for default old builtin theme. 50 self.assertEqual(self.colorkeys('Theme'), self.default_theme) 51 # IDLE adds 'name' for non-default old builtin theme. 52 usermain['Theme']['name'] = 'IDLE New' 53 self.assertEqual(self.colorkeys('Theme'), 'IDLE New') 54 # Erroneous non-default old builtin reverts to default. 55 usermain['Theme']['name'] = 'non-existent' 56 self.assertEqual(self.colorkeys('Theme'), self.default_theme) 57 usermain.remove_section('Theme') 58 59 def test_new_builtin_theme(self): 60 # IDLE writes name2 for new builtins. 61 usermain.read_string(''' 62 [Theme] 63 default = True 64 name2 = IDLE Dark 65 ''') 66 self.assertEqual(self.colorkeys('Theme'), 'IDLE Dark') 67 # Leftover 'name', not removed, is ignored. 68 usermain['Theme']['name'] = 'IDLE New' 69 self.assertEqual(self.colorkeys('Theme'), 'IDLE Dark') 70 # Erroneous non-default new builtin reverts to default. 71 usermain['Theme']['name2'] = 'non-existent' 72 self.assertEqual(self.colorkeys('Theme'), self.default_theme) 73 usermain.remove_section('Theme') 74 75 def test_user_override_theme(self): 76 # Erroneous custom name (no definition) reverts to default. 77 usermain.read_string(''' 78 [Theme] 79 default = False 80 name = Custom Dark 81 ''') 82 self.assertEqual(self.colorkeys('Theme'), self.default_theme) 83 # Custom name is valid with matching Section name. 84 userhigh.read_string('[Custom Dark]\na=b') 85 self.assertEqual(self.colorkeys('Theme'), 'Custom Dark') 86 # Name2 is ignored. 87 usermain['Theme']['name2'] = 'non-existent' 88 self.assertEqual(self.colorkeys('Theme'), 'Custom Dark') 89 usermain.remove_section('Theme') 90 userhigh.remove_section('Custom Dark') 91 92 def test_old_builtin_keys(self): 93 # On initial installation, user main is blank. 94 self.assertEqual(self.colorkeys('Keys'), self.default_keys) 95 # For old default, name2 must be blank, name is always used. 96 usermain.read_string(''' 97 [Keys] 98 default = True 99 name = IDLE Classic Unix 100 ''') 101 self.assertEqual(self.colorkeys('Keys'), 'IDLE Classic Unix') 102 # Erroneous non-default old builtin reverts to default. 103 usermain['Keys']['name'] = 'non-existent' 104 self.assertEqual(self.colorkeys('Keys'), self.default_keys) 105 usermain.remove_section('Keys') 106 107 def test_new_builtin_keys(self): 108 # IDLE writes name2 for new builtins. 109 usermain.read_string(''' 110 [Keys] 111 default = True 112 name2 = IDLE Modern Unix 113 ''') 114 self.assertEqual(self.colorkeys('Keys'), 'IDLE Modern Unix') 115 # Leftover 'name', not removed, is ignored. 116 usermain['Keys']['name'] = 'IDLE Classic Unix' 117 self.assertEqual(self.colorkeys('Keys'), 'IDLE Modern Unix') 118 # Erroneous non-default new builtin reverts to default. 119 usermain['Keys']['name2'] = 'non-existent' 120 self.assertEqual(self.colorkeys('Keys'), self.default_keys) 121 usermain.remove_section('Keys') 122 123 def test_user_override_keys(self): 124 # Erroneous custom name (no definition) reverts to default. 125 usermain.read_string(''' 126 [Keys] 127 default = False 128 name = Custom Keys 129 ''') 130 self.assertEqual(self.colorkeys('Keys'), self.default_keys) 131 # Custom name is valid with matching Section name. 132 userkeys.read_string('[Custom Keys]\na=b') 133 self.assertEqual(self.colorkeys('Keys'), 'Custom Keys') 134 # Name2 is ignored. 135 usermain['Keys']['name2'] = 'non-existent' 136 self.assertEqual(self.colorkeys('Keys'), 'Custom Keys') 137 usermain.remove_section('Keys') 138 userkeys.remove_section('Custom Keys') 139 140 141class WarningTest(unittest.TestCase): 142 143 def test_warn(self): 144 Equal = self.assertEqual 145 config._warned = set() 146 with captured_stderr() as stderr: 147 config._warn('warning', 'key') 148 Equal(config._warned, {('warning','key')}) 149 Equal(stderr.getvalue(), 'warning'+'\n') 150 with captured_stderr() as stderr: 151 config._warn('warning', 'key') 152 Equal(stderr.getvalue(), '') 153 with captured_stderr() as stderr: 154 config._warn('warn2', 'yek') 155 Equal(config._warned, {('warning','key'), ('warn2','yek')}) 156 Equal(stderr.getvalue(), 'warn2'+'\n') 157 158 159if __name__ == '__main__': 160 unittest.main(verbosity=2) 161