Admin Panel

import pytest
from amitools.vamos.path import AmiPath, AmiPathError


def path_amipath_eq_ne_test():
  assert AmiPath() == AmiPath()
  assert AmiPath("foo:bar") == AmiPath("foo:bar")
  # case insensitive
  assert AmiPath("Foo:BAR") == AmiPath("foo:bar")
  # ne
  assert AmiPath() != AmiPath("bla")
  assert AmiPath("Foo:BAR") != AmiPath("foo:baz")


def path_amipath_abs_rel_test():
  # cur dir "" is default and assumed to be local
  p = AmiPath()
  assert p.is_local()
  assert not p.is_absolute()
  assert not p.is_parent_local()
  assert not p.is_prefix_local()
  assert not p.is_name_only()
  assert not p.ends_with_name()
  # abs
  p = AmiPath("foo:bar")
  assert not p.is_local()
  assert p.is_absolute()
  assert not p.is_parent_local()
  assert not p.is_prefix_local()
  assert not p.is_name_only()
  assert p.ends_with_name()
  # abs2
  p = AmiPath("foo:")
  assert not p.is_local()
  assert p.is_absolute()
  assert not p.is_parent_local()
  assert not p.is_prefix_local()
  assert not p.is_name_only()
  assert not p.ends_with_name()
  # local
  p = AmiPath("foo/bar")
  assert p.is_local()
  assert not p.is_absolute()
  assert not p.is_parent_local()
  assert not p.is_prefix_local()
  assert not p.is_name_only()
  assert p.ends_with_name()
  # local name
  p = AmiPath("foo")
  assert p.is_local()
  assert not p.is_absolute()
  assert not p.is_parent_local()
  assert not p.is_prefix_local()
  assert p.is_name_only()
  assert p.ends_with_name()
  # special local
  p = AmiPath(":bla")
  assert p.is_local()
  assert not p.is_absolute()
  assert not p.is_parent_local()
  assert p.is_prefix_local()
  assert not p.is_name_only()
  assert p.ends_with_name()
  # parent local
  p = AmiPath("/bla")
  assert p.is_local()
  assert not p.is_absolute()
  assert p.is_parent_local()
  assert not p.is_prefix_local()
  assert not p.is_name_only()
  assert p.ends_with_name()
  # parent local
  p = AmiPath("/bla/")
  assert p.is_local()
  assert not p.is_absolute()
  assert p.is_parent_local()
  assert not p.is_prefix_local()
  assert not p.is_name_only()
  assert not p.ends_with_name()


def path_amipath_prefix_postfix_test():
  p = AmiPath()
  assert p.prefix() is None
  assert p.postfix() == ""
  assert p.postfix(True) == ""
  assert AmiPath.build(p.prefix(), p.postfix()) == p
  p = AmiPath("foo:bar/")
  assert p.prefix() == "foo"
  assert p.postfix() == "bar"
  assert p.postfix(True) == "bar"
  assert p.postfix(skip_trailing=False) == "bar/"
  assert AmiPath.build(p.prefix(), p.postfix(skip_trailing=False)) == p
  p = AmiPath("foo/bar/")
  assert p.prefix() is None
  assert p.postfix() == "foo/bar"
  assert p.postfix(True) == "foo/bar"
  assert p.postfix(skip_trailing=False)
  assert AmiPath.build(p.prefix(), p.postfix(skip_trailing=False)) == p
  p = AmiPath(":bla")
  assert p.prefix() is None
  assert p.postfix() == ":bla"
  assert p.postfix(True) == "bla"
  assert AmiPath.build(p.prefix(), p.postfix()) == p
  p = AmiPath("/bla")
  assert p.prefix() is None
  assert p.postfix() == "/bla"
  assert p.postfix(True) == "bla"
  assert AmiPath.build(p.prefix(), p.postfix()) == p
  p = AmiPath("/")
  assert p.prefix() is None
  assert p.postfix() == "/"
  assert p.postfix(True) == ""
  assert AmiPath.build(p.prefix(), p.postfix()) == p


def path_amipath_valid_syntax_test():
  assert AmiPath().is_syntax_valid()
  assert AmiPath("foo:bar/").is_syntax_valid()
  assert AmiPath("foo/bar/").is_syntax_valid()
  assert AmiPath(":bla").is_syntax_valid()
  assert AmiPath("/bla").is_syntax_valid()
  # invalid
  assert not AmiPath("//").is_syntax_valid()
  assert not AmiPath(":/").is_syntax_valid()
  assert not AmiPath("bla/foo:").is_syntax_valid()
  assert not AmiPath("bla:foo:").is_syntax_valid()


def path_amipath_parent_test():
  assert AmiPath("foo/bar").parent() == AmiPath("foo")
  assert AmiPath("foo:bar/baz").parent() == AmiPath("foo:bar")
  assert AmiPath("foo:bar").parent() == AmiPath("foo:")
  assert AmiPath("foo:").parent() is None
  assert AmiPath("/bar").parent() == AmiPath("/")
  assert AmiPath("/bar/").parent() == AmiPath("/")
  assert AmiPath("/").parent() is None
  assert AmiPath(":").parent() is None
  assert AmiPath(":bar").parent() == AmiPath(":")
  assert AmiPath("bar").parent() == AmiPath()


def path_amipath_names_test():
  assert AmiPath("foo/bar").names() == ['foo', 'bar']
  assert AmiPath("foo:bar/baz").names() == ['bar', 'baz']
  assert AmiPath("foo:bar").names() == ['bar']
  assert AmiPath("foo:").names() == []
  assert AmiPath("/bar").names() == ['bar']
  assert AmiPath("/bar/").names() == ['bar']
  assert AmiPath("/").names() == []
  assert AmiPath(":").names() == []
  assert AmiPath(":bar").names() == ['bar']
  assert AmiPath("bar").names() == ['bar']
  # with special name
  assert AmiPath("foo/bar").names(True) == ['foo', 'bar']
  assert AmiPath("foo:bar/baz").names(True) == ['bar', 'baz']
  assert AmiPath("foo:bar").names(True) == ['bar']
  assert AmiPath("foo:").names(True) == []
  assert AmiPath("/bar").names(True) == ['/', 'bar']
  assert AmiPath("/bar/").names(True) == ['/', 'bar']
  assert AmiPath("/").names(True) == ['/']
  assert AmiPath(":").names(True) == [':']
  assert AmiPath(":bar").names(True) == [':', 'bar']
  assert AmiPath("bar").names(True) == ['bar']


def path_amipath_filename_test():
  assert AmiPath("foo/bar").filename() == 'bar'
  assert AmiPath("foo:bar/baz").filename() == 'baz'
  assert AmiPath("foo:bar").filename() == 'bar'
  assert AmiPath("foo:").filename() is None
  assert AmiPath("/bar").filename() == 'bar'
  assert AmiPath("/bar/").filename() == 'bar'
  assert AmiPath("/").filename() is None
  assert AmiPath(":").filename() is None
  assert AmiPath(":bar").filename() == 'bar'
  assert AmiPath("bar").filename() == 'bar'


def path_amipath_dirname_test():
  assert AmiPath("foo/bar").dirname() == 'foo'
  assert AmiPath("foo:bar/baz").dirname() == 'bar'
  assert AmiPath("foo:bar/baz").dirname() == 'bar'
  assert AmiPath("foo:bar").dirname() is None
  assert AmiPath("foo:").dirname() is None
  assert AmiPath("/bar").dirname() == '/'
  assert AmiPath("/bar/").dirname() == '/'
  assert AmiPath("/").dirname() == '/'
  assert AmiPath(":").dirname() == ':'
  assert AmiPath(":bar").dirname() == ':'
  assert AmiPath("bar").dirname() is None


def path_amipath_absdirname_test():
  assert AmiPath("foo/bar").absdirname() == 'foo'
  assert AmiPath("foo:bar/baz").absdirname() == 'foo:bar'
  assert AmiPath("foo:bar").absdirname() == 'foo:'
  assert AmiPath("foo:").absdirname() == 'foo:'
  assert AmiPath("/bar").absdirname() == '/'
  assert AmiPath("/bar/").absdirname() == '/'
  assert AmiPath("/").absdirname() == '/'
  assert AmiPath(":").absdirname() == ':'
  assert AmiPath(":bar").absdirname() == ':'
  assert AmiPath("bar").absdirname() is None


def path_amipath_join_abs_test():
  # abs join abs
  assert AmiPath("foo:bar").join(AmiPath("baz:boo")) == AmiPath("baz:boo")
  # abs join parent local
  assert AmiPath("foo:bar").join(AmiPath("/baz")) == AmiPath("foo:baz")
  assert AmiPath("foo:bar/boo").join(AmiPath("/baz")
                                     ) == AmiPath("foo:bar/baz")
  assert AmiPath("foo:bar/boo").join(AmiPath("/")) == AmiPath("foo:bar")
  with pytest.raises(AmiPathError):
    print(AmiPath("foo:").join(AmiPath("/baz")))
  # abs join prefix local
  assert AmiPath("foo:bar").join(AmiPath(":baz")) == AmiPath("foo:baz")
  assert AmiPath("foo:bar/boo").join(AmiPath(":baz")) == AmiPath("foo:baz")
  assert AmiPath("foo:bar").join(AmiPath(":")) == AmiPath("foo:")
  # abs join local
  assert AmiPath("foo:").join(AmiPath()) == AmiPath("foo:")
  assert AmiPath("foo:").join(AmiPath("bar")) == AmiPath("foo:bar")
  assert AmiPath("foo:baz").join(AmiPath()) == AmiPath("foo:baz")
  assert AmiPath("foo:baz").join(AmiPath("bar")) == AmiPath("foo:baz/bar")


def path_amipath_join_local_test():
  # local join abs
  assert AmiPath("bar").join(AmiPath("baz:boo")) == AmiPath("baz:boo")
  # local join parent local
  assert AmiPath("bar").join(AmiPath("/baz")) == AmiPath("baz")
  assert AmiPath("bar/boo").join(AmiPath("/baz")) == AmiPath("bar/baz")
  assert AmiPath("bar/boo").join(AmiPath("/")) == AmiPath("bar")
  with pytest.raises(AmiPathError):
    print(AmiPath().join(AmiPath("/baz")))
  # local join prefix local
  assert AmiPath("bar").join(AmiPath(":baz")) == AmiPath(":baz")
  assert AmiPath("bar/boo").join(AmiPath(":baz")) == AmiPath(":baz")
  assert AmiPath("bar").join(AmiPath(":")) == AmiPath(":")
  # local join local
  assert AmiPath().join(AmiPath()) == AmiPath()
  assert AmiPath().join(AmiPath("bar")) == AmiPath("bar")
  assert AmiPath("baz").join(AmiPath("bar")) == AmiPath("baz/bar")
  assert AmiPath("foo/baz").join(AmiPath("bar")) == AmiPath("foo/baz/bar")


def path_amipath_join_parent_local_test():
  # parent local join abs
  assert AmiPath("/bar").join(AmiPath("baz:boo")) == AmiPath("baz:boo")
  # parent local join parent local
  with pytest.raises(AmiPathError):
    AmiPath("/bar").join(AmiPath("/baz"))
  # parent local join prefix local
  assert AmiPath("/bar").join(AmiPath(":baz")) == AmiPath(":baz")
  assert AmiPath("/bar/boo").join(AmiPath(":baz")) == AmiPath(":baz")
  assert AmiPath("/bar").join(AmiPath(":")) == AmiPath(":")
  # parent local join local
  assert AmiPath("/").join(AmiPath()) == AmiPath("/")
  assert AmiPath("/").join(AmiPath("bar")) == AmiPath("/bar")
  assert AmiPath("/baz").join(AmiPath("bar")) == AmiPath("/baz/bar")
  assert AmiPath("/foo/baz").join(AmiPath("bar")) == AmiPath("/foo/baz/bar")


def path_amipath_join_prefix_local_test():
  # prefix local join abs
  assert AmiPath(":bar").join(AmiPath("baz:boo")) == AmiPath("baz:boo")
  # prefix local join parent local
  with pytest.raises(AmiPathError):
    AmiPath(":").join(AmiPath("/baz"))
  assert AmiPath(":bar").join(AmiPath("/baz")) == AmiPath(":baz")
  assert AmiPath(":foo/bar").join(AmiPath("/baz")) == AmiPath(":foo/baz")
  # prefix local join prefix local
  assert AmiPath(":bar").join(AmiPath(":baz")) == AmiPath(":baz")
  assert AmiPath(":bar/boo").join(AmiPath(":baz")) == AmiPath(":baz")
  assert AmiPath(":bar").join(AmiPath(":")) == AmiPath(":")
  # prefix local join local
  assert AmiPath(":").join(AmiPath()) == AmiPath(":")
  assert AmiPath(":").join(AmiPath("bar")) == AmiPath(":bar")
  assert AmiPath(":baz").join(AmiPath("bar")) == AmiPath(":baz/bar")
  assert AmiPath(":foo/baz").join(AmiPath("bar")) == AmiPath(":foo/baz/bar")