mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	Add test file missing from rev 62350
This commit is contained in:
		
							parent
							
								
									106fc48336
								
							
						
					
					
						commit
						1e88992224
					
				
					 1 changed files with 123 additions and 0 deletions
				
			
		
							
								
								
									
										123
									
								
								Lib/test/test_pkgutil.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										123
									
								
								Lib/test/test_pkgutil.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,123 @@ | |||
| from test.test_support import run_unittest | ||||
| import unittest | ||||
| import sys | ||||
| import imp | ||||
| import pkgutil | ||||
| import os | ||||
| import os.path | ||||
| import tempfile | ||||
| import shutil | ||||
| import zipfile | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| class PkgutilTests(unittest.TestCase): | ||||
| 
 | ||||
|     def setUp(self): | ||||
|         self.dirname = tempfile.mkdtemp() | ||||
|         sys.path.insert(0, self.dirname) | ||||
| 
 | ||||
|     def tearDown(self): | ||||
|         del sys.path[0] | ||||
|         shutil.rmtree(self.dirname) | ||||
| 
 | ||||
|     def test_getdata_filesys(self): | ||||
|         pkg = 'test_getdata_filesys' | ||||
| 
 | ||||
|         # Include a LF and a CRLF, to test that binary data is read back | ||||
|         RESOURCE_DATA = 'Hello, world!\nSecond line\r\nThird line' | ||||
| 
 | ||||
|         # Make a package with some resources | ||||
|         package_dir = os.path.join(self.dirname, pkg) | ||||
|         os.mkdir(package_dir) | ||||
|         # Empty init.py | ||||
|         f = open(os.path.join(package_dir, '__init__.py'), "wb") | ||||
|         f.close() | ||||
|         # Resource files, res.txt, sub/res.txt | ||||
|         f = open(os.path.join(package_dir, 'res.txt'), "wb") | ||||
|         f.write(RESOURCE_DATA) | ||||
|         f.close() | ||||
|         os.mkdir(os.path.join(package_dir, 'sub')) | ||||
|         f = open(os.path.join(package_dir, 'sub', 'res.txt'), "wb") | ||||
|         f.write(RESOURCE_DATA) | ||||
|         f.close() | ||||
| 
 | ||||
|         # Check we can read the resources | ||||
|         res1 = pkgutil.get_data(pkg, 'res.txt') | ||||
|         self.assertEqual(res1, RESOURCE_DATA) | ||||
|         res2 = pkgutil.get_data(pkg, 'sub/res.txt') | ||||
|         self.assertEqual(res2, RESOURCE_DATA) | ||||
| 
 | ||||
|     def test_getdata_zipfile(self): | ||||
|         zip = 'test_getdata_zipfile.zip' | ||||
|         pkg = 'test_getdata_zipfile' | ||||
| 
 | ||||
|         # Include a LF and a CRLF, to test that binary data is read back | ||||
|         RESOURCE_DATA = 'Hello, world!\nSecond line\r\nThird line' | ||||
| 
 | ||||
|         # Make a package with some resources | ||||
|         zip_file = os.path.join(self.dirname, zip) | ||||
|         z = zipfile.ZipFile(zip_file, 'w') | ||||
| 
 | ||||
|         # Empty init.py | ||||
|         z.writestr(pkg + '/__init__.py', "") | ||||
|         # Resource files, res.txt, sub/res.txt | ||||
|         z.writestr(pkg + '/res.txt', RESOURCE_DATA) | ||||
|         z.writestr(pkg + '/sub/res.txt', RESOURCE_DATA) | ||||
|         z.close() | ||||
| 
 | ||||
|         # Check we can read the resources | ||||
|         sys.path.insert(0, zip_file) | ||||
|         res1 = pkgutil.get_data(pkg, 'res.txt') | ||||
|         self.assertEqual(res1, RESOURCE_DATA) | ||||
|         res2 = pkgutil.get_data(pkg, 'sub/res.txt') | ||||
|         self.assertEqual(res2, RESOURCE_DATA) | ||||
|         del sys.path[0] | ||||
| 
 | ||||
| class PkgutilPEP302Tests(unittest.TestCase): | ||||
| 
 | ||||
|     class MyTestLoader(object): | ||||
|         def load_module(self, fullname): | ||||
|             # Create an empty module | ||||
|             mod = sys.modules.setdefault(fullname, imp.new_module(fullname)) | ||||
|             mod.__file__ = "<%s>" % self.__class__.__name__ | ||||
|             mod.__loader__ = self | ||||
|             # Make it a package | ||||
|             mod.__path__ = [] | ||||
|             # Count how many times the module is reloaded | ||||
|             mod.__dict__['loads'] = mod.__dict__.get('loads',0) + 1 | ||||
|             return mod | ||||
| 
 | ||||
|         def get_data(self, path): | ||||
|             return "Hello, world!" | ||||
| 
 | ||||
|     class MyTestImporter(object): | ||||
|         def find_module(self, fullname, path=None): | ||||
|             return PkgutilPEP302Tests.MyTestLoader() | ||||
| 
 | ||||
|     def setUp(self): | ||||
|         sys.meta_path.insert(0, self.MyTestImporter()) | ||||
| 
 | ||||
|     def tearDown(self): | ||||
|         del sys.meta_path[0] | ||||
| 
 | ||||
|     def test_getdata_pep302(self): | ||||
|         # Use a dummy importer/loader | ||||
|         self.assertEqual(pkgutil.get_data('foo', 'dummy'), "Hello, world!") | ||||
|         del sys.modules['foo'] | ||||
| 
 | ||||
|     def test_alreadyloaded(self): | ||||
|         # Ensure that get_data works without reloading - the "loads" module | ||||
|         # variable in the example loader should count how many times a reload | ||||
|         # occurs. | ||||
|         import foo | ||||
|         self.assertEqual(foo.loads, 1) | ||||
|         self.assertEqual(pkgutil.get_data('foo', 'dummy'), "Hello, world!") | ||||
|         self.assertEqual(foo.loads, 1) | ||||
|         del sys.modules['foo'] | ||||
| 
 | ||||
| def test_main(): | ||||
|     run_unittest(PkgutilTests, PkgutilPEP302Tests) | ||||
| 
 | ||||
| if __name__ == '__main__': | ||||
|     test_main() | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Nick Coghlan
						Nick Coghlan