blob: 240409057630ee2f1f979c9e6487e7ebcf9dad9e [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 -080020import org.junit.Test;
21import org.junit.runner.RunWith;
22import org.junit.runners.JUnit4;
23
Shawn Pearce962349e2015-02-09 22:02:48 -080024/** Tests for {DocServlet}. */
25@RunWith(JUnit4.class)
Nodir Turakulov4bc26002015-08-18 18:24:37 -070026public class DocServletTest extends ServletTest {
Shawn Pearce962349e2015-02-09 22:02:48 -080027 @Test
28 public void simpleReadmeDoc() throws Exception {
29 String title = "DocServletTest simpleDoc";
30 String url = "http://daringfireball.net/projects/markdown/syntax";
Dave Borowitzcf38c032016-05-02 11:06:23 -040031 String markdown =
32 "# " + title + "\n" + "\n" + "Tests the rendering of " + "[Markdown](" + url + ").";
33 repo.branch("master").commit().add("README.md", markdown).create();
Shawn Pearce962349e2015-02-09 22:02:48 -080034
35 String html = buildHtml("/repo/+doc/master/README.md");
Dave Borowitzfde41fd2015-09-16 15:14:38 -040036 assertThat(html).contains("<title>" + title + "</title>");
37 assertThat(html).contains(title + "</h1>");
38 assertThat(html).contains("<a href=\"" + url + "\">Markdown</a>");
Shawn Pearce962349e2015-02-09 22:02:48 -080039 }
40
41 @Test
42 public void includesNavbar() throws Exception {
Dave Borowitzcf38c032016-05-02 11:06:23 -040043 String navbar = "# Site Title\n" + "\n" + "* [Home](index.md)\n" + "* [README](README.md)\n";
44 repo.branch("master")
45 .commit()
Shawn Pearce962349e2015-02-09 22:02:48 -080046 .add("README.md", "# page\n\nof information.")
47 .add("navbar.md", navbar)
48 .create();
49
50 String html = buildHtml("/repo/+doc/master/README.md");
Dave Borowitzfde41fd2015-09-16 15:14:38 -040051 assertThat(html).contains("<title>Site Title - page</title>");
Shawn Pearce962349e2015-02-09 22:02:48 -080052
Dave Borowitz3b7e7a52015-09-16 16:42:46 -040053 assertThat(html).contains("<span class=\"Header-anchorTitle\">Site Title</span>");
Shawn Pearcec8fac642016-05-16 13:15:43 -060054 assertThat(html).contains("<li><a href=\"/b/repo/+/master/index.md\">Home</a></li>");
55 assertThat(html).contains("<li><a href=\"/b/repo/+/master/README.md\">README</a></li>");
Dave Borowitzcf38c032016-05-02 11:06:23 -040056 assertThat(html)
57 .contains(
58 "<h1>" + "<a class=\"h\" name=\"page\" href=\"#page\"><span></span></a>" + "page</h1>");
Shawn Pearce962349e2015-02-09 22:02:48 -080059 }
60
61 @Test
62 public void dropsHtml() throws Exception {
Dave Borowitzcf38c032016-05-02 11:06:23 -040063 String markdown =
64 "# B. Ad\n"
65 + "\n"
66 + "<script>window.alert();</script>\n"
67 + "\n"
68 + "Non-HTML <b>is fine</b>.";
69 repo.branch("master").commit().add("index.md", markdown).create();
Shawn Pearce962349e2015-02-09 22:02:48 -080070
71 String html = buildHtml("/repo/+doc/master/");
Dave Borowitzfde41fd2015-09-16 15:14:38 -040072 assertThat(html).contains("B. Ad</h1>");
73 assertThat(html).contains("Non-HTML is fine.");
Shawn Pearce962349e2015-02-09 22:02:48 -080074
Dave Borowitzfde41fd2015-09-16 15:14:38 -040075 assertThat(html).doesNotContain("window.alert");
76 assertThat(html).doesNotContain("<script>");
Shawn Pearce962349e2015-02-09 22:02:48 -080077 }
78
79 @Test
Shawn Pearce25d91962015-06-22 15:35:36 -070080 public void namedAnchor() throws Exception {
Dave Borowitzcf38c032016-05-02 11:06:23 -040081 String markdown = "# Section {#debug}\n" + "# Other <a name=\"old-school\"></a>\n";
82 repo.branch("master").commit().add("index.md", markdown).create();
Shawn Pearce25d91962015-06-22 15:35:36 -070083 String html = buildHtml("/repo/+doc/master/");
Dave Borowitzcf38c032016-05-02 11:06:23 -040084 assertThat(html)
85 .contains(
86 "<h1>"
87 + "<a class=\"h\" name=\"debug\" href=\"#debug\"><span></span></a>"
88 + "Section</h1>");
89 assertThat(html)
90 .contains(
91 "<h1>"
92 + "<a class=\"h\" name=\"old-school\" href=\"#old-school\"><span></span></a>"
93 + "Other</h1>");
Shawn Pearce25d91962015-06-22 15:35:36 -070094 }
95
96 @Test
Shawn Pearce962349e2015-02-09 22:02:48 -080097 public void incompleteHtmlIsLiteral() throws Exception {
98 String markdown = "Incomplete <html is literal.";
Dave Borowitzcf38c032016-05-02 11:06:23 -040099 repo.branch("master").commit().add("index.md", markdown).create();
Shawn Pearce962349e2015-02-09 22:02:48 -0800100
101 String html = buildHtml("/repo/+doc/master/index.md");
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400102 assertThat(html).contains("Incomplete &lt;html is literal.");
Shawn Pearce962349e2015-02-09 22:02:48 -0800103 }
104
Shawn Pearceb7e872d2015-07-10 15:21:47 -0700105 @Test
Shawn Pearce56857f92016-06-05 10:15:03 -0700106 public void noteInList() throws Exception {
107 String markdown =
108 "+ one\n\n" + " ***aside\n" + " remember this\n" + " ***\n" + "\n" + "+ two\n";
109 repo.branch("master").commit().add("index.md", markdown).create();
110
111 String html = buildHtml("/repo/+/master/index.md");
112 System.out.println(html);
113 assertThat(html)
114 .contains(
115 "<ul><li><p>one</p><div class=\"aside\">remember this</div>"
116 + "</li><li><p>two</p></li></ul>");
117 }
118
119 @Test
Shawn Pearceb7e872d2015-07-10 15:21:47 -0700120 public void relativeLink() throws Exception {
Dave Borowitzcf38c032016-05-02 11:06:23 -0400121 repo.branch("master").commit().add("A/B/README.md", "[c](../../C)").create();
Shawn Pearceb7e872d2015-07-10 15:21:47 -0700122
123 String html = buildHtml("/repo/+doc/master/A/B/README.md");
Shawn Pearcec8fac642016-05-16 13:15:43 -0600124 assertThat(html).contains("<a href=\"/b/repo/+/master/C\">c</a>");
Shawn Pearceb7e872d2015-07-10 15:21:47 -0700125 }
126
127 @Test
128 public void absoluteLink() throws Exception {
Dave Borowitzcf38c032016-05-02 11:06:23 -0400129 repo.branch("master").commit().add("README.md", "[c](/x)").create();
Shawn Pearceb7e872d2015-07-10 15:21:47 -0700130
131 String html = buildHtml("/repo/+doc/master/README.md");
Shawn Pearcec8fac642016-05-16 13:15:43 -0600132 assertThat(html).contains("<a href=\"/b/repo/+/master/x\">c</a>");
Shawn Pearceb7e872d2015-07-10 15:21:47 -0700133 }
Shawn Pearce532b62f2016-06-05 12:20:38 -0700134
135 @Test
136 public void gitUrlLink() throws Exception {
137 repo.branch("master").commit().add("README.md", "[c](git://example.com/repo.git)").create();
138
139 String html = buildHtml("/repo/+doc/master/README.md");
140 assertThat(html).contains("<a href=\"git://example.com/repo.git\">c</a>");
141 }
142
143 @Test
144 public void invalidGitUrlLink() throws Exception {
145 repo.branch("master").commit().add("README.md", "[c](git://example.com/repo/..)").create();
146
147 String html = buildHtml("/repo/+doc/master/README.md");
David Pursehouse537ff7c2016-08-19 17:21:10 +0900148 assertThat(html).contains("<a href=\"about:invalid#zSoyz\">c</a>");
Shawn Pearce532b62f2016-06-05 12:20:38 -0700149 }
Shawn Pearce962349e2015-02-09 22:02:48 -0800150}