(root)/
Python-3.12.0/
Lib/
test/
test_importlib/
source/
test_case_sensitivity.py
       1  """Test case-sensitivity (PEP 235)."""
       2  import sys
       3  
       4  from test.test_importlib import util
       5  
       6  importlib = util.import_importlib('importlib')
       7  machinery = util.import_importlib('importlib.machinery')
       8  
       9  import os
      10  from test.support import os_helper
      11  import unittest
      12  import warnings
      13  
      14  
      15  @util.case_insensitive_tests
      16  class ESC[4;38;5;81mCaseSensitivityTest(ESC[4;38;5;149mutilESC[4;38;5;149m.ESC[4;38;5;149mCASEOKTestBase):
      17  
      18      """PEP 235 dictates that on case-preserving, case-insensitive file systems
      19      that imports are case-sensitive unless the PYTHONCASEOK environment
      20      variable is set."""
      21  
      22      name = 'MoDuLe'
      23      assert name != name.lower()
      24  
      25      def finder(self, path):
      26          return self.machinery.FileFinder(path,
      27                                        (self.machinery.SourceFileLoader,
      28                                              self.machinery.SOURCE_SUFFIXES),
      29                                          (self.machinery.SourcelessFileLoader,
      30                                              self.machinery.BYTECODE_SUFFIXES))
      31  
      32      def sensitivity_test(self):
      33          """Look for a module with matching and non-matching sensitivity."""
      34          sensitive_pkg = 'sensitive.{0}'.format(self.name)
      35          insensitive_pkg = 'insensitive.{0}'.format(self.name.lower())
      36          context = util.create_modules(insensitive_pkg, sensitive_pkg)
      37          with context as mapping:
      38              sensitive_path = os.path.join(mapping['.root'], 'sensitive')
      39              insensitive_path = os.path.join(mapping['.root'], 'insensitive')
      40              sensitive_finder = self.finder(sensitive_path)
      41              insensitive_finder = self.finder(insensitive_path)
      42              return self.find(sensitive_finder), self.find(insensitive_finder)
      43  
      44      @unittest.skipIf(sys.flags.ignore_environment, 'ignore_environment flag was set')
      45      def test_sensitive(self):
      46          with os_helper.EnvironmentVarGuard() as env:
      47              env.unset('PYTHONCASEOK')
      48              self.caseok_env_changed(should_exist=False)
      49              sensitive, insensitive = self.sensitivity_test()
      50              self.assertIsNotNone(sensitive)
      51              self.assertIn(self.name, sensitive.get_filename(self.name))
      52              self.assertIsNone(insensitive)
      53  
      54      @unittest.skipIf(sys.flags.ignore_environment, 'ignore_environment flag was set')
      55      def test_insensitive(self):
      56          with os_helper.EnvironmentVarGuard() as env:
      57              env.set('PYTHONCASEOK', '1')
      58              self.caseok_env_changed(should_exist=True)
      59              sensitive, insensitive = self.sensitivity_test()
      60              self.assertIsNotNone(sensitive)
      61              self.assertIn(self.name, sensitive.get_filename(self.name))
      62              self.assertIsNotNone(insensitive)
      63              self.assertIn(self.name, insensitive.get_filename(self.name))
      64  
      65  
      66  class ESC[4;38;5;81mCaseSensitivityTestPEP451(ESC[4;38;5;149mCaseSensitivityTest):
      67      def find(self, finder):
      68          found = finder.find_spec(self.name)
      69          return found.loader if found is not None else found
      70  
      71  
      72  (Frozen_CaseSensitivityTestPEP451,
      73   Source_CaseSensitivityTestPEP451
      74   ) = util.test_both(CaseSensitivityTestPEP451, importlib=importlib,
      75                      machinery=machinery)
      76  
      77  
      78  if __name__ == '__main__':
      79      unittest.main()