You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
102 lines
2.9 KiB
102 lines
2.9 KiB
import sys
|
|
from unittest import TestCase
|
|
|
|
import pytest
|
|
|
|
from kazoo.protocol import paths
|
|
|
|
|
|
if sys.version_info > (3,): # pragma: nocover
|
|
|
|
def u(s):
|
|
return s
|
|
|
|
else: # pragma: nocover
|
|
|
|
def u(s):
|
|
return unicode(s, "unicode_escape") # noqa
|
|
|
|
|
|
class NormPathTestCase(TestCase):
|
|
def test_normpath(self):
|
|
assert paths.normpath("/a/b") == "/a/b"
|
|
|
|
def test_normpath_empty(self):
|
|
assert paths.normpath("") == ""
|
|
|
|
def test_normpath_unicode(self):
|
|
assert paths.normpath(u("/\xe4/b")) == u("/\xe4/b")
|
|
|
|
def test_normpath_dots(self):
|
|
assert paths.normpath("/a./b../c") == "/a./b../c"
|
|
|
|
def test_normpath_slash(self):
|
|
assert paths.normpath("/") == "/"
|
|
|
|
def test_normpath_multiple_slashes(self):
|
|
assert paths.normpath("//") == "/"
|
|
assert paths.normpath("//a/b") == "/a/b"
|
|
assert paths.normpath("/a//b//") == "/a/b"
|
|
assert paths.normpath("//a////b///c/") == "/a/b/c"
|
|
|
|
def test_normpath_relative(self):
|
|
with pytest.raises(ValueError):
|
|
paths.normpath("./a/b")
|
|
with pytest.raises(ValueError):
|
|
paths.normpath("/a/../b")
|
|
|
|
def test_normpath_trailing(self):
|
|
assert paths.normpath("/", trailing=True) == "/"
|
|
|
|
|
|
class JoinTestCase(TestCase):
|
|
def test_join(self):
|
|
assert paths.join("/a") == "/a"
|
|
assert paths.join("/a", "b/") == "/a/b/"
|
|
assert paths.join("/a", "b", "c") == "/a/b/c"
|
|
|
|
def test_join_empty(self):
|
|
assert paths.join("") == ""
|
|
assert paths.join("", "a", "b") == "a/b"
|
|
assert paths.join("/a", "", "b/", "c") == "/a/b/c"
|
|
|
|
def test_join_absolute(self):
|
|
assert paths.join("/a/b", "/c") == "/c"
|
|
|
|
|
|
class IsAbsTestCase(TestCase):
|
|
def test_isabs(self):
|
|
assert paths.isabs("/") is True
|
|
assert paths.isabs("/a") is True
|
|
assert paths.isabs("/a//b/c") is True
|
|
assert paths.isabs("//a/b") is True
|
|
|
|
def test_isabs_false(self):
|
|
assert paths.isabs("") is False
|
|
assert paths.isabs("a/") is False
|
|
assert paths.isabs("a/../") is False
|
|
|
|
|
|
class BaseNameTestCase(TestCase):
|
|
def test_basename(self):
|
|
assert paths.basename("") == ""
|
|
assert paths.basename("/") == ""
|
|
assert paths.basename("//a") == "a"
|
|
assert paths.basename("//a/") == ""
|
|
assert paths.basename("/a/b.//c..") == "c.."
|
|
|
|
|
|
class PrefixRootTestCase(TestCase):
|
|
def test_prefix_root(self):
|
|
assert paths._prefix_root("/a/", "b/c") == "/a/b/c"
|
|
assert paths._prefix_root("/a/b", "c/d") == "/a/b/c/d"
|
|
assert paths._prefix_root("/a", "/b/c") == "/a/b/c"
|
|
assert paths._prefix_root("/a", "//b/c.") == "/a/b/c."
|
|
|
|
|
|
class NormRootTestCase(TestCase):
|
|
def test_norm_root(self):
|
|
assert paths._norm_root("") == "/"
|
|
assert paths._norm_root("/") == "/"
|
|
assert paths._norm_root("//a") == "/a"
|
|
assert paths._norm_root("//a./b") == "/a./b"
|