Fix relative and absolute markdown links within repo [link](/a) should resolve relative to the top of the repository, not the top of the host. [link](../../C) from within A/B/ should correctly resolve to /C and not a broken link. Update DocServletTest to fix tests previously broken by anchor hyperlink widgets (263d674ee88311b3b). Change-Id: I036c47f22a52d82919f7472c751db766b88d23f7
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/doc/DocServletTest.java b/gitiles-servlet/src/test/java/com/google/gitiles/doc/DocServletTest.java index dffe4f2..56b7227 100644 --- a/gitiles-servlet/src/test/java/com/google/gitiles/doc/DocServletTest.java +++ b/gitiles-servlet/src/test/java/com/google/gitiles/doc/DocServletTest.java
@@ -69,7 +69,7 @@ String html = buildHtml("/repo/+doc/master/README.md"); assertTrue(html.contains("<title>" + title + "</title>")); - assertTrue(html.contains("<h1>" + title + "</h1>")); + assertTrue(html.contains(title + "</h1>")); assertTrue(html.contains("<a href=\"" + url + "\">Markdown</a>")); } @@ -91,7 +91,9 @@ assertTrue(html.contains("<h2>page</h2>")); assertTrue(html.contains("<li><a href=\"index.md\">Home</a></li>")); assertTrue(html.contains("<li><a href=\"README.md\">README</a></li>")); - assertTrue(html.contains("<h1>page</h1>")); + assertTrue(html.contains("<h1>" + + "<a class=\"h\" name=\"page\" href=\"#page\"><span></span></a>" + + "page</h1>")); } @Test @@ -106,7 +108,7 @@ .create(); String html = buildHtml("/repo/+doc/master/"); - assertTrue(html.contains("<h1>B. Ad</h1>")); + assertTrue(html.contains("B. Ad</h1>")); assertTrue(html.contains("Non-HTML is fine.")); assertFalse(html.contains("window.alert")); @@ -121,8 +123,12 @@ .add("index.md", markdown) .create(); String html = buildHtml("/repo/+doc/master/"); - assertTrue(html.contains("<a name=\"debug\"><h1>Section</h1></a>")); - assertTrue(html.contains("<a name=\"old-school\"><h1>Other</h1></a>")); + assertTrue(html.contains("<h1>" + + "<a class=\"h\" name=\"debug\" href=\"#debug\"><span></span></a>" + + "Section</h1>")); + assertTrue(html.contains("<h1>" + + "<a class=\"h\" name=\"old-school\" href=\"#old-school\"><span></span></a>" + + "Other</h1>")); } @Test @@ -136,6 +142,26 @@ assertTrue(html.contains("Incomplete <html is literal.")); } + @Test + public void relativeLink() throws Exception { + repo.branch("master").commit() + .add("A/B/README.md", "[c](../../C)") + .create(); + + String html = buildHtml("/repo/+doc/master/A/B/README.md"); + assertTrue(html.contains("<a href=\"/b/repo/+show/master/C\">c</a>")); + } + + @Test + public void absoluteLink() throws Exception { + repo.branch("master").commit() + .add("README.md", "[c](/x)") + .create(); + + String html = buildHtml("/repo/+doc/master/README.md"); + assertTrue(html.contains("<a href=\"/b/repo/+show/master/x\">c</a>")); + } + private String buildHtml(String pathAndQuery) throws Exception { TestViewFilter.Result res = service(pathAndQuery); FakeHttpServletResponse http = res.getResponse();