Spaces:
Build error
Build error
File size: 5,835 Bytes
64772a4 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 |
import contextlib
import os.path
import sys
import tempfile
import unittest
from io import open
from os.path import join as pjoin
from ..Dependencies import extended_iglob
@contextlib.contextmanager
def writable_file(dir_path, filename):
with open(pjoin(dir_path, filename), "w", encoding="utf8") as f:
yield f
class TestGlobbing(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls._orig_dir = os.getcwd()
if sys.version_info[0] < 3:
temp_path = cls._tmpdir = tempfile.mkdtemp()
else:
cls._tmpdir = tempfile.TemporaryDirectory()
temp_path = cls._tmpdir.name
os.chdir(temp_path)
for dir1 in "abcd":
for dir1x in [dir1, dir1 + 'x']:
for dir2 in "xyz":
dir_path = pjoin(dir1x, dir2)
os.makedirs(dir_path)
with writable_file(dir_path, "file2_pyx.pyx") as f:
f.write(u'""" PYX """')
with writable_file(dir_path, "file2_py.py") as f:
f.write(u'""" PY """')
with writable_file(dir1x, "file1_pyx.pyx") as f:
f.write(u'""" PYX """')
with writable_file(dir1x, "file1_py.py") as f:
f.write(u'""" PY """')
@classmethod
def tearDownClass(cls):
os.chdir(cls._orig_dir)
if sys.version_info[0] < 3:
import shutil
shutil.rmtree(cls._tmpdir)
else:
cls._tmpdir.cleanup()
def files_equal(self, pattern, expected_files):
expected_files = sorted(expected_files)
# It's the users's choice whether '/' will appear on Windows.
matched_files = sorted(path.replace('/', os.sep) for path in extended_iglob(pattern))
self.assertListEqual(matched_files, expected_files) # /
# Special case for Windows: also support '\' in patterns.
if os.sep == '\\' and '/' in pattern:
matched_files = sorted(extended_iglob(pattern.replace('/', '\\')))
self.assertListEqual(matched_files, expected_files) # \
def test_extended_iglob_simple(self):
ax_files = [pjoin("a", "x", "file2_pyx.pyx"), pjoin("a", "x", "file2_py.py")]
self.files_equal("a/x/*", ax_files)
self.files_equal("a/x/*.c12", [])
self.files_equal("a/x/*.{py,pyx,c12}", ax_files)
self.files_equal("a/x/*.{py,pyx}", ax_files)
self.files_equal("a/x/*.{pyx}", ax_files[:1])
self.files_equal("a/x/*.pyx", ax_files[:1])
self.files_equal("a/x/*.{py}", ax_files[1:])
self.files_equal("a/x/*.py", ax_files[1:])
def test_extended_iglob_simple_star(self):
for basedir in "ad":
files = [
pjoin(basedir, dirname, filename)
for dirname in "xyz"
for filename in ["file2_pyx.pyx", "file2_py.py"]
]
self.files_equal(basedir + "/*/*", files)
self.files_equal(basedir + "/*/*.c12", [])
self.files_equal(basedir + "/*/*.{py,pyx,c12}", files)
self.files_equal(basedir + "/*/*.{py,pyx}", files)
self.files_equal(basedir + "/*/*.{pyx}", files[::2])
self.files_equal(basedir + "/*/*.pyx", files[::2])
self.files_equal(basedir + "/*/*.{py}", files[1::2])
self.files_equal(basedir + "/*/*.py", files[1::2])
for subdir in "xy*":
files = [
pjoin(basedir, dirname, filename)
for dirname in "xyz"
if subdir in ('*', dirname)
for filename in ["file2_pyx.pyx", "file2_py.py"]
]
path = basedir + '/' + subdir + '/'
self.files_equal(path + "*", files)
self.files_equal(path + "*.{py,pyx}", files)
self.files_equal(path + "*.{pyx}", files[::2])
self.files_equal(path + "*.pyx", files[::2])
self.files_equal(path + "*.{py}", files[1::2])
self.files_equal(path + "*.py", files[1::2])
def test_extended_iglob_double_star(self):
basedirs = os.listdir(".")
files = [
pjoin(basedir, dirname, filename)
for basedir in basedirs
for dirname in "xyz"
for filename in ["file2_pyx.pyx", "file2_py.py"]
]
all_files = [
pjoin(basedir, filename)
for basedir in basedirs
for filename in ["file1_pyx.pyx", "file1_py.py"]
] + files
self.files_equal("*/*/*", files)
self.files_equal("*/*/**/*", files)
self.files_equal("*/**/*.*", all_files)
self.files_equal("**/*.*", all_files)
self.files_equal("*/**/*.c12", [])
self.files_equal("**/*.c12", [])
self.files_equal("*/*/*.{py,pyx,c12}", files)
self.files_equal("*/*/**/*.{py,pyx,c12}", files)
self.files_equal("*/**/*/*.{py,pyx,c12}", files)
self.files_equal("**/*/*/*.{py,pyx,c12}", files)
self.files_equal("**/*.{py,pyx,c12}", all_files)
self.files_equal("*/*/*.{py,pyx}", files)
self.files_equal("**/*/*/*.{py,pyx}", files)
self.files_equal("*/**/*/*.{py,pyx}", files)
self.files_equal("**/*.{py,pyx}", all_files)
self.files_equal("*/*/*.{pyx}", files[::2])
self.files_equal("**/*.{pyx}", all_files[::2])
self.files_equal("*/**/*/*.pyx", files[::2])
self.files_equal("*/*/*.pyx", files[::2])
self.files_equal("**/*.pyx", all_files[::2])
self.files_equal("*/*/*.{py}", files[1::2])
self.files_equal("**/*.{py}", all_files[1::2])
self.files_equal("*/*/*.py", files[1::2])
self.files_equal("**/*.py", all_files[1::2])
|