@@ -450,8 +450,9 @@ def testZipImporterMethods(self):
450450451451zi=zipimport.zipimporter(TEMP_ZIP)
452452self.assertEqual(zi.archive, TEMP_ZIP)
453-self.assertEqual(zi.is_package(TESTPACK), True)
453+self.assertTrue(zi.is_package(TESTPACK))
454454455+# PEP 302
455456find_mod=zi.find_module('spam')
456457self.assertIsNotNone(find_mod)
457458self.assertIsInstance(find_mod, zipimport.zipimporter)
@@ -462,25 +463,39 @@ def testZipImporterMethods(self):
462463mod=zi.load_module(TESTPACK)
463464self.assertEqual(zi.get_filename(TESTPACK), mod.__file__)
464465466+# PEP 451
467+spec=zi.find_spec('spam')
468+self.assertIsNotNone(spec)
469+self.assertIsInstance(spec.loader, zipimport.zipimporter)
470+self.assertFalse(spec.loader.is_package('spam'))
471+exec_mod=importlib.util.module_from_spec(spec)
472+spec.loader.exec_module(exec_mod)
473+self.assertEqual(spec.loader.get_filename('spam'), exec_mod.__file__)
474+475+spec=zi.find_spec(TESTPACK)
476+mod=importlib.util.module_from_spec(spec)
477+spec.loader.exec_module(mod)
478+self.assertEqual(zi.get_filename(TESTPACK), mod.__file__)
479+465480existing_pack_path=importlib.import_module(TESTPACK).__path__[0]
466481expected_path_path=os.path.join(TEMP_ZIP, TESTPACK)
467482self.assertEqual(existing_pack_path, expected_path_path)
468483469-self.assertEqual(zi.is_package(packdir+'__init__'), False)
470-self.assertEqual(zi.is_package(packdir+TESTPACK2), True)
471-self.assertEqual(zi.is_package(packdir2+TESTMOD), False)
484+self.assertFalse(zi.is_package(packdir+'__init__'))
485+self.assertTrue(zi.is_package(packdir+TESTPACK2))
486+self.assertFalse(zi.is_package(packdir2+TESTMOD))
472487473488mod_path=packdir2+TESTMOD
474489mod_name=module_path_to_dotted_name(mod_path)
475490mod=importlib.import_module(mod_name)
476491self.assertTrue(mod_nameinsys.modules)
477-self.assertEqual(zi.get_source(TESTPACK), None)
478-self.assertEqual(zi.get_source(mod_path), None)
492+self.assertIsNone(zi.get_source(TESTPACK))
493+self.assertIsNone(zi.get_source(mod_path))
479494self.assertEqual(zi.get_filename(mod_path), mod.__file__)
480495# To pass in the module name instead of the path, we must use the
481496# right importer
482-loader=mod.__loader__
483-self.assertEqual(loader.get_source(mod_name), None)
497+loader=mod.__spec__.loader
498+self.assertIsNone(loader.get_source(mod_name))
484499self.assertEqual(loader.get_filename(mod_name), mod.__file__)
485500486501# test prefix and archivepath members
@@ -505,17 +520,22 @@ def testZipImporterMethodsInSubDirectory(self):
505520zi=zipimport.zipimporter(TEMP_ZIP+os.sep+packdir)
506521self.assertEqual(zi.archive, TEMP_ZIP)
507522self.assertEqual(zi.prefix, packdir)
508-self.assertEqual(zi.is_package(TESTPACK2), True)
523+self.assertTrue(zi.is_package(TESTPACK2))
524+# PEP 302
509525mod=zi.load_module(TESTPACK2)
510526self.assertEqual(zi.get_filename(TESTPACK2), mod.__file__)
527+# PEP 451
528+spec=zi.find_spec(TESTPACK2)
529+mod=importlib.util.module_from_spec(spec)
530+spec.loader.exec_module(mod)
531+self.assertEqual(spec.loader.get_filename(TESTPACK2), mod.__file__)
511532512-self.assertEqual(
513-zi.is_package(TESTPACK2+os.sep+'__init__'), False)
514-self.assertEqual(
515-zi.is_package(TESTPACK2+os.sep+TESTMOD), False)
533+self.assertFalse(zi.is_package(TESTPACK2+os.sep+'__init__'))
534+self.assertFalse(zi.is_package(TESTPACK2+os.sep+TESTMOD))
516535517536pkg_path=TEMP_ZIP+os.sep+packdir+TESTPACK2
518537zi2=zipimport.zipimporter(pkg_path)
538+# PEP 302
519539find_mod_dotted=zi2.find_module(TESTMOD)
520540self.assertIsNotNone(find_mod_dotted)
521541self.assertIsInstance(find_mod_dotted, zipimport.zipimporter)
@@ -524,17 +544,27 @@ def testZipImporterMethodsInSubDirectory(self):
524544self.assertEqual(
525545find_mod_dotted.get_filename(TESTMOD), load_mod.__file__)
526546547+# PEP 451
548+spec=zi2.find_spec(TESTMOD)
549+self.assertIsNotNone(spec)
550+self.assertIsInstance(spec.loader, zipimport.zipimporter)
551+self.assertFalse(spec.loader.is_package(TESTMOD))
552+load_mod=importlib.util.module_from_spec(spec)
553+spec.loader.exec_module(load_mod)
554+self.assertEqual(
555+spec.loader.get_filename(TESTMOD), load_mod.__file__)
556+527557mod_path=TESTPACK2+os.sep+TESTMOD
528558mod_name=module_path_to_dotted_name(mod_path)
529559mod=importlib.import_module(mod_name)
530560self.assertTrue(mod_nameinsys.modules)
531-self.assertEqual(zi.get_source(TESTPACK2), None)
532-self.assertEqual(zi.get_source(mod_path), None)
561+self.assertIsNone(zi.get_source(TESTPACK2))
562+self.assertIsNone(zi.get_source(mod_path))
533563self.assertEqual(zi.get_filename(mod_path), mod.__file__)
534564# To pass in the module name instead of the path, we must use the
535565# right importer.
536566loader=mod.__loader__
537-self.assertEqual(loader.get_source(mod_name), None)
567+self.assertIsNone(loader.get_source(mod_name))
538568self.assertEqual(loader.get_filename(mod_name), mod.__file__)
539569540570deftestGetData(self):
@@ -655,7 +685,9 @@ def testUnencodable(self):
655685zinfo=ZipInfo(TESTMOD+".py", time.localtime(NOW))
656686zinfo.compress_type=self.compression
657687z.writestr(zinfo, test_src)
658-zipimport.zipimporter(filename).load_module(TESTMOD)
688+spec=zipimport.zipimporter(filename).find_spec(TESTMOD)
689+mod=importlib.util.module_from_spec(spec)
690+spec.loader.exec_module(mod)
659691660692deftestBytesPath(self):
661693filename=os_helper.TESTFN+".zip"
@@ -747,14 +779,17 @@ def _testBogusZipFile(self):
747779748780try:
749781self.assertRaises(TypeError, z.find_module, None)
782+self.assertRaises(TypeError, z.find_spec, None)
783+self.assertRaises(TypeError, z.exec_module, None)
750784self.assertRaises(TypeError, z.load_module, None)
751785self.assertRaises(TypeError, z.is_package, None)
752786self.assertRaises(TypeError, z.get_code, None)
753787self.assertRaises(TypeError, z.get_data, None)
754788self.assertRaises(TypeError, z.get_source, None)
755789756790error=zipimport.ZipImportError
757-self.assertEqual(z.find_module('abc'), None)
791+self.assertIsNone(z.find_module('abc'))
792+self.assertIsNone(z.find_spec('abc'))
758793759794self.assertRaises(error, z.load_module, 'abc')
760795self.assertRaises(error, z.get_code, 'abc')