diff --git a/source/dub/internal/vibecompat/inet/path.d b/source/dub/internal/vibecompat/inet/path.d index 6b54292..15d9fbe 100644 --- a/source/dub/internal/vibecompat/inet/path.d +++ b/source/dub/internal/vibecompat/inet/path.d @@ -163,7 +163,9 @@ while( parentPath.length > nup && !startsWith(parentPath[0 .. parentPath.length-nup]) ){ nup++; } + assert(m_nodes.length >= parentPath.length - nup); Path ret = Path(null, false); + assert(m_nodes.length >= parentPath.length - nup); ret.m_endsWithSlash = true; foreach( i; 0 .. nup ) ret ~= ".."; ret ~= Path(m_nodes[parentPath.length-nup .. $], false); @@ -457,3 +459,18 @@ } } } + +unittest { + assert(Path("/foo/bar/baz").relativeTo(Path("/foo")).toString == "bar/baz"); + assert(Path("/foo/bar/baz/").relativeTo(Path("/foo")).toString == "bar/baz/"); + assert(Path("/foo/bar").relativeTo(Path("/foo")).toString == "bar"); + assert(Path("/foo/bar/").relativeTo(Path("/foo")).toString == "bar/"); + assert(Path("/foo").relativeTo(Path("/foo/bar")).toString() == ".."); + assert(Path("/foo/").relativeTo(Path("/foo/bar")).toString() == "../"); + assert(Path("/foo/baz").relativeTo(Path("/foo/bar/baz")).toString() == "../../baz"); + assert(Path("/foo/baz/").relativeTo(Path("/foo/bar/baz")).toString() == "../../baz/"); + assert(Path("/foo/").relativeTo(Path("/foo/bar/baz")).toString() == "../../"); + assert(Path("/foo/").relativeTo(Path("/foo/bar/baz/mumpitz")).toString() == "../../../"); + assert(Path("/foo").relativeTo(Path("/foo")).toString() == ""); + assert(Path("/foo/").relativeTo(Path("/foo")).toString() == ""); +}