| 
									
										
										
										
											2009-01-18 00:24:28 +00:00
										 |  |  | """Test case-sensitivity (PEP 235).""" | 
					
						
							| 
									
										
										
										
											2009-03-12 22:47:53 +00:00
										 |  |  | from importlib import _bootstrap | 
					
						
							| 
									
										
										
										
											2009-02-01 04:00:05 +00:00
										 |  |  | from .. import util | 
					
						
							| 
									
										
										
										
											2009-02-01 03:08:31 +00:00
										 |  |  | from . import util as source_util | 
					
						
							| 
									
										
										
										
											2009-01-18 00:24:28 +00:00
										 |  |  | import os | 
					
						
							|  |  |  | import sys | 
					
						
							|  |  |  | from test import support as test_support | 
					
						
							|  |  |  | import unittest | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-01 04:00:05 +00:00
										 |  |  | @util.case_insensitive_tests | 
					
						
							| 
									
										
										
										
											2009-01-18 00:24:28 +00:00
										 |  |  | class CaseSensitivityTest(unittest.TestCase): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     """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() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def find(self, path): | 
					
						
							| 
									
										
										
										
											2009-03-12 22:47:53 +00:00
										 |  |  |         finder = _bootstrap._PyPycFileFinder(path) | 
					
						
							| 
									
										
										
										
											2009-01-18 00:24:28 +00:00
										 |  |  |         return finder.find_module(self.name) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     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()) | 
					
						
							| 
									
										
										
										
											2009-02-01 03:08:31 +00:00
										 |  |  |         context = source_util.create_modules(insensitive_pkg, sensitive_pkg) | 
					
						
							|  |  |  |         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') | 
					
						
							|  |  |  |             return self.find(sensitive_path), self.find(insensitive_path) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_sensitive(self): | 
					
						
							|  |  |  |         with test_support.EnvironmentVarGuard() as env: | 
					
						
							|  |  |  |             env.unset('PYTHONCASEOK') | 
					
						
							|  |  |  |             sensitive, insensitive = self.sensitivity_test() | 
					
						
							|  |  |  |             self.assert_(hasattr(sensitive, 'load_module')) | 
					
						
							|  |  |  |             self.assert_(self.name in sensitive._base_path) | 
					
						
							|  |  |  |             self.assert_(insensitive is None) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_insensitive(self): | 
					
						
							|  |  |  |         with test_support.EnvironmentVarGuard() as env: | 
					
						
							|  |  |  |             env.set('PYTHONCASEOK', '1') | 
					
						
							|  |  |  |             sensitive, insensitive = self.sensitivity_test() | 
					
						
							|  |  |  |             self.assert_(hasattr(sensitive, 'load_module')) | 
					
						
							|  |  |  |             self.assert_(self.name in sensitive._base_path) | 
					
						
							|  |  |  |             self.assert_(hasattr(insensitive, 'load_module')) | 
					
						
							|  |  |  |             self.assert_(self.name in insensitive._base_path) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def test_main(): | 
					
						
							|  |  |  |     test_support.run_unittest(CaseSensitivityTest) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if __name__ == '__main__': | 
					
						
							|  |  |  |     test_main() |