import sys import os import time from test import support from zipfile import ZipFile, ZipInfo, ZIP_STORED import zipimport import linecache import doctest test_src = """\ def get_name(): return __name__ def get_file(): return __file__ """ NOW = time.time() TESTMOD = "ziptestmodule" TEMP_ZIP = os.path.abspath("junk95142.zip") pyc_ext = ('.pyc' if __debug__ else '.pyo') compression = ZIP_STORED def doTest(expected_ext, files, *modules, **kw): z = ZipFile(TEMP_ZIP, "w") try: for name, (mtime, data) in files.items(): zinfo = ZipInfo(name, time.localtime(mtime)) zinfo.compress_type = compression z.writestr(zinfo, data) z.close() stuff = kw.get("stuff", None) if stuff is not None: # Prepend 'stuff' to the start of the zipfile with open(TEMP_ZIP, "rb") as f: data = f.read() with open(TEMP_ZIP, "wb") as f: f.write(stuff) f.write(data) sys.path.insert(0, TEMP_ZIP) mod = __import__(".".join(modules), globals(), locals(), ["__dummy__"]) call = kw.get('call') if call is not None: call(mod) if expected_ext: file = mod.get_file() finally: z.close() os.remove(TEMP_ZIP) def runDoctest(callback): files = {TESTMOD + ".py": (NOW, test_src), "xyz.txt": (NOW, ">>> log.append(True)\n")} doTest(".py", files, TESTMOD, call=callback) def doDoctestFile( module): log = [] old_master, doctest.master = doctest.master, None try: doctest.testfile( 'xyz.txt', package=module, module_relative=True, globs=locals() ) finally: doctest.master = old_master def testDoctestFile(): runDoctest(doDoctestFile) def doDoctestSuite(module): log = [] doctest.DocFileTest( 'xyz.txt', package=module, module_relative=True, globs=locals() ).run() def testDoctestSuite(): runDoctest(doDoctestSuite) modules_before=support.modules_setup() testDoctestSuite() support.modules_cleanup(*modules_before) modules_before=support.modules_setup() testDoctestFile() support.modules_cleanup(*modules_before)