package test.concordion.api;
import org.concordion.api.Resource;
import junit.framework.TestCase;
public class ResourceTest extends TestCase {
public void testCanTellYouItsParent() throws Exception {
assertEquals("/", parentPathOf("/abc"));
assertEquals("/", parentPathOf("/abc/"));
assertEquals("/abc/", parentPathOf("/abc/def"));
assertEquals("/abc/", parentPathOf("/abc/def/"));
assertEquals("/abc/def/", parentPathOf("/abc/def/ghi"));
}
public void testReturnsNullForParentOfRoot() {
assertNull(new Resource("/").getParent());
}
public void testCanCalculateRelativePaths() throws Exception {
assertEquals("x.html", relativePath("/spec/x.html", "/spec/x.html"));
assertEquals("blah", relativePath("/spec/", "/spec/blah"));
assertEquals("../x/", relativePath("/a/b/c/", "/a/b/x/"));
assertEquals("../../../a/b/x/", relativePath("/x/b/c/", "/a/b/x/"));
assertEquals("../../x/x/file.txt", relativePath("/a/b/c/file.txt", "/a/x/x/file.txt"));
assertEquals("../../../image/concordion-logo.png", relativePath("/spec/concordion/breadcrumbs/Breadcrumbs.html", "/image/concordion-logo.png"));
}
public void testGivenRelativePathFromOneResourceReturnsOtherResource() {
assertEquals("/david.html", getResourceRelativeTo("/blah.html", "david.html"));
assertEquals("/david.html", getResourceRelativeTo("/", "david.html"));
assertEquals("/blah/david.html", getResourceRelativeTo("/blah/x", "david.html"));
assertEquals("/blah/x/david.html", getResourceRelativeTo("/blah/x/y", "david.html"));
assertEquals("/blah/x/z/david.html", getResourceRelativeTo("/blah/x/y", "z/david.html"));
assertEquals("/blah/style.css", getResourceRelativeTo("/blah/docs/example.html", "../style.css"));
assertEquals("/style.css", getResourceRelativeTo("/blah/docs/example.html", "../../style.css"));
assertEquals("/blah/style.css", getResourceRelativeTo("/blah/docs/work/example.html", "../../style.css"));
assertEquals("/blah/docs/style.css", getResourceRelativeTo("/blah/docs/work/example.html", "../style.css"));
assertEquals("/style.css", getResourceRelativeTo("/blah/example.html", "../style.css"));
assertEquals("/style.css", getResourceRelativeTo("/blah/", "../style.css"));
assertEquals("/style.css", getResourceRelativeTo("/blah", "style.css"));
assertEquals("/blah/docs/css/style.css", getResourceRelativeTo("/blah/docs/work/", "../css/style.css"));
}
public void testThrowsExceptionIfRelativePathPointsAboveRoot() {
try {
getResourceRelativeTo("/blah/docs/example.html", "../../../style.css");
fail();
} catch (Exception e) {
assertEquals("Path '../../../style.css' relative to '/blah/docs/example.html' " +
"evaluates above the root package.", e.getMessage());
}
}
private String getResourceRelativeTo(String resourcePath, String relativePath) {
return new Resource(resourcePath).getRelativeResource(relativePath).getPath();
}
private String relativePath(String from, String to) {
return resource(from).getRelativePath(resource(to));
}
private String parentPathOf(String path) {
return resource(path).getParent().getPath();
}
private Resource resource(String path) {
return new Resource(path);
}
}