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