blob: 275e98241502f073fd211f3821e334b17e6a1285 [file] [log] [blame]
Dave Borowitz9de65952012-08-13 16:09:45 -07001// Copyright 2012 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;
16
Dave Borowitzfde41fd2015-09-16 15:14:38 -040017import static com.google.common.truth.Truth.assertThat;
Shawn Pearceb43b2d52013-03-18 10:55:15 -070018
Dave Borowitz9de65952012-08-13 16:09:45 -070019import com.google.common.collect.ImmutableList;
20import com.google.common.collect.ImmutableListMultimap;
21import com.google.common.collect.ImmutableMap;
Dave Borowitzd40bdf12014-04-19 19:33:56 -070022import org.eclipse.jgit.lib.ObjectId;
23import org.junit.Test;
Dave Borowitz3dc854f2014-11-04 16:19:37 -080024import org.junit.runner.RunWith;
25import org.junit.runners.JUnit4;
Dave Borowitzd40bdf12014-04-19 19:33:56 -070026
Dave Borowitz9de65952012-08-13 16:09:45 -070027/** Tests for Gitiles views. */
Dave Borowitz3dc854f2014-11-04 16:19:37 -080028@RunWith(JUnit4.class)
Dave Borowitzd40bdf12014-04-19 19:33:56 -070029public class GitilesViewTest {
Dave Borowitzcf38c032016-05-02 11:06:23 -040030 private static final GitilesView HOST =
31 GitilesView.hostIndex().setServletPath("/b").setHostName("host").build();
Dave Borowitz9de65952012-08-13 16:09:45 -070032
Dave Borowitzd40bdf12014-04-19 19:33:56 -070033 @Test
34 public void emptyServletPath() throws Exception {
Dave Borowitzcf38c032016-05-02 11:06:23 -040035 GitilesView view = GitilesView.hostIndex().setServletPath("").setHostName("host").build();
Dave Borowitzfde41fd2015-09-16 15:14:38 -040036 assertThat(view.getServletPath()).isEqualTo("");
Matthias Sohne2e3c6a2023-10-01 00:11:52 +020037 assertThat(view.getType()).isEqualTo(GitilesView.Type.HOST_INDEX);
Dave Borowitzfde41fd2015-09-16 15:14:38 -040038 assertThat(view.getHostName()).isEqualTo("host");
39 assertThat(view.getRepositoryName()).isNull();
40 assertThat(view.getRevision()).isEqualTo(Revision.NULL);
41 assertThat(view.getPathPart()).isNull();
42 assertThat(HOST.getParameters()).isEmpty();
Dave Borowitz9de65952012-08-13 16:09:45 -070043
Dave Borowitzfde41fd2015-09-16 15:14:38 -040044 assertThat(view.toUrl()).isEqualTo("/?format=HTML");
Dave Borowitzcf38c032016-05-02 11:06:23 -040045 assertThat(view.getBreadcrumbs()).containsExactly(breadcrumb("host", "/?format=HTML"));
Dave Borowitz9de65952012-08-13 16:09:45 -070046 }
47
Dave Borowitzd40bdf12014-04-19 19:33:56 -070048 @Test
49 public void hostIndex() throws Exception {
Dave Borowitzfde41fd2015-09-16 15:14:38 -040050 assertThat(HOST.getServletPath()).isEqualTo("/b");
Matthias Sohne2e3c6a2023-10-01 00:11:52 +020051 assertThat(HOST.getType()).isEqualTo(GitilesView.Type.HOST_INDEX);
Dave Borowitzfde41fd2015-09-16 15:14:38 -040052 assertThat(HOST.getHostName()).isEqualTo("host");
53 assertThat(HOST.getRepositoryName()).isNull();
54 assertThat(HOST.getRevision()).isEqualTo(Revision.NULL);
55 assertThat(HOST.getPathPart()).isNull();
56 assertThat(HOST.getParameters()).isEmpty();
Dave Borowitz9de65952012-08-13 16:09:45 -070057
Dave Borowitzfde41fd2015-09-16 15:14:38 -040058 assertThat(HOST.toUrl()).isEqualTo("/b/?format=HTML");
Dave Borowitzcf38c032016-05-02 11:06:23 -040059 assertThat(HOST.getBreadcrumbs()).containsExactly(breadcrumb("host", "/b/?format=HTML"));
Dave Borowitz9de65952012-08-13 16:09:45 -070060 }
61
Dave Borowitzd40bdf12014-04-19 19:33:56 -070062 @Test
Shawn Pearcec709c4c2015-08-28 15:30:42 -070063 public void hostIndexOneComponentPrefix() throws Exception {
Dave Borowitzcf38c032016-05-02 11:06:23 -040064 GitilesView view = GitilesView.hostIndex().copyFrom(HOST).setRepositoryPrefix("foo").build();
Shawn Pearcec709c4c2015-08-28 15:30:42 -070065
Dave Borowitzfde41fd2015-09-16 15:14:38 -040066 assertThat(view.toUrl()).isEqualTo("/b/foo/");
67 assertThat(view.getBreadcrumbs())
Dave Borowitzcf38c032016-05-02 11:06:23 -040068 .containsExactly(breadcrumb("host", "/b/?format=HTML"), breadcrumb("foo", "/b/foo/"))
Dave Borowitzfde41fd2015-09-16 15:14:38 -040069 .inOrder();
Shawn Pearcec709c4c2015-08-28 15:30:42 -070070 }
71
72 @Test
73 public void hostIndexTwoComponentPrefix() throws Exception {
Dave Borowitzcf38c032016-05-02 11:06:23 -040074 GitilesView view =
75 GitilesView.hostIndex().copyFrom(HOST).setRepositoryPrefix("foo/bar").build();
Shawn Pearcec709c4c2015-08-28 15:30:42 -070076
Dave Borowitzfde41fd2015-09-16 15:14:38 -040077 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/");
78 assertThat(view.getBreadcrumbs())
79 .containsExactly(
80 breadcrumb("host", "/b/?format=HTML"),
81 breadcrumb("foo", "/b/foo/"),
82 breadcrumb("bar", "/b/foo/bar/"))
83 .inOrder();
Shawn Pearcec709c4c2015-08-28 15:30:42 -070084 }
85
86 @Test
Dave Borowitzd40bdf12014-04-19 19:33:56 -070087 public void queryParams() throws Exception {
Dave Borowitzcf38c032016-05-02 11:06:23 -040088 GitilesView view =
89 GitilesView.log()
90 .copyFrom(HOST)
91 .setRepositoryName("repo")
92 .setRevision(Revision.named("master"))
93 .putParam("foo", "foovalue")
94 .putParam("bar", "barvalue")
95 .build();
Dave Borowitz9de65952012-08-13 16:09:45 -070096
Dave Borowitzfde41fd2015-09-16 15:14:38 -040097 assertThat(view.getServletPath()).isEqualTo("/b");
Matthias Sohne2e3c6a2023-10-01 00:11:52 +020098 assertThat(view.getType()).isEqualTo(GitilesView.Type.LOG);
Dave Borowitzfde41fd2015-09-16 15:14:38 -040099 assertThat(view.getHostName()).isEqualTo("host");
100 assertThat(view.getRepositoryName()).isEqualTo("repo");
101 assertThat(view.getRevision()).isEqualTo(Revision.named("master"));
102 assertThat(view.getPathPart()).isNull();
Dave Borowitzcf38c032016-05-02 11:06:23 -0400103 assertThat(view.getParameters())
104 .containsExactlyEntriesIn(
105 ImmutableListMultimap.of(
106 "foo", "foovalue",
107 "bar", "barvalue"));
Dave Borowitz9de65952012-08-13 16:09:45 -0700108
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400109 assertThat(view.toUrl()).isEqualTo("/b/repo/+log/master?foo=foovalue&bar=barvalue");
110 assertThat(view.getBreadcrumbs())
111 .containsExactly(
Dave Borowitz58a96f22014-05-06 14:29:24 -0700112 breadcrumb("host", "/b/?format=HTML"),
113 breadcrumb("repo", "/b/repo/"),
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400114 breadcrumb("master", "/b/repo/+log/master?foo=foovalue&bar=barvalue"))
115 .inOrder();
Dave Borowitz9de65952012-08-13 16:09:45 -0700116 }
117
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700118 @Test
Dave Borowitz58a96f22014-05-06 14:29:24 -0700119 public void queryParamsCopiedOnlyOnSameType() throws Exception {
Dave Borowitzcf38c032016-05-02 11:06:23 -0400120 GitilesView view =
121 GitilesView.repositoryIndex()
122 .copyFrom(HOST)
123 .setRepositoryName("repo")
124 .putParam("foo", "foovalue")
125 .putParam("bar", "barvalue")
126 .build();
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400127 assertThat(view.getParameters()).isNotEmpty();
128 assertThat(GitilesView.repositoryIndex().copyFrom(view).build().getParameters())
129 .isEqualTo(view.getParameters());
130 assertThat(GitilesView.hostIndex().copyFrom(view).build().getParameters()).isEmpty();
Dave Borowitz9de65952012-08-13 16:09:45 -0700131 }
132
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700133 @Test
134 public void repositoryIndex() throws Exception {
Dave Borowitzcf38c032016-05-02 11:06:23 -0400135 GitilesView view =
136 GitilesView.repositoryIndex().copyFrom(HOST).setRepositoryName("foo/bar").build();
Dave Borowitz9de65952012-08-13 16:09:45 -0700137
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400138 assertThat(view.getServletPath()).isEqualTo("/b");
Matthias Sohne2e3c6a2023-10-01 00:11:52 +0200139 assertThat(view.getType()).isEqualTo(GitilesView.Type.REPOSITORY_INDEX);
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400140 assertThat(view.getHostName()).isEqualTo("host");
141 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
142 assertThat(view.getRevision()).isEqualTo(Revision.NULL);
143 assertThat(view.getPathPart()).isNull();
144 assertThat(HOST.getParameters()).isEmpty();
Dave Borowitz9de65952012-08-13 16:09:45 -0700145
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400146 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/");
147 assertThat(view.getBreadcrumbs())
148 .containsExactly(
Dave Borowitz9de65952012-08-13 16:09:45 -0700149 breadcrumb("host", "/b/?format=HTML"),
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700150 breadcrumb("foo", "/b/foo/"),
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400151 breadcrumb("bar", "/b/foo/bar/"))
152 .inOrder();
Dave Borowitz9de65952012-08-13 16:09:45 -0700153 }
154
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700155 @Test
156 public void refs() throws Exception {
Dave Borowitzcf38c032016-05-02 11:06:23 -0400157 GitilesView view = GitilesView.refs().copyFrom(HOST).setRepositoryName("foo/bar").build();
Dave Borowitz209d0aa2012-12-28 14:28:53 -0800158
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400159 assertThat(view.getServletPath()).isEqualTo("/b");
Matthias Sohne2e3c6a2023-10-01 00:11:52 +0200160 assertThat(view.getType()).isEqualTo(GitilesView.Type.REFS);
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400161 assertThat(view.getHostName()).isEqualTo("host");
162 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
163 assertThat(view.getRevision()).isEqualTo(Revision.NULL);
164 assertThat(view.getPathPart()).isNull();
165 assertThat(HOST.getParameters()).isEmpty();
Dave Borowitz209d0aa2012-12-28 14:28:53 -0800166
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400167 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+refs");
168 assertThat(view.getBreadcrumbs())
169 .containsExactly(
Dave Borowitz209d0aa2012-12-28 14:28:53 -0800170 breadcrumb("host", "/b/?format=HTML"),
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700171 breadcrumb("foo", "/b/foo/"),
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400172 breadcrumb("bar", "/b/foo/bar/"))
173 .inOrder();
Dave Borowitz209d0aa2012-12-28 14:28:53 -0800174 }
175
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700176 @Test
177 public void refWithRevision() throws Exception {
Dave Borowitz9de65952012-08-13 16:09:45 -0700178 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400179 GitilesView view =
180 GitilesView.revision()
181 .copyFrom(HOST)
182 .setRepositoryName("foo/bar")
183 .setRevision(Revision.unpeeled("master", id))
184 .build();
Dave Borowitz9de65952012-08-13 16:09:45 -0700185
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400186 assertThat(view.getServletPath()).isEqualTo("/b");
Matthias Sohne2e3c6a2023-10-01 00:11:52 +0200187 assertThat(view.getType()).isEqualTo(GitilesView.Type.REVISION);
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400188 assertThat(view.getHostName()).isEqualTo("host");
189 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
190 assertThat(view.getRevision().getId()).isEqualTo(id);
191 assertThat(view.getRevision().getName()).isEqualTo("master");
192 assertThat(view.getPathPart()).isNull();
193 assertThat(HOST.getParameters()).isEmpty();
Dave Borowitz9de65952012-08-13 16:09:45 -0700194
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400195 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+/master");
196 assertThat(view.getBreadcrumbs())
197 .containsExactly(
Dave Borowitz9de65952012-08-13 16:09:45 -0700198 breadcrumb("host", "/b/?format=HTML"),
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700199 breadcrumb("foo", "/b/foo/"),
200 breadcrumb("bar", "/b/foo/bar/"),
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400201 breadcrumb("master", "/b/foo/bar/+/master"))
202 .inOrder();
Dave Borowitz9de65952012-08-13 16:09:45 -0700203 }
204
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700205 @Test
206 public void describe() throws Exception {
Dave Borowitzcf38c032016-05-02 11:06:23 -0400207 GitilesView view =
208 GitilesView.describe()
209 .copyFrom(HOST)
210 .setRepositoryName("foo/bar")
211 .setPathPart("deadbeef")
212 .build();
Dave Borowitzba9c1182013-03-13 14:16:43 -0700213
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400214 assertThat(view.getServletPath()).isEqualTo("/b");
Matthias Sohne2e3c6a2023-10-01 00:11:52 +0200215 assertThat(view.getType()).isEqualTo(GitilesView.Type.DESCRIBE);
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400216 assertThat(view.getHostName()).isEqualTo("host");
217 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
218 assertThat(view.getRevision()).isEqualTo(Revision.NULL);
219 assertThat(view.getPathPart()).isEqualTo("deadbeef");
220 assertThat(HOST.getParameters()).isEmpty();
Dave Borowitzba9c1182013-03-13 14:16:43 -0700221 }
222
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700223 @Test
224 public void noPathComponents() throws Exception {
Dave Borowitz9de65952012-08-13 16:09:45 -0700225 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400226 GitilesView view =
227 GitilesView.path()
228 .copyFrom(HOST)
229 .setRepositoryName("foo/bar")
230 .setRevision(Revision.unpeeled("master", id))
231 .setPathPart("/")
232 .build();
Dave Borowitz9de65952012-08-13 16:09:45 -0700233
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400234 assertThat(view.getServletPath()).isEqualTo("/b");
Matthias Sohne2e3c6a2023-10-01 00:11:52 +0200235 assertThat(view.getType()).isEqualTo(GitilesView.Type.PATH);
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400236 assertThat(view.getHostName()).isEqualTo("host");
237 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
238 assertThat(view.getRevision().getId()).isEqualTo(id);
239 assertThat(view.getRevision().getName()).isEqualTo("master");
240 assertThat(view.getPathPart()).isEqualTo("");
241 assertThat(HOST.getParameters()).isEmpty();
Dave Borowitz9de65952012-08-13 16:09:45 -0700242
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400243 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+/master/");
244 assertThat(view.getBreadcrumbs())
245 .containsExactly(
Dave Borowitz9de65952012-08-13 16:09:45 -0700246 breadcrumb("host", "/b/?format=HTML"),
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700247 breadcrumb("foo", "/b/foo/"),
248 breadcrumb("bar", "/b/foo/bar/"),
Dave Borowitzd3e6dd72012-12-20 15:48:24 -0800249 breadcrumb("master", "/b/foo/bar/+/master"),
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400250 breadcrumb(".", "/b/foo/bar/+/master/"))
251 .inOrder();
Dave Borowitz9de65952012-08-13 16:09:45 -0700252 }
253
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700254 @Test
255 public void onePathComponent() throws Exception {
Dave Borowitz9de65952012-08-13 16:09:45 -0700256 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400257 GitilesView view =
258 GitilesView.path()
259 .copyFrom(HOST)
260 .setRepositoryName("foo/bar")
261 .setRevision(Revision.unpeeled("master", id))
262 .setPathPart("/file")
263 .build();
Dave Borowitz9de65952012-08-13 16:09:45 -0700264
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400265 assertThat(view.getServletPath()).isEqualTo("/b");
Matthias Sohne2e3c6a2023-10-01 00:11:52 +0200266 assertThat(view.getType()).isEqualTo(GitilesView.Type.PATH);
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400267 assertThat(view.getHostName()).isEqualTo("host");
268 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
269 assertThat(view.getRevision().getId()).isEqualTo(id);
270 assertThat(view.getRevision().getName()).isEqualTo("master");
271 assertThat(view.getPathPart()).isEqualTo("file");
272 assertThat(HOST.getParameters()).isEmpty();
Dave Borowitz9de65952012-08-13 16:09:45 -0700273
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400274 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+/master/file");
275 assertThat(view.getBreadcrumbs())
276 .containsExactly(
Dave Borowitz9de65952012-08-13 16:09:45 -0700277 breadcrumb("host", "/b/?format=HTML"),
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700278 breadcrumb("foo", "/b/foo/"),
279 breadcrumb("bar", "/b/foo/bar/"),
Dave Borowitzd3e6dd72012-12-20 15:48:24 -0800280 breadcrumb("master", "/b/foo/bar/+/master"),
Dave Borowitz9de65952012-08-13 16:09:45 -0700281 breadcrumb(".", "/b/foo/bar/+/master/"),
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400282 breadcrumb("file", "/b/foo/bar/+/master/file"))
283 .inOrder();
Dave Borowitz9de65952012-08-13 16:09:45 -0700284 }
285
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700286 @Test
Shawn Pearce353ba2f2015-02-12 10:22:37 -0800287 public void oneDocFileAuto() throws Exception {
288 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400289 GitilesView view =
290 GitilesView.doc()
291 .copyFrom(HOST)
292 .setRepositoryName("foo/bar")
293 .setRevision(Revision.unpeeled("master", id))
294 .setPathPart("/README.md")
295 .build();
Shawn Pearce353ba2f2015-02-12 10:22:37 -0800296
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400297 assertThat(view.getServletPath()).isEqualTo("/b");
Matthias Sohne2e3c6a2023-10-01 00:11:52 +0200298 assertThat(view.getType()).isEqualTo(GitilesView.Type.DOC);
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400299 assertThat(view.getHostName()).isEqualTo("host");
300 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
301 assertThat(view.getRevision().getId()).isEqualTo(id);
302 assertThat(view.getRevision().getName()).isEqualTo("master");
303 assertThat(view.getPathPart()).isEqualTo("README.md");
304 assertThat(HOST.getParameters()).isEmpty();
305 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+/master/README.md");
Shawn Pearce353ba2f2015-02-12 10:22:37 -0800306 }
307
308 @Test
309 public void oneDocTree() throws Exception {
310 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400311 GitilesView view =
312 GitilesView.doc()
313 .copyFrom(HOST)
314 .setRepositoryName("foo/bar")
315 .setRevision(Revision.unpeeled("master", id))
316 .setPathPart("/docs/")
317 .build();
Shawn Pearce353ba2f2015-02-12 10:22:37 -0800318
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400319 assertThat(view.getServletPath()).isEqualTo("/b");
Matthias Sohne2e3c6a2023-10-01 00:11:52 +0200320 assertThat(view.getType()).isEqualTo(GitilesView.Type.DOC);
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400321 assertThat(view.getHostName()).isEqualTo("host");
322 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
323 assertThat(view.getRevision().getId()).isEqualTo(id);
324 assertThat(view.getRevision().getName()).isEqualTo("master");
325 assertThat(view.getPathPart()).isEqualTo("docs");
326 assertThat(HOST.getParameters()).isEmpty();
327 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+doc/master/docs");
Shawn Pearce353ba2f2015-02-12 10:22:37 -0800328 }
329
330 @Test
331 public void showMarkdown() throws Exception {
332 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400333 GitilesView view =
334 GitilesView.show()
335 .copyFrom(HOST)
336 .setRepositoryName("foo/bar")
337 .setRevision(Revision.unpeeled("master", id))
338 .setPathPart("/README.md")
339 .build();
Shawn Pearce353ba2f2015-02-12 10:22:37 -0800340
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400341 assertThat(view.getServletPath()).isEqualTo("/b");
Matthias Sohne2e3c6a2023-10-01 00:11:52 +0200342 assertThat(view.getType()).isEqualTo(GitilesView.Type.SHOW);
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400343 assertThat(view.getHostName()).isEqualTo("host");
344 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
345 assertThat(view.getRevision().getId()).isEqualTo(id);
346 assertThat(view.getRevision().getName()).isEqualTo("master");
347 assertThat(view.getPathPart()).isEqualTo("README.md");
348 assertThat(HOST.getParameters()).isEmpty();
349 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+show/master/README.md");
Shawn Pearce353ba2f2015-02-12 10:22:37 -0800350 }
351
352 @Test
Shawn Pearce68311c72015-06-09 17:01:34 -0700353 public void rootedDoc() throws Exception {
354 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400355 GitilesView view =
356 GitilesView.rootedDoc()
357 .copyFrom(HOST)
358 .setRevision(Revision.unpeeled("master", id))
359 .setPathPart("/docs/")
360 .build();
Shawn Pearce68311c72015-06-09 17:01:34 -0700361
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400362 assertThat(view.getServletPath()).isEqualTo("/b");
Matthias Sohne2e3c6a2023-10-01 00:11:52 +0200363 assertThat(view.getType()).isEqualTo(GitilesView.Type.ROOTED_DOC);
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400364 assertThat(view.getHostName()).isEqualTo("host");
365 assertThat(view.getRevision().getId()).isEqualTo(id);
366 assertThat(view.getRevision().getName()).isEqualTo("master");
367 assertThat(view.getPathPart()).isEqualTo("docs");
368 assertThat(HOST.getParameters()).isEmpty();
369 assertThat(view.toUrl()).isEqualTo("/b/docs");
Shawn Pearce68311c72015-06-09 17:01:34 -0700370 }
371
372 @Test
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700373 public void multiplePathComponents() throws Exception {
Dave Borowitz9de65952012-08-13 16:09:45 -0700374 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400375 GitilesView view =
376 GitilesView.path()
377 .copyFrom(HOST)
378 .setRepositoryName("foo/bar")
379 .setRevision(Revision.unpeeled("master", id))
380 .setPathPart("/path/to/a/file")
381 .build();
Dave Borowitz9de65952012-08-13 16:09:45 -0700382
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400383 assertThat(view.getServletPath()).isEqualTo("/b");
Matthias Sohne2e3c6a2023-10-01 00:11:52 +0200384 assertThat(view.getType()).isEqualTo(GitilesView.Type.PATH);
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400385 assertThat(view.getHostName()).isEqualTo("host");
386 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
387 assertThat(view.getRevision().getId()).isEqualTo(id);
388 assertThat(view.getRevision().getName()).isEqualTo("master");
389 assertThat(view.getPathPart()).isEqualTo("path/to/a/file");
390 assertThat(HOST.getParameters()).isEmpty();
Dave Borowitz9de65952012-08-13 16:09:45 -0700391
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400392 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+/master/path/to/a/file");
393 assertThat(view.getBreadcrumbs())
394 .containsExactly(
Dave Borowitz9de65952012-08-13 16:09:45 -0700395 breadcrumb("host", "/b/?format=HTML"),
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700396 breadcrumb("foo", "/b/foo/"),
397 breadcrumb("bar", "/b/foo/bar/"),
Dave Borowitzd3e6dd72012-12-20 15:48:24 -0800398 breadcrumb("master", "/b/foo/bar/+/master"),
Dave Borowitz9de65952012-08-13 16:09:45 -0700399 breadcrumb(".", "/b/foo/bar/+/master/"),
400 breadcrumb("path", "/b/foo/bar/+/master/path"),
401 breadcrumb("to", "/b/foo/bar/+/master/path/to"),
402 breadcrumb("a", "/b/foo/bar/+/master/path/to/a"),
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400403 breadcrumb("file", "/b/foo/bar/+/master/path/to/a/file"))
404 .inOrder();
Dave Borowitz9de65952012-08-13 16:09:45 -0700405 }
406
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700407 @Test
408 public void diffAgainstFirstParent() throws Exception {
Dave Borowitz9de65952012-08-13 16:09:45 -0700409 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
410 ObjectId parent = ObjectId.fromString("efab5678efab5678efab5678efab5678efab5678");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400411 GitilesView view =
412 GitilesView.diff()
413 .copyFrom(HOST)
414 .setRepositoryName("foo/bar")
415 .setRevision(Revision.unpeeled("master", id))
416 .setOldRevision(Revision.unpeeled("master^", parent))
417 .setPathPart("/path/to/a/file")
418 .build();
Dave Borowitz9de65952012-08-13 16:09:45 -0700419
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400420 assertThat(view.getServletPath()).isEqualTo("/b");
Matthias Sohne2e3c6a2023-10-01 00:11:52 +0200421 assertThat(view.getType()).isEqualTo(GitilesView.Type.DIFF);
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400422 assertThat(view.getHostName()).isEqualTo("host");
423 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
424 assertThat(view.getRevision().getId()).isEqualTo(id);
425 assertThat(view.getRevision().getName()).isEqualTo("master");
426 assertThat(view.getOldRevision().getName()).isEqualTo("master^");
427 assertThat(view.getPathPart()).isEqualTo("path/to/a/file");
428 assertThat(HOST.getParameters()).isEmpty();
Dave Borowitz9de65952012-08-13 16:09:45 -0700429
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400430 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+/master%5E%21/path/to/a/file");
431 assertThat(view.getBreadcrumbs())
432 .containsExactly(
Dave Borowitz9de65952012-08-13 16:09:45 -0700433 breadcrumb("host", "/b/?format=HTML"),
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700434 breadcrumb("foo", "/b/foo/"),
435 breadcrumb("bar", "/b/foo/bar/"),
Dave Borowitz9de65952012-08-13 16:09:45 -0700436 breadcrumb("master^!", "/b/foo/bar/+/master%5E%21/"),
437 breadcrumb(".", "/b/foo/bar/+/master%5E%21/"),
438 breadcrumb("path", "/b/foo/bar/+/master%5E%21/path"),
439 breadcrumb("to", "/b/foo/bar/+/master%5E%21/path/to"),
440 breadcrumb("a", "/b/foo/bar/+/master%5E%21/path/to/a"),
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400441 breadcrumb("file", "/b/foo/bar/+/master%5E%21/path/to/a/file"))
442 .inOrder();
Dave Borowitz9de65952012-08-13 16:09:45 -0700443 }
444
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700445 @Test
446 public void diffAgainstEmptyRevision() throws Exception {
Dave Borowitz9de65952012-08-13 16:09:45 -0700447 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400448 GitilesView view =
449 GitilesView.diff()
450 .copyFrom(HOST)
451 .setRepositoryName("foo/bar")
452 .setRevision(Revision.unpeeled("master", id))
453 .setPathPart("/path/to/a/file")
454 .build();
Dave Borowitz9de65952012-08-13 16:09:45 -0700455
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400456 assertThat(view.getServletPath()).isEqualTo("/b");
Matthias Sohne2e3c6a2023-10-01 00:11:52 +0200457 assertThat(view.getType()).isEqualTo(GitilesView.Type.DIFF);
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400458 assertThat(view.getHostName()).isEqualTo("host");
459 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
460 assertThat(view.getRevision().getId()).isEqualTo(id);
461 assertThat(view.getRevision().getName()).isEqualTo("master");
462 assertThat(view.getOldRevision()).isEqualTo(Revision.NULL);
463 assertThat(view.getPathPart()).isEqualTo("path/to/a/file");
464 assertThat(HOST.getParameters()).isEmpty();
Dave Borowitz9de65952012-08-13 16:09:45 -0700465
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400466 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+/master%5E%21/path/to/a/file");
467 assertThat(view.getBreadcrumbs())
468 .containsExactly(
Dave Borowitz9de65952012-08-13 16:09:45 -0700469 breadcrumb("host", "/b/?format=HTML"),
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700470 breadcrumb("foo", "/b/foo/"),
471 breadcrumb("bar", "/b/foo/bar/"),
Dave Borowitz9de65952012-08-13 16:09:45 -0700472 breadcrumb("master^!", "/b/foo/bar/+/master%5E%21/"),
473 breadcrumb(".", "/b/foo/bar/+/master%5E%21/"),
474 breadcrumb("path", "/b/foo/bar/+/master%5E%21/path"),
475 breadcrumb("to", "/b/foo/bar/+/master%5E%21/path/to"),
476 breadcrumb("a", "/b/foo/bar/+/master%5E%21/path/to/a"),
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400477 breadcrumb("file", "/b/foo/bar/+/master%5E%21/path/to/a/file"))
478 .inOrder();
Dave Borowitz9de65952012-08-13 16:09:45 -0700479 }
480
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700481 @Test
482 public void diffAgainstOther() throws Exception {
Dave Borowitz9de65952012-08-13 16:09:45 -0700483 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
484 ObjectId other = ObjectId.fromString("efab5678efab5678efab5678efab5678efab5678");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400485 GitilesView view =
486 GitilesView.diff()
487 .copyFrom(HOST)
488 .setRepositoryName("foo/bar")
489 .setRevision(Revision.unpeeled("master", id))
490 .setOldRevision(Revision.unpeeled("efab5678", other))
491 .setPathPart("/path/to/a/file")
492 .build();
Dave Borowitz9de65952012-08-13 16:09:45 -0700493
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400494 assertThat(view.getServletPath()).isEqualTo("/b");
Matthias Sohne2e3c6a2023-10-01 00:11:52 +0200495 assertThat(view.getType()).isEqualTo(GitilesView.Type.DIFF);
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400496 assertThat(view.getHostName()).isEqualTo("host");
497 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
498 assertThat(view.getRevision().getId()).isEqualTo(id);
499 assertThat(view.getRevision().getName()).isEqualTo("master");
500 assertThat(view.getOldRevision().getName()).isEqualTo("efab5678");
501 assertThat(view.getPathPart()).isEqualTo("path/to/a/file");
502 assertThat(HOST.getParameters()).isEmpty();
Dave Borowitz9de65952012-08-13 16:09:45 -0700503
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400504 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+/efab5678..master/path/to/a/file");
505 assertThat(view.getBreadcrumbs())
506 .containsExactly(
Dave Borowitz9de65952012-08-13 16:09:45 -0700507 breadcrumb("host", "/b/?format=HTML"),
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700508 breadcrumb("foo", "/b/foo/"),
509 breadcrumb("bar", "/b/foo/bar/"),
Dave Borowitz9de65952012-08-13 16:09:45 -0700510 breadcrumb("efab5678..master", "/b/foo/bar/+/efab5678..master/"),
511 breadcrumb(".", "/b/foo/bar/+/efab5678..master/"),
512 breadcrumb("path", "/b/foo/bar/+/efab5678..master/path"),
513 breadcrumb("to", "/b/foo/bar/+/efab5678..master/path/to"),
514 breadcrumb("a", "/b/foo/bar/+/efab5678..master/path/to/a"),
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400515 breadcrumb("file", "/b/foo/bar/+/efab5678..master/path/to/a/file"))
516 .inOrder();
Dave Borowitz9de65952012-08-13 16:09:45 -0700517 }
518
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700519 @Test
520 public void branchLogWithoutPath() throws Exception {
Dave Borowitz9de65952012-08-13 16:09:45 -0700521 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400522 GitilesView view =
523 GitilesView.log()
524 .copyFrom(HOST)
525 .setRepositoryName("foo/bar")
526 .setRevision(Revision.unpeeled("master", id))
527 .build();
Dave Borowitz9de65952012-08-13 16:09:45 -0700528
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400529 assertThat(view.getServletPath()).isEqualTo("/b");
Matthias Sohne2e3c6a2023-10-01 00:11:52 +0200530 assertThat(view.getType()).isEqualTo(GitilesView.Type.LOG);
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400531 assertThat(view.getHostName()).isEqualTo("host");
532 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
533 assertThat(view.getRevision().getId()).isEqualTo(id);
534 assertThat(view.getRevision().getName()).isEqualTo("master");
535 assertThat(view.getOldRevision()).isEqualTo(Revision.NULL);
536 assertThat(view.getPathPart()).isNull();
537 assertThat(HOST.getParameters()).isEmpty();
Dave Borowitz9de65952012-08-13 16:09:45 -0700538
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400539 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+log/master");
540 assertThat(view.getBreadcrumbs())
541 .containsExactly(
Dave Borowitz9de65952012-08-13 16:09:45 -0700542 breadcrumb("host", "/b/?format=HTML"),
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700543 breadcrumb("foo", "/b/foo/"),
544 breadcrumb("bar", "/b/foo/bar/"),
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400545 breadcrumb("master", "/b/foo/bar/+log/master"))
546 .inOrder();
Dave Borowitz9de65952012-08-13 16:09:45 -0700547 }
548
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700549 @Test
550 public void idLogWithoutPath() throws Exception {
Dave Borowitz9de65952012-08-13 16:09:45 -0700551 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400552 GitilesView view =
553 GitilesView.log()
554 .copyFrom(HOST)
555 .setRepositoryName("foo/bar")
556 .setRevision(Revision.unpeeled("abcd1234", id))
557 .build();
Dave Borowitz9de65952012-08-13 16:09:45 -0700558
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400559 assertThat(view.getServletPath()).isEqualTo("/b");
Matthias Sohne2e3c6a2023-10-01 00:11:52 +0200560 assertThat(view.getType()).isEqualTo(GitilesView.Type.LOG);
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400561 assertThat(view.getHostName()).isEqualTo("host");
562 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
563 assertThat(view.getRevision().getId()).isEqualTo(id);
564 assertThat(view.getRevision().getName()).isEqualTo("abcd1234");
565 assertThat(view.getOldRevision()).isEqualTo(Revision.NULL);
566 assertThat(view.getPathPart()).isNull();
567 assertThat(HOST.getParameters()).isEmpty();
Dave Borowitz9de65952012-08-13 16:09:45 -0700568
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400569 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+log/abcd1234");
570 assertThat(view.getBreadcrumbs())
571 .containsExactly(
Dave Borowitz9de65952012-08-13 16:09:45 -0700572 breadcrumb("host", "/b/?format=HTML"),
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700573 breadcrumb("foo", "/b/foo/"),
574 breadcrumb("bar", "/b/foo/bar/"),
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400575 breadcrumb("abcd1234", "/b/foo/bar/+log/abcd1234"))
576 .inOrder();
Dave Borowitz9de65952012-08-13 16:09:45 -0700577 }
578
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700579 @Test
580 public void logWithoutOldRevision() throws Exception {
Dave Borowitz9de65952012-08-13 16:09:45 -0700581 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400582 GitilesView view =
583 GitilesView.log()
584 .copyFrom(HOST)
585 .setRepositoryName("foo/bar")
586 .setRevision(Revision.unpeeled("master", id))
587 .setPathPart("/path/to/a/file")
588 .build();
Dave Borowitz9de65952012-08-13 16:09:45 -0700589
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400590 assertThat(view.getServletPath()).isEqualTo("/b");
Matthias Sohne2e3c6a2023-10-01 00:11:52 +0200591 assertThat(view.getType()).isEqualTo(GitilesView.Type.LOG);
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400592 assertThat(view.getHostName()).isEqualTo("host");
593 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
594 assertThat(view.getRevision().getId()).isEqualTo(id);
595 assertThat(view.getRevision().getName()).isEqualTo("master");
596 assertThat(view.getOldRevision()).isEqualTo(Revision.NULL);
597 assertThat(view.getPathPart()).isEqualTo("path/to/a/file");
598 assertThat(HOST.getParameters()).isEmpty();
Dave Borowitz9de65952012-08-13 16:09:45 -0700599
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400600 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+log/master/path/to/a/file");
601 assertThat(view.getBreadcrumbs())
602 .containsExactly(
Dave Borowitz9de65952012-08-13 16:09:45 -0700603 breadcrumb("host", "/b/?format=HTML"),
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700604 breadcrumb("foo", "/b/foo/"),
605 breadcrumb("bar", "/b/foo/bar/"),
Dave Borowitzd3e6dd72012-12-20 15:48:24 -0800606 breadcrumb("master", "/b/foo/bar/+log/master"),
Dave Borowitz9de65952012-08-13 16:09:45 -0700607 breadcrumb("path", "/b/foo/bar/+log/master/path"),
608 breadcrumb("to", "/b/foo/bar/+log/master/path/to"),
609 breadcrumb("a", "/b/foo/bar/+log/master/path/to/a"),
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400610 breadcrumb("file", "/b/foo/bar/+log/master/path/to/a/file"))
611 .inOrder();
Dave Borowitz9de65952012-08-13 16:09:45 -0700612 }
613
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700614 @Test
615 public void logWithOldRevision() throws Exception {
Dave Borowitz9de65952012-08-13 16:09:45 -0700616 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
617 ObjectId parent = ObjectId.fromString("efab5678efab5678efab5678efab5678efab5678");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400618 GitilesView view =
619 GitilesView.log()
620 .copyFrom(HOST)
621 .setRepositoryName("foo/bar")
622 .setRevision(Revision.unpeeled("master", id))
623 .setOldRevision(Revision.unpeeled("master^", parent))
624 .setPathPart("/path/to/a/file")
625 .build();
Dave Borowitz9de65952012-08-13 16:09:45 -0700626
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400627 assertThat(view.getServletPath()).isEqualTo("/b");
Matthias Sohne2e3c6a2023-10-01 00:11:52 +0200628 assertThat(view.getType()).isEqualTo(GitilesView.Type.LOG);
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400629 assertThat(view.getHostName()).isEqualTo("host");
630 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
631 assertThat(view.getRevision().getId()).isEqualTo(id);
632 assertThat(view.getRevision().getName()).isEqualTo("master");
633 assertThat(view.getOldRevision().getName()).isEqualTo("master^");
634 assertThat(view.getPathPart()).isEqualTo("path/to/a/file");
635 assertThat(HOST.getParameters()).isEmpty();
Dave Borowitz9de65952012-08-13 16:09:45 -0700636
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400637 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+log/master%5E..master/path/to/a/file");
638 assertThat(view.getBreadcrumbs())
639 .containsExactly(
Dave Borowitz9de65952012-08-13 16:09:45 -0700640 breadcrumb("host", "/b/?format=HTML"),
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700641 breadcrumb("foo", "/b/foo/"),
642 breadcrumb("bar", "/b/foo/bar/"),
Dave Borowitz9de65952012-08-13 16:09:45 -0700643 breadcrumb("master^..master", "/b/foo/bar/+log/master%5E..master"),
644 breadcrumb("path", "/b/foo/bar/+log/master%5E..master/path"),
645 breadcrumb("to", "/b/foo/bar/+log/master%5E..master/path/to"),
646 breadcrumb("a", "/b/foo/bar/+log/master%5E..master/path/to/a"),
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400647 breadcrumb("file", "/b/foo/bar/+log/master%5E..master/path/to/a/file"))
648 .inOrder();
Dave Borowitz9de65952012-08-13 16:09:45 -0700649 }
650
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700651 @Test
652 public void logWithNoRevision() throws Exception {
Dave Borowitzcf38c032016-05-02 11:06:23 -0400653 GitilesView view = GitilesView.log().copyFrom(HOST).setRepositoryName("foo/bar").build();
Dave Borowitz80334b22013-01-11 14:19:11 -0800654
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400655 assertThat(view.getServletPath()).isEqualTo("/b");
Matthias Sohne2e3c6a2023-10-01 00:11:52 +0200656 assertThat(view.getType()).isEqualTo(GitilesView.Type.LOG);
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400657 assertThat(view.getHostName()).isEqualTo("host");
658 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
659 assertThat(view.getRevision()).isEqualTo(Revision.NULL);
660 assertThat(view.getOldRevision()).isEqualTo(Revision.NULL);
661 assertThat(HOST.getParameters()).isEmpty();
Dave Borowitz80334b22013-01-11 14:19:11 -0800662
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400663 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+log");
664 assertThat(view.getBreadcrumbs())
665 .containsExactly(
Dave Borowitz80334b22013-01-11 14:19:11 -0800666 breadcrumb("host", "/b/?format=HTML"),
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700667 breadcrumb("foo", "/b/foo/"),
668 breadcrumb("bar", "/b/foo/bar/"),
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400669 breadcrumb("HEAD", "/b/foo/bar/+log"))
670 .inOrder();
Dave Borowitz80334b22013-01-11 14:19:11 -0800671 }
672
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700673 @Test
674 public void archiveWithNoPath() throws Exception {
Dave Borowitz5051e672013-11-11 11:09:40 -0800675 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400676 GitilesView view =
677 GitilesView.archive()
678 .copyFrom(HOST)
679 .setRepositoryName("foo/bar")
680 .setRevision(Revision.unpeeled("master", id))
681 .setExtension(".tar.bz2")
682 .build();
Dave Borowitz5051e672013-11-11 11:09:40 -0800683
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400684 assertThat(view.getServletPath()).isEqualTo("/b");
Matthias Sohne2e3c6a2023-10-01 00:11:52 +0200685 assertThat(view.getType()).isEqualTo(GitilesView.Type.ARCHIVE);
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400686 assertThat(view.getHostName()).isEqualTo("host");
687 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
688 assertThat(view.getRevision().getId()).isEqualTo(id);
689 assertThat(view.getRevision().getName()).isEqualTo("master");
690 assertThat(view.getOldRevision()).isEqualTo(Revision.NULL);
691 assertThat(view.getPathPart()).isNull();
692 assertThat(HOST.getParameters()).isEmpty();
693 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+archive/master.tar.bz2");
Dave Borowitz5051e672013-11-11 11:09:40 -0800694 }
695
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700696 @Test
697 public void archiveWithPath() throws Exception {
Dave Borowitz5051e672013-11-11 11:09:40 -0800698 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400699 GitilesView view =
700 GitilesView.archive()
701 .copyFrom(HOST)
702 .setRepositoryName("foo/bar")
703 .setRevision(Revision.unpeeled("master", id))
704 .setPathPart("/path/to/a/dir")
705 .setExtension(".tar.bz2")
706 .build();
Dave Borowitz5051e672013-11-11 11:09:40 -0800707
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400708 assertThat(view.getServletPath()).isEqualTo("/b");
Matthias Sohne2e3c6a2023-10-01 00:11:52 +0200709 assertThat(view.getType()).isEqualTo(GitilesView.Type.ARCHIVE);
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400710 assertThat(view.getHostName()).isEqualTo("host");
711 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
712 assertThat(view.getRevision().getId()).isEqualTo(id);
713 assertThat(view.getRevision().getName()).isEqualTo("master");
714 assertThat(view.getOldRevision()).isEqualTo(Revision.NULL);
715 assertThat(view.getPathPart()).isEqualTo("path/to/a/dir");
716 assertThat(HOST.getParameters()).isEmpty();
717 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+archive/master/path/to/a/dir.tar.bz2");
Dave Borowitz5051e672013-11-11 11:09:40 -0800718 }
719
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700720 @Test
721 public void blame() throws Exception {
Dave Borowitz68c7a9b2014-01-28 12:13:21 -0800722 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400723 GitilesView view =
724 GitilesView.blame()
725 .copyFrom(HOST)
726 .setRepositoryName("foo/bar")
727 .setRevision(Revision.unpeeled("master", id))
728 .setPathPart("/dir/file")
729 .build();
Dave Borowitz68c7a9b2014-01-28 12:13:21 -0800730
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400731 assertThat(view.getServletPath()).isEqualTo("/b");
Matthias Sohne2e3c6a2023-10-01 00:11:52 +0200732 assertThat(view.getType()).isEqualTo(GitilesView.Type.BLAME);
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400733 assertThat(view.getHostName()).isEqualTo("host");
734 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
735 assertThat(view.getRevision().getId()).isEqualTo(id);
736 assertThat(view.getRevision().getName()).isEqualTo("master");
737 assertThat(view.getOldRevision()).isEqualTo(Revision.NULL);
738 assertThat(view.getPathPart()).isEqualTo("dir/file");
739 assertThat(HOST.getParameters()).isEmpty();
740 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+blame/master/dir/file");
741 assertThat(view.getBreadcrumbs())
742 .containsExactly(
Dave Borowitz68c7a9b2014-01-28 12:13:21 -0800743 breadcrumb("host", "/b/?format=HTML"),
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700744 breadcrumb("foo", "/b/foo/"),
745 breadcrumb("bar", "/b/foo/bar/"),
Dave Borowitz68c7a9b2014-01-28 12:13:21 -0800746 breadcrumb("master", "/b/foo/bar/+/master"),
747 breadcrumb(".", "/b/foo/bar/+/master/"),
748 breadcrumb("dir", "/b/foo/bar/+/master/dir"),
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400749 breadcrumb("file", "/b/foo/bar/+blame/master/dir/file"))
750 .inOrder();
Dave Borowitz68c7a9b2014-01-28 12:13:21 -0800751 }
752
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700753 @Test
754 public void escaping() throws Exception {
Dave Borowitz9de65952012-08-13 16:09:45 -0700755 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
756 ObjectId parent = ObjectId.fromString("efab5678efab5678efab5678efab5678efab5678");
757 // Some of these values are not valid for Git, but check them anyway.
Dave Borowitzcf38c032016-05-02 11:06:23 -0400758 GitilesView view =
759 GitilesView.log()
760 .copyFrom(HOST)
761 .setRepositoryName("foo?bar")
762 .setRevision(Revision.unpeeled("ba/d#name", id))
763 .setOldRevision(Revision.unpeeled("other\"na/me", parent))
764 .setPathPart("we ird/pa'th/name")
765 .putParam("k e y", "val/ue")
766 .setAnchor("anc#hor")
767 .build();
Dave Borowitz9de65952012-08-13 16:09:45 -0700768
769 // Fields returned by getters are not escaped.
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400770 assertThat(view.getServletPath()).isEqualTo("/b");
Matthias Sohne2e3c6a2023-10-01 00:11:52 +0200771 assertThat(view.getType()).isEqualTo(GitilesView.Type.LOG);
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400772 assertThat(view.getHostName()).isEqualTo("host");
773 assertThat(view.getRepositoryName()).isEqualTo("foo?bar");
774 assertThat(view.getRevision().getId()).isEqualTo(id);
775 assertThat(view.getRevision().getName()).isEqualTo("ba/d#name");
776 assertThat(view.getOldRevision().getId()).isEqualTo(parent);
777 assertThat(view.getOldRevision().getName()).isEqualTo("other\"na/me");
778 assertThat(view.getPathPart()).isEqualTo("we ird/pa'th/name");
779 assertThat(view.getParameters())
Dave Borowitzcf38c032016-05-02 11:06:23 -0400780 .isEqualTo(ImmutableListMultimap.<String, String>of("k e y", "val/ue"));
Dave Borowitz9de65952012-08-13 16:09:45 -0700781
Dave Borowitz58a96f22014-05-06 14:29:24 -0700782 String qs = "?k+e+y=val%2Fue";
Dave Borowitzcf38c032016-05-02 11:06:23 -0400783 assertThat(view.toUrl())
784 .isEqualTo(
785 "/b/foo%3Fbar/+log/other%22na/me..ba/d%23name/we%20ird/pa%27th/name"
786 + qs
787 + "#anc%23hor");
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400788 assertThat(view.getBreadcrumbs())
789 .containsExactly(
Dave Borowitz9de65952012-08-13 16:09:45 -0700790 // Names are not escaped (auto-escaped by Soy) but values are.
791 breadcrumb("host", "/b/?format=HTML"),
792 breadcrumb("foo?bar", "/b/foo%3Fbar/"),
Dave Borowitzcf38c032016-05-02 11:06:23 -0400793 breadcrumb(
794 "other\"na/me..ba/d#name", "/b/foo%3Fbar/+log/other%22na/me..ba/d%23name" + qs),
795 breadcrumb("we ird", "/b/foo%3Fbar/+log/other%22na/me..ba/d%23name/we%20ird" + qs),
796 breadcrumb(
797 "pa'th", "/b/foo%3Fbar/+log/other%22na/me..ba/d%23name/we%20ird/pa%27th" + qs),
798 breadcrumb(
799 "name", "/b/foo%3Fbar/+log/other%22na/me..ba/d%23name/we%20ird/pa%27th/name" + qs))
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400800 .inOrder();
Dave Borowitz9de65952012-08-13 16:09:45 -0700801 }
802
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700803 @Test
804 public void breadcrumbsHasSingleTree() throws Exception {
Dave Borowitz4e8ffd82012-12-26 16:01:06 -0800805 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400806 GitilesView view =
807 GitilesView.path()
808 .copyFrom(HOST)
809 .setRepositoryName("foo/bar")
810 .setRevision(Revision.unpeeled("master", id))
811 .setPathPart("/path/to/a/file")
812 .build();
Dave Borowitz4e8ffd82012-12-26 16:01:06 -0800813
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400814 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+/master/path/to/a/file");
815 assertThat(view.getBreadcrumbs(ImmutableList.of(false, true, true)))
816 .containsExactly(
Dave Borowitz4e8ffd82012-12-26 16:01:06 -0800817 breadcrumb("host", "/b/?format=HTML"),
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700818 breadcrumb("foo", "/b/foo/"),
819 breadcrumb("bar", "/b/foo/bar/"),
Dave Borowitz4e8ffd82012-12-26 16:01:06 -0800820 breadcrumb("master", "/b/foo/bar/+/master"),
821 breadcrumb(".", "/b/foo/bar/+/master/"),
822 breadcrumb("path", "/b/foo/bar/+/master/path"),
823 breadcrumb("to", "/b/foo/bar/+/master/path/to?autodive=0"),
824 breadcrumb("a", "/b/foo/bar/+/master/path/to/a?autodive=0"),
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400825 breadcrumb("file", "/b/foo/bar/+/master/path/to/a/file"))
826 .inOrder();
827 assertThat(view.getBreadcrumbs(ImmutableList.of(true, false, false)))
828 .containsExactly(
Dave Borowitz4e8ffd82012-12-26 16:01:06 -0800829 breadcrumb("host", "/b/?format=HTML"),
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700830 breadcrumb("foo", "/b/foo/"),
831 breadcrumb("bar", "/b/foo/bar/"),
Dave Borowitz4e8ffd82012-12-26 16:01:06 -0800832 breadcrumb("master", "/b/foo/bar/+/master"),
833 breadcrumb(".", "/b/foo/bar/+/master/"),
834 breadcrumb("path", "/b/foo/bar/+/master/path?autodive=0"),
835 breadcrumb("to", "/b/foo/bar/+/master/path/to"),
836 breadcrumb("a", "/b/foo/bar/+/master/path/to/a"),
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400837 breadcrumb("file", "/b/foo/bar/+/master/path/to/a/file"))
838 .inOrder();
Dave Borowitz4e8ffd82012-12-26 16:01:06 -0800839 }
840
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700841 @Test
842 public void breadcrumbsHasSingleTreeRootPath() throws Exception {
Dave Borowitz44a15842013-01-07 09:39:05 -0800843 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400844 GitilesView view =
845 GitilesView.path()
846 .copyFrom(HOST)
847 .setRepositoryName("foo/bar")
848 .setRevision(Revision.unpeeled("master", id))
849 .setPathPart("")
850 .build();
Dave Borowitz44a15842013-01-07 09:39:05 -0800851
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400852 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+/master/");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400853 assertThat(view.getBreadcrumbs(ImmutableList.<Boolean>of()))
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400854 .containsExactly(
Dave Borowitz44a15842013-01-07 09:39:05 -0800855 breadcrumb("host", "/b/?format=HTML"),
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700856 breadcrumb("foo", "/b/foo/"),
857 breadcrumb("bar", "/b/foo/bar/"),
Dave Borowitz44a15842013-01-07 09:39:05 -0800858 breadcrumb("master", "/b/foo/bar/+/master"),
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400859 breadcrumb(".", "/b/foo/bar/+/master/"))
860 .inOrder();
Dave Borowitz44a15842013-01-07 09:39:05 -0800861 }
862
Dave Borowitz9de65952012-08-13 16:09:45 -0700863 private static ImmutableMap<String, String> breadcrumb(String text, String url) {
864 return ImmutableMap.of("text", text, "url", url);
865 }
866}