14710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport __future__ 24710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport os 34710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport unittest 44710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport distutils.dir_util 54710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport tempfile 64710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 74710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmfrom test import test_support 84710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 94710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmtry: set 104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmexcept NameError: from sets import Set as set 114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport modulefinder 134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Note: To test modulefinder with Python 2.2, sets.py and 154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# modulefinder.py must be available - they are not in the standard 164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# library. 174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmTEST_DIR = tempfile.mkdtemp() 194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmTEST_PATH = [TEST_DIR, os.path.dirname(__future__.__file__)] 204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Each test description is a list of 5 items: 224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# 234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# 1. a module name that will be imported by modulefinder 244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# 2. a list of module names that modulefinder is required to find 254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# 3. a list of module names that modulefinder should complain 264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# about because they are not found 274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# 4. a list of module names that modulefinder should complain 284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# about because they MAY be not found 294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# 5. a string specifying packages to create; the format is obvious imo. 304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# 314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Each package will be created in TEST_DIR, and TEST_DIR will be 324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# removed after the tests again. 334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Modulefinder searches in a path that contains TEST_DIR, plus 344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# the standard Lib directory. 354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmmaybe_test = [ 374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm "a.module", 384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ["a", "a.module", "sys", 394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm "b"], 404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ["c"], ["b.something"], 414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """\ 424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylma/__init__.py 434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylma/module.py 444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm from b import something 454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm from c import something 464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmb/__init__.py 474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm from sys import * 484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm"""] 494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmmaybe_test_new = [ 514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm "a.module", 524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ["a", "a.module", "sys", 534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm "b", "__future__"], 544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ["c"], ["b.something"], 554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """\ 564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylma/__init__.py 574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylma/module.py 584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm from b import something 594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm from c import something 604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmb/__init__.py 614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm from __future__ import absolute_import 624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm from sys import * 634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm"""] 644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmpackage_test = [ 664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm "a.module", 674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ["a", "a.b", "a.c", "a.module", "mymodule", "sys"], 684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ["blahblah"], [], 694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """\ 704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmmymodule.py 714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylma/__init__.py 724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm import blahblah 734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm from a import b 744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm import c 754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylma/module.py 764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm import sys 774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm from a import b as x 784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm from a.c import sillyname 794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylma/b.py 804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylma/c.py 814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm from a.module import x 824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm import mymodule as sillyname 834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm from sys import version_info 844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm"""] 854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmabsolute_import_test = [ 874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm "a.module", 884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ["a", "a.module", 894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm "b", "b.x", "b.y", "b.z", 904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm "__future__", "sys", "exceptions"], 914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ["blahblah"], [], 924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """\ 934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmmymodule.py 944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylma/__init__.py 954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylma/module.py 964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm from __future__ import absolute_import 974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm import sys # sys 984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm import blahblah # fails 994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm import exceptions # exceptions 1004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm import b.x # b.x 1014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm from b import y # b.y 1024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm from b.z import * # b.z.* 1034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylma/exceptions.py 1044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylma/sys.py 1054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm import mymodule 1064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylma/b/__init__.py 1074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylma/b/x.py 1084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylma/b/y.py 1094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylma/b/z.py 1104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmb/__init__.py 1114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm import z 1124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmb/unused.py 1134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmb/x.py 1144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmb/y.py 1154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmb/z.py 1164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm"""] 1174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmrelative_import_test = [ 1194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm "a.module", 1204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ["__future__", 1214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm "a", "a.module", 1224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm "a.b", "a.b.y", "a.b.z", 1234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm "a.b.c", "a.b.c.moduleC", 1244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm "a.b.c.d", "a.b.c.e", 1254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm "a.b.x", 1264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm "exceptions"], 1274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm [], [], 1284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """\ 1294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmmymodule.py 1304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylma/__init__.py 1314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm from .b import y, z # a.b.y, a.b.z 1324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylma/module.py 1334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm from __future__ import absolute_import # __future__ 1344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm import exceptions # exceptions 1354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylma/exceptions.py 1364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylma/sys.py 1374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylma/b/__init__.py 1384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm from ..b import x # a.b.x 1394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm #from a.b.c import moduleC 1404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm from .c import moduleC # a.b.moduleC 1414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylma/b/x.py 1424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylma/b/y.py 1434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylma/b/z.py 1444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylma/b/g.py 1454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylma/b/c/__init__.py 1464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm from ..c import e # a.b.c.e 1474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylma/b/c/moduleC.py 1484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm from ..c import d # a.b.c.d 1494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylma/b/c/d.py 1504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylma/b/c/e.py 1514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylma/b/c/x.py 1524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm"""] 1534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmrelative_import_test_2 = [ 1554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm "a.module", 1564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ["a", "a.module", 1574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm "a.sys", 1584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm "a.b", "a.b.y", "a.b.z", 1594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm "a.b.c", "a.b.c.d", 1604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm "a.b.c.e", 1614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm "a.b.c.moduleC", 1624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm "a.b.c.f", 1634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm "a.b.x", 1644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm "a.another"], 1654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm [], [], 1664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """\ 1674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmmymodule.py 1684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylma/__init__.py 1694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm from . import sys # a.sys 1704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylma/another.py 1714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylma/module.py 1724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm from .b import y, z # a.b.y, a.b.z 1734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylma/exceptions.py 1744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylma/sys.py 1754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylma/b/__init__.py 1764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm from .c import moduleC # a.b.c.moduleC 1774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm from .c import d # a.b.c.d 1784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylma/b/x.py 1794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylma/b/y.py 1804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylma/b/z.py 1814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylma/b/c/__init__.py 1824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm from . import e # a.b.c.e 1834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylma/b/c/moduleC.py 1844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # 1854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm from . import f # a.b.c.f 1864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm from .. import x # a.b.x 1874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm from ... import another # a.another 1884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylma/b/c/d.py 1894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylma/b/c/e.py 1904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylma/b/c/f.py 1914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm"""] 1924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmrelative_import_test_3 = [ 1944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm "a.module", 1954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ["a", "a.module"], 1964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ["a.bar"], 1974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm [], 1984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """\ 1994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylma/__init__.py 2004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def foo(): pass 2014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylma/module.py 2024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm from . import foo 2034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm from . import bar 2044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm"""] 2054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef open_file(path): 2074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ##print "#", os.path.abspath(path) 2084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm dirname = os.path.dirname(path) 2094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm distutils.dir_util.mkpath(dirname) 2104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return open(path, "w") 2114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef create_package(source): 2134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ofi = None 2144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm try: 2154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for line in source.splitlines(): 2164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if line.startswith(" ") or line.startswith("\t"): 2174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ofi.write(line.strip() + "\n") 2184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm else: 2194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if ofi: 2204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ofi.close() 2214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ofi = open_file(os.path.join(TEST_DIR, line.strip())) 2224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm finally: 2234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if ofi: 2244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ofi.close() 2254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass ModuleFinderTest(unittest.TestCase): 2274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def _do_test(self, info, report=False): 2284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm import_this, modules, missing, maybe_missing, source = info 2294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm create_package(source) 2304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm try: 2314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm mf = modulefinder.ModuleFinder(path=TEST_PATH) 2324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm mf.import_hook(import_this) 2334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if report: 2344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm mf.report() 2354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm## # This wouldn't work in general when executed several times: 2364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm## opath = sys.path[:] 2374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm## sys.path = TEST_PATH 2384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm## try: 2394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm## __import__(import_this) 2404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm## except: 2414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm## import traceback; traceback.print_exc() 2424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm## sys.path = opath 2434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm## return 2444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm modules = set(modules) 2454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm found = set(mf.modules.keys()) 2464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm more = list(found - modules) 2474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm less = list(modules - found) 2484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # check if we found what we expected, not more, not less 2494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual((more, less), ([], [])) 2504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # check for missing and maybe missing modules 2524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm bad, maybe = mf.any_missing_maybe() 2534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(bad, missing) 2544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(maybe, maybe_missing) 2554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm finally: 2564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm distutils.dir_util.remove_tree(TEST_DIR) 2574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_package(self): 2594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self._do_test(package_test) 2604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_maybe(self): 2624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self._do_test(maybe_test) 2634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if getattr(__future__, "absolute_import", None): 2654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_maybe_new(self): 2674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self._do_test(maybe_test_new) 2684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_absolute_imports(self): 2704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self._do_test(absolute_import_test) 2714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_relative_imports(self): 2734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self._do_test(relative_import_test) 2744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_relative_imports_2(self): 2764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self._do_test(relative_import_test_2) 2774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_relative_imports_3(self): 2794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self._do_test(relative_import_test_3) 2804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef test_main(): 2824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm distutils.log.set_threshold(distutils.log.WARN) 2834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm test_support.run_unittest(ModuleFinderTest) 2844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmif __name__ == "__main__": 2864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm unittest.main() 287