blob: 25f3d7f5c586b0a39cc71f34dd3970e07b7c076d [file] [log] [blame]
Shawn Pearce962349e2015-02-09 22:02:48 -08001// Copyright (C) 2015 Google Inc. All Rights Reserved.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15package com.google.gitiles.doc;
16
Dave Borowitzfde41fd2015-09-16 15:14:38 -040017import static com.google.common.truth.Truth.assertThat;
Shawn Pearce962349e2015-02-09 22:02:48 -080018
Nodir Turakulov4bc26002015-08-18 18:24:37 -070019import com.google.gitiles.ServletTest;
Shawn Pearce962349e2015-02-09 22:02:48 -080020
Shawn Pearce962349e2015-02-09 22:02:48 -080021import org.junit.Test;
22import org.junit.runner.RunWith;
23import org.junit.runners.JUnit4;
24
Shawn Pearce962349e2015-02-09 22:02:48 -080025/** Tests for {DocServlet}. */
26@RunWith(JUnit4.class)
Nodir Turakulov4bc26002015-08-18 18:24:37 -070027public class DocServletTest extends ServletTest {
Shawn Pearce962349e2015-02-09 22:02:48 -080028 @Test
29 public void simpleReadmeDoc() throws Exception {
30 String title = "DocServletTest simpleDoc";
31 String url = "http://daringfireball.net/projects/markdown/syntax";
Dave Borowitzcf38c032016-05-02 11:06:23 -040032 String markdown =
33 "# " + title + "\n" + "\n" + "Tests the rendering of " + "[Markdown](" + url + ").";
34 repo.branch("master").commit().add("README.md", markdown).create();
Shawn Pearce962349e2015-02-09 22:02:48 -080035
36 String html = buildHtml("/repo/+doc/master/README.md");
Dave Borowitzfde41fd2015-09-16 15:14:38 -040037 assertThat(html).contains("<title>" + title + "</title>");
38 assertThat(html).contains(title + "</h1>");
39 assertThat(html).contains("<a href=\"" + url + "\">Markdown</a>");
Shawn Pearce962349e2015-02-09 22:02:48 -080040 }
41
42 @Test
43 public void includesNavbar() throws Exception {
Dave Borowitzcf38c032016-05-02 11:06:23 -040044 String navbar = "# Site Title\n" + "\n" + "* [Home](index.md)\n" + "* [README](README.md)\n";
45 repo.branch("master")
46 .commit()
Shawn Pearce962349e2015-02-09 22:02:48 -080047 .add("README.md", "# page\n\nof information.")
48 .add("navbar.md", navbar)
49 .create();
50
51 String html = buildHtml("/repo/+doc/master/README.md");
Dave Borowitzfde41fd2015-09-16 15:14:38 -040052 assertThat(html).contains("<title>Site Title - page</title>");
Shawn Pearce962349e2015-02-09 22:02:48 -080053
Dave Borowitz3b7e7a52015-09-16 16:42:46 -040054 assertThat(html).contains("<span class=\"Header-anchorTitle\">Site Title</span>");
Shawn Pearcec8fac642016-05-16 13:15:43 -060055 assertThat(html).contains("<li><a href=\"/b/repo/+/master/index.md\">Home</a></li>");
56 assertThat(html).contains("<li><a href=\"/b/repo/+/master/README.md\">README</a></li>");
Dave Borowitzcf38c032016-05-02 11:06:23 -040057 assertThat(html)
58 .contains(
59 "<h1>" + "<a class=\"h\" name=\"page\" href=\"#page\"><span></span></a>" + "page</h1>");
Shawn Pearce962349e2015-02-09 22:02:48 -080060 }
61
62 @Test
63 public void dropsHtml() throws Exception {
Dave Borowitzcf38c032016-05-02 11:06:23 -040064 String markdown =
65 "# B. Ad\n"
66 + "\n"
67 + "<script>window.alert();</script>\n"
68 + "\n"
69 + "Non-HTML <b>is fine</b>.";
70 repo.branch("master").commit().add("index.md", markdown).create();
Shawn Pearce962349e2015-02-09 22:02:48 -080071
72 String html = buildHtml("/repo/+doc/master/");
Dave Borowitzfde41fd2015-09-16 15:14:38 -040073 assertThat(html).contains("B. Ad</h1>");
74 assertThat(html).contains("Non-HTML is fine.");
Shawn Pearce962349e2015-02-09 22:02:48 -080075
Dave Borowitzfde41fd2015-09-16 15:14:38 -040076 assertThat(html).doesNotContain("window.alert");
77 assertThat(html).doesNotContain("<script>");
Shawn Pearce962349e2015-02-09 22:02:48 -080078 }
79
80 @Test
Shawn Pearce25d91962015-06-22 15:35:36 -070081 public void namedAnchor() throws Exception {
Dave Borowitzcf38c032016-05-02 11:06:23 -040082 String markdown = "# Section {#debug}\n" + "# Other <a name=\"old-school\"></a>\n";
83 repo.branch("master").commit().add("index.md", markdown).create();
Shawn Pearce25d91962015-06-22 15:35:36 -070084 String html = buildHtml("/repo/+doc/master/");
Dave Borowitzcf38c032016-05-02 11:06:23 -040085 assertThat(html)
86 .contains(
87 "<h1>"
88 + "<a class=\"h\" name=\"debug\" href=\"#debug\"><span></span></a>"
89 + "Section</h1>");
90 assertThat(html)
91 .contains(
92 "<h1>"
93 + "<a class=\"h\" name=\"old-school\" href=\"#old-school\"><span></span></a>"
94 + "Other</h1>");
Shawn Pearce25d91962015-06-22 15:35:36 -070095 }
96
97 @Test
Shawn Pearce962349e2015-02-09 22:02:48 -080098 public void incompleteHtmlIsLiteral() throws Exception {
99 String markdown = "Incomplete <html is literal.";
Dave Borowitzcf38c032016-05-02 11:06:23 -0400100 repo.branch("master").commit().add("index.md", markdown).create();
Shawn Pearce962349e2015-02-09 22:02:48 -0800101
102 String html = buildHtml("/repo/+doc/master/index.md");
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400103 assertThat(html).contains("Incomplete &lt;html is literal.");
Shawn Pearce962349e2015-02-09 22:02:48 -0800104 }
105
Shawn Pearceb7e872d2015-07-10 15:21:47 -0700106 @Test
Shawn Pearce56857f92016-06-05 10:15:03 -0700107 public void noteInList() throws Exception {
108 String markdown =
109 "+ one\n\n" + " ***aside\n" + " remember this\n" + " ***\n" + "\n" + "+ two\n";
110 repo.branch("master").commit().add("index.md", markdown).create();
111
112 String html = buildHtml("/repo/+/master/index.md");
113 System.out.println(html);
114 assertThat(html)
115 .contains(
116 "<ul><li><p>one</p><div class=\"aside\">remember this</div>"
117 + "</li><li><p>two</p></li></ul>");
118 }
119
120 @Test
Shawn Pearceb7e872d2015-07-10 15:21:47 -0700121 public void relativeLink() throws Exception {
Dave Borowitzcf38c032016-05-02 11:06:23 -0400122 repo.branch("master").commit().add("A/B/README.md", "[c](../../C)").create();
Shawn Pearceb7e872d2015-07-10 15:21:47 -0700123
124 String html = buildHtml("/repo/+doc/master/A/B/README.md");
Shawn Pearcec8fac642016-05-16 13:15:43 -0600125 assertThat(html).contains("<a href=\"/b/repo/+/master/C\">c</a>");
Shawn Pearceb7e872d2015-07-10 15:21:47 -0700126 }
127
128 @Test
129 public void absoluteLink() throws Exception {
Dave Borowitzcf38c032016-05-02 11:06:23 -0400130 repo.branch("master").commit().add("README.md", "[c](/x)").create();
Shawn Pearceb7e872d2015-07-10 15:21:47 -0700131
132 String html = buildHtml("/repo/+doc/master/README.md");
Shawn Pearcec8fac642016-05-16 13:15:43 -0600133 assertThat(html).contains("<a href=\"/b/repo/+/master/x\">c</a>");
Shawn Pearceb7e872d2015-07-10 15:21:47 -0700134 }
Shawn Pearce532b62f2016-06-05 12:20:38 -0700135
136 @Test
137 public void gitUrlLink() throws Exception {
138 repo.branch("master").commit().add("README.md", "[c](git://example.com/repo.git)").create();
139
140 String html = buildHtml("/repo/+doc/master/README.md");
141 assertThat(html).contains("<a href=\"git://example.com/repo.git\">c</a>");
142 }
143
144 @Test
145 public void invalidGitUrlLink() throws Exception {
146 repo.branch("master").commit().add("README.md", "[c](git://example.com/repo/..)").create();
147
148 String html = buildHtml("/repo/+doc/master/README.md");
149 assertThat(html).contains("<a href=\"#zSoyz\">c</a>");
150 }
Shawn Pearce962349e2015-02-09 22:02:48 -0800151}