test casesensitivity pep 235 import sys from test testimportlib import util importlib util importimportlib importlib machinery util importimportlib importlib machinery import os from test support import oshelper import unittest util caseinsensitivetests class casesensitivitytestutil caseoktestbase look for a module with matching and nonmatching sensitivity sensitivepkg sensitive 0 formatself name insensitivepkg insensitive 0 formatself name lower context util createmodulesinsensitivepkg sensitivepkg with context as mapping sensitivepath os path joinmapping root sensitive insensitivepath os path joinmapping root insensitive sensitivefinder self findersensitivepath insensitivefinder self finderinsensitivepath return self findsensitivefinder self findinsensitivefinder unittest skipifsys flags ignoreenvironment ignoreenvironment flag was set def testsensitiveself with oshelper environmentvarguard as env env unset pythoncaseok self caseokenvchangedshouldexistfalse sensitive insensitive self sensitivitytest self assertisnotnonesensitive self assertinself name sensitive getfilenameself name self assertisnoneinsensitive unittest skipifsys flags ignoreenvironment ignoreenvironment flag was set def testinsensitiveself with oshelper environmentvarguard as env env set pythoncaseok 1 self caseokenvchangedshouldexisttrue sensitive insensitive self sensitivitytest self assertisnotnonesensitive self assertinself name sensitive getfilenameself name self assertisnotnoneinsensitive self assertinself name insensitive getfilenameself name class casesensitivitytestpep451casesensitivitytest def findself finder found finder findspecself name return found loader if found is not none else found frozencasesensitivitytestpep451 sourcecasesensitivitytestpep451 util testbothcasesensitivitytestpep451 importlibimportlib machinerymachinery if name main unittest main pep 235 dictates that on case preserving case insensitive file systems that imports are case sensitive unless the pythoncaseok environment variable is set look for a module with matching and non matching sensitivity
import sys

from test.test_importlib import util

importlib = util.import_importlib('importlib')
machinery = util.import_importlib('importlib.machinery')

import os
from test.support import os_helper
import unittest


@util.case_insensitive_tests
class CaseSensitivityTest(util.CASEOKTestBase):

    

    name = 'MoDuLe'
    assert name != name.lower()

    def finder(self, path):
        return self.machinery.FileFinder(path,
                                      (self.machinery.SourceFileLoader,
                                            self.machinery.SOURCE_SUFFIXES),
                                        (self.machinery.SourcelessFileLoader,
                                            self.machinery.BYTECODE_SUFFIXES))

    def sensitivity_test(self):
        
        sensitive_pkg = 'sensitive.{0}'.format(self.name)
        insensitive_pkg = 'insensitive.{0}'.format(self.name.lower())
        context = util.create_modules(insensitive_pkg, sensitive_pkg)
        with context as mapping:
            sensitive_path = os.path.join(mapping['.root'], 'sensitive')
            insensitive_path = os.path.join(mapping['.root'], 'insensitive')
            sensitive_finder = self.finder(sensitive_path)
            insensitive_finder = self.finder(insensitive_path)
            return self.find(sensitive_finder), self.find(insensitive_finder)

    @unittest.skipIf(sys.flags.ignore_environment, 'ignore_environment flag was set')
    def test_sensitive(self):
        with os_helper.EnvironmentVarGuard() as env:
            env.unset('PYTHONCASEOK')
            self.caseok_env_changed(should_exist=False)
            sensitive, insensitive = self.sensitivity_test()
            self.assertIsNotNone(sensitive)
            self.assertIn(self.name, sensitive.get_filename(self.name))
            self.assertIsNone(insensitive)

    @unittest.skipIf(sys.flags.ignore_environment, 'ignore_environment flag was set')
    def test_insensitive(self):
        with os_helper.EnvironmentVarGuard() as env:
            env.set('PYTHONCASEOK', '1')
            self.caseok_env_changed(should_exist=True)
            sensitive, insensitive = self.sensitivity_test()
            self.assertIsNotNone(sensitive)
            self.assertIn(self.name, sensitive.get_filename(self.name))
            self.assertIsNotNone(insensitive)
            self.assertIn(self.name, insensitive.get_filename(self.name))


class CaseSensitivityTestPEP451(CaseSensitivityTest):
    def find(self, finder):
        found = finder.find_spec(self.name)
        return found.loader if found is not None else found


(Frozen_CaseSensitivityTestPEP451,
 Source_CaseSensitivityTestPEP451
 ) = util.test_both(CaseSensitivityTestPEP451, importlib=importlib,
                    machinery=machinery)


if __name__ == '__main__':
    unittest.main()