blob: 59659a2ca503a4be9ec180ffe7881039c0c09b10 [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;
22import com.google.gitiles.GitilesView.Type;
23
Dave Borowitzd40bdf12014-04-19 19:33:56 -070024import org.eclipse.jgit.lib.ObjectId;
25import org.junit.Test;
Dave Borowitz3dc854f2014-11-04 16:19:37 -080026import org.junit.runner.RunWith;
27import org.junit.runners.JUnit4;
Dave Borowitzd40bdf12014-04-19 19:33:56 -070028
Dave Borowitz9de65952012-08-13 16:09:45 -070029/** Tests for Gitiles views. */
Dave Borowitz3dc854f2014-11-04 16:19:37 -080030@RunWith(JUnit4.class)
Dave Borowitzd40bdf12014-04-19 19:33:56 -070031public class GitilesViewTest {
Dave Borowitzcf38c032016-05-02 11:06:23 -040032 private static final GitilesView HOST =
33 GitilesView.hostIndex().setServletPath("/b").setHostName("host").build();
Dave Borowitz9de65952012-08-13 16:09:45 -070034
Dave Borowitzd40bdf12014-04-19 19:33:56 -070035 @Test
36 public void emptyServletPath() throws Exception {
Dave Borowitzcf38c032016-05-02 11:06:23 -040037 GitilesView view = GitilesView.hostIndex().setServletPath("").setHostName("host").build();
Dave Borowitzfde41fd2015-09-16 15:14:38 -040038 assertThat(view.getServletPath()).isEqualTo("");
39 assertThat(view.getType()).isEqualTo(Type.HOST_INDEX);
40 assertThat(view.getHostName()).isEqualTo("host");
41 assertThat(view.getRepositoryName()).isNull();
42 assertThat(view.getRevision()).isEqualTo(Revision.NULL);
43 assertThat(view.getPathPart()).isNull();
44 assertThat(HOST.getParameters()).isEmpty();
Dave Borowitz9de65952012-08-13 16:09:45 -070045
Dave Borowitzfde41fd2015-09-16 15:14:38 -040046 assertThat(view.toUrl()).isEqualTo("/?format=HTML");
Dave Borowitzcf38c032016-05-02 11:06:23 -040047 assertThat(view.getBreadcrumbs()).containsExactly(breadcrumb("host", "/?format=HTML"));
Dave Borowitz9de65952012-08-13 16:09:45 -070048 }
49
Dave Borowitzd40bdf12014-04-19 19:33:56 -070050 @Test
51 public void hostIndex() throws Exception {
Dave Borowitzfde41fd2015-09-16 15:14:38 -040052 assertThat(HOST.getServletPath()).isEqualTo("/b");
53 assertThat(HOST.getType()).isEqualTo(Type.HOST_INDEX);
54 assertThat(HOST.getHostName()).isEqualTo("host");
55 assertThat(HOST.getRepositoryName()).isNull();
56 assertThat(HOST.getRevision()).isEqualTo(Revision.NULL);
57 assertThat(HOST.getPathPart()).isNull();
58 assertThat(HOST.getParameters()).isEmpty();
Dave Borowitz9de65952012-08-13 16:09:45 -070059
Dave Borowitzfde41fd2015-09-16 15:14:38 -040060 assertThat(HOST.toUrl()).isEqualTo("/b/?format=HTML");
Dave Borowitzcf38c032016-05-02 11:06:23 -040061 assertThat(HOST.getBreadcrumbs()).containsExactly(breadcrumb("host", "/b/?format=HTML"));
Dave Borowitz9de65952012-08-13 16:09:45 -070062 }
63
Dave Borowitzd40bdf12014-04-19 19:33:56 -070064 @Test
Shawn Pearcec709c4c2015-08-28 15:30:42 -070065 public void hostIndexOneComponentPrefix() throws Exception {
Dave Borowitzcf38c032016-05-02 11:06:23 -040066 GitilesView view = GitilesView.hostIndex().copyFrom(HOST).setRepositoryPrefix("foo").build();
Shawn Pearcec709c4c2015-08-28 15:30:42 -070067
Dave Borowitzfde41fd2015-09-16 15:14:38 -040068 assertThat(view.toUrl()).isEqualTo("/b/foo/");
69 assertThat(view.getBreadcrumbs())
Dave Borowitzcf38c032016-05-02 11:06:23 -040070 .containsExactly(breadcrumb("host", "/b/?format=HTML"), breadcrumb("foo", "/b/foo/"))
Dave Borowitzfde41fd2015-09-16 15:14:38 -040071 .inOrder();
Shawn Pearcec709c4c2015-08-28 15:30:42 -070072 }
73
74 @Test
75 public void hostIndexTwoComponentPrefix() throws Exception {
Dave Borowitzcf38c032016-05-02 11:06:23 -040076 GitilesView view =
77 GitilesView.hostIndex().copyFrom(HOST).setRepositoryPrefix("foo/bar").build();
Shawn Pearcec709c4c2015-08-28 15:30:42 -070078
Dave Borowitzfde41fd2015-09-16 15:14:38 -040079 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/");
80 assertThat(view.getBreadcrumbs())
81 .containsExactly(
82 breadcrumb("host", "/b/?format=HTML"),
83 breadcrumb("foo", "/b/foo/"),
84 breadcrumb("bar", "/b/foo/bar/"))
85 .inOrder();
Shawn Pearcec709c4c2015-08-28 15:30:42 -070086 }
87
88 @Test
Dave Borowitzd40bdf12014-04-19 19:33:56 -070089 public void queryParams() throws Exception {
Dave Borowitzcf38c032016-05-02 11:06:23 -040090 GitilesView view =
91 GitilesView.log()
92 .copyFrom(HOST)
93 .setRepositoryName("repo")
94 .setRevision(Revision.named("master"))
95 .putParam("foo", "foovalue")
96 .putParam("bar", "barvalue")
97 .build();
Dave Borowitz9de65952012-08-13 16:09:45 -070098
Dave Borowitzfde41fd2015-09-16 15:14:38 -040099 assertThat(view.getServletPath()).isEqualTo("/b");
100 assertThat(view.getType()).isEqualTo(Type.LOG);
101 assertThat(view.getHostName()).isEqualTo("host");
102 assertThat(view.getRepositoryName()).isEqualTo("repo");
103 assertThat(view.getRevision()).isEqualTo(Revision.named("master"));
104 assertThat(view.getPathPart()).isNull();
Dave Borowitzcf38c032016-05-02 11:06:23 -0400105 assertThat(view.getParameters())
106 .containsExactlyEntriesIn(
107 ImmutableListMultimap.of(
108 "foo", "foovalue",
109 "bar", "barvalue"));
Dave Borowitz9de65952012-08-13 16:09:45 -0700110
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400111 assertThat(view.toUrl()).isEqualTo("/b/repo/+log/master?foo=foovalue&bar=barvalue");
112 assertThat(view.getBreadcrumbs())
113 .containsExactly(
Dave Borowitz58a96f22014-05-06 14:29:24 -0700114 breadcrumb("host", "/b/?format=HTML"),
115 breadcrumb("repo", "/b/repo/"),
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400116 breadcrumb("master", "/b/repo/+log/master?foo=foovalue&bar=barvalue"))
117 .inOrder();
Dave Borowitz9de65952012-08-13 16:09:45 -0700118 }
119
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700120 @Test
Dave Borowitz58a96f22014-05-06 14:29:24 -0700121 public void queryParamsCopiedOnlyOnSameType() throws Exception {
Dave Borowitzcf38c032016-05-02 11:06:23 -0400122 GitilesView view =
123 GitilesView.repositoryIndex()
124 .copyFrom(HOST)
125 .setRepositoryName("repo")
126 .putParam("foo", "foovalue")
127 .putParam("bar", "barvalue")
128 .build();
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400129 assertThat(view.getParameters()).isNotEmpty();
130 assertThat(GitilesView.repositoryIndex().copyFrom(view).build().getParameters())
131 .isEqualTo(view.getParameters());
132 assertThat(GitilesView.hostIndex().copyFrom(view).build().getParameters()).isEmpty();
Dave Borowitz9de65952012-08-13 16:09:45 -0700133 }
134
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700135 @Test
136 public void repositoryIndex() throws Exception {
Dave Borowitzcf38c032016-05-02 11:06:23 -0400137 GitilesView view =
138 GitilesView.repositoryIndex().copyFrom(HOST).setRepositoryName("foo/bar").build();
Dave Borowitz9de65952012-08-13 16:09:45 -0700139
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400140 assertThat(view.getServletPath()).isEqualTo("/b");
141 assertThat(view.getType()).isEqualTo(Type.REPOSITORY_INDEX);
142 assertThat(view.getHostName()).isEqualTo("host");
143 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
144 assertThat(view.getRevision()).isEqualTo(Revision.NULL);
145 assertThat(view.getPathPart()).isNull();
146 assertThat(HOST.getParameters()).isEmpty();
Dave Borowitz9de65952012-08-13 16:09:45 -0700147
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400148 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/");
149 assertThat(view.getBreadcrumbs())
150 .containsExactly(
Dave Borowitz9de65952012-08-13 16:09:45 -0700151 breadcrumb("host", "/b/?format=HTML"),
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700152 breadcrumb("foo", "/b/foo/"),
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400153 breadcrumb("bar", "/b/foo/bar/"))
154 .inOrder();
Dave Borowitz9de65952012-08-13 16:09:45 -0700155 }
156
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700157 @Test
158 public void refs() throws Exception {
Dave Borowitzcf38c032016-05-02 11:06:23 -0400159 GitilesView view = GitilesView.refs().copyFrom(HOST).setRepositoryName("foo/bar").build();
Dave Borowitz209d0aa2012-12-28 14:28:53 -0800160
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400161 assertThat(view.getServletPath()).isEqualTo("/b");
162 assertThat(view.getType()).isEqualTo(Type.REFS);
163 assertThat(view.getHostName()).isEqualTo("host");
164 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
165 assertThat(view.getRevision()).isEqualTo(Revision.NULL);
166 assertThat(view.getPathPart()).isNull();
167 assertThat(HOST.getParameters()).isEmpty();
Dave Borowitz209d0aa2012-12-28 14:28:53 -0800168
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400169 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+refs");
170 assertThat(view.getBreadcrumbs())
171 .containsExactly(
Dave Borowitz209d0aa2012-12-28 14:28:53 -0800172 breadcrumb("host", "/b/?format=HTML"),
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700173 breadcrumb("foo", "/b/foo/"),
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400174 breadcrumb("bar", "/b/foo/bar/"))
175 .inOrder();
Dave Borowitz209d0aa2012-12-28 14:28:53 -0800176 }
177
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700178 @Test
179 public void refWithRevision() throws Exception {
Dave Borowitz9de65952012-08-13 16:09:45 -0700180 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400181 GitilesView view =
182 GitilesView.revision()
183 .copyFrom(HOST)
184 .setRepositoryName("foo/bar")
185 .setRevision(Revision.unpeeled("master", id))
186 .build();
Dave Borowitz9de65952012-08-13 16:09:45 -0700187
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400188 assertThat(view.getServletPath()).isEqualTo("/b");
189 assertThat(view.getType()).isEqualTo(Type.REVISION);
190 assertThat(view.getHostName()).isEqualTo("host");
191 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
192 assertThat(view.getRevision().getId()).isEqualTo(id);
193 assertThat(view.getRevision().getName()).isEqualTo("master");
194 assertThat(view.getPathPart()).isNull();
195 assertThat(HOST.getParameters()).isEmpty();
Dave Borowitz9de65952012-08-13 16:09:45 -0700196
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400197 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+/master");
198 assertThat(view.getBreadcrumbs())
199 .containsExactly(
Dave Borowitz9de65952012-08-13 16:09:45 -0700200 breadcrumb("host", "/b/?format=HTML"),
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700201 breadcrumb("foo", "/b/foo/"),
202 breadcrumb("bar", "/b/foo/bar/"),
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400203 breadcrumb("master", "/b/foo/bar/+/master"))
204 .inOrder();
Dave Borowitz9de65952012-08-13 16:09:45 -0700205 }
206
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700207 @Test
208 public void describe() throws Exception {
Dave Borowitzcf38c032016-05-02 11:06:23 -0400209 GitilesView view =
210 GitilesView.describe()
211 .copyFrom(HOST)
212 .setRepositoryName("foo/bar")
213 .setPathPart("deadbeef")
214 .build();
Dave Borowitzba9c1182013-03-13 14:16:43 -0700215
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400216 assertThat(view.getServletPath()).isEqualTo("/b");
217 assertThat(view.getType()).isEqualTo(Type.DESCRIBE);
218 assertThat(view.getHostName()).isEqualTo("host");
219 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
220 assertThat(view.getRevision()).isEqualTo(Revision.NULL);
221 assertThat(view.getPathPart()).isEqualTo("deadbeef");
222 assertThat(HOST.getParameters()).isEmpty();
Dave Borowitzba9c1182013-03-13 14:16:43 -0700223 }
224
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700225 @Test
226 public void noPathComponents() throws Exception {
Dave Borowitz9de65952012-08-13 16:09:45 -0700227 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400228 GitilesView view =
229 GitilesView.path()
230 .copyFrom(HOST)
231 .setRepositoryName("foo/bar")
232 .setRevision(Revision.unpeeled("master", id))
233 .setPathPart("/")
234 .build();
Dave Borowitz9de65952012-08-13 16:09:45 -0700235
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400236 assertThat(view.getServletPath()).isEqualTo("/b");
237 assertThat(view.getType()).isEqualTo(Type.PATH);
238 assertThat(view.getHostName()).isEqualTo("host");
239 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
240 assertThat(view.getRevision().getId()).isEqualTo(id);
241 assertThat(view.getRevision().getName()).isEqualTo("master");
242 assertThat(view.getPathPart()).isEqualTo("");
243 assertThat(HOST.getParameters()).isEmpty();
Dave Borowitz9de65952012-08-13 16:09:45 -0700244
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400245 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+/master/");
246 assertThat(view.getBreadcrumbs())
247 .containsExactly(
Dave Borowitz9de65952012-08-13 16:09:45 -0700248 breadcrumb("host", "/b/?format=HTML"),
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700249 breadcrumb("foo", "/b/foo/"),
250 breadcrumb("bar", "/b/foo/bar/"),
Dave Borowitzd3e6dd72012-12-20 15:48:24 -0800251 breadcrumb("master", "/b/foo/bar/+/master"),
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400252 breadcrumb(".", "/b/foo/bar/+/master/"))
253 .inOrder();
Dave Borowitz9de65952012-08-13 16:09:45 -0700254 }
255
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700256 @Test
257 public void onePathComponent() throws Exception {
Dave Borowitz9de65952012-08-13 16:09:45 -0700258 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400259 GitilesView view =
260 GitilesView.path()
261 .copyFrom(HOST)
262 .setRepositoryName("foo/bar")
263 .setRevision(Revision.unpeeled("master", id))
264 .setPathPart("/file")
265 .build();
Dave Borowitz9de65952012-08-13 16:09:45 -0700266
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400267 assertThat(view.getServletPath()).isEqualTo("/b");
268 assertThat(view.getType()).isEqualTo(Type.PATH);
269 assertThat(view.getHostName()).isEqualTo("host");
270 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
271 assertThat(view.getRevision().getId()).isEqualTo(id);
272 assertThat(view.getRevision().getName()).isEqualTo("master");
273 assertThat(view.getPathPart()).isEqualTo("file");
274 assertThat(HOST.getParameters()).isEmpty();
Dave Borowitz9de65952012-08-13 16:09:45 -0700275
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400276 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+/master/file");
277 assertThat(view.getBreadcrumbs())
278 .containsExactly(
Dave Borowitz9de65952012-08-13 16:09:45 -0700279 breadcrumb("host", "/b/?format=HTML"),
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700280 breadcrumb("foo", "/b/foo/"),
281 breadcrumb("bar", "/b/foo/bar/"),
Dave Borowitzd3e6dd72012-12-20 15:48:24 -0800282 breadcrumb("master", "/b/foo/bar/+/master"),
Dave Borowitz9de65952012-08-13 16:09:45 -0700283 breadcrumb(".", "/b/foo/bar/+/master/"),
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400284 breadcrumb("file", "/b/foo/bar/+/master/file"))
285 .inOrder();
Dave Borowitz9de65952012-08-13 16:09:45 -0700286 }
287
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700288 @Test
Shawn Pearce353ba2f2015-02-12 10:22:37 -0800289 public void oneDocFileAuto() throws Exception {
290 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400291 GitilesView view =
292 GitilesView.doc()
293 .copyFrom(HOST)
294 .setRepositoryName("foo/bar")
295 .setRevision(Revision.unpeeled("master", id))
296 .setPathPart("/README.md")
297 .build();
Shawn Pearce353ba2f2015-02-12 10:22:37 -0800298
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400299 assertThat(view.getServletPath()).isEqualTo("/b");
300 assertThat(view.getType()).isEqualTo(Type.DOC);
301 assertThat(view.getHostName()).isEqualTo("host");
302 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
303 assertThat(view.getRevision().getId()).isEqualTo(id);
304 assertThat(view.getRevision().getName()).isEqualTo("master");
305 assertThat(view.getPathPart()).isEqualTo("README.md");
306 assertThat(HOST.getParameters()).isEmpty();
307 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+/master/README.md");
Shawn Pearce353ba2f2015-02-12 10:22:37 -0800308 }
309
310 @Test
311 public void oneDocTree() throws Exception {
312 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400313 GitilesView view =
314 GitilesView.doc()
315 .copyFrom(HOST)
316 .setRepositoryName("foo/bar")
317 .setRevision(Revision.unpeeled("master", id))
318 .setPathPart("/docs/")
319 .build();
Shawn Pearce353ba2f2015-02-12 10:22:37 -0800320
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400321 assertThat(view.getServletPath()).isEqualTo("/b");
322 assertThat(view.getType()).isEqualTo(Type.DOC);
323 assertThat(view.getHostName()).isEqualTo("host");
324 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
325 assertThat(view.getRevision().getId()).isEqualTo(id);
326 assertThat(view.getRevision().getName()).isEqualTo("master");
327 assertThat(view.getPathPart()).isEqualTo("docs");
328 assertThat(HOST.getParameters()).isEmpty();
329 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+doc/master/docs");
Shawn Pearce353ba2f2015-02-12 10:22:37 -0800330 }
331
332 @Test
333 public void showMarkdown() throws Exception {
334 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400335 GitilesView view =
336 GitilesView.show()
337 .copyFrom(HOST)
338 .setRepositoryName("foo/bar")
339 .setRevision(Revision.unpeeled("master", id))
340 .setPathPart("/README.md")
341 .build();
Shawn Pearce353ba2f2015-02-12 10:22:37 -0800342
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400343 assertThat(view.getServletPath()).isEqualTo("/b");
344 assertThat(view.getType()).isEqualTo(Type.SHOW);
345 assertThat(view.getHostName()).isEqualTo("host");
346 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
347 assertThat(view.getRevision().getId()).isEqualTo(id);
348 assertThat(view.getRevision().getName()).isEqualTo("master");
349 assertThat(view.getPathPart()).isEqualTo("README.md");
350 assertThat(HOST.getParameters()).isEmpty();
351 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+show/master/README.md");
Shawn Pearce353ba2f2015-02-12 10:22:37 -0800352 }
353
354 @Test
Shawn Pearce68311c72015-06-09 17:01:34 -0700355 public void rootedDoc() throws Exception {
356 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400357 GitilesView view =
358 GitilesView.rootedDoc()
359 .copyFrom(HOST)
360 .setRevision(Revision.unpeeled("master", id))
361 .setPathPart("/docs/")
362 .build();
Shawn Pearce68311c72015-06-09 17:01:34 -0700363
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400364 assertThat(view.getServletPath()).isEqualTo("/b");
365 assertThat(view.getType()).isEqualTo(Type.ROOTED_DOC);
366 assertThat(view.getHostName()).isEqualTo("host");
367 assertThat(view.getRevision().getId()).isEqualTo(id);
368 assertThat(view.getRevision().getName()).isEqualTo("master");
369 assertThat(view.getPathPart()).isEqualTo("docs");
370 assertThat(HOST.getParameters()).isEmpty();
371 assertThat(view.toUrl()).isEqualTo("/b/docs");
Shawn Pearce68311c72015-06-09 17:01:34 -0700372 }
373
374 @Test
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700375 public void multiplePathComponents() throws Exception {
Dave Borowitz9de65952012-08-13 16:09:45 -0700376 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400377 GitilesView view =
378 GitilesView.path()
379 .copyFrom(HOST)
380 .setRepositoryName("foo/bar")
381 .setRevision(Revision.unpeeled("master", id))
382 .setPathPart("/path/to/a/file")
383 .build();
Dave Borowitz9de65952012-08-13 16:09:45 -0700384
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400385 assertThat(view.getServletPath()).isEqualTo("/b");
386 assertThat(view.getType()).isEqualTo(Type.PATH);
387 assertThat(view.getHostName()).isEqualTo("host");
388 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
389 assertThat(view.getRevision().getId()).isEqualTo(id);
390 assertThat(view.getRevision().getName()).isEqualTo("master");
391 assertThat(view.getPathPart()).isEqualTo("path/to/a/file");
392 assertThat(HOST.getParameters()).isEmpty();
Dave Borowitz9de65952012-08-13 16:09:45 -0700393
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400394 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+/master/path/to/a/file");
395 assertThat(view.getBreadcrumbs())
396 .containsExactly(
Dave Borowitz9de65952012-08-13 16:09:45 -0700397 breadcrumb("host", "/b/?format=HTML"),
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700398 breadcrumb("foo", "/b/foo/"),
399 breadcrumb("bar", "/b/foo/bar/"),
Dave Borowitzd3e6dd72012-12-20 15:48:24 -0800400 breadcrumb("master", "/b/foo/bar/+/master"),
Dave Borowitz9de65952012-08-13 16:09:45 -0700401 breadcrumb(".", "/b/foo/bar/+/master/"),
402 breadcrumb("path", "/b/foo/bar/+/master/path"),
403 breadcrumb("to", "/b/foo/bar/+/master/path/to"),
404 breadcrumb("a", "/b/foo/bar/+/master/path/to/a"),
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400405 breadcrumb("file", "/b/foo/bar/+/master/path/to/a/file"))
406 .inOrder();
Dave Borowitz9de65952012-08-13 16:09:45 -0700407 }
408
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700409 @Test
410 public void diffAgainstFirstParent() throws Exception {
Dave Borowitz9de65952012-08-13 16:09:45 -0700411 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
412 ObjectId parent = ObjectId.fromString("efab5678efab5678efab5678efab5678efab5678");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400413 GitilesView view =
414 GitilesView.diff()
415 .copyFrom(HOST)
416 .setRepositoryName("foo/bar")
417 .setRevision(Revision.unpeeled("master", id))
418 .setOldRevision(Revision.unpeeled("master^", parent))
419 .setPathPart("/path/to/a/file")
420 .build();
Dave Borowitz9de65952012-08-13 16:09:45 -0700421
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400422 assertThat(view.getServletPath()).isEqualTo("/b");
423 assertThat(view.getType()).isEqualTo(Type.DIFF);
424 assertThat(view.getHostName()).isEqualTo("host");
425 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
426 assertThat(view.getRevision().getId()).isEqualTo(id);
427 assertThat(view.getRevision().getName()).isEqualTo("master");
428 assertThat(view.getOldRevision().getName()).isEqualTo("master^");
429 assertThat(view.getPathPart()).isEqualTo("path/to/a/file");
430 assertThat(HOST.getParameters()).isEmpty();
Dave Borowitz9de65952012-08-13 16:09:45 -0700431
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400432 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+/master%5E%21/path/to/a/file");
433 assertThat(view.getBreadcrumbs())
434 .containsExactly(
Dave Borowitz9de65952012-08-13 16:09:45 -0700435 breadcrumb("host", "/b/?format=HTML"),
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700436 breadcrumb("foo", "/b/foo/"),
437 breadcrumb("bar", "/b/foo/bar/"),
Dave Borowitz9de65952012-08-13 16:09:45 -0700438 breadcrumb("master^!", "/b/foo/bar/+/master%5E%21/"),
439 breadcrumb(".", "/b/foo/bar/+/master%5E%21/"),
440 breadcrumb("path", "/b/foo/bar/+/master%5E%21/path"),
441 breadcrumb("to", "/b/foo/bar/+/master%5E%21/path/to"),
442 breadcrumb("a", "/b/foo/bar/+/master%5E%21/path/to/a"),
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400443 breadcrumb("file", "/b/foo/bar/+/master%5E%21/path/to/a/file"))
444 .inOrder();
Dave Borowitz9de65952012-08-13 16:09:45 -0700445 }
446
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700447 @Test
448 public void diffAgainstEmptyRevision() throws Exception {
Dave Borowitz9de65952012-08-13 16:09:45 -0700449 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400450 GitilesView view =
451 GitilesView.diff()
452 .copyFrom(HOST)
453 .setRepositoryName("foo/bar")
454 .setRevision(Revision.unpeeled("master", id))
455 .setPathPart("/path/to/a/file")
456 .build();
Dave Borowitz9de65952012-08-13 16:09:45 -0700457
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400458 assertThat(view.getServletPath()).isEqualTo("/b");
459 assertThat(view.getType()).isEqualTo(Type.DIFF);
460 assertThat(view.getHostName()).isEqualTo("host");
461 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
462 assertThat(view.getRevision().getId()).isEqualTo(id);
463 assertThat(view.getRevision().getName()).isEqualTo("master");
464 assertThat(view.getOldRevision()).isEqualTo(Revision.NULL);
465 assertThat(view.getPathPart()).isEqualTo("path/to/a/file");
466 assertThat(HOST.getParameters()).isEmpty();
Dave Borowitz9de65952012-08-13 16:09:45 -0700467
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400468 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+/master%5E%21/path/to/a/file");
469 assertThat(view.getBreadcrumbs())
470 .containsExactly(
Dave Borowitz9de65952012-08-13 16:09:45 -0700471 breadcrumb("host", "/b/?format=HTML"),
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700472 breadcrumb("foo", "/b/foo/"),
473 breadcrumb("bar", "/b/foo/bar/"),
Dave Borowitz9de65952012-08-13 16:09:45 -0700474 breadcrumb("master^!", "/b/foo/bar/+/master%5E%21/"),
475 breadcrumb(".", "/b/foo/bar/+/master%5E%21/"),
476 breadcrumb("path", "/b/foo/bar/+/master%5E%21/path"),
477 breadcrumb("to", "/b/foo/bar/+/master%5E%21/path/to"),
478 breadcrumb("a", "/b/foo/bar/+/master%5E%21/path/to/a"),
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400479 breadcrumb("file", "/b/foo/bar/+/master%5E%21/path/to/a/file"))
480 .inOrder();
Dave Borowitz9de65952012-08-13 16:09:45 -0700481 }
482
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700483 @Test
484 public void diffAgainstOther() throws Exception {
Dave Borowitz9de65952012-08-13 16:09:45 -0700485 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
486 ObjectId other = ObjectId.fromString("efab5678efab5678efab5678efab5678efab5678");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400487 GitilesView view =
488 GitilesView.diff()
489 .copyFrom(HOST)
490 .setRepositoryName("foo/bar")
491 .setRevision(Revision.unpeeled("master", id))
492 .setOldRevision(Revision.unpeeled("efab5678", other))
493 .setPathPart("/path/to/a/file")
494 .build();
Dave Borowitz9de65952012-08-13 16:09:45 -0700495
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400496 assertThat(view.getServletPath()).isEqualTo("/b");
497 assertThat(view.getType()).isEqualTo(Type.DIFF);
498 assertThat(view.getHostName()).isEqualTo("host");
499 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
500 assertThat(view.getRevision().getId()).isEqualTo(id);
501 assertThat(view.getRevision().getName()).isEqualTo("master");
502 assertThat(view.getOldRevision().getName()).isEqualTo("efab5678");
503 assertThat(view.getPathPart()).isEqualTo("path/to/a/file");
504 assertThat(HOST.getParameters()).isEmpty();
Dave Borowitz9de65952012-08-13 16:09:45 -0700505
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400506 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+/efab5678..master/path/to/a/file");
507 assertThat(view.getBreadcrumbs())
508 .containsExactly(
Dave Borowitz9de65952012-08-13 16:09:45 -0700509 breadcrumb("host", "/b/?format=HTML"),
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700510 breadcrumb("foo", "/b/foo/"),
511 breadcrumb("bar", "/b/foo/bar/"),
Dave Borowitz9de65952012-08-13 16:09:45 -0700512 breadcrumb("efab5678..master", "/b/foo/bar/+/efab5678..master/"),
513 breadcrumb(".", "/b/foo/bar/+/efab5678..master/"),
514 breadcrumb("path", "/b/foo/bar/+/efab5678..master/path"),
515 breadcrumb("to", "/b/foo/bar/+/efab5678..master/path/to"),
516 breadcrumb("a", "/b/foo/bar/+/efab5678..master/path/to/a"),
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400517 breadcrumb("file", "/b/foo/bar/+/efab5678..master/path/to/a/file"))
518 .inOrder();
Dave Borowitz9de65952012-08-13 16:09:45 -0700519 }
520
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700521 @Test
522 public void branchLogWithoutPath() throws Exception {
Dave Borowitz9de65952012-08-13 16:09:45 -0700523 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400524 GitilesView view =
525 GitilesView.log()
526 .copyFrom(HOST)
527 .setRepositoryName("foo/bar")
528 .setRevision(Revision.unpeeled("master", id))
529 .build();
Dave Borowitz9de65952012-08-13 16:09:45 -0700530
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400531 assertThat(view.getServletPath()).isEqualTo("/b");
532 assertThat(view.getType()).isEqualTo(Type.LOG);
533 assertThat(view.getHostName()).isEqualTo("host");
534 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
535 assertThat(view.getRevision().getId()).isEqualTo(id);
536 assertThat(view.getRevision().getName()).isEqualTo("master");
537 assertThat(view.getOldRevision()).isEqualTo(Revision.NULL);
538 assertThat(view.getPathPart()).isNull();
539 assertThat(HOST.getParameters()).isEmpty();
Dave Borowitz9de65952012-08-13 16:09:45 -0700540
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400541 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+log/master");
542 assertThat(view.getBreadcrumbs())
543 .containsExactly(
Dave Borowitz9de65952012-08-13 16:09:45 -0700544 breadcrumb("host", "/b/?format=HTML"),
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700545 breadcrumb("foo", "/b/foo/"),
546 breadcrumb("bar", "/b/foo/bar/"),
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400547 breadcrumb("master", "/b/foo/bar/+log/master"))
548 .inOrder();
Dave Borowitz9de65952012-08-13 16:09:45 -0700549 }
550
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700551 @Test
552 public void idLogWithoutPath() throws Exception {
Dave Borowitz9de65952012-08-13 16:09:45 -0700553 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400554 GitilesView view =
555 GitilesView.log()
556 .copyFrom(HOST)
557 .setRepositoryName("foo/bar")
558 .setRevision(Revision.unpeeled("abcd1234", id))
559 .build();
Dave Borowitz9de65952012-08-13 16:09:45 -0700560
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400561 assertThat(view.getServletPath()).isEqualTo("/b");
562 assertThat(view.getType()).isEqualTo(Type.LOG);
563 assertThat(view.getHostName()).isEqualTo("host");
564 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
565 assertThat(view.getRevision().getId()).isEqualTo(id);
566 assertThat(view.getRevision().getName()).isEqualTo("abcd1234");
567 assertThat(view.getOldRevision()).isEqualTo(Revision.NULL);
568 assertThat(view.getPathPart()).isNull();
569 assertThat(HOST.getParameters()).isEmpty();
Dave Borowitz9de65952012-08-13 16:09:45 -0700570
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400571 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+log/abcd1234");
572 assertThat(view.getBreadcrumbs())
573 .containsExactly(
Dave Borowitz9de65952012-08-13 16:09:45 -0700574 breadcrumb("host", "/b/?format=HTML"),
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700575 breadcrumb("foo", "/b/foo/"),
576 breadcrumb("bar", "/b/foo/bar/"),
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400577 breadcrumb("abcd1234", "/b/foo/bar/+log/abcd1234"))
578 .inOrder();
Dave Borowitz9de65952012-08-13 16:09:45 -0700579 }
580
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700581 @Test
582 public void logWithoutOldRevision() throws Exception {
Dave Borowitz9de65952012-08-13 16:09:45 -0700583 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400584 GitilesView view =
585 GitilesView.log()
586 .copyFrom(HOST)
587 .setRepositoryName("foo/bar")
588 .setRevision(Revision.unpeeled("master", id))
589 .setPathPart("/path/to/a/file")
590 .build();
Dave Borowitz9de65952012-08-13 16:09:45 -0700591
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400592 assertThat(view.getServletPath()).isEqualTo("/b");
593 assertThat(view.getType()).isEqualTo(Type.LOG);
594 assertThat(view.getHostName()).isEqualTo("host");
595 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
596 assertThat(view.getRevision().getId()).isEqualTo(id);
597 assertThat(view.getRevision().getName()).isEqualTo("master");
598 assertThat(view.getOldRevision()).isEqualTo(Revision.NULL);
599 assertThat(view.getPathPart()).isEqualTo("path/to/a/file");
600 assertThat(HOST.getParameters()).isEmpty();
Dave Borowitz9de65952012-08-13 16:09:45 -0700601
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400602 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+log/master/path/to/a/file");
603 assertThat(view.getBreadcrumbs())
604 .containsExactly(
Dave Borowitz9de65952012-08-13 16:09:45 -0700605 breadcrumb("host", "/b/?format=HTML"),
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700606 breadcrumb("foo", "/b/foo/"),
607 breadcrumb("bar", "/b/foo/bar/"),
Dave Borowitzd3e6dd72012-12-20 15:48:24 -0800608 breadcrumb("master", "/b/foo/bar/+log/master"),
Dave Borowitz9de65952012-08-13 16:09:45 -0700609 breadcrumb("path", "/b/foo/bar/+log/master/path"),
610 breadcrumb("to", "/b/foo/bar/+log/master/path/to"),
611 breadcrumb("a", "/b/foo/bar/+log/master/path/to/a"),
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400612 breadcrumb("file", "/b/foo/bar/+log/master/path/to/a/file"))
613 .inOrder();
Dave Borowitz9de65952012-08-13 16:09:45 -0700614 }
615
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700616 @Test
617 public void logWithOldRevision() throws Exception {
Dave Borowitz9de65952012-08-13 16:09:45 -0700618 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
619 ObjectId parent = ObjectId.fromString("efab5678efab5678efab5678efab5678efab5678");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400620 GitilesView view =
621 GitilesView.log()
622 .copyFrom(HOST)
623 .setRepositoryName("foo/bar")
624 .setRevision(Revision.unpeeled("master", id))
625 .setOldRevision(Revision.unpeeled("master^", parent))
626 .setPathPart("/path/to/a/file")
627 .build();
Dave Borowitz9de65952012-08-13 16:09:45 -0700628
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400629 assertThat(view.getServletPath()).isEqualTo("/b");
630 assertThat(view.getType()).isEqualTo(Type.LOG);
631 assertThat(view.getHostName()).isEqualTo("host");
632 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
633 assertThat(view.getRevision().getId()).isEqualTo(id);
634 assertThat(view.getRevision().getName()).isEqualTo("master");
635 assertThat(view.getOldRevision().getName()).isEqualTo("master^");
636 assertThat(view.getPathPart()).isEqualTo("path/to/a/file");
637 assertThat(HOST.getParameters()).isEmpty();
Dave Borowitz9de65952012-08-13 16:09:45 -0700638
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400639 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+log/master%5E..master/path/to/a/file");
640 assertThat(view.getBreadcrumbs())
641 .containsExactly(
Dave Borowitz9de65952012-08-13 16:09:45 -0700642 breadcrumb("host", "/b/?format=HTML"),
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700643 breadcrumb("foo", "/b/foo/"),
644 breadcrumb("bar", "/b/foo/bar/"),
Dave Borowitz9de65952012-08-13 16:09:45 -0700645 breadcrumb("master^..master", "/b/foo/bar/+log/master%5E..master"),
646 breadcrumb("path", "/b/foo/bar/+log/master%5E..master/path"),
647 breadcrumb("to", "/b/foo/bar/+log/master%5E..master/path/to"),
648 breadcrumb("a", "/b/foo/bar/+log/master%5E..master/path/to/a"),
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400649 breadcrumb("file", "/b/foo/bar/+log/master%5E..master/path/to/a/file"))
650 .inOrder();
Dave Borowitz9de65952012-08-13 16:09:45 -0700651 }
652
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700653 @Test
654 public void logWithNoRevision() throws Exception {
Dave Borowitzcf38c032016-05-02 11:06:23 -0400655 GitilesView view = GitilesView.log().copyFrom(HOST).setRepositoryName("foo/bar").build();
Dave Borowitz80334b22013-01-11 14:19:11 -0800656
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400657 assertThat(view.getServletPath()).isEqualTo("/b");
658 assertThat(view.getType()).isEqualTo(Type.LOG);
659 assertThat(view.getHostName()).isEqualTo("host");
660 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
661 assertThat(view.getRevision()).isEqualTo(Revision.NULL);
662 assertThat(view.getOldRevision()).isEqualTo(Revision.NULL);
663 assertThat(HOST.getParameters()).isEmpty();
Dave Borowitz80334b22013-01-11 14:19:11 -0800664
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400665 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+log");
666 assertThat(view.getBreadcrumbs())
667 .containsExactly(
Dave Borowitz80334b22013-01-11 14:19:11 -0800668 breadcrumb("host", "/b/?format=HTML"),
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700669 breadcrumb("foo", "/b/foo/"),
670 breadcrumb("bar", "/b/foo/bar/"),
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400671 breadcrumb("HEAD", "/b/foo/bar/+log"))
672 .inOrder();
Dave Borowitz80334b22013-01-11 14:19:11 -0800673 }
674
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700675 @Test
676 public void archiveWithNoPath() throws Exception {
Dave Borowitz5051e672013-11-11 11:09:40 -0800677 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400678 GitilesView view =
679 GitilesView.archive()
680 .copyFrom(HOST)
681 .setRepositoryName("foo/bar")
682 .setRevision(Revision.unpeeled("master", id))
683 .setExtension(".tar.bz2")
684 .build();
Dave Borowitz5051e672013-11-11 11:09:40 -0800685
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400686 assertThat(view.getServletPath()).isEqualTo("/b");
687 assertThat(view.getType()).isEqualTo(Type.ARCHIVE);
688 assertThat(view.getHostName()).isEqualTo("host");
689 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
690 assertThat(view.getRevision().getId()).isEqualTo(id);
691 assertThat(view.getRevision().getName()).isEqualTo("master");
692 assertThat(view.getOldRevision()).isEqualTo(Revision.NULL);
693 assertThat(view.getPathPart()).isNull();
694 assertThat(HOST.getParameters()).isEmpty();
695 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+archive/master.tar.bz2");
Dave Borowitz5051e672013-11-11 11:09:40 -0800696 }
697
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700698 @Test
699 public void archiveWithPath() throws Exception {
Dave Borowitz5051e672013-11-11 11:09:40 -0800700 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400701 GitilesView view =
702 GitilesView.archive()
703 .copyFrom(HOST)
704 .setRepositoryName("foo/bar")
705 .setRevision(Revision.unpeeled("master", id))
706 .setPathPart("/path/to/a/dir")
707 .setExtension(".tar.bz2")
708 .build();
Dave Borowitz5051e672013-11-11 11:09:40 -0800709
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400710 assertThat(view.getServletPath()).isEqualTo("/b");
711 assertThat(view.getType()).isEqualTo(Type.ARCHIVE);
712 assertThat(view.getHostName()).isEqualTo("host");
713 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
714 assertThat(view.getRevision().getId()).isEqualTo(id);
715 assertThat(view.getRevision().getName()).isEqualTo("master");
716 assertThat(view.getOldRevision()).isEqualTo(Revision.NULL);
717 assertThat(view.getPathPart()).isEqualTo("path/to/a/dir");
718 assertThat(HOST.getParameters()).isEmpty();
719 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+archive/master/path/to/a/dir.tar.bz2");
Dave Borowitz5051e672013-11-11 11:09:40 -0800720 }
721
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700722 @Test
723 public void blame() throws Exception {
Dave Borowitz68c7a9b2014-01-28 12:13:21 -0800724 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400725 GitilesView view =
726 GitilesView.blame()
727 .copyFrom(HOST)
728 .setRepositoryName("foo/bar")
729 .setRevision(Revision.unpeeled("master", id))
730 .setPathPart("/dir/file")
731 .build();
Dave Borowitz68c7a9b2014-01-28 12:13:21 -0800732
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400733 assertThat(view.getServletPath()).isEqualTo("/b");
734 assertThat(view.getType()).isEqualTo(Type.BLAME);
735 assertThat(view.getHostName()).isEqualTo("host");
736 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
737 assertThat(view.getRevision().getId()).isEqualTo(id);
738 assertThat(view.getRevision().getName()).isEqualTo("master");
739 assertThat(view.getOldRevision()).isEqualTo(Revision.NULL);
740 assertThat(view.getPathPart()).isEqualTo("dir/file");
741 assertThat(HOST.getParameters()).isEmpty();
742 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+blame/master/dir/file");
743 assertThat(view.getBreadcrumbs())
744 .containsExactly(
Dave Borowitz68c7a9b2014-01-28 12:13:21 -0800745 breadcrumb("host", "/b/?format=HTML"),
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700746 breadcrumb("foo", "/b/foo/"),
747 breadcrumb("bar", "/b/foo/bar/"),
Dave Borowitz68c7a9b2014-01-28 12:13:21 -0800748 breadcrumb("master", "/b/foo/bar/+/master"),
749 breadcrumb(".", "/b/foo/bar/+/master/"),
750 breadcrumb("dir", "/b/foo/bar/+/master/dir"),
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400751 breadcrumb("file", "/b/foo/bar/+blame/master/dir/file"))
752 .inOrder();
Dave Borowitz68c7a9b2014-01-28 12:13:21 -0800753 }
754
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700755 @Test
756 public void escaping() throws Exception {
Dave Borowitz9de65952012-08-13 16:09:45 -0700757 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
758 ObjectId parent = ObjectId.fromString("efab5678efab5678efab5678efab5678efab5678");
759 // Some of these values are not valid for Git, but check them anyway.
Dave Borowitzcf38c032016-05-02 11:06:23 -0400760 GitilesView view =
761 GitilesView.log()
762 .copyFrom(HOST)
763 .setRepositoryName("foo?bar")
764 .setRevision(Revision.unpeeled("ba/d#name", id))
765 .setOldRevision(Revision.unpeeled("other\"na/me", parent))
766 .setPathPart("we ird/pa'th/name")
767 .putParam("k e y", "val/ue")
768 .setAnchor("anc#hor")
769 .build();
Dave Borowitz9de65952012-08-13 16:09:45 -0700770
771 // Fields returned by getters are not escaped.
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400772 assertThat(view.getServletPath()).isEqualTo("/b");
773 assertThat(view.getType()).isEqualTo(Type.LOG);
774 assertThat(view.getHostName()).isEqualTo("host");
775 assertThat(view.getRepositoryName()).isEqualTo("foo?bar");
776 assertThat(view.getRevision().getId()).isEqualTo(id);
777 assertThat(view.getRevision().getName()).isEqualTo("ba/d#name");
778 assertThat(view.getOldRevision().getId()).isEqualTo(parent);
779 assertThat(view.getOldRevision().getName()).isEqualTo("other\"na/me");
780 assertThat(view.getPathPart()).isEqualTo("we ird/pa'th/name");
781 assertThat(view.getParameters())
Dave Borowitzcf38c032016-05-02 11:06:23 -0400782 .isEqualTo(ImmutableListMultimap.<String, String>of("k e y", "val/ue"));
Dave Borowitz9de65952012-08-13 16:09:45 -0700783
Dave Borowitz58a96f22014-05-06 14:29:24 -0700784 String qs = "?k+e+y=val%2Fue";
Dave Borowitzcf38c032016-05-02 11:06:23 -0400785 assertThat(view.toUrl())
786 .isEqualTo(
787 "/b/foo%3Fbar/+log/other%22na/me..ba/d%23name/we%20ird/pa%27th/name"
788 + qs
789 + "#anc%23hor");
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400790 assertThat(view.getBreadcrumbs())
791 .containsExactly(
Dave Borowitz9de65952012-08-13 16:09:45 -0700792 // Names are not escaped (auto-escaped by Soy) but values are.
793 breadcrumb("host", "/b/?format=HTML"),
794 breadcrumb("foo?bar", "/b/foo%3Fbar/"),
Dave Borowitzcf38c032016-05-02 11:06:23 -0400795 breadcrumb(
796 "other\"na/me..ba/d#name", "/b/foo%3Fbar/+log/other%22na/me..ba/d%23name" + qs),
797 breadcrumb("we ird", "/b/foo%3Fbar/+log/other%22na/me..ba/d%23name/we%20ird" + qs),
798 breadcrumb(
799 "pa'th", "/b/foo%3Fbar/+log/other%22na/me..ba/d%23name/we%20ird/pa%27th" + qs),
800 breadcrumb(
801 "name", "/b/foo%3Fbar/+log/other%22na/me..ba/d%23name/we%20ird/pa%27th/name" + qs))
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400802 .inOrder();
Dave Borowitz9de65952012-08-13 16:09:45 -0700803 }
804
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700805 @Test
806 public void breadcrumbsHasSingleTree() throws Exception {
Dave Borowitz4e8ffd82012-12-26 16:01:06 -0800807 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400808 GitilesView view =
809 GitilesView.path()
810 .copyFrom(HOST)
811 .setRepositoryName("foo/bar")
812 .setRevision(Revision.unpeeled("master", id))
813 .setPathPart("/path/to/a/file")
814 .build();
Dave Borowitz4e8ffd82012-12-26 16:01:06 -0800815
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400816 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+/master/path/to/a/file");
817 assertThat(view.getBreadcrumbs(ImmutableList.of(false, true, true)))
818 .containsExactly(
Dave Borowitz4e8ffd82012-12-26 16:01:06 -0800819 breadcrumb("host", "/b/?format=HTML"),
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700820 breadcrumb("foo", "/b/foo/"),
821 breadcrumb("bar", "/b/foo/bar/"),
Dave Borowitz4e8ffd82012-12-26 16:01:06 -0800822 breadcrumb("master", "/b/foo/bar/+/master"),
823 breadcrumb(".", "/b/foo/bar/+/master/"),
824 breadcrumb("path", "/b/foo/bar/+/master/path"),
825 breadcrumb("to", "/b/foo/bar/+/master/path/to?autodive=0"),
826 breadcrumb("a", "/b/foo/bar/+/master/path/to/a?autodive=0"),
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400827 breadcrumb("file", "/b/foo/bar/+/master/path/to/a/file"))
828 .inOrder();
829 assertThat(view.getBreadcrumbs(ImmutableList.of(true, false, false)))
830 .containsExactly(
Dave Borowitz4e8ffd82012-12-26 16:01:06 -0800831 breadcrumb("host", "/b/?format=HTML"),
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700832 breadcrumb("foo", "/b/foo/"),
833 breadcrumb("bar", "/b/foo/bar/"),
Dave Borowitz4e8ffd82012-12-26 16:01:06 -0800834 breadcrumb("master", "/b/foo/bar/+/master"),
835 breadcrumb(".", "/b/foo/bar/+/master/"),
836 breadcrumb("path", "/b/foo/bar/+/master/path?autodive=0"),
837 breadcrumb("to", "/b/foo/bar/+/master/path/to"),
838 breadcrumb("a", "/b/foo/bar/+/master/path/to/a"),
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400839 breadcrumb("file", "/b/foo/bar/+/master/path/to/a/file"))
840 .inOrder();
Dave Borowitz4e8ffd82012-12-26 16:01:06 -0800841 }
842
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700843 @Test
844 public void breadcrumbsHasSingleTreeRootPath() throws Exception {
Dave Borowitz44a15842013-01-07 09:39:05 -0800845 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400846 GitilesView view =
847 GitilesView.path()
848 .copyFrom(HOST)
849 .setRepositoryName("foo/bar")
850 .setRevision(Revision.unpeeled("master", id))
851 .setPathPart("")
852 .build();
Dave Borowitz44a15842013-01-07 09:39:05 -0800853
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400854 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+/master/");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400855 assertThat(view.getBreadcrumbs(ImmutableList.<Boolean>of()))
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400856 .containsExactly(
Dave Borowitz44a15842013-01-07 09:39:05 -0800857 breadcrumb("host", "/b/?format=HTML"),
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700858 breadcrumb("foo", "/b/foo/"),
859 breadcrumb("bar", "/b/foo/bar/"),
Dave Borowitz44a15842013-01-07 09:39:05 -0800860 breadcrumb("master", "/b/foo/bar/+/master"),
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400861 breadcrumb(".", "/b/foo/bar/+/master/"))
862 .inOrder();
Dave Borowitz44a15842013-01-07 09:39:05 -0800863 }
864
Dave Borowitz9de65952012-08-13 16:09:45 -0700865 private static ImmutableMap<String, String> breadcrumb(String text, String url) {
866 return ImmutableMap.of("text", text, "url", url);
867 }
868}