| 
									
										
										
										
											2009-02-07 02:06:43 +00:00
										 |  |  | from . import util as ext_util | 
					
						
							| 
									
										
										
										
											2009-02-01 00:49:41 +00:00
										 |  |  | from .. import abc | 
					
						
							| 
									
										
										
										
											2009-02-01 04:00:05 +00:00
										 |  |  | from .. import util | 
					
						
							| 
									
										
										
										
											2009-01-18 00:24:28 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-10-25 15:39:02 -04:00
										 |  |  | machinery = util.import_importlib('importlib.machinery') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-10 13:47:54 -04:00
										 |  |  | import os.path | 
					
						
							| 
									
										
										
										
											2009-01-18 00:24:28 +00:00
										 |  |  | import sys | 
					
						
							| 
									
										
										
										
											2013-11-22 09:05:39 -07:00
										 |  |  | import types | 
					
						
							| 
									
										
										
										
											2009-01-18 00:24:28 +00:00
										 |  |  | import unittest | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-11-22 09:05:39 -07:00
										 |  |  | class ExecModuleTests(abc.LoaderTests): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     """Test load_module() for extension modules.""" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def setUp(self): | 
					
						
							|  |  |  |         self.loader = self.machinery.ExtensionFileLoader(ext_util.NAME, | 
					
						
							|  |  |  |                                                          ext_util.FILEPATH) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def exec_module(self, fullname): | 
					
						
							|  |  |  |         module = types.ModuleType(fullname) | 
					
						
							|  |  |  |         module.__spec__ = self.machinery.ModuleSpec(fullname, self.loader) | 
					
						
							|  |  |  |         self.loader.exec_module(module) | 
					
						
							|  |  |  |         return sys.modules[fullname] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_exec_module_API(self): | 
					
						
							|  |  |  |         with self.assertRaises(ImportError): | 
					
						
							|  |  |  |             self.exec_module('XXX') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_module(self): | 
					
						
							|  |  |  |         with util.uncache(ext_util.NAME): | 
					
						
							|  |  |  |             module = self.exec_module(ext_util.NAME) | 
					
						
							|  |  |  |             for attr, value in [('__name__', ext_util.NAME), | 
					
						
							|  |  |  |                                 ('__file__', ext_util.FILEPATH), | 
					
						
							|  |  |  |                                 ('__package__', '')]: | 
					
						
							|  |  |  |                 given = getattr(module, attr) | 
					
						
							|  |  |  |                 self.assertEqual(given, value, | 
					
						
							|  |  |  |                                  '{}: {!r} != {!r}'.format(attr, given, value)) | 
					
						
							|  |  |  |             self.assertIn(ext_util.NAME, sys.modules) | 
					
						
							|  |  |  |             self.assertIsInstance(module.__loader__, | 
					
						
							|  |  |  |                                   self.machinery.ExtensionFileLoader) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # No extension module as __init__ available for testing. | 
					
						
							|  |  |  |     test_package = None | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # No extension module in a package available for testing. | 
					
						
							|  |  |  |     test_lacking_parent = None | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_module_reuse(self): | 
					
						
							|  |  |  |         with util.uncache(ext_util.NAME): | 
					
						
							|  |  |  |             module1 = self.exec_module(ext_util.NAME) | 
					
						
							|  |  |  |             module2 = self.exec_module(ext_util.NAME) | 
					
						
							|  |  |  |             self.assertIs(module1, module2) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_state_after_failure(self): | 
					
						
							|  |  |  |         # No easy way to trigger a failure after a successful import. | 
					
						
							|  |  |  |         pass | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_unloadable(self): | 
					
						
							|  |  |  |         name = 'asdfjkl;' | 
					
						
							|  |  |  |         with self.assertRaises(ImportError) as cm: | 
					
						
							|  |  |  |             self.exec_module(name) | 
					
						
							|  |  |  |         self.assertEqual(cm.exception.name, name) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_is_package(self): | 
					
						
							|  |  |  |         self.assertFalse(self.loader.is_package(ext_util.NAME)) | 
					
						
							|  |  |  |         for suffix in self.machinery.EXTENSION_SUFFIXES: | 
					
						
							|  |  |  |             path = os.path.join('some', 'path', 'pkg', '__init__' + suffix) | 
					
						
							|  |  |  |             loader = self.machinery.ExtensionFileLoader('pkg', path) | 
					
						
							|  |  |  |             self.assertTrue(loader.is_package('pkg')) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Frozen_ExecModuleTests, Source_ExecModuleTests = util.test_both( | 
					
						
							|  |  |  |         ExecModuleTests, machinery=machinery) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-10-25 15:39:02 -04:00
										 |  |  | class LoaderTests(abc.LoaderTests): | 
					
						
							| 
									
										
										
										
											2009-01-18 00:24:28 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     """Test load_module() for extension modules.""" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-11 14:48:41 -04:00
										 |  |  |     def setUp(self): | 
					
						
							| 
									
										
										
										
											2013-10-25 15:39:02 -04:00
										 |  |  |         self.loader = self.machinery.ExtensionFileLoader(ext_util.NAME, | 
					
						
							|  |  |  |                                                          ext_util.FILEPATH) | 
					
						
							| 
									
										
										
										
											2012-05-11 14:48:41 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-18 00:24:28 +00:00
										 |  |  |     def load_module(self, fullname): | 
					
						
							| 
									
										
										
										
											2012-05-11 14:48:41 -04:00
										 |  |  |         return self.loader.load_module(fullname) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_load_module_API(self): | 
					
						
							|  |  |  |         # Test the default argument for load_module(). | 
					
						
							|  |  |  |         self.loader.load_module() | 
					
						
							|  |  |  |         self.loader.load_module(None) | 
					
						
							|  |  |  |         with self.assertRaises(ImportError): | 
					
						
							|  |  |  |             self.load_module('XXX') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-18 00:24:28 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-01 00:49:41 +00:00
										 |  |  |     def test_module(self): | 
					
						
							| 
									
										
										
										
											2009-02-07 02:06:43 +00:00
										 |  |  |         with util.uncache(ext_util.NAME): | 
					
						
							|  |  |  |             module = self.load_module(ext_util.NAME) | 
					
						
							|  |  |  |             for attr, value in [('__name__', ext_util.NAME), | 
					
						
							|  |  |  |                                 ('__file__', ext_util.FILEPATH), | 
					
						
							| 
									
										
										
										
											2009-02-07 01:52:25 +00:00
										 |  |  |                                 ('__package__', '')]: | 
					
						
							| 
									
										
										
										
											2009-01-18 00:24:28 +00:00
										 |  |  |                 self.assertEqual(getattr(module, attr), value) | 
					
						
							| 
									
										
										
										
											2012-06-27 15:26:26 -04:00
										 |  |  |             self.assertIn(ext_util.NAME, sys.modules) | 
					
						
							|  |  |  |             self.assertIsInstance(module.__loader__, | 
					
						
							| 
									
										
										
										
											2013-10-25 15:39:02 -04:00
										 |  |  |                                   self.machinery.ExtensionFileLoader) | 
					
						
							| 
									
										
										
										
											2009-01-18 00:24:28 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-11-22 09:05:39 -07:00
										 |  |  |     # No extension module as __init__ available for testing. | 
					
						
							|  |  |  |     test_package = None | 
					
						
							| 
									
										
										
										
											2009-02-01 00:49:41 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-11-22 09:05:39 -07:00
										 |  |  |     # No extension module in a package available for testing. | 
					
						
							|  |  |  |     test_lacking_parent = None | 
					
						
							| 
									
										
										
										
											2009-02-01 00:49:41 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_module_reuse(self): | 
					
						
							| 
									
										
										
										
											2009-02-07 02:06:43 +00:00
										 |  |  |         with util.uncache(ext_util.NAME): | 
					
						
							|  |  |  |             module1 = self.load_module(ext_util.NAME) | 
					
						
							|  |  |  |             module2 = self.load_module(ext_util.NAME) | 
					
						
							| 
									
										
										
										
											2012-06-27 15:26:26 -04:00
										 |  |  |             self.assertIs(module1, module2) | 
					
						
							| 
									
										
										
										
											2009-02-01 00:49:41 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-11-22 09:05:39 -07:00
										 |  |  |     # No easy way to trigger a failure after a successful import. | 
					
						
							|  |  |  |     test_state_after_failure = None | 
					
						
							| 
									
										
										
										
											2009-02-01 00:49:41 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_unloadable(self): | 
					
						
							| 
									
										
										
										
											2012-04-12 21:09:01 -04:00
										 |  |  |         name = 'asdfjkl;' | 
					
						
							|  |  |  |         with self.assertRaises(ImportError) as cm: | 
					
						
							|  |  |  |             self.load_module(name) | 
					
						
							|  |  |  |         self.assertEqual(cm.exception.name, name) | 
					
						
							| 
									
										
										
										
											2009-01-18 00:24:28 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-10 13:47:54 -04:00
										 |  |  |     def test_is_package(self): | 
					
						
							|  |  |  |         self.assertFalse(self.loader.is_package(ext_util.NAME)) | 
					
						
							| 
									
										
										
										
											2013-10-25 15:39:02 -04:00
										 |  |  |         for suffix in self.machinery.EXTENSION_SUFFIXES: | 
					
						
							| 
									
										
										
										
											2012-08-10 13:47:54 -04:00
										 |  |  |             path = os.path.join('some', 'path', 'pkg', '__init__' + suffix) | 
					
						
							| 
									
										
										
										
											2013-10-25 15:39:02 -04:00
										 |  |  |             loader = self.machinery.ExtensionFileLoader('pkg', path) | 
					
						
							| 
									
										
										
										
											2012-08-10 13:47:54 -04:00
										 |  |  |             self.assertTrue(loader.is_package('pkg')) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-10-25 15:39:02 -04:00
										 |  |  | Frozen_LoaderTests, Source_LoaderTests = util.test_both( | 
					
						
							|  |  |  |         LoaderTests, machinery=machinery) | 
					
						
							| 
									
										
										
										
											2009-01-18 00:24:28 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if __name__ == '__main__': | 
					
						
							| 
									
										
										
										
											2013-10-25 15:39:02 -04:00
										 |  |  |     unittest.main() |