183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehimport __future__ 283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehimport os 383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehimport unittest 483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehimport distutils.dir_util 583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehimport tempfile 683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehfrom test import test_support 883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehtry: set 1083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehexcept NameError: from sets import Set as set 1183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 1283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehimport modulefinder 1383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 1483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh# Note: To test modulefinder with Python 2.2, sets.py and 1583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh# modulefinder.py must be available - they are not in the standard 1683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh# library. 1783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 1883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew HsiehTEST_DIR = tempfile.mkdtemp() 1983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew HsiehTEST_PATH = [TEST_DIR, os.path.dirname(__future__.__file__)] 2083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 2183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh# Each test description is a list of 5 items: 2283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh# 2383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh# 1. a module name that will be imported by modulefinder 2483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh# 2. a list of module names that modulefinder is required to find 2583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh# 3. a list of module names that modulefinder should complain 2683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh# about because they are not found 2783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh# 4. a list of module names that modulefinder should complain 2883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh# about because they MAY be not found 2983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh# 5. a string specifying packages to create; the format is obvious imo. 3083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh# 3183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh# Each package will be created in TEST_DIR, and TEST_DIR will be 3283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh# removed after the tests again. 3383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh# Modulefinder searches in a path that contains TEST_DIR, plus 3483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh# the standard Lib directory. 3583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 3683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehmaybe_test = [ 3783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh "a.module", 3883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ["a", "a.module", "sys", 3983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh "b"], 4083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ["c"], ["b.something"], 4183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh """\ 4283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieha/__init__.py 4383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieha/module.py 4483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh from b import something 4583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh from c import something 4683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehb/__init__.py 4783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh from sys import * 4883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh"""] 4983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 5083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehmaybe_test_new = [ 5183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh "a.module", 5283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ["a", "a.module", "sys", 5383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh "b", "__future__"], 5483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ["c"], ["b.something"], 5583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh """\ 5683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieha/__init__.py 5783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieha/module.py 5883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh from b import something 5983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh from c import something 6083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehb/__init__.py 6183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh from __future__ import absolute_import 6283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh from sys import * 6383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh"""] 6483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 6583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehpackage_test = [ 6683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh "a.module", 6783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ["a", "a.b", "a.c", "a.module", "mymodule", "sys"], 6883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ["blahblah"], [], 6983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh """\ 7083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehmymodule.py 7183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieha/__init__.py 7283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh import blahblah 7383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh from a import b 7483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh import c 7583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieha/module.py 7683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh import sys 7783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh from a import b as x 7883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh from a.c import sillyname 7983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieha/b.py 8083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieha/c.py 8183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh from a.module import x 8283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh import mymodule as sillyname 8383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh from sys import version_info 8483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh"""] 8583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 8683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehabsolute_import_test = [ 8783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh "a.module", 8883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ["a", "a.module", 8983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh "b", "b.x", "b.y", "b.z", 9083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh "__future__", "sys", "exceptions"], 9183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ["blahblah"], [], 9283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh """\ 9383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehmymodule.py 9483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieha/__init__.py 9583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieha/module.py 9683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh from __future__ import absolute_import 9783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh import sys # sys 9883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh import blahblah # fails 9983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh import exceptions # exceptions 10083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh import b.x # b.x 10183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh from b import y # b.y 10283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh from b.z import * # b.z.* 10383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieha/exceptions.py 10483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieha/sys.py 10583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh import mymodule 10683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieha/b/__init__.py 10783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieha/b/x.py 10883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieha/b/y.py 10983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieha/b/z.py 11083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehb/__init__.py 11183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh import z 11283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehb/unused.py 11383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehb/x.py 11483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehb/y.py 11583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehb/z.py 11683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh"""] 11783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 11883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehrelative_import_test = [ 11983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh "a.module", 12083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ["__future__", 12183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh "a", "a.module", 12283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh "a.b", "a.b.y", "a.b.z", 12383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh "a.b.c", "a.b.c.moduleC", 12483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh "a.b.c.d", "a.b.c.e", 12583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh "a.b.x", 12683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh "exceptions"], 12783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh [], [], 12883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh """\ 12983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehmymodule.py 13083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieha/__init__.py 13183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh from .b import y, z # a.b.y, a.b.z 13283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieha/module.py 13383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh from __future__ import absolute_import # __future__ 13483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh import exceptions # exceptions 13583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieha/exceptions.py 13683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieha/sys.py 13783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieha/b/__init__.py 13883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh from ..b import x # a.b.x 13983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #from a.b.c import moduleC 14083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh from .c import moduleC # a.b.moduleC 14183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieha/b/x.py 14283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieha/b/y.py 14383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieha/b/z.py 14483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieha/b/g.py 14583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieha/b/c/__init__.py 14683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh from ..c import e # a.b.c.e 14783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieha/b/c/moduleC.py 14883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh from ..c import d # a.b.c.d 14983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieha/b/c/d.py 15083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieha/b/c/e.py 15183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieha/b/c/x.py 15283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh"""] 15383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 15483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehrelative_import_test_2 = [ 15583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh "a.module", 15683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ["a", "a.module", 15783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh "a.sys", 15883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh "a.b", "a.b.y", "a.b.z", 15983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh "a.b.c", "a.b.c.d", 16083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh "a.b.c.e", 16183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh "a.b.c.moduleC", 16283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh "a.b.c.f", 16383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh "a.b.x", 16483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh "a.another"], 16583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh [], [], 16683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh """\ 16783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehmymodule.py 16883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieha/__init__.py 16983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh from . import sys # a.sys 17083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieha/another.py 17183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieha/module.py 17283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh from .b import y, z # a.b.y, a.b.z 17383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieha/exceptions.py 17483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieha/sys.py 17583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieha/b/__init__.py 17683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh from .c import moduleC # a.b.c.moduleC 17783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh from .c import d # a.b.c.d 17883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieha/b/x.py 17983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieha/b/y.py 18083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieha/b/z.py 18183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieha/b/c/__init__.py 18283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh from . import e # a.b.c.e 18383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieha/b/c/moduleC.py 18483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh # 18583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh from . import f # a.b.c.f 18683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh from .. import x # a.b.x 18783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh from ... import another # a.another 18883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieha/b/c/d.py 18983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieha/b/c/e.py 19083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieha/b/c/f.py 19183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh"""] 19283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 19383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehrelative_import_test_3 = [ 19483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh "a.module", 19583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ["a", "a.module"], 19683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ["a.bar"], 19783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh [], 19883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh """\ 19983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieha/__init__.py 20083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def foo(): pass 20183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieha/module.py 20283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh from . import foo 20383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh from . import bar 20483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh"""] 20583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 20683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehdef open_file(path): 20783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ##print "#", os.path.abspath(path) 20883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh dirname = os.path.dirname(path) 20983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh distutils.dir_util.mkpath(dirname) 21083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh return open(path, "w") 21183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 21283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehdef create_package(source): 21383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ofi = None 21483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh try: 21583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh for line in source.splitlines(): 21683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if line.startswith(" ") or line.startswith("\t"): 21783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ofi.write(line.strip() + "\n") 21883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh else: 21983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if ofi: 22083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ofi.close() 22183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ofi = open_file(os.path.join(TEST_DIR, line.strip())) 22283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh finally: 22383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if ofi: 22483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ofi.close() 22583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 22683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehclass ModuleFinderTest(unittest.TestCase): 22783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def _do_test(self, info, report=False): 22883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh import_this, modules, missing, maybe_missing, source = info 22983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh create_package(source) 23083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh try: 23183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh mf = modulefinder.ModuleFinder(path=TEST_PATH) 23283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh mf.import_hook(import_this) 23383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if report: 23483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh mf.report() 23583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh## # This wouldn't work in general when executed several times: 23683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh## opath = sys.path[:] 23783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh## sys.path = TEST_PATH 23883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh## try: 23983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh## __import__(import_this) 24083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh## except: 24183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh## import traceback; traceback.print_exc() 24283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh## sys.path = opath 24383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh## return 24483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh modules = set(modules) 24583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh found = set(mf.modules.keys()) 24683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh more = list(found - modules) 24783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh less = list(modules - found) 24883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh # check if we found what we expected, not more, not less 24983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertEqual((more, less), ([], [])) 25083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 25183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh # check for missing and maybe missing modules 25283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh bad, maybe = mf.any_missing_maybe() 25383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertEqual(bad, missing) 25483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertEqual(maybe, maybe_missing) 25583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh finally: 25683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh distutils.dir_util.remove_tree(TEST_DIR) 25783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 25883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def test_package(self): 25983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self._do_test(package_test) 26083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 26183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def test_maybe(self): 26283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self._do_test(maybe_test) 26383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 26483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if getattr(__future__, "absolute_import", None): 26583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 26683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def test_maybe_new(self): 26783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self._do_test(maybe_test_new) 26883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 26983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def test_absolute_imports(self): 27083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self._do_test(absolute_import_test) 27183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 27283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def test_relative_imports(self): 27383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self._do_test(relative_import_test) 27483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 27583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def test_relative_imports_2(self): 27683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self._do_test(relative_import_test_2) 27783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 27883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def test_relative_imports_3(self): 27983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self._do_test(relative_import_test_3) 28083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 28183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehdef test_main(): 28283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh distutils.log.set_threshold(distutils.log.WARN) 28383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh test_support.run_unittest(ModuleFinderTest) 28483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 28583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehif __name__ == "__main__": 28683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh unittest.main() 287