Kaydet (Commit) 607bff1e authored tarafından Amaury Forgeot d'Arc's avatar Amaury Forgeot d'Arc

Some tests did not pass on repeated calls (regrtest -R::)

Perform additional cleanup, mostly deleting from sys.modules, or clearing the warnings registry.
üst 6f341093
...@@ -683,6 +683,11 @@ def dash_R_cleanup(fs, ps, pic, abcs): ...@@ -683,6 +683,11 @@ def dash_R_cleanup(fs, ps, pic, abcs):
import struct, filecmp import struct, filecmp
from distutils.dir_util import _path_created from distutils.dir_util import _path_created
# Clear the warnings registry, so they can be displayed again
for mod in sys.modules.values():
if hasattr(mod, '__warningregistry__'):
del mod.__warningregistry__
# Restore some original values. # Restore some original values.
warnings.filters[:] = fs warnings.filters[:] = fs
copy_reg.dispatch_table.clear() copy_reg.dispatch_table.clear()
......
...@@ -35,6 +35,10 @@ class FrozenTests(unittest.TestCase): ...@@ -35,6 +35,10 @@ class FrozenTests(unittest.TestCase):
self.assertEquals(stdout.getvalue(), self.assertEquals(stdout.getvalue(),
'Hello world...\nHello world...\nHello world...\n') 'Hello world...\nHello world...\nHello world...\n')
del sys.modules['__hello__']
del sys.modules['__phello__']
del sys.modules['__phello__.spam']
def test_main(): def test_main():
run_unittest(FrozenTests) run_unittest(FrozenTests)
......
...@@ -46,12 +46,20 @@ class Test(unittest.TestCase): ...@@ -46,12 +46,20 @@ class Test(unittest.TestCase):
def setUp(self): def setUp(self):
self.root = None self.root = None
self.pkgname = None
self.syspath = list(sys.path) self.syspath = list(sys.path)
def tearDown(self): def tearDown(self):
sys.path[:] = self.syspath sys.path[:] = self.syspath
cleanout(self.root) cleanout(self.root)
# delete all modules concerning the tested hiearchy
if self.pkgname:
modules = [name for name in sys.modules
if self.pkgname in name.split('.')]
for name in modules:
del sys.modules[name]
def run_code(self, code): def run_code(self, code):
exec(textwrap.dedent(code), globals(), {"self": self}) exec(textwrap.dedent(code), globals(), {"self": self})
...@@ -74,6 +82,8 @@ class Test(unittest.TestCase): ...@@ -74,6 +82,8 @@ class Test(unittest.TestCase):
f.write('\n') f.write('\n')
f.close() f.close()
self.root = root self.root = root
# package name is the name of the first item
self.pkgname = descr[0][0]
def test_1(self): def test_1(self):
hier = [("t1", None), ("t1 __init__"+os.extsep+"py", "")] hier = [("t1", None), ("t1 __init__"+os.extsep+"py", "")]
...@@ -223,8 +233,8 @@ class Test(unittest.TestCase): ...@@ -223,8 +233,8 @@ class Test(unittest.TestCase):
def test_7(self): def test_7(self):
hier = [ hier = [
("t7"+os.extsep+"py", ""),
("t7", None), ("t7", None),
("t7"+os.extsep+"py", ""),
("t7 __init__"+os.extsep+"py", ""), ("t7 __init__"+os.extsep+"py", ""),
("t7 sub"+os.extsep+"py", ("t7 sub"+os.extsep+"py",
"raise RuntimeError('Shouldnt load sub.py')"), "raise RuntimeError('Shouldnt load sub.py')"),
......
...@@ -48,6 +48,8 @@ class PkgutilTests(unittest.TestCase): ...@@ -48,6 +48,8 @@ class PkgutilTests(unittest.TestCase):
res2 = pkgutil.get_data(pkg, 'sub/res.txt') res2 = pkgutil.get_data(pkg, 'sub/res.txt')
self.assertEqual(res2, RESOURCE_DATA) self.assertEqual(res2, RESOURCE_DATA)
del sys.modules[pkg]
def test_getdata_zipfile(self): def test_getdata_zipfile(self):
zip = 'test_getdata_zipfile.zip' zip = 'test_getdata_zipfile.zip'
pkg = 'test_getdata_zipfile' pkg = 'test_getdata_zipfile'
...@@ -74,6 +76,8 @@ class PkgutilTests(unittest.TestCase): ...@@ -74,6 +76,8 @@ class PkgutilTests(unittest.TestCase):
self.assertEqual(res2, RESOURCE_DATA) self.assertEqual(res2, RESOURCE_DATA)
del sys.path[0] del sys.path[0]
del sys.modules[pkg]
class PkgutilPEP302Tests(unittest.TestCase): class PkgutilPEP302Tests(unittest.TestCase):
class MyTestLoader(object): class MyTestLoader(object):
......
...@@ -21,8 +21,9 @@ class ProfileTest(unittest.TestCase): ...@@ -21,8 +21,9 @@ class ProfileTest(unittest.TestCase):
def do_profiling(cls): def do_profiling(cls):
results = [] results = []
prof = cls.profilerclass(timer, 0.001) prof = cls.profilerclass(timer, 0.001)
start_timer = timer()
prof.runctx("testfunc()", globals(), locals()) prof.runctx("testfunc()", globals(), locals())
results.append(timer()) results.append(timer() - start_timer)
for methodname in cls.methodnames: for methodname in cls.methodnames:
s = StringIO() s = StringIO()
stats = pstats.Stats(prof, stream=s) stats = pstats.Stats(prof, stream=s)
...@@ -33,7 +34,7 @@ class ProfileTest(unittest.TestCase): ...@@ -33,7 +34,7 @@ class ProfileTest(unittest.TestCase):
def test_cprofile(self): def test_cprofile(self):
results = self.do_profiling() results = self.do_profiling()
self.assertEqual(results[0], 43000) self.assertEqual(results[0], 1000)
for i, method in enumerate(self.methodnames): for i, method in enumerate(self.methodnames):
self.assertEqual(results[i+1], self.expected_output[method], self.assertEqual(results[i+1], self.expected_output[method],
"Stats.%s output for %s doesn't fit expectation!" % "Stats.%s output for %s doesn't fit expectation!" %
......
...@@ -101,12 +101,6 @@ class TestWarnings(unittest.TestCase): ...@@ -101,12 +101,6 @@ class TestWarnings(unittest.TestCase):
def test_main(verbose=None): def test_main(verbose=None):
# Obscure hack so that this test passes after reloads or repeated calls
# to test_main (regrtest -R).
if '__warningregistry__' in globals():
del globals()['__warningregistry__']
if hasattr(sys, '__warningregistry__'):
del sys.__warningregistry__
test_support.run_unittest(__name__) test_support.run_unittest(__name__)
if __name__ == "__main__": if __name__ == "__main__":
......
...@@ -391,6 +391,8 @@ class PyWarningsDisplayTests(BaseTest, WarningsDisplayTests): ...@@ -391,6 +391,8 @@ class PyWarningsDisplayTests(BaseTest, WarningsDisplayTests):
def test_main(): def test_main():
py_warnings.onceregistry.clear()
c_warnings.onceregistry.clear()
test_support.run_unittest(CFilterTests, test_support.run_unittest(CFilterTests,
PyFilterTests, PyFilterTests,
CWarnTests, CWarnTests,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment