usse/funda-scraper/venv/lib/python3.10/site-packages/mypy/test/testfscache.py

101 lines
4.3 KiB
Python

"""Unit tests for file system cache."""
import os
import shutil
import sys
import tempfile
import unittest
from typing import Optional
from mypy.fscache import FileSystemCache
class TestFileSystemCache(unittest.TestCase):
def setUp(self) -> None:
self.tempdir = tempfile.mkdtemp()
self.oldcwd = os.getcwd()
os.chdir(self.tempdir)
self.fscache = FileSystemCache()
def tearDown(self) -> None:
os.chdir(self.oldcwd)
shutil.rmtree(self.tempdir)
def test_isfile_case_1(self) -> None:
self.make_file('bar.py')
self.make_file('pkg/sub_package/__init__.py')
self.make_file('pkg/sub_package/foo.py')
# Run twice to test both cached and non-cached code paths.
for i in range(2):
assert self.isfile_case('bar.py')
assert self.isfile_case('pkg/sub_package/__init__.py')
assert self.isfile_case('pkg/sub_package/foo.py')
assert not self.isfile_case('non_existent.py')
assert not self.isfile_case('pkg/non_existent.py')
assert not self.isfile_case('pkg/')
assert not self.isfile_case('bar.py/')
for i in range(2):
assert not self.isfile_case('Bar.py')
assert not self.isfile_case('pkg/sub_package/__init__.PY')
assert not self.isfile_case('pkg/Sub_Package/foo.py')
assert not self.isfile_case('Pkg/sub_package/foo.py')
def test_isfile_case_2(self) -> None:
self.make_file('bar.py')
self.make_file('pkg/sub_package/__init__.py')
self.make_file('pkg/sub_package/foo.py')
# Run twice to test both cached and non-cached code paths.
# This reverses the order of checks from test_isfile_case_1.
for i in range(2):
assert not self.isfile_case('Bar.py')
assert not self.isfile_case('pkg/sub_package/__init__.PY')
assert not self.isfile_case('pkg/Sub_Package/foo.py')
assert not self.isfile_case('Pkg/sub_package/foo.py')
for i in range(2):
assert self.isfile_case('bar.py')
assert self.isfile_case('pkg/sub_package/__init__.py')
assert self.isfile_case('pkg/sub_package/foo.py')
assert not self.isfile_case('non_existent.py')
assert not self.isfile_case('pkg/non_existent.py')
def test_isfile_case_3(self) -> None:
self.make_file('bar.py')
self.make_file('pkg/sub_package/__init__.py')
self.make_file('pkg/sub_package/foo.py')
# Run twice to test both cached and non-cached code paths.
for i in range(2):
assert self.isfile_case('bar.py')
assert not self.isfile_case('non_existent.py')
assert not self.isfile_case('pkg/non_existent.py')
assert not self.isfile_case('Bar.py')
assert not self.isfile_case('pkg/sub_package/__init__.PY')
assert not self.isfile_case('pkg/Sub_Package/foo.py')
assert not self.isfile_case('Pkg/sub_package/foo.py')
assert self.isfile_case('pkg/sub_package/__init__.py')
assert self.isfile_case('pkg/sub_package/foo.py')
def test_isfile_case_other_directory(self) -> None:
self.make_file('bar.py')
with tempfile.TemporaryDirectory() as other:
self.make_file('other_dir.py', base=other)
self.make_file('pkg/other_dir.py', base=other)
assert self.isfile_case(os.path.join(other, 'other_dir.py'))
assert not self.isfile_case(os.path.join(other, 'Other_Dir.py'))
assert not self.isfile_case(os.path.join(other, 'bar.py'))
if sys.platform in ('win32', 'darwin'):
# We only check case for directories under our prefix, and since
# this path is not under the prefix, case difference is fine.
assert self.isfile_case(os.path.join(other, 'PKG/other_dir.py'))
def make_file(self, path: str, base: Optional[str] = None) -> None:
if base is None:
base = self.tempdir
fullpath = os.path.join(base, path)
os.makedirs(os.path.dirname(fullpath), exist_ok=True)
if not path.endswith('/'):
with open(fullpath, 'w') as f:
f.write('# test file')
def isfile_case(self, path: str) -> bool:
return self.fscache.isfile_case(os.path.join(self.tempdir, path), self.tempdir)