import os


def relpath_parts(base, path):
    """
    Computes a list of parts
    of a given path relative to the base.

    E.g.

    "/root", "/root/foo/bar" -> ["foo", "bar"]

    """
    parts = []
    while path != base:
        parts.append(path.basename())
        path = path.directory()
    return list(reversed(parts))


def relpath(base, path):
    """
    Computes the os.sep-joined
    part of a given path relative to the base.

    E.g.

    "/root", "/root/foo/bar" -> "foo/bar"

    """
    return os.sep.join(relpath_parts(base, path))


def test_assert(condition, message):
    assert condition(), message


ASSERTION_COMMAND = test_assert


def assert_(condition, message):
    ASSERTION_COMMAND(condition, message)


def setup_assert(command):  # pragma: no cover
    global ASSERTION_COMMAND
    ASSERTION_COMMAND = command
