<commit_before>"""Test case-sensitivity (PEP 235)."""
from importlib import _bootstrap
from .. import util
from . import util as source_util
import os
import sys
from test import support as test_support
import unittest


@util.case_insensitive_tests
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 = _bootstrap._FileFinder(path,
                                        _bootstrap._SourceFinderDetails(),
                                        _bootstrap._SourcelessFinderDetails())
        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())
        context = source_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')
            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.assertTrue(hasattr(sensitive, 'load_module'))
            self.assertIn(self.name, sensitive.get_filename(self.name))
            self.assertIsNone(insensitive)

    def test_insensitive(self):
        with test_support.EnvironmentVarGuard() as env:
            env.set('PYTHONCASEOK', '1')
            sensitive, insensitive = self.sensitivity_test()
            self.assertTrue(hasattr(sensitive, 'load_module'))
            self.assertIn(self.name, sensitive.get_filename(self.name))
            self.assertTrue(hasattr(insensitive, 'load_module'))
            self.assertIn(self.name, insensitive.get_filename(self.name))<commit_msg>Issue #13890: Fix importlib case-sensitivity tests to not run on Windows. Thanks to os.environ under Windows only updating the dict and not the environment itself (as exposed by nt.environ), tests using PYTHONCASEOK always fail. Now the tests are skipped when os.environ does not do what is expected.<commit_after>"""Test case-sensitivity (PEP 235)."""
from importlib import _bootstrap
from .. import util
from . import util as source_util
import os
import sys
from test import support as test_support
import unittest


@util.case_insensitive_tests
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 = _bootstrap._FileFinder(path,
                                        _bootstrap._SourceFinderDetails(),
                                        _bootstrap._SourcelessFinderDetails())
        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())
        context = source_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')
            return self.find(sensitive_path), self.find(insensitive_path)

    def test_sensitive(self):
        with test_support.EnvironmentVarGuard() as env:
            env.unset('PYTHONCASEOK')
            if b'PYTHONCASEOK' in _bootstrap._os.environ:
                self.skipTest('os.environ changes not reflected in '
                              '_os.environ')
            sensitive, insensitive = self.sensitivity_test()
            self.assertTrue(hasattr(sensitive, 'load_module'))
            self.assertIn(self.name, sensitive.get_filename(self.name))
            self.assertIsNone(insensitive)

    def test_insensitive(self):
        with test_support.EnvironmentVarGuard() as env:
            env.set('PYTHONCASEOK', '1')
            if b'PYTHONCASEOK' not in _bootstrap._os.environ:
                self.skipTest('os.environ changes not reflected in '
                              '_os.environ')
            sensitive, insensitive = self.sensitivity_test()
            self.assertTrue(hasattr(sensitive, 'load_module'))
            self.assertIn(self.name, sensitive.get_filename(self.name))
            self.assertTrue(hasattr(insensitive, 'load_module'))
            self.assertIn(self.name, insensitive.get_filename(self.name))
{'fraction_non_alphanumeric': 0.09701049297168877, 'fraction_numerical': 0.00455355375173233, 'mean_word_length': 2.807083647324793, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 4, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6196016', 'n_tokens_mistral': 1381, 'n_tokens_neox': 1328, 'n_words': 326}