diff options
author | Gregory P. Smith <greg@krypto.org> | 2018-09-13 00:58:40 (GMT) |
---|---|---|
committer | Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> | 2018-09-13 00:58:40 (GMT) |
commit | 4ae8ece5cd4c5853b625381db13429f25512108d (patch) | |
tree | b59c5db2bd26ffd2c4ea1ac1c58cac3ae03d6081 /Lib | |
parent | ed709d5699716bf7237856dc20aba321e2dfff6d (diff) | |
download | cpython-4ae8ece5cd4c5853b625381db13429f25512108d.zip cpython-4ae8ece5cd4c5853b625381db13429f25512108d.tar.gz cpython-4ae8ece5cd4c5853b625381db13429f25512108d.tar.bz2 |
bpo-34200: Fix non-determinism of test_pkg (GH-9248)
This causes the tearDown code to only unimport the test modules specifically created as part of each test via the self.mkhier method rather than abusing test.support.modules_setup() and the scary test.support.modules_cleanup() code.
https://bugs.python.org/issue34200
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/test/test_pkg.py | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/Lib/test/test_pkg.py b/Lib/test/test_pkg.py index 8130eab..eed0fd1 100644 --- a/Lib/test/test_pkg.py +++ b/Lib/test/test_pkg.py @@ -5,7 +5,6 @@ import os import tempfile import textwrap import unittest -from test import support # Helpers to create and destroy hierarchies. @@ -50,11 +49,13 @@ class TestPkg(unittest.TestCase): self.root = None self.pkgname = None self.syspath = list(sys.path) - self.modules_before = support.modules_setup() + self.modules_to_cleanup = set() # Populated by mkhier(). def tearDown(self): sys.path[:] = self.syspath - support.modules_cleanup(*self.modules_before) + for modulename in self.modules_to_cleanup: + if modulename in sys.modules: + del sys.modules[modulename] if self.root: # Only clean if the test was actually run cleanout(self.root) @@ -75,17 +76,17 @@ class TestPkg(unittest.TestCase): os.mkdir(root) for name, contents in descr: comps = name.split() + self.modules_to_cleanup.add('.'.join(comps)) fullname = root for c in comps: fullname = os.path.join(fullname, c) if contents is None: os.mkdir(fullname) else: - f = open(fullname, "w") - f.write(contents) - if contents and contents[-1] != '\n': - f.write('\n') - f.close() + with open(fullname, "w") as f: + f.write(contents) + if not contents.endswith('\n'): + f.write('\n') self.root = root # package name is the name of the first item self.pkgname = descr[0][0] |