17db96d56Sopenharmony_ciimport os 27db96d56Sopenharmony_ciimport errno 37db96d56Sopenharmony_ciimport importlib.machinery 47db96d56Sopenharmony_ciimport py_compile 57db96d56Sopenharmony_ciimport shutil 67db96d56Sopenharmony_ciimport unittest 77db96d56Sopenharmony_ciimport tempfile 87db96d56Sopenharmony_ci 97db96d56Sopenharmony_cifrom test import support 107db96d56Sopenharmony_ci 117db96d56Sopenharmony_ciimport modulefinder 127db96d56Sopenharmony_ci 137db96d56Sopenharmony_ci# Each test description is a list of 5 items: 147db96d56Sopenharmony_ci# 157db96d56Sopenharmony_ci# 1. a module name that will be imported by modulefinder 167db96d56Sopenharmony_ci# 2. a list of module names that modulefinder is required to find 177db96d56Sopenharmony_ci# 3. a list of module names that modulefinder should complain 187db96d56Sopenharmony_ci# about because they are not found 197db96d56Sopenharmony_ci# 4. a list of module names that modulefinder should complain 207db96d56Sopenharmony_ci# about because they MAY be not found 217db96d56Sopenharmony_ci# 5. a string specifying packages to create; the format is obvious imo. 227db96d56Sopenharmony_ci# 237db96d56Sopenharmony_ci# Each package will be created in test_dir, and test_dir will be 247db96d56Sopenharmony_ci# removed after the tests again. 257db96d56Sopenharmony_ci# Modulefinder searches in a path that contains test_dir, plus 267db96d56Sopenharmony_ci# the standard Lib directory. 277db96d56Sopenharmony_ci 287db96d56Sopenharmony_cimaybe_test = [ 297db96d56Sopenharmony_ci "a.module", 307db96d56Sopenharmony_ci ["a", "a.module", "sys", 317db96d56Sopenharmony_ci "b"], 327db96d56Sopenharmony_ci ["c"], ["b.something"], 337db96d56Sopenharmony_ci """\ 347db96d56Sopenharmony_cia/__init__.py 357db96d56Sopenharmony_cia/module.py 367db96d56Sopenharmony_ci from b import something 377db96d56Sopenharmony_ci from c import something 387db96d56Sopenharmony_cib/__init__.py 397db96d56Sopenharmony_ci from sys import * 407db96d56Sopenharmony_ci""", 417db96d56Sopenharmony_ci] 427db96d56Sopenharmony_ci 437db96d56Sopenharmony_cimaybe_test_new = [ 447db96d56Sopenharmony_ci "a.module", 457db96d56Sopenharmony_ci ["a", "a.module", "sys", 467db96d56Sopenharmony_ci "b", "__future__"], 477db96d56Sopenharmony_ci ["c"], ["b.something"], 487db96d56Sopenharmony_ci """\ 497db96d56Sopenharmony_cia/__init__.py 507db96d56Sopenharmony_cia/module.py 517db96d56Sopenharmony_ci from b import something 527db96d56Sopenharmony_ci from c import something 537db96d56Sopenharmony_cib/__init__.py 547db96d56Sopenharmony_ci from __future__ import absolute_import 557db96d56Sopenharmony_ci from sys import * 567db96d56Sopenharmony_ci"""] 577db96d56Sopenharmony_ci 587db96d56Sopenharmony_cipackage_test = [ 597db96d56Sopenharmony_ci "a.module", 607db96d56Sopenharmony_ci ["a", "a.b", "a.c", "a.module", "mymodule", "sys"], 617db96d56Sopenharmony_ci ["blahblah", "c"], [], 627db96d56Sopenharmony_ci """\ 637db96d56Sopenharmony_cimymodule.py 647db96d56Sopenharmony_cia/__init__.py 657db96d56Sopenharmony_ci import blahblah 667db96d56Sopenharmony_ci from a import b 677db96d56Sopenharmony_ci import c 687db96d56Sopenharmony_cia/module.py 697db96d56Sopenharmony_ci import sys 707db96d56Sopenharmony_ci from a import b as x 717db96d56Sopenharmony_ci from a.c import sillyname 727db96d56Sopenharmony_cia/b.py 737db96d56Sopenharmony_cia/c.py 747db96d56Sopenharmony_ci from a.module import x 757db96d56Sopenharmony_ci import mymodule as sillyname 767db96d56Sopenharmony_ci from sys import version_info 777db96d56Sopenharmony_ci"""] 787db96d56Sopenharmony_ci 797db96d56Sopenharmony_ciabsolute_import_test = [ 807db96d56Sopenharmony_ci "a.module", 817db96d56Sopenharmony_ci ["a", "a.module", 827db96d56Sopenharmony_ci "b", "b.x", "b.y", "b.z", 837db96d56Sopenharmony_ci "__future__", "sys", "gc"], 847db96d56Sopenharmony_ci ["blahblah", "z"], [], 857db96d56Sopenharmony_ci """\ 867db96d56Sopenharmony_cimymodule.py 877db96d56Sopenharmony_cia/__init__.py 887db96d56Sopenharmony_cia/module.py 897db96d56Sopenharmony_ci from __future__ import absolute_import 907db96d56Sopenharmony_ci import sys # sys 917db96d56Sopenharmony_ci import blahblah # fails 927db96d56Sopenharmony_ci import gc # gc 937db96d56Sopenharmony_ci import b.x # b.x 947db96d56Sopenharmony_ci from b import y # b.y 957db96d56Sopenharmony_ci from b.z import * # b.z.* 967db96d56Sopenharmony_cia/gc.py 977db96d56Sopenharmony_cia/sys.py 987db96d56Sopenharmony_ci import mymodule 997db96d56Sopenharmony_cia/b/__init__.py 1007db96d56Sopenharmony_cia/b/x.py 1017db96d56Sopenharmony_cia/b/y.py 1027db96d56Sopenharmony_cia/b/z.py 1037db96d56Sopenharmony_cib/__init__.py 1047db96d56Sopenharmony_ci import z 1057db96d56Sopenharmony_cib/unused.py 1067db96d56Sopenharmony_cib/x.py 1077db96d56Sopenharmony_cib/y.py 1087db96d56Sopenharmony_cib/z.py 1097db96d56Sopenharmony_ci"""] 1107db96d56Sopenharmony_ci 1117db96d56Sopenharmony_cirelative_import_test = [ 1127db96d56Sopenharmony_ci "a.module", 1137db96d56Sopenharmony_ci ["__future__", 1147db96d56Sopenharmony_ci "a", "a.module", 1157db96d56Sopenharmony_ci "a.b", "a.b.y", "a.b.z", 1167db96d56Sopenharmony_ci "a.b.c", "a.b.c.moduleC", 1177db96d56Sopenharmony_ci "a.b.c.d", "a.b.c.e", 1187db96d56Sopenharmony_ci "a.b.x", 1197db96d56Sopenharmony_ci "gc"], 1207db96d56Sopenharmony_ci [], [], 1217db96d56Sopenharmony_ci """\ 1227db96d56Sopenharmony_cimymodule.py 1237db96d56Sopenharmony_cia/__init__.py 1247db96d56Sopenharmony_ci from .b import y, z # a.b.y, a.b.z 1257db96d56Sopenharmony_cia/module.py 1267db96d56Sopenharmony_ci from __future__ import absolute_import # __future__ 1277db96d56Sopenharmony_ci import gc # gc 1287db96d56Sopenharmony_cia/gc.py 1297db96d56Sopenharmony_cia/sys.py 1307db96d56Sopenharmony_cia/b/__init__.py 1317db96d56Sopenharmony_ci from ..b import x # a.b.x 1327db96d56Sopenharmony_ci #from a.b.c import moduleC 1337db96d56Sopenharmony_ci from .c import moduleC # a.b.moduleC 1347db96d56Sopenharmony_cia/b/x.py 1357db96d56Sopenharmony_cia/b/y.py 1367db96d56Sopenharmony_cia/b/z.py 1377db96d56Sopenharmony_cia/b/g.py 1387db96d56Sopenharmony_cia/b/c/__init__.py 1397db96d56Sopenharmony_ci from ..c import e # a.b.c.e 1407db96d56Sopenharmony_cia/b/c/moduleC.py 1417db96d56Sopenharmony_ci from ..c import d # a.b.c.d 1427db96d56Sopenharmony_cia/b/c/d.py 1437db96d56Sopenharmony_cia/b/c/e.py 1447db96d56Sopenharmony_cia/b/c/x.py 1457db96d56Sopenharmony_ci"""] 1467db96d56Sopenharmony_ci 1477db96d56Sopenharmony_cirelative_import_test_2 = [ 1487db96d56Sopenharmony_ci "a.module", 1497db96d56Sopenharmony_ci ["a", "a.module", 1507db96d56Sopenharmony_ci "a.sys", 1517db96d56Sopenharmony_ci "a.b", "a.b.y", "a.b.z", 1527db96d56Sopenharmony_ci "a.b.c", "a.b.c.d", 1537db96d56Sopenharmony_ci "a.b.c.e", 1547db96d56Sopenharmony_ci "a.b.c.moduleC", 1557db96d56Sopenharmony_ci "a.b.c.f", 1567db96d56Sopenharmony_ci "a.b.x", 1577db96d56Sopenharmony_ci "a.another"], 1587db96d56Sopenharmony_ci [], [], 1597db96d56Sopenharmony_ci """\ 1607db96d56Sopenharmony_cimymodule.py 1617db96d56Sopenharmony_cia/__init__.py 1627db96d56Sopenharmony_ci from . import sys # a.sys 1637db96d56Sopenharmony_cia/another.py 1647db96d56Sopenharmony_cia/module.py 1657db96d56Sopenharmony_ci from .b import y, z # a.b.y, a.b.z 1667db96d56Sopenharmony_cia/gc.py 1677db96d56Sopenharmony_cia/sys.py 1687db96d56Sopenharmony_cia/b/__init__.py 1697db96d56Sopenharmony_ci from .c import moduleC # a.b.c.moduleC 1707db96d56Sopenharmony_ci from .c import d # a.b.c.d 1717db96d56Sopenharmony_cia/b/x.py 1727db96d56Sopenharmony_cia/b/y.py 1737db96d56Sopenharmony_cia/b/z.py 1747db96d56Sopenharmony_cia/b/c/__init__.py 1757db96d56Sopenharmony_ci from . import e # a.b.c.e 1767db96d56Sopenharmony_cia/b/c/moduleC.py 1777db96d56Sopenharmony_ci # 1787db96d56Sopenharmony_ci from . import f # a.b.c.f 1797db96d56Sopenharmony_ci from .. import x # a.b.x 1807db96d56Sopenharmony_ci from ... import another # a.another 1817db96d56Sopenharmony_cia/b/c/d.py 1827db96d56Sopenharmony_cia/b/c/e.py 1837db96d56Sopenharmony_cia/b/c/f.py 1847db96d56Sopenharmony_ci"""] 1857db96d56Sopenharmony_ci 1867db96d56Sopenharmony_cirelative_import_test_3 = [ 1877db96d56Sopenharmony_ci "a.module", 1887db96d56Sopenharmony_ci ["a", "a.module"], 1897db96d56Sopenharmony_ci ["a.bar"], 1907db96d56Sopenharmony_ci [], 1917db96d56Sopenharmony_ci """\ 1927db96d56Sopenharmony_cia/__init__.py 1937db96d56Sopenharmony_ci def foo(): pass 1947db96d56Sopenharmony_cia/module.py 1957db96d56Sopenharmony_ci from . import foo 1967db96d56Sopenharmony_ci from . import bar 1977db96d56Sopenharmony_ci"""] 1987db96d56Sopenharmony_ci 1997db96d56Sopenharmony_cirelative_import_test_4 = [ 2007db96d56Sopenharmony_ci "a.module", 2017db96d56Sopenharmony_ci ["a", "a.module"], 2027db96d56Sopenharmony_ci [], 2037db96d56Sopenharmony_ci [], 2047db96d56Sopenharmony_ci """\ 2057db96d56Sopenharmony_cia/__init__.py 2067db96d56Sopenharmony_ci def foo(): pass 2077db96d56Sopenharmony_cia/module.py 2087db96d56Sopenharmony_ci from . import * 2097db96d56Sopenharmony_ci"""] 2107db96d56Sopenharmony_ci 2117db96d56Sopenharmony_cibytecode_test = [ 2127db96d56Sopenharmony_ci "a", 2137db96d56Sopenharmony_ci ["a"], 2147db96d56Sopenharmony_ci [], 2157db96d56Sopenharmony_ci [], 2167db96d56Sopenharmony_ci "" 2177db96d56Sopenharmony_ci] 2187db96d56Sopenharmony_ci 2197db96d56Sopenharmony_cisyntax_error_test = [ 2207db96d56Sopenharmony_ci "a.module", 2217db96d56Sopenharmony_ci ["a", "a.module", "b"], 2227db96d56Sopenharmony_ci ["b.module"], [], 2237db96d56Sopenharmony_ci """\ 2247db96d56Sopenharmony_cia/__init__.py 2257db96d56Sopenharmony_cia/module.py 2267db96d56Sopenharmony_ci import b.module 2277db96d56Sopenharmony_cib/__init__.py 2287db96d56Sopenharmony_cib/module.py 2297db96d56Sopenharmony_ci ? # SyntaxError: invalid syntax 2307db96d56Sopenharmony_ci"""] 2317db96d56Sopenharmony_ci 2327db96d56Sopenharmony_ci 2337db96d56Sopenharmony_cisame_name_as_bad_test = [ 2347db96d56Sopenharmony_ci "a.module", 2357db96d56Sopenharmony_ci ["a", "a.module", "b", "b.c"], 2367db96d56Sopenharmony_ci ["c"], [], 2377db96d56Sopenharmony_ci """\ 2387db96d56Sopenharmony_cia/__init__.py 2397db96d56Sopenharmony_cia/module.py 2407db96d56Sopenharmony_ci import c 2417db96d56Sopenharmony_ci from b import c 2427db96d56Sopenharmony_cib/__init__.py 2437db96d56Sopenharmony_cib/c.py 2447db96d56Sopenharmony_ci"""] 2457db96d56Sopenharmony_ci 2467db96d56Sopenharmony_cicoding_default_utf8_test = [ 2477db96d56Sopenharmony_ci "a_utf8", 2487db96d56Sopenharmony_ci ["a_utf8", "b_utf8"], 2497db96d56Sopenharmony_ci [], [], 2507db96d56Sopenharmony_ci """\ 2517db96d56Sopenharmony_cia_utf8.py 2527db96d56Sopenharmony_ci # use the default of utf8 2537db96d56Sopenharmony_ci print('Unicode test A code point 2090 \u2090 that is not valid in cp1252') 2547db96d56Sopenharmony_ci import b_utf8 2557db96d56Sopenharmony_cib_utf8.py 2567db96d56Sopenharmony_ci # use the default of utf8 2577db96d56Sopenharmony_ci print('Unicode test B code point 2090 \u2090 that is not valid in cp1252') 2587db96d56Sopenharmony_ci"""] 2597db96d56Sopenharmony_ci 2607db96d56Sopenharmony_cicoding_explicit_utf8_test = [ 2617db96d56Sopenharmony_ci "a_utf8", 2627db96d56Sopenharmony_ci ["a_utf8", "b_utf8"], 2637db96d56Sopenharmony_ci [], [], 2647db96d56Sopenharmony_ci """\ 2657db96d56Sopenharmony_cia_utf8.py 2667db96d56Sopenharmony_ci # coding=utf8 2677db96d56Sopenharmony_ci print('Unicode test A code point 2090 \u2090 that is not valid in cp1252') 2687db96d56Sopenharmony_ci import b_utf8 2697db96d56Sopenharmony_cib_utf8.py 2707db96d56Sopenharmony_ci # use the default of utf8 2717db96d56Sopenharmony_ci print('Unicode test B code point 2090 \u2090 that is not valid in cp1252') 2727db96d56Sopenharmony_ci"""] 2737db96d56Sopenharmony_ci 2747db96d56Sopenharmony_cicoding_explicit_cp1252_test = [ 2757db96d56Sopenharmony_ci "a_cp1252", 2767db96d56Sopenharmony_ci ["a_cp1252", "b_utf8"], 2777db96d56Sopenharmony_ci [], [], 2787db96d56Sopenharmony_ci b"""\ 2797db96d56Sopenharmony_cia_cp1252.py 2807db96d56Sopenharmony_ci # coding=cp1252 2817db96d56Sopenharmony_ci # 0xe2 is not allowed in utf8 2827db96d56Sopenharmony_ci print('CP1252 test P\xe2t\xe9') 2837db96d56Sopenharmony_ci import b_utf8 2847db96d56Sopenharmony_ci""" + """\ 2857db96d56Sopenharmony_cib_utf8.py 2867db96d56Sopenharmony_ci # use the default of utf8 2877db96d56Sopenharmony_ci print('Unicode test A code point 2090 \u2090 that is not valid in cp1252') 2887db96d56Sopenharmony_ci""".encode('utf-8')] 2897db96d56Sopenharmony_ci 2907db96d56Sopenharmony_cidef open_file(path): 2917db96d56Sopenharmony_ci dirname = os.path.dirname(path) 2927db96d56Sopenharmony_ci try: 2937db96d56Sopenharmony_ci os.makedirs(dirname) 2947db96d56Sopenharmony_ci except OSError as e: 2957db96d56Sopenharmony_ci if e.errno != errno.EEXIST: 2967db96d56Sopenharmony_ci raise 2977db96d56Sopenharmony_ci return open(path, 'wb') 2987db96d56Sopenharmony_ci 2997db96d56Sopenharmony_ci 3007db96d56Sopenharmony_cidef create_package(test_dir, source): 3017db96d56Sopenharmony_ci ofi = None 3027db96d56Sopenharmony_ci try: 3037db96d56Sopenharmony_ci for line in source.splitlines(): 3047db96d56Sopenharmony_ci if type(line) != bytes: 3057db96d56Sopenharmony_ci line = line.encode('utf-8') 3067db96d56Sopenharmony_ci if line.startswith(b' ') or line.startswith(b'\t'): 3077db96d56Sopenharmony_ci ofi.write(line.strip() + b'\n') 3087db96d56Sopenharmony_ci else: 3097db96d56Sopenharmony_ci if ofi: 3107db96d56Sopenharmony_ci ofi.close() 3117db96d56Sopenharmony_ci if type(line) == bytes: 3127db96d56Sopenharmony_ci line = line.decode('utf-8') 3137db96d56Sopenharmony_ci ofi = open_file(os.path.join(test_dir, line.strip())) 3147db96d56Sopenharmony_ci finally: 3157db96d56Sopenharmony_ci if ofi: 3167db96d56Sopenharmony_ci ofi.close() 3177db96d56Sopenharmony_ci 3187db96d56Sopenharmony_ciclass ModuleFinderTest(unittest.TestCase): 3197db96d56Sopenharmony_ci def setUp(self): 3207db96d56Sopenharmony_ci self.test_dir = tempfile.mkdtemp() 3217db96d56Sopenharmony_ci self.test_path = [self.test_dir, os.path.dirname(tempfile.__file__)] 3227db96d56Sopenharmony_ci 3237db96d56Sopenharmony_ci def tearDown(self): 3247db96d56Sopenharmony_ci shutil.rmtree(self.test_dir) 3257db96d56Sopenharmony_ci 3267db96d56Sopenharmony_ci def _do_test(self, info, report=False, debug=0, replace_paths=[], modulefinder_class=modulefinder.ModuleFinder): 3277db96d56Sopenharmony_ci import_this, modules, missing, maybe_missing, source = info 3287db96d56Sopenharmony_ci create_package(self.test_dir, source) 3297db96d56Sopenharmony_ci mf = modulefinder_class(path=self.test_path, debug=debug, 3307db96d56Sopenharmony_ci replace_paths=replace_paths) 3317db96d56Sopenharmony_ci mf.import_hook(import_this) 3327db96d56Sopenharmony_ci if report: 3337db96d56Sopenharmony_ci mf.report() 3347db96d56Sopenharmony_ci## # This wouldn't work in general when executed several times: 3357db96d56Sopenharmony_ci## opath = sys.path[:] 3367db96d56Sopenharmony_ci## sys.path = self.test_path 3377db96d56Sopenharmony_ci## try: 3387db96d56Sopenharmony_ci## __import__(import_this) 3397db96d56Sopenharmony_ci## except: 3407db96d56Sopenharmony_ci## import traceback; traceback.print_exc() 3417db96d56Sopenharmony_ci## sys.path = opath 3427db96d56Sopenharmony_ci## return 3437db96d56Sopenharmony_ci modules = sorted(set(modules)) 3447db96d56Sopenharmony_ci found = sorted(mf.modules) 3457db96d56Sopenharmony_ci # check if we found what we expected, not more, not less 3467db96d56Sopenharmony_ci self.assertEqual(found, modules) 3477db96d56Sopenharmony_ci 3487db96d56Sopenharmony_ci # check for missing and maybe missing modules 3497db96d56Sopenharmony_ci bad, maybe = mf.any_missing_maybe() 3507db96d56Sopenharmony_ci self.assertEqual(bad, missing) 3517db96d56Sopenharmony_ci self.assertEqual(maybe, maybe_missing) 3527db96d56Sopenharmony_ci 3537db96d56Sopenharmony_ci def test_package(self): 3547db96d56Sopenharmony_ci self._do_test(package_test) 3557db96d56Sopenharmony_ci 3567db96d56Sopenharmony_ci def test_maybe(self): 3577db96d56Sopenharmony_ci self._do_test(maybe_test) 3587db96d56Sopenharmony_ci 3597db96d56Sopenharmony_ci def test_maybe_new(self): 3607db96d56Sopenharmony_ci self._do_test(maybe_test_new) 3617db96d56Sopenharmony_ci 3627db96d56Sopenharmony_ci def test_absolute_imports(self): 3637db96d56Sopenharmony_ci self._do_test(absolute_import_test) 3647db96d56Sopenharmony_ci 3657db96d56Sopenharmony_ci def test_relative_imports(self): 3667db96d56Sopenharmony_ci self._do_test(relative_import_test) 3677db96d56Sopenharmony_ci 3687db96d56Sopenharmony_ci def test_relative_imports_2(self): 3697db96d56Sopenharmony_ci self._do_test(relative_import_test_2) 3707db96d56Sopenharmony_ci 3717db96d56Sopenharmony_ci def test_relative_imports_3(self): 3727db96d56Sopenharmony_ci self._do_test(relative_import_test_3) 3737db96d56Sopenharmony_ci 3747db96d56Sopenharmony_ci def test_relative_imports_4(self): 3757db96d56Sopenharmony_ci self._do_test(relative_import_test_4) 3767db96d56Sopenharmony_ci 3777db96d56Sopenharmony_ci def test_syntax_error(self): 3787db96d56Sopenharmony_ci self._do_test(syntax_error_test) 3797db96d56Sopenharmony_ci 3807db96d56Sopenharmony_ci def test_same_name_as_bad(self): 3817db96d56Sopenharmony_ci self._do_test(same_name_as_bad_test) 3827db96d56Sopenharmony_ci 3837db96d56Sopenharmony_ci def test_bytecode(self): 3847db96d56Sopenharmony_ci base_path = os.path.join(self.test_dir, 'a') 3857db96d56Sopenharmony_ci source_path = base_path + importlib.machinery.SOURCE_SUFFIXES[0] 3867db96d56Sopenharmony_ci bytecode_path = base_path + importlib.machinery.BYTECODE_SUFFIXES[0] 3877db96d56Sopenharmony_ci with open_file(source_path) as file: 3887db96d56Sopenharmony_ci file.write('testing_modulefinder = True\n'.encode('utf-8')) 3897db96d56Sopenharmony_ci py_compile.compile(source_path, cfile=bytecode_path) 3907db96d56Sopenharmony_ci os.remove(source_path) 3917db96d56Sopenharmony_ci self._do_test(bytecode_test) 3927db96d56Sopenharmony_ci 3937db96d56Sopenharmony_ci def test_replace_paths(self): 3947db96d56Sopenharmony_ci old_path = os.path.join(self.test_dir, 'a', 'module.py') 3957db96d56Sopenharmony_ci new_path = os.path.join(self.test_dir, 'a', 'spam.py') 3967db96d56Sopenharmony_ci with support.captured_stdout() as output: 3977db96d56Sopenharmony_ci self._do_test(maybe_test, debug=2, 3987db96d56Sopenharmony_ci replace_paths=[(old_path, new_path)]) 3997db96d56Sopenharmony_ci output = output.getvalue() 4007db96d56Sopenharmony_ci expected = "co_filename %r changed to %r" % (old_path, new_path) 4017db96d56Sopenharmony_ci self.assertIn(expected, output) 4027db96d56Sopenharmony_ci 4037db96d56Sopenharmony_ci def test_extended_opargs(self): 4047db96d56Sopenharmony_ci extended_opargs_test = [ 4057db96d56Sopenharmony_ci "a", 4067db96d56Sopenharmony_ci ["a", "b"], 4077db96d56Sopenharmony_ci [], [], 4087db96d56Sopenharmony_ci """\ 4097db96d56Sopenharmony_cia.py 4107db96d56Sopenharmony_ci %r 4117db96d56Sopenharmony_ci import b 4127db96d56Sopenharmony_cib.py 4137db96d56Sopenharmony_ci""" % list(range(2**16))] # 2**16 constants 4147db96d56Sopenharmony_ci self._do_test(extended_opargs_test) 4157db96d56Sopenharmony_ci 4167db96d56Sopenharmony_ci def test_coding_default_utf8(self): 4177db96d56Sopenharmony_ci self._do_test(coding_default_utf8_test) 4187db96d56Sopenharmony_ci 4197db96d56Sopenharmony_ci def test_coding_explicit_utf8(self): 4207db96d56Sopenharmony_ci self._do_test(coding_explicit_utf8_test) 4217db96d56Sopenharmony_ci 4227db96d56Sopenharmony_ci def test_coding_explicit_cp1252(self): 4237db96d56Sopenharmony_ci self._do_test(coding_explicit_cp1252_test) 4247db96d56Sopenharmony_ci 4257db96d56Sopenharmony_ci def test_load_module_api(self): 4267db96d56Sopenharmony_ci class CheckLoadModuleApi(modulefinder.ModuleFinder): 4277db96d56Sopenharmony_ci def __init__(self, *args, **kwds): 4287db96d56Sopenharmony_ci super().__init__(*args, **kwds) 4297db96d56Sopenharmony_ci 4307db96d56Sopenharmony_ci def load_module(self, fqname, fp, pathname, file_info): 4317db96d56Sopenharmony_ci # confirm that the fileinfo is a tuple of 3 elements 4327db96d56Sopenharmony_ci suffix, mode, type = file_info 4337db96d56Sopenharmony_ci return super().load_module(fqname, fp, pathname, file_info) 4347db96d56Sopenharmony_ci 4357db96d56Sopenharmony_ci self._do_test(absolute_import_test, modulefinder_class=CheckLoadModuleApi) 4367db96d56Sopenharmony_ci 4377db96d56Sopenharmony_ciif __name__ == "__main__": 4387db96d56Sopenharmony_ci unittest.main() 439