[Python-Dev] More joy with test_strptime (original) (raw)

Tim Peters tim.peters at gmail.com
Tue Jul 13 07:28:48 CEST 2004


[Tim]

FWIW, this is a minimal failing set of tests to run:

test_all_ testsite teststrptime

More, if you comment out the

    self.check_all("_strptime")

line in test__all__, the test passes. If you comment out every self.check_all line except for that one, the test fails. If you add this line after that one, the test passes:

    del sys.modules["_strptime"]

The regrtest framework itself tries to "unload" modules imported by tests, but it only does so for modules from the test package. So strptime remains loaded after test___all_, with the time module it had at that time. I really don't grok what test_site is doing, so am at a loss to explain how it manages to create a distinct time module.

Ah! It doesn't! It's because PthFile.cleanup does

            del sys.modules[self.imported]

That destroys the time module that was in sys.modules before test_site began running. That's the problem. Then every module that previously imported time via test___all__ has a time module distinct from any time module imported after test_site.

Get rid of that line. Or if, you want to be anally correct, nuke self.imported in cleanup() if and only if

self.imported not in sys.modules

before PthFile imported self.imported

Note that the

    assert self.imported in sys.modules

in test() doesn't do anything useful right now, because time was in sys.modules before the test ran, so it's not testing that the .pth actually imported time.

Note too that unittests should not use assert -- they don't test anything then in an -O run. You can use

 self.assert_(self.imported in sys.modules)

instead, and that works fine with -O.



More information about the Python-Dev mailing list