diff --git a/Lib/test/libregrtest/save_env.py b/Lib/test/libregrtest/save_env.py index 3c45621390be44f..7a5b7f2bb0fdc68 100644 --- a/Lib/test/libregrtest/save_env.py +++ b/Lib/test/libregrtest/save_env.py @@ -61,7 +61,7 @@ def __init__(self, testname, verbose=0, quiet=False, *, pgo=False): 'os.environ', 'sys.path', 'sys.path_hooks', '__import__', 'warnings.filters', 'asyncore.socket_map', 'logging._handlers', 'logging._handlerList', 'sys.gettrace', - 'sys.warnoptions', + 'sys.warnoptions', 'idlerc', # multiprocessing.process._cleanup() may release ref # to a thread, so check processes first. 'multiprocessing.process._dangling', 'threading._dangling', @@ -253,6 +253,29 @@ def get_warnings_showwarning(self): def restore_warnings_showwarning(self, fxn): warnings.showwarning = fxn + def get_idlerc(self): + import pathlib + from idlelib.config import idleConf + idlerc_dir = pathlib.Path(idleConf.GetUserCfgDir()) + + saved = {} + for filename in idlerc_dir.glob('*'): + with open(filename) as f: + saved[filename] = f.read() + return saved + + def restore_idlerc(self, saved): + import pathlib + from idlelib.config import idleConf + idlerc_dir = pathlib.Path(idleConf.GetUserCfgDir()) + + for filename in idlerc_dir.glob('*'): + support.unlink(filename) + + for filename in saved: + with open(filename, 'w') as f: + f.write(saved[filename]) + def resource_info(self): for name in self.resources: method_suffix = name.replace('.', '_') diff --git a/Lib/test/test_regrtest.py b/Lib/test/test_regrtest.py index a544f880d2be01b..f5908de00b041b9 100644 --- a/Lib/test/test_regrtest.py +++ b/Lib/test/test_regrtest.py @@ -951,6 +951,30 @@ def test_env_changed(self): self.check_executed_tests(output, [testname], env_changed=testname, fail_env_changed=True) + def test_env_user_idlerc_changed(self): + code = textwrap.dedent(""" + import unittest + from idlelib.config import idleConf + + class Tests(unittest.TestCase): + def test_user_idlerc_changed(self): + default = idleConf.GetOption('main', 'Theme', 'default', + type='bool') + idleConf.SetOption('main', 'Theme', 'default', + str(not default)) + idleConf.SaveUserCfgFiles() + """) + testname = self.create_test(code=code) + + # don't fail by default + output = self.run_tests(testname) + self.check_executed_tests(output, [testname], env_changed=testname) + + # fail with --fail-env-changed + output = self.run_tests("--fail-env-changed", testname, exitcode=3) + self.check_executed_tests(output, [testname], env_changed=testname, + fail_env_changed=True) + if __name__ == '__main__': unittest.main()