osxphotos/tests/test_path_utils.py
2022-02-06 21:54:08 -08:00

122 lines
3.6 KiB
Python

""" Test path_utils.py """
def test_sanitize_filename():
"""test sanitize_filename"""
# subtract 6 chars from max length of 255 to account for lock file extension
from osxphotos.path_utils import sanitize_filename
from osxphotos._constants import MAX_FILENAME_LEN
# basic sanitize
filenames = {
"Foobar.txt": "Foobar.txt",
"Foo:bar.txt": "Foo:bar.txt",
"Foo/bar.txt": "Foo:bar.txt",
"Foo//.txt": "Foo::.txt",
}
for filename, sanitized in filenames.items():
filename = sanitize_filename(filename)
assert filename == sanitized
# sanitize with replacement
filenames = {
"Foobar.txt": "Foobar.txt",
"Foo:bar.txt": "Foo:bar.txt",
"Foo/bar.txt": "Foo_bar.txt",
"Foo//.txt": "Foo__.txt",
}
for filename, sanitized in filenames.items():
filename = sanitize_filename(filename, replacement="_")
assert filename == sanitized
# filename too long
filename = "foo" + "x" * 512
new_filename = sanitize_filename(filename)
assert len(new_filename) == MAX_FILENAME_LEN
assert new_filename == "foo" + "x" * (252 - 6)
# filename too long with extension
filename = "x" * 512 + ".jpeg"
new_filename = sanitize_filename(filename)
assert len(new_filename) == MAX_FILENAME_LEN
assert new_filename == "x" * (250 - 6) + ".jpeg"
# more than one extension
filename = "foo.bar" + "x" * 255 + ".foo.bar.jpeg"
new_filename = sanitize_filename(filename)
assert len(new_filename) == MAX_FILENAME_LEN
assert new_filename == "foo.bar" + "x" * (243 - 6) + ".jpeg"
# shorter than drop count
filename = "foo." + "x" * 256
new_filename = sanitize_filename(filename)
assert len(new_filename) == MAX_FILENAME_LEN
assert new_filename == "foo." + "x" * (251 - 6)
def test_sanitize_dirname():
from osxphotos.path_utils import sanitize_dirname
from osxphotos._constants import MAX_DIRNAME_LEN
# basic sanitize
dirnames = {
"Foobar": "Foobar",
"Foo:bar": "Foo:bar",
"Foo/bar": "Foo:bar",
"Foo//": "Foo::",
}
for dirname, sanitized in dirnames.items():
dirname = sanitize_dirname(dirname)
assert dirname == sanitized
# sanitize with replacement
dirnames = {
"Foobar": "Foobar",
"Foo:bar": "Foo:bar",
"Foo/bar": "Foo_bar",
"Foo//": "Foo__",
}
for dirname, sanitized in dirnames.items():
dirname = sanitize_dirname(dirname, replacement="_")
assert dirname == sanitized
# dirname too long
dirname = "foo" + "x" * 512 + "bar"
new_dirname = sanitize_dirname(dirname)
assert len(new_dirname) == MAX_DIRNAME_LEN
assert new_dirname == "foo" + "x" * 252
def test_sanitize_pathpart():
from osxphotos.path_utils import sanitize_pathpart
from osxphotos._constants import MAX_DIRNAME_LEN
# basic sanitize
dirnames = {
"Foobar": "Foobar",
"Foo:bar": "Foo:bar",
"Foo/bar": "Foo:bar",
"Foo//": "Foo::",
}
for dirname, sanitized in dirnames.items():
dirname = sanitize_pathpart(dirname)
assert dirname == sanitized
# sanitize with replacement
dirnames = {
"Foobar": "Foobar",
"Foo:bar": "Foo:bar",
"Foo/bar": "Foo_bar",
"Foo//": "Foo__",
}
for dirname, sanitized in dirnames.items():
dirname = sanitize_pathpart(dirname, replacement="_")
assert dirname == sanitized
# dirname too long
dirname = "foo" + "x" * 512 + "bar"
new_dirname = sanitize_pathpart(dirname)
assert len(new_dirname) == MAX_DIRNAME_LEN
assert new_dirname == "foo" + "x" * 252