/*
* Copyright (C) 2003-2009 eXo Platform SAS.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.chromattic.test.common.jcr;
import junit.framework.AssertionFailedError;
import junit.framework.TestCase;
import org.chromattic.common.jcr.Path;
import org.chromattic.common.jcr.PathException;
/**
* @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a>
* @version $Revision$
*/
public class PathVisitorTestCase extends TestCase {
/** . */
private final TestVisitor visitor = new TestVisitor();
public void testParseAbsolutePath() {
visitor.assertPath("/");
visitor.assertPath("/a", "_a");
visitor.assertPath("/a:b/{c}d", "_a:b", "_{c}d");
visitor.assertAbsolutePathFailure("a");
visitor.assertAbsolutePathFailure(".");
visitor.assertAbsolutePathFailure("..");
visitor.assertAbsolutePathFailure("a/");
}
public void testParseRelativePath() {
visitor.assertRelativePath("", "_");
visitor.assertRelativePath("a", "_a");
visitor.assertRelativePath(".", ".");
visitor.assertRelativePathFailure("[");
visitor.assertRelativePathFailure("]");
visitor.assertRelativePathFailure("|");
visitor.assertRelativePath("a/", "_a");
visitor.assertRelativePath("..", "..");
visitor.assertRelativePath(".a", "_.a");
visitor.assertRelativePath("a.", "_a.");
visitor.assertRelativePath("ab", "_ab");
visitor.assertRelativePath("./", ".");
visitor.assertRelativePath(".:", "_.:");
visitor.assertRelativePath(":a", "_:a");
visitor.assertRelativePath("a:", "_a:");
visitor.assertRelativePathFailure("//");
visitor.assertRelativePathFailure("/:");
visitor.assertRelativePathFailure("/[");
visitor.assertRelativePathFailure("/]");
visitor.assertRelativePathFailure("/*");
visitor.assertRelativePathFailure("/'");
visitor.assertRelativePathFailure("/'");
visitor.assertRelativePathFailure("/\"");
visitor.assertRelativePathFailure("/|");
visitor.assertRelativePathFailure(".[");
visitor.assertRelativePathFailure(".]");
visitor.assertRelativePathFailure(".*");
visitor.assertRelativePathFailure(".|");
visitor.assertRelativePath("a/b", "_a", "_b");
visitor.assertRelativePath("./b", ".", "_b");
visitor.assertRelativePath("a/.", "_a", ".");
visitor.assertRelativePath("./.", ".", ".");
visitor.assertRelativePath("../", "..");
visitor.assertRelativePath("../.", "..", ".");
visitor.assertRelativePath("./..", ".", "..");
visitor.assertRelativePath("../a", "..", "_a");
visitor.assertRelativePath("a/..", "_a", "..");
visitor.assertRelativePath("a[0]", "_a[0]");
visitor.assertRelativePath("../..", "..", "..");
}
public void testParsePathSegment() {
visitor.assertPathSegmentFailure("{");
visitor.assertPathSegmentFailure("{a");
visitor.assertPathSegmentFailure("/");
visitor.assertPathSegmentFailure("[");
visitor.assertPathSegmentFailure("]");
visitor.assertPathSegmentFailure("*");
visitor.assertPathSegmentFailure("|");
visitor.assertPathSegmentFailure("::");
visitor.assertPathSegment("", "_");
visitor.assertPathSegment(".", ".");
visitor.assertPathSegment("..", "..");
visitor.assertPathSegment(":", "_:");
visitor.assertPathSegment(":a", "_:a");
visitor.assertPathSegment("{a}a", "_{a}a");
visitor.assertPathSegment("a:a", "_a:a");
visitor.assertPathSegment("a:", "_a:");
}
public void testNormalizePath() {
assertNormalizablePath("/", "/");
assertNormalizablePath("/a", "/a");
assertNormalizablePath("/a/", "/a");
assertNormalizablePath("/a/.", "/a");
assertNormalizablePath("/a/./", "/a");
assertNormalizablePath("/a/..", "/");
assertNormalizablePath("/a/../", "/");
assertNormalizablePath("/a/b/..", "/a");
assertNormalizablePath("/a/b/../", "/a");
}
private void assertNormalizablePath(String path, String expectedNormalizedPath) {
try {
String normalizedPath = Path.normalizeAbsolutePath(path);
assertEquals(expectedNormalizedPath, normalizedPath);
}
catch (PathException e) {
AssertionFailedError afe = new AssertionFailedError();
afe.initCause(e);
throw afe;
}
}
private void assertInvalidNormalizablePath(String path) {
try {
Path.normalizeAbsolutePath(path);
fail();
}
catch (PathException ignore) {
}
}
}