summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorGregory P. Smith <greg@krypto.org>2018-09-13 00:58:40 (GMT)
committerMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2018-09-13 00:58:40 (GMT)
commit4ae8ece5cd4c5853b625381db13429f25512108d (patch)
treeb59c5db2bd26ffd2c4ea1ac1c58cac3ae03d6081 /Lib
parented709d5699716bf7237856dc20aba321e2dfff6d (diff)
downloadcpython-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.py17
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]