14adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# Test packages (dotted-name import)
24adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
34adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport sys
44adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport os
54adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport tempfile
64adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport textwrap
74adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport unittest
84adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaofrom test import test_support
94adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# Helpers to create and destroy hierarchies.
124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaodef cleanout(root):
144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    names = os.listdir(root)
154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    for name in names:
164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        fullname = os.path.join(root, name)
174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        if os.path.isdir(fullname) and not os.path.islink(fullname):
184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            cleanout(fullname)
194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        else:
204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            os.remove(fullname)
214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    os.rmdir(root)
224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaodef fixdir(lst):
244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    if "__builtins__" in lst:
254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        lst.remove("__builtins__")
264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    return lst
274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# XXX Things to test
304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#
314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# import package without __init__
324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# import package with __init__
334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# __init__ importing submodule
344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# __init__ importing global module
354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# __init__ defining variables
364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# submodule importing other submodule
374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# submodule importing global module
384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# submodule import submodule via global name
394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# from package import submodule
404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# from package import subpackage
414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# from package import variable (defined in __init__)
424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# from package import * (defined in __init__)
434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass Test(unittest.TestCase):
464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def setUp(self):
484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.root = None
494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.pkgname = None
504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.syspath = list(sys.path)
514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def tearDown(self):
534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        sys.path[:] = self.syspath
544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        if self.root: # Only clean if the test was actually run
554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            cleanout(self.root)
564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # delete all modules concerning the tested hierarchy
584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        if self.pkgname:
594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            modules = [name for name in sys.modules
604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                       if self.pkgname in name.split('.')]
614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            for name in modules:
624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                del sys.modules[name]
634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def run_code(self, code):
654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        exec(textwrap.dedent(code), globals(), {"self": self})
664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def mkhier(self, descr):
684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        root = tempfile.mkdtemp()
694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        sys.path.insert(0, root)
704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        if not os.path.isdir(root):
714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            os.mkdir(root)
724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        for name, contents in descr:
734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            comps = name.split()
744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            fullname = root
754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            for c in comps:
764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                fullname = os.path.join(fullname, c)
774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            if contents is None:
784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                os.mkdir(fullname)
794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            else:
804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                f = open(fullname, "w")
814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                f.write(contents)
824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                if contents and contents[-1] != '\n':
834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                    f.write('\n')
844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                f.close()
854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.root = root
864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # package name is the name of the first item
874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.pkgname = descr[0][0]
884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_1(self):
904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        hier = [("t1", None), ("t1 __init__"+os.extsep+"py", "")]
914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.mkhier(hier)
924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        import t1
934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_2(self):
954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        hier = [
964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao         ("t2", None),
974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao         ("t2 __init__"+os.extsep+"py", "'doc for t2'"),
984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao         ("t2 sub", None),
994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao         ("t2 sub __init__"+os.extsep+"py", ""),
1004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao         ("t2 sub subsub", None),
1014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao         ("t2 sub subsub __init__"+os.extsep+"py", "spam = 1"),
1024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        ]
1034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.mkhier(hier)
1044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        import t2.sub
1064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        import t2.sub.subsub
1074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(t2.__name__, "t2")
1084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(t2.sub.__name__, "t2.sub")
1094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(t2.sub.subsub.__name__, "t2.sub.subsub")
1104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # This exec crap is needed because Py3k forbids 'import *' outside
1124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # of module-scope and __import__() is insufficient for what we need.
1134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        s = """
1144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            import t2
1154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            from t2 import *
1164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertEqual(dir(), ['self', 'sub', 't2'])
1174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            """
1184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.run_code(s)
1194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        from t2 import sub
1214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        from t2.sub import subsub
1224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        from t2.sub.subsub import spam
1234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(sub.__name__, "t2.sub")
1244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(subsub.__name__, "t2.sub.subsub")
1254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(sub.subsub.__name__, "t2.sub.subsub")
1264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        for name in ['spam', 'sub', 'subsub', 't2']:
1274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertTrue(locals()["name"], "Failed to import %s" % name)
1284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        import t2.sub
1304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        import t2.sub.subsub
1314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(t2.__name__, "t2")
1324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(t2.sub.__name__, "t2.sub")
1334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(t2.sub.subsub.__name__, "t2.sub.subsub")
1344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        s = """
1364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            from t2 import *
1374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertTrue(dir(), ['self', 'sub'])
1384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            """
1394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.run_code(s)
1404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_3(self):
1424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        hier = [
1434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                ("t3", None),
1444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                ("t3 __init__"+os.extsep+"py", ""),
1454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                ("t3 sub", None),
1464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                ("t3 sub __init__"+os.extsep+"py", ""),
1474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                ("t3 sub subsub", None),
1484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                ("t3 sub subsub __init__"+os.extsep+"py", "spam = 1"),
1494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao               ]
1504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.mkhier(hier)
1514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        import t3.sub.subsub
1534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(t3.__name__, "t3")
1544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(t3.sub.__name__, "t3.sub")
1554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(t3.sub.subsub.__name__, "t3.sub.subsub")
1564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_4(self):
1584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        hier = [
1594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        ("t4.py", "raise RuntimeError('Shouldnt load t4.py')"),
1604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        ("t4", None),
1614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        ("t4 __init__"+os.extsep+"py", ""),
1624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        ("t4 sub.py", "raise RuntimeError('Shouldnt load sub.py')"),
1634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        ("t4 sub", None),
1644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        ("t4 sub __init__"+os.extsep+"py", ""),
1654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        ("t4 sub subsub"+os.extsep+"py",
1664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao         "raise RuntimeError('Shouldnt load subsub.py')"),
1674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        ("t4 sub subsub", None),
1684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        ("t4 sub subsub __init__"+os.extsep+"py", "spam = 1"),
1694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao               ]
1704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.mkhier(hier)
1714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        s = """
1734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            from t4.sub.subsub import *
1744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertEqual(spam, 1)
1754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            """
1764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.run_code(s)
1774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_5(self):
1794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        hier = [
1804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        ("t5", None),
1814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        ("t5 __init__"+os.extsep+"py", "import t5.foo"),
1824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        ("t5 string"+os.extsep+"py", "spam = 1"),
1834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        ("t5 foo"+os.extsep+"py",
1844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao         "from . import string; assert string.spam == 1"),
1854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao         ]
1864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.mkhier(hier)
1874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        import t5
1894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        s = """
1904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            from t5 import *
1914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertEqual(dir(), ['foo', 'self', 'string', 't5'])
1924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            """
1934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.run_code(s)
1944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        import t5
1964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(fixdir(dir(t5)),
1974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                         ['__doc__', '__file__', '__name__',
1984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                          '__package__', '__path__', 'foo', 'string', 't5'])
1994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(fixdir(dir(t5.foo)),
2004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                         ['__doc__', '__file__', '__name__', '__package__',
2014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                          'string'])
2024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(fixdir(dir(t5.string)),
2034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                         ['__doc__', '__file__', '__name__','__package__',
2044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                          'spam'])
2054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
2064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_6(self):
2074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        hier = [
2084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                ("t6", None),
2094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                ("t6 __init__"+os.extsep+"py",
2104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                 "__all__ = ['spam', 'ham', 'eggs']"),
2114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                ("t6 spam"+os.extsep+"py", ""),
2124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                ("t6 ham"+os.extsep+"py", ""),
2134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                ("t6 eggs"+os.extsep+"py", ""),
2144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao               ]
2154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.mkhier(hier)
2164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
2174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        import t6
2184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(fixdir(dir(t6)),
2194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                         ['__all__', '__doc__', '__file__',
2204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                          '__name__', '__package__', '__path__'])
2214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        s = """
2224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            import t6
2234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            from t6 import *
2244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertEqual(fixdir(dir(t6)),
2254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                             ['__all__', '__doc__', '__file__',
2264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                              '__name__', '__package__', '__path__',
2274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                              'eggs', 'ham', 'spam'])
2284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertEqual(dir(), ['eggs', 'ham', 'self', 'spam', 't6'])
2294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            """
2304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.run_code(s)
2314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
2324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_7(self):
2334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        hier = [
2344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                ("t7", None),
2354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                ("t7"+os.extsep+"py", ""),
2364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                ("t7 __init__"+os.extsep+"py", ""),
2374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                ("t7 sub"+os.extsep+"py",
2384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                 "raise RuntimeError('Shouldnt load sub.py')"),
2394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                ("t7 sub", None),
2404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                ("t7 sub __init__"+os.extsep+"py", ""),
2414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                ("t7 sub "+os.extsep+"py",
2424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                 "raise RuntimeError('Shouldnt load subsub.py')"),
2434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                ("t7 sub subsub", None),
2444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                ("t7 sub subsub __init__"+os.extsep+"py",
2454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                 "spam = 1"),
2464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao               ]
2474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.mkhier(hier)
2484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
2494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
2504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        t7, sub, subsub = None, None, None
2514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        import t7 as tas
2524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(fixdir(dir(tas)),
2534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                         ['__doc__', '__file__', '__name__',
2544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                          '__package__', '__path__'])
2554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertFalse(t7)
2564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        from t7 import sub as subpar
2574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(fixdir(dir(subpar)),
2584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                         ['__doc__', '__file__', '__name__',
2594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                          '__package__', '__path__'])
2604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertFalse(t7)
2614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertFalse(sub)
2624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        from t7.sub import subsub as subsubsub
2634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(fixdir(dir(subsubsub)),
2644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                         ['__doc__', '__file__', '__name__',
2654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                         '__package__', '__path__', 'spam'])
2664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertFalse(t7)
2674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertFalse(sub)
2684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertFalse(subsub)
2694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        from t7.sub.subsub import spam as ham
2704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(ham, 1)
2714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertFalse(t7)
2724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertFalse(sub)
2734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertFalse(subsub)
2744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
2754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    @unittest.skipIf(sys.flags.optimize >= 2,
2764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                     "Docstrings are omitted with -O2 and above")
2774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_8(self):
2784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        hier = [
2794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                ("t8", None),
2804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                ("t8 __init__"+os.extsep+"py", "'doc for t8'"),
2814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao               ]
2824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.mkhier(hier)
2834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
2844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        import t8
2854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(t8.__doc__, "doc for t8")
2864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
2874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaodef test_main():
2884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    test_support.run_unittest(__name__)
2894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
2904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
2914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoif __name__ == "__main__":
2924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    test_main()
293