aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Lib/importlib/test/source/test_case_sensitivity.py
diff options
context:
space:
mode:
authorBrett Cannon <bcannon@gmail.com>2009-01-18 00:24:28 +0000
committerBrett Cannon <bcannon@gmail.com>2009-01-18 00:24:28 +0000
commit23cbd8a6564df0ac3df339f91196c45f3e626d32 (patch)
treebef5602638a1567c28738aa359dae9865e04b6cd /Lib/importlib/test/source/test_case_sensitivity.py
parent458ad47a2c8045080a86eaaf33bb6cd174021891 (diff)
downloadcpython-23cbd8a6564df0ac3df339f91196c45f3e626d32.tar.gz
cpython-23cbd8a6564df0ac3df339f91196c45f3e626d32.zip
Add initial implementation of importlib. See the NOTES files for what is
planned for the package. There are no docs yet, but they are coming once the API for the first new function, importlib.import_module() is finalized.
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 00000000000..1a5ff2f206c
--- /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()