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