summaryrefslogtreecommitdiffstats
path: root/Lib/importlib/test/source/test_case_sensitivity.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/importlib/test/source/test_case_sensitivity.py')
-rw-r--r--Lib/importlib/test/source/test_case_sensitivity.py57
1 files changed, 57 insertions, 0 deletions
diff --git a/Lib/importlib/test/source/test_case_sensitivity.py b/Lib/importlib/test/source/test_case_sensitivity.py
new file mode 100644
index 0000000..1a5ff2f
--- /dev/null
+++ b/Lib/importlib/test/source/test_case_sensitivity.py
@@ -0,0 +1,57 @@
+"""Test case-sensitivity (PEP 235)."""
+import importlib
+from .. import support
+import os
+import sys
+from test import support as test_support
+import unittest
+
+
+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):
+ finder = importlib.PyFileImporter(path)
+ 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())
+ with support.create_modules(insensitive_pkg, sensitive_pkg) as mapping:
+ 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():
+ if sys.platform not in ('win32', 'darwin', 'cygwin'):
+ return
+ test_support.run_unittest(CaseSensitivityTest)
+
+
+if __name__ == '__main__':
+ test_main()