@Test
public void testResolve() {
for (final String[] params : new String[][] {
{ "foo:bar:/baz?plonk!/", "", "baz", "foo:bar:/baz?plonk!/" },
{ "foo:bar:/bäz?bööm!/", "bäng?plönk", "bäz/bäng?plönk", "foo:bar:/bäz?bööm!/bäng?plönk" },
{ "foo:bar:/baz!/", "bang?boom", "baz/bang?boom", "foo:bar:/baz!/bang?boom" },
{ "foo:bar:/baz!/", "bang", "baz/bang", "foo:bar:/baz!/bang" },
{ "foo:bar:/baz!/", "", "baz", "foo:bar:/baz!/" },
{ "foo:bar:/baz?plonk!/", "bang?boom", "baz/bang?boom", "foo:bar:/baz?plonk!/bang?boom" },
{ "foo:bar:/baz?plonk!/", "bang", "baz/bang", "foo:bar:/baz?plonk!/bang" },
{ "foo:/bar/", "baz?bang", null, "foo:/bar/baz?bang" },
{ "foo:/bar/", "baz", null, "foo:/bar/baz" },
{ "foo:/bar/", "", null, "foo:/bar/" },
{ "foo:/bar/", "baz", null, "foo:/bar/baz" },
}) {
final FsMountPoint mountPoint = FsMountPoint.create(URI.create(params[0]));
final FsEntryName entryName = FsEntryName.create(URI.create(params[1]));
final FsEntryName parentEntryName = null == params[2] ? null : FsEntryName.create(URI.create(params[2]));
final FsPath path = FsPath.create(URI.create(params[3]));
if (null != parentEntryName)
assertThat(mountPoint.getPath().resolve(entryName).getEntryName(), equalTo(parentEntryName));
assertThat(mountPoint.resolve(entryName), equalTo(path));
assertThat(mountPoint.resolve(entryName).toUri().isAbsolute(), is(true));
}
}