| 
									
										
										
										
											2009-01-18 00:24:28 +00:00
										 |  |  | """Test case-sensitivity (PEP 235).""" | 
					
						
							| 
									
										
										
										
											2020-03-09 07:57:53 -04:00
										 |  |  | import sys | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-22 19:05:05 +03:00
										 |  |  | from test.test_importlib import util | 
					
						
							| 
									
										
										
										
											2013-06-15 18:39:21 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-11-08 14:25:37 -05:00
										 |  |  | importlib = util.import_importlib('importlib') | 
					
						
							|  |  |  | machinery = util.import_importlib('importlib.machinery') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-18 00:24:28 +00:00
										 |  |  | import os | 
					
						
							| 
									
										
										
										
											2020-08-11 05:24:02 +08:00
										 |  |  | from test.support import os_helper | 
					
						
							| 
									
										
										
										
											2009-01-18 00:24:28 +00:00
										 |  |  | import unittest | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-01 04:00:05 +00:00
										 |  |  | @util.case_insensitive_tests | 
					
						
							| 
									
										
										
										
											2016-07-16 10:44:13 -07:00
										 |  |  | class CaseSensitivityTest(util.CASEOKTestBase): | 
					
						
							| 
									
										
										
										
											2009-01-18 00:24:28 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     """PEP 235 dictates that on case-preserving, case-insensitive file systems
 | 
					
						
							|  |  |  |     that imports are case-sensitive unless the PYTHONCASEOK environment | 
					
						
							|  |  |  |     variable is set."""
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     name = 'MoDuLe' | 
					
						
							|  |  |  |     assert name != name.lower() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-06 14:25:01 -05:00
										 |  |  |     def finder(self, path): | 
					
						
							|  |  |  |         return self.machinery.FileFinder(path, | 
					
						
							| 
									
										
										
										
											2013-11-08 14:25:37 -05:00
										 |  |  |                                       (self.machinery.SourceFileLoader, | 
					
						
							|  |  |  |                                             self.machinery.SOURCE_SUFFIXES), | 
					
						
							|  |  |  |                                         (self.machinery.SourcelessFileLoader, | 
					
						
							|  |  |  |                                             self.machinery.BYTECODE_SUFFIXES)) | 
					
						
							| 
									
										
										
										
											2009-01-18 00:24:28 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def sensitivity_test(self): | 
					
						
							|  |  |  |         """Look for a module with matching and non-matching sensitivity.""" | 
					
						
							|  |  |  |         sensitive_pkg = 'sensitive.{0}'.format(self.name) | 
					
						
							|  |  |  |         insensitive_pkg = 'insensitive.{0}'.format(self.name.lower()) | 
					
						
							| 
									
										
										
										
											2014-05-09 14:32:57 -04:00
										 |  |  |         context = util.create_modules(insensitive_pkg, sensitive_pkg) | 
					
						
							| 
									
										
										
										
											2010-07-03 21:48:25 +00:00
										 |  |  |         with context as mapping: | 
					
						
							| 
									
										
										
										
											2009-01-18 00:24:28 +00:00
										 |  |  |             sensitive_path = os.path.join(mapping['.root'], 'sensitive') | 
					
						
							|  |  |  |             insensitive_path = os.path.join(mapping['.root'], 'insensitive') | 
					
						
							| 
									
										
										
										
											2013-12-06 14:25:01 -05:00
										 |  |  |             sensitive_finder = self.finder(sensitive_path) | 
					
						
							|  |  |  |             insensitive_finder = self.finder(insensitive_path) | 
					
						
							|  |  |  |             return self.find(sensitive_finder), self.find(insensitive_finder) | 
					
						
							| 
									
										
										
										
											2009-01-18 00:24:28 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-09 07:57:53 -04:00
										 |  |  |     @unittest.skipIf(sys.flags.ignore_environment, 'ignore_environment flag was set') | 
					
						
							| 
									
										
										
										
											2009-01-18 00:24:28 +00:00
										 |  |  |     def test_sensitive(self): | 
					
						
							| 
									
										
										
										
											2020-08-11 05:24:02 +08:00
										 |  |  |         with os_helper.EnvironmentVarGuard() as env: | 
					
						
							| 
									
										
										
										
											2009-01-18 00:24:28 +00:00
										 |  |  |             env.unset('PYTHONCASEOK') | 
					
						
							| 
									
										
										
										
											2016-07-16 10:44:13 -07:00
										 |  |  |             self.caseok_env_changed(should_exist=False) | 
					
						
							| 
									
										
										
										
											2009-01-18 00:24:28 +00:00
										 |  |  |             sensitive, insensitive = self.sensitivity_test() | 
					
						
							| 
									
										
										
										
											2013-12-06 14:25:01 -05:00
										 |  |  |             self.assertIsNotNone(sensitive) | 
					
						
							| 
									
										
										
										
											2010-07-03 21:48:25 +00:00
										 |  |  |             self.assertIn(self.name, sensitive.get_filename(self.name)) | 
					
						
							| 
									
										
										
										
											2009-05-11 01:47:11 +00:00
										 |  |  |             self.assertIsNone(insensitive) | 
					
						
							| 
									
										
										
										
											2009-01-18 00:24:28 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-09 07:57:53 -04:00
										 |  |  |     @unittest.skipIf(sys.flags.ignore_environment, 'ignore_environment flag was set') | 
					
						
							| 
									
										
										
										
											2009-01-18 00:24:28 +00:00
										 |  |  |     def test_insensitive(self): | 
					
						
							| 
									
										
										
										
											2020-08-11 05:24:02 +08:00
										 |  |  |         with os_helper.EnvironmentVarGuard() as env: | 
					
						
							| 
									
										
										
										
											2013-09-03 19:43:49 -05:00
										 |  |  |             env.set('PYTHONCASEOK', '1') | 
					
						
							| 
									
										
										
										
											2016-07-16 10:44:13 -07:00
										 |  |  |             self.caseok_env_changed(should_exist=True) | 
					
						
							| 
									
										
										
										
											2013-09-03 19:43:49 -05:00
										 |  |  |             sensitive, insensitive = self.sensitivity_test() | 
					
						
							| 
									
										
										
										
											2013-12-06 14:25:01 -05:00
										 |  |  |             self.assertIsNotNone(sensitive) | 
					
						
							| 
									
										
										
										
											2013-09-03 19:43:49 -05:00
										 |  |  |             self.assertIn(self.name, sensitive.get_filename(self.name)) | 
					
						
							| 
									
										
										
										
											2013-12-06 14:25:01 -05:00
										 |  |  |             self.assertIsNotNone(insensitive) | 
					
						
							| 
									
										
										
										
											2013-09-03 19:43:49 -05:00
										 |  |  |             self.assertIn(self.name, insensitive.get_filename(self.name)) | 
					
						
							| 
									
										
										
										
											2009-01-18 00:24:28 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-16 11:40:40 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-06 14:25:01 -05:00
										 |  |  | class CaseSensitivityTestPEP451(CaseSensitivityTest): | 
					
						
							|  |  |  |     def find(self, finder): | 
					
						
							|  |  |  |         found = finder.find_spec(self.name) | 
					
						
							|  |  |  |         return found.loader if found is not None else found | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-16 11:40:40 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  | (Frozen_CaseSensitivityTestPEP451, | 
					
						
							|  |  |  |  Source_CaseSensitivityTestPEP451 | 
					
						
							|  |  |  |  ) = util.test_both(CaseSensitivityTestPEP451, importlib=importlib, | 
					
						
							|  |  |  |                     machinery=machinery) | 
					
						
							| 
									
										
										
										
											2009-01-18 00:24:28 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if __name__ == '__main__': | 
					
						
							| 
									
										
										
										
											2013-11-08 14:25:37 -05:00
										 |  |  |     unittest.main() |