| 
									
										
										
										
											2021-03-04 13:43:00 -05:00
										 |  |  | import io | 
					
						
							| 
									
										
										
										
											2017-12-30 15:18:06 -05:00
										 |  |  | import unittest | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from importlib import resources | 
					
						
							| 
									
										
										
										
											2022-01-22 21:38:26 -05:00
										 |  |  | from . import data01 | 
					
						
							| 
									
										
										
										
											2022-07-24 20:53:10 -04:00
										 |  |  | from . import util | 
					
						
							| 
									
										
										
										
											2017-12-30 15:18:06 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-29 21:05:05 -04:00
										 |  |  | class CommonTests(util.CommonTests, unittest.TestCase): | 
					
						
							| 
									
										
										
										
											2017-12-30 15:18:06 -05:00
										 |  |  |     def execute(self, package, path): | 
					
						
							| 
									
										
										
										
											2021-12-18 21:28:49 -05:00
										 |  |  |         with resources.as_file(resources.files(package).joinpath(path)): | 
					
						
							|  |  |  |             pass | 
					
						
							| 
									
										
										
										
											2017-12-30 15:18:06 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class PathTests: | 
					
						
							|  |  |  |     def test_reading(self): | 
					
						
							| 
									
										
										
										
											2023-02-18 16:29:22 -05:00
										 |  |  |         """
 | 
					
						
							|  |  |  |         Path should be readable. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         Test also implicitly verifies the returned object is a pathlib.Path | 
					
						
							|  |  |  |         instance. | 
					
						
							|  |  |  |         """
 | 
					
						
							| 
									
										
										
										
											2021-12-18 21:28:49 -05:00
										 |  |  |         target = resources.files(self.data) / 'utf-8.file' | 
					
						
							|  |  |  |         with resources.as_file(target) as path: | 
					
						
							|  |  |  |             self.assertTrue(path.name.endswith("utf-8.file"), repr(path)) | 
					
						
							|  |  |  |             # pathlib.Path.read_text() was introduced in Python 3.5. | 
					
						
							|  |  |  |             with path.open('r', encoding='utf-8') as file: | 
					
						
							|  |  |  |                 text = file.read() | 
					
						
							|  |  |  |             self.assertEqual('Hello, UTF-8 world!\n', text) | 
					
						
							| 
									
										
										
										
											2017-12-30 15:18:06 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class PathDiskTests(PathTests, unittest.TestCase): | 
					
						
							|  |  |  |     data = data01 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-29 16:59:22 -04:00
										 |  |  |     def test_natural_path(self): | 
					
						
							| 
									
										
										
										
											2021-04-02 12:35:32 -07:00
										 |  |  |         # Guarantee the internal implementation detail that | 
					
						
							|  |  |  |         # file-system-backed resources do not get the tempdir | 
					
						
							|  |  |  |         # treatment. | 
					
						
							| 
									
										
										
										
											2021-12-18 21:28:49 -05:00
										 |  |  |         target = resources.files(self.data) / 'utf-8.file' | 
					
						
							|  |  |  |         with resources.as_file(target) as path: | 
					
						
							|  |  |  |             assert 'data' in str(path) | 
					
						
							| 
									
										
										
										
											2020-06-29 16:59:22 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-30 15:18:06 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-04 13:43:00 -05:00
										 |  |  | class PathMemoryTests(PathTests, unittest.TestCase): | 
					
						
							|  |  |  |     def setUp(self): | 
					
						
							|  |  |  |         file = io.BytesIO(b'Hello, UTF-8 world!\n') | 
					
						
							|  |  |  |         self.addCleanup(file.close) | 
					
						
							|  |  |  |         self.data = util.create_package( | 
					
						
							|  |  |  |             file=file, path=FileNotFoundError("package exists only in memory") | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |         self.data.__spec__.origin = None | 
					
						
							|  |  |  |         self.data.__spec__.has_location = False | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-30 15:18:06 -05:00
										 |  |  | class PathZipTests(PathTests, util.ZipSetup, unittest.TestCase): | 
					
						
							|  |  |  |     def test_remove_in_context_manager(self): | 
					
						
							| 
									
										
										
										
											2023-02-18 16:29:22 -05:00
										 |  |  |         """
 | 
					
						
							|  |  |  |         It is not an error if the file that was temporarily stashed on the | 
					
						
							|  |  |  |         file system is removed inside the `with` stanza. | 
					
						
							|  |  |  |         """
 | 
					
						
							| 
									
										
										
										
											2021-12-18 21:28:49 -05:00
										 |  |  |         target = resources.files(self.data) / 'utf-8.file' | 
					
						
							|  |  |  |         with resources.as_file(target) as path: | 
					
						
							|  |  |  |             path.unlink() | 
					
						
							| 
									
										
										
										
											2017-12-30 15:18:06 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if __name__ == '__main__': | 
					
						
							|  |  |  |     unittest.main() |