package com.revolsys.io.test;
import java.util.Arrays;
import java.util.List;
import org.junit.Assert;
import org.junit.Test;
import com.revolsys.io.PathName;
import com.revolsys.io.PathUtil;
import com.revolsys.util.Property;
public class PathTest {
private void assertAncestor(final String parentPath, final String childPath,
final boolean expected) {
final boolean ancestor = PathUtil.isAncestor(parentPath, childPath);
Assert.assertEquals(expected, ancestor);
}
private void assertAncestorOrDescendant(final String path1, final String path2,
final boolean expectedAncestor, final boolean expectedDescendant) {
{
final PathName pathName1 = PathName.newPathName(path1);
final PathName pathName2 = PathName.newPathName(path2);
if (pathName1 != null) {
final boolean isAncestor2 = pathName1.isAncestorOf(pathName2);
Assert.assertEquals(expectedAncestor, isAncestor2);
final boolean isDescendant12 = pathName1.isDescendantOf(pathName2);
Assert.assertEquals(expectedDescendant, isDescendant12);
}
if (expectedAncestor != expectedDescendant) {
final boolean isAncestor21 = pathName2.isAncestorOf(pathName1);
Assert.assertEquals(!expectedAncestor, isAncestor21);
final boolean isDescendant21 = pathName2.isDescendantOf(pathName1);
Assert.assertEquals(expectedAncestor, isDescendant21);
}
}
}
private void assertChildName(final String parentPath, final String childPath,
final String expected) {
final String childName = PathUtil.getChildName(parentPath, childPath);
Assert.assertEquals(expected, childName);
}
private void assertChildPath(final String parentPath, final String childPath,
final String expected) {
final String childName = PathUtil.getChildPath(parentPath, childPath);
Assert.assertEquals(expected, childName);
final PathName pathName1 = PathName.newPathName(parentPath);
final PathName pathName2 = PathName.newPathName(childPath);
if (pathName1 != null) {
final PathName childPathName = pathName1.getChild(pathName2);
if (expected == null) {
Assert.assertNull("getChildPath", childPathName);
} else {
Assert.assertEquals("getChildPath " + pathName1 + ", " + pathName2,
PathName.newPathName(expected), childPathName);
}
}
}
private void assertClean(final String source, final String expected) {
final String cleaned = PathUtil.clean(source);
Assert.assertEquals(expected, cleaned);
final String cleanedUpper = PathUtil.cleanUpper(source);
String expectedUpper;
if (expected == null) {
expectedUpper = null;
} else {
expectedUpper = expected.toUpperCase();
}
Assert.assertEquals(expectedUpper, cleanedUpper);
}
private void assertElements(final String path, final String... expected) {
final List<String> paths = PathName.newPathName(path).getElements();
Assert.assertEquals(Arrays.asList(expected), paths);
}
private void assertName(final String source, final String expected) {
final String name = PathUtil.getName(source);
Assert.assertEquals(expected, name);
}
private void assertParent(final String parentPath, final String childPath,
final boolean expectedParent, final boolean expectedChild) {
{
final boolean parent = PathUtil.isParent(parentPath, childPath);
Assert.assertEquals(expectedParent, parent);
}
{
final PathName path1 = PathName.newPathName(parentPath);
final PathName path2 = PathName.newPathName(childPath);
if (path1 != null) {
final boolean isParent12 = path1.isParentOf(path2);
Assert.assertEquals(expectedParent, isParent12);
final boolean isChild12 = path1.isChildOf(path2);
Assert.assertEquals(expectedChild, isChild12);
}
if (expectedParent != expectedChild) {
final boolean isParent21 = path2.isParentOf(path1);
Assert.assertEquals(!expectedParent, isParent21);
final boolean isChild21 = path2.isChildOf(path1);
Assert.assertEquals(expectedParent, isChild21);
}
}
}
private void assertPath(final String source, final String expected) {
final String path = PathUtil.getPath(source);
Assert.assertEquals(expected, path);
if (Property.hasValue(source)) {
final PathName parent = PathName.newPathName(source).getParent();
if (parent != null) {
Assert.assertEquals(expected, parent.toString());
}
}
}
private void assertPaths(final String path, final String... expected) {
final List<String> paths = PathUtil.getPaths(path);
Assert.assertEquals(Arrays.asList(expected), paths);
}
@Test
public void testAncestor() {
assertAncestor(null, null, false);
assertAncestor("", null, false);
assertAncestor(null, "", false);
assertAncestor("/test", null, false);
assertAncestor(null, "/test", false);
assertAncestor("/", "", false);
assertAncestor("/", "/", false);
assertAncestor("", "/", false);
assertAncestor("/", "/test", true);
assertAncestor("/", "/test/aaa", true);
assertAncestor("/test", "/test/aaa", true);
assertAncestor("/test/aaa", "/test/aaa", false);
assertAncestor("/test/aaa", "/test", false);
assertAncestor("/test/aaa", "/test/aaa/bbb", true);
assertAncestor("/test/", "/test/aaa/bbb", true);
}
@Test
public void testAncestorOrDescendant() {
assertAncestorOrDescendant("/test", null, false, false);
assertAncestorOrDescendant("/", "", false, false);
assertAncestorOrDescendant("/", "/", false, false);
assertAncestorOrDescendant("", "/", false, false);
assertAncestorOrDescendant("/", "/test", true, false);
assertAncestorOrDescendant("/", "/test/aaa", true, false);
assertAncestorOrDescendant("/test", "/test/aaa", true, false);
assertAncestorOrDescendant("/test/aaa", "/test/aaa", false, false);
assertAncestorOrDescendant("/test/aaa", "/test", false, true);
assertAncestorOrDescendant("/test/aaa", "/test/aaa/bbb", true, false);
assertAncestorOrDescendant("/test/", "/test/aaa/bbb", true, false);
}
@Test
public void testChildName() {
assertChildName(null, null, null);
assertChildName("", null, null);
assertChildName(null, "", null);
assertChildName("/test", null, null);
assertChildName(null, "/test", null);
assertChildName("/test", "/test/", null);
assertChildName("/", "", null);
assertChildName("/", "/", null);
assertChildName("/", "/test", "test");
assertChildName("", "/", null);
assertChildName("/test", "/test/aaa", "aaa");
assertChildName("/test/aaa", "/test/aaa", null);
assertChildName("/test/aaa", "/test", null);
assertChildName("/test/aaa", "/test/aaa/bbb", "bbb");
assertChildName("/test/", "/test/aaa/bbb", "aaa");
}
@Test
public void testChildPath() {
assertChildPath(null, null, null);
assertChildPath("", null, null);
assertChildPath(null, "", null);
assertChildPath("/test", null, null);
assertChildPath(null, "/test", null);
assertChildPath("/test", "/test/", null);
assertChildPath("/", "", null);
assertChildPath("/", "/", null);
assertChildPath("/", "/test", "/test");
assertChildPath("", "/", null);
assertChildPath("/test", "/test/aaa", "/test/aaa");
assertChildPath("/test/aaa", "/test/aaa", null);
assertChildPath("/test/aaa", "/test", null);
assertChildPath("/test/aaa", "/test/aaa/bbb", "/test/aaa/bbb");
assertChildPath("/test/", "/test/aaa/bbb", "/test/aaa");
}
@Test
public void testClean() {
assertClean(null, null);
assertClean("", "/");
assertClean("//", "/");
assertClean(" \t//", "/");
assertClean("\\/", "/");
assertClean("/test/", "/test");
assertClean(" \t\n\r/test/\\ /\\\t", "/test");
assertClean("/test/", "/test");
assertClean("/test/a/bbbbb", "/test/a/bbbbb");
assertClean("/test /\\a\\/bbbbb", "/test /a/bbbbb");
}
@Test
public void testElements() {
assertElements("/");
assertElements("/t", "t");
assertElements("/test", "test");
assertElements("/test/aaa", "test", "aaa");
}
@Test
public void testName() {
assertName(null, null);
assertName("", "/");
assertName("//", "/");
assertName(" \t//", "/");
assertName("\\/", "/");
assertName("/test/", "test");
assertName(" \t\n\r/test/\\ /\\\t", "test");
assertName("/test/", "test");
assertName("/test/aaaa", "aaaa");
assertName("/test /\\a\\/bbbbb", "bbbbb");
}
@Test
public void testParent() {
assertParent("/", null, false, false);
assertParent("/test", null, false, false);
assertParent("/", "", false, false);
assertParent("/", "/", false, false);
assertParent("", "/", false, false);
assertParent("/test", "/test/aaa", true, false);
assertParent("/test/aaa", "/test/aaa", false, false);
assertParent("/test/aaa", "/test", false, true);
assertParent("/test/aaa", "/test/aaa/bbb", true, false);
assertParent("/test/", "/test/aaa/bbb", false, false);
}
@Test
public void testPath() {
assertPath(null, null);
assertPath("", "/");
assertPath("//", "/");
assertPath(" \t//", "/");
assertPath("\\/", "/");
assertPath("/test/", "/");
assertPath(" \t\n\r/test/\\ /\\\t", "/");
assertPath("/test/", "/");
assertPath("/test/aaa", "/test");
assertPath("/test /\\a\\/bbbbb", "/test /a");
}
@Test
public void testPaths() {
assertPaths(null);
assertPaths("", "/");
assertPaths("/", "/");
assertPaths("/t", "/", "/t");
assertPaths("/test", "/", "/test");
assertPaths("/test/aaa", "/", "/test", "/test/aaa");
}
}