ยปCore Development>Code coverage>Lib/importlib/test/source/test_case_sensitivity.py

Python code coverage for Lib/importlib/test/source/test_case_sensitivity.py

#countcontent
1n/a"""Test case-sensitivity (PEP 235)."""
2n/afrom importlib import _bootstrap
3n/afrom importlib import machinery
4n/afrom .. import util
5n/afrom . import util as source_util
6n/aimport imp
7n/aimport os
8n/aimport sys
9n/afrom test import support as test_support
10n/aimport unittest
11n/a
12n/a
13n/a@util.case_insensitive_tests
14n/aclass CaseSensitivityTest(unittest.TestCase):
15n/a
16n/a """PEP 235 dictates that on case-preserving, case-insensitive file systems
17n/a that imports are case-sensitive unless the PYTHONCASEOK environment
18n/a variable is set."""
19n/a
20n/a name = 'MoDuLe'
21n/a assert name != name.lower()
22n/a
23n/a def find(self, path):
24n/a finder = machinery.FileFinder(path,
25n/a (machinery.SourceFileLoader,
26n/a machinery.SOURCE_SUFFIXES,
27n/a True),
28n/a (machinery.SourcelessFileLoader,
29n/a machinery.BYTECODE_SUFFIXES,
30n/a True))
31n/a return finder.find_module(self.name)
32n/a
33n/a def sensitivity_test(self):
34n/a """Look for a module with matching and non-matching sensitivity."""
35n/a sensitive_pkg = 'sensitive.{0}'.format(self.name)
36n/a insensitive_pkg = 'insensitive.{0}'.format(self.name.lower())
37n/a context = source_util.create_modules(insensitive_pkg, sensitive_pkg)
38n/a with context as mapping:
39n/a sensitive_path = os.path.join(mapping['.root'], 'sensitive')
40n/a insensitive_path = os.path.join(mapping['.root'], 'insensitive')
41n/a return self.find(sensitive_path), self.find(insensitive_path)
42n/a
43n/a def test_sensitive(self):
44n/a with test_support.EnvironmentVarGuard() as env:
45n/a env.unset('PYTHONCASEOK')
46n/a if b'PYTHONCASEOK' in _bootstrap._os.environ:
47n/a self.skipTest('os.environ changes not reflected in '
48n/a '_os.environ')
49n/a sensitive, insensitive = self.sensitivity_test()
50n/a self.assertTrue(hasattr(sensitive, 'load_module'))
51n/a self.assertIn(self.name, sensitive.get_filename(self.name))
52n/a self.assertIsNone(insensitive)
53n/a
54n/a def test_insensitive(self):
55n/a with test_support.EnvironmentVarGuard() as env:
56n/a env.set('PYTHONCASEOK', '1')
57n/a if b'PYTHONCASEOK' not in _bootstrap._os.environ:
58n/a self.skipTest('os.environ changes not reflected in '
59n/a '_os.environ')
60n/a sensitive, insensitive = self.sensitivity_test()
61n/a self.assertTrue(hasattr(sensitive, 'load_module'))
62n/a self.assertIn(self.name, sensitive.get_filename(self.name))
63n/a self.assertTrue(hasattr(insensitive, 'load_module'))
64n/a self.assertIn(self.name, insensitive.get_filename(self.name))
65n/a
66n/a
67n/adef test_main():
68n/a test_support.run_unittest(CaseSensitivityTest)
69n/a
70n/a
71n/aif __name__ == '__main__':
72n/a test_main()