blob: 7cce3ef5913b76940d5d133da4c528d93935bcd9 [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;
Dave Borowitzd40bdf12014-04-19 19:33:56 -070023import org.eclipse.jgit.lib.ObjectId;
24import org.junit.Test;
Dave Borowitz3dc854f2014-11-04 16:19:37 -080025import org.junit.runner.RunWith;
26import org.junit.runners.JUnit4;
Dave Borowitzd40bdf12014-04-19 19:33:56 -070027
Dave Borowitz9de65952012-08-13 16:09:45 -070028/** Tests for Gitiles views. */
Dave Borowitz3dc854f2014-11-04 16:19:37 -080029@RunWith(JUnit4.class)
Dave Borowitzd40bdf12014-04-19 19:33:56 -070030public class GitilesViewTest {
Dave Borowitzcf38c032016-05-02 11:06:23 -040031 private static final GitilesView HOST =
32 GitilesView.hostIndex().setServletPath("/b").setHostName("host").build();
Dave Borowitz9de65952012-08-13 16:09:45 -070033
Dave Borowitzd40bdf12014-04-19 19:33:56 -070034 @Test
35 public void emptyServletPath() throws Exception {
Dave Borowitzcf38c032016-05-02 11:06:23 -040036 GitilesView view = GitilesView.hostIndex().setServletPath("").setHostName("host").build();
Dave Borowitzfde41fd2015-09-16 15:14:38 -040037 assertThat(view.getServletPath()).isEqualTo("");
38 assertThat(view.getType()).isEqualTo(Type.HOST_INDEX);
39 assertThat(view.getHostName()).isEqualTo("host");
40 assertThat(view.getRepositoryName()).isNull();
41 assertThat(view.getRevision()).isEqualTo(Revision.NULL);
42 assertThat(view.getPathPart()).isNull();
43 assertThat(HOST.getParameters()).isEmpty();
Dave Borowitz9de65952012-08-13 16:09:45 -070044
Dave Borowitzfde41fd2015-09-16 15:14:38 -040045 assertThat(view.toUrl()).isEqualTo("/?format=HTML");
Dave Borowitzcf38c032016-05-02 11:06:23 -040046 assertThat(view.getBreadcrumbs()).containsExactly(breadcrumb("host", "/?format=HTML"));
Dave Borowitz9de65952012-08-13 16:09:45 -070047 }
48
Dave Borowitzd40bdf12014-04-19 19:33:56 -070049 @Test
50 public void hostIndex() throws Exception {
Dave Borowitzfde41fd2015-09-16 15:14:38 -040051 assertThat(HOST.getServletPath()).isEqualTo("/b");
52 assertThat(HOST.getType()).isEqualTo(Type.HOST_INDEX);
53 assertThat(HOST.getHostName()).isEqualTo("host");
54 assertThat(HOST.getRepositoryName()).isNull();
55 assertThat(HOST.getRevision()).isEqualTo(Revision.NULL);
56 assertThat(HOST.getPathPart()).isNull();
57 assertThat(HOST.getParameters()).isEmpty();
Dave Borowitz9de65952012-08-13 16:09:45 -070058
Dave Borowitzfde41fd2015-09-16 15:14:38 -040059 assertThat(HOST.toUrl()).isEqualTo("/b/?format=HTML");
Dave Borowitzcf38c032016-05-02 11:06:23 -040060 assertThat(HOST.getBreadcrumbs()).containsExactly(breadcrumb("host", "/b/?format=HTML"));
Dave Borowitz9de65952012-08-13 16:09:45 -070061 }
62
Dave Borowitzd40bdf12014-04-19 19:33:56 -070063 @Test
Shawn Pearcec709c4c2015-08-28 15:30:42 -070064 public void hostIndexOneComponentPrefix() throws Exception {
Dave Borowitzcf38c032016-05-02 11:06:23 -040065 GitilesView view = GitilesView.hostIndex().copyFrom(HOST).setRepositoryPrefix("foo").build();
Shawn Pearcec709c4c2015-08-28 15:30:42 -070066
Dave Borowitzfde41fd2015-09-16 15:14:38 -040067 assertThat(view.toUrl()).isEqualTo("/b/foo/");
68 assertThat(view.getBreadcrumbs())
Dave Borowitzcf38c032016-05-02 11:06:23 -040069 .containsExactly(breadcrumb("host", "/b/?format=HTML"), breadcrumb("foo", "/b/foo/"))
Dave Borowitzfde41fd2015-09-16 15:14:38 -040070 .inOrder();
Shawn Pearcec709c4c2015-08-28 15:30:42 -070071 }
72
73 @Test
74 public void hostIndexTwoComponentPrefix() throws Exception {
Dave Borowitzcf38c032016-05-02 11:06:23 -040075 GitilesView view =
76 GitilesView.hostIndex().copyFrom(HOST).setRepositoryPrefix("foo/bar").build();
Shawn Pearcec709c4c2015-08-28 15:30:42 -070077
Dave Borowitzfde41fd2015-09-16 15:14:38 -040078 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/");
79 assertThat(view.getBreadcrumbs())
80 .containsExactly(
81 breadcrumb("host", "/b/?format=HTML"),
82 breadcrumb("foo", "/b/foo/"),
83 breadcrumb("bar", "/b/foo/bar/"))
84 .inOrder();
Shawn Pearcec709c4c2015-08-28 15:30:42 -070085 }
86
87 @Test
Dave Borowitzd40bdf12014-04-19 19:33:56 -070088 public void queryParams() throws Exception {
Dave Borowitzcf38c032016-05-02 11:06:23 -040089 GitilesView view =
90 GitilesView.log()
91 .copyFrom(HOST)
92 .setRepositoryName("repo")
93 .setRevision(Revision.named("master"))
94 .putParam("foo", "foovalue")
95 .putParam("bar", "barvalue")
96 .build();
Dave Borowitz9de65952012-08-13 16:09:45 -070097
Dave Borowitzfde41fd2015-09-16 15:14:38 -040098 assertThat(view.getServletPath()).isEqualTo("/b");
99 assertThat(view.getType()).isEqualTo(Type.LOG);
100 assertThat(view.getHostName()).isEqualTo("host");
101 assertThat(view.getRepositoryName()).isEqualTo("repo");
102 assertThat(view.getRevision()).isEqualTo(Revision.named("master"));
103 assertThat(view.getPathPart()).isNull();
Dave Borowitzcf38c032016-05-02 11:06:23 -0400104 assertThat(view.getParameters())
105 .containsExactlyEntriesIn(
106 ImmutableListMultimap.of(
107 "foo", "foovalue",
108 "bar", "barvalue"));
Dave Borowitz9de65952012-08-13 16:09:45 -0700109
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400110 assertThat(view.toUrl()).isEqualTo("/b/repo/+log/master?foo=foovalue&bar=barvalue");
111 assertThat(view.getBreadcrumbs())
112 .containsExactly(
Dave Borowitz58a96f22014-05-06 14:29:24 -0700113 breadcrumb("host", "/b/?format=HTML"),
114 breadcrumb("repo", "/b/repo/"),
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400115 breadcrumb("master", "/b/repo/+log/master?foo=foovalue&bar=barvalue"))
116 .inOrder();
Dave Borowitz9de65952012-08-13 16:09:45 -0700117 }
118
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700119 @Test
Dave Borowitz58a96f22014-05-06 14:29:24 -0700120 public void queryParamsCopiedOnlyOnSameType() throws Exception {
Dave Borowitzcf38c032016-05-02 11:06:23 -0400121 GitilesView view =
122 GitilesView.repositoryIndex()
123 .copyFrom(HOST)
124 .setRepositoryName("repo")
125 .putParam("foo", "foovalue")
126 .putParam("bar", "barvalue")
127 .build();
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400128 assertThat(view.getParameters()).isNotEmpty();
129 assertThat(GitilesView.repositoryIndex().copyFrom(view).build().getParameters())
130 .isEqualTo(view.getParameters());
131 assertThat(GitilesView.hostIndex().copyFrom(view).build().getParameters()).isEmpty();
Dave Borowitz9de65952012-08-13 16:09:45 -0700132 }
133
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700134 @Test
135 public void repositoryIndex() throws Exception {
Dave Borowitzcf38c032016-05-02 11:06:23 -0400136 GitilesView view =
137 GitilesView.repositoryIndex().copyFrom(HOST).setRepositoryName("foo/bar").build();
Dave Borowitz9de65952012-08-13 16:09:45 -0700138
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400139 assertThat(view.getServletPath()).isEqualTo("/b");
140 assertThat(view.getType()).isEqualTo(Type.REPOSITORY_INDEX);
141 assertThat(view.getHostName()).isEqualTo("host");
142 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
143 assertThat(view.getRevision()).isEqualTo(Revision.NULL);
144 assertThat(view.getPathPart()).isNull();
145 assertThat(HOST.getParameters()).isEmpty();
Dave Borowitz9de65952012-08-13 16:09:45 -0700146
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400147 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/");
148 assertThat(view.getBreadcrumbs())
149 .containsExactly(
Dave Borowitz9de65952012-08-13 16:09:45 -0700150 breadcrumb("host", "/b/?format=HTML"),
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700151 breadcrumb("foo", "/b/foo/"),
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400152 breadcrumb("bar", "/b/foo/bar/"))
153 .inOrder();
Dave Borowitz9de65952012-08-13 16:09:45 -0700154 }
155
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700156 @Test
157 public void refs() throws Exception {
Dave Borowitzcf38c032016-05-02 11:06:23 -0400158 GitilesView view = GitilesView.refs().copyFrom(HOST).setRepositoryName("foo/bar").build();
Dave Borowitz209d0aa2012-12-28 14:28:53 -0800159
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400160 assertThat(view.getServletPath()).isEqualTo("/b");
161 assertThat(view.getType()).isEqualTo(Type.REFS);
162 assertThat(view.getHostName()).isEqualTo("host");
163 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
164 assertThat(view.getRevision()).isEqualTo(Revision.NULL);
165 assertThat(view.getPathPart()).isNull();
166 assertThat(HOST.getParameters()).isEmpty();
Dave Borowitz209d0aa2012-12-28 14:28:53 -0800167
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400168 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+refs");
169 assertThat(view.getBreadcrumbs())
170 .containsExactly(
Dave Borowitz209d0aa2012-12-28 14:28:53 -0800171 breadcrumb("host", "/b/?format=HTML"),
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700172 breadcrumb("foo", "/b/foo/"),
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400173 breadcrumb("bar", "/b/foo/bar/"))
174 .inOrder();
Dave Borowitz209d0aa2012-12-28 14:28:53 -0800175 }
176
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700177 @Test
178 public void refWithRevision() throws Exception {
Dave Borowitz9de65952012-08-13 16:09:45 -0700179 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400180 GitilesView view =
181 GitilesView.revision()
182 .copyFrom(HOST)
183 .setRepositoryName("foo/bar")
184 .setRevision(Revision.unpeeled("master", id))
185 .build();
Dave Borowitz9de65952012-08-13 16:09:45 -0700186
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400187 assertThat(view.getServletPath()).isEqualTo("/b");
188 assertThat(view.getType()).isEqualTo(Type.REVISION);
189 assertThat(view.getHostName()).isEqualTo("host");
190 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
191 assertThat(view.getRevision().getId()).isEqualTo(id);
192 assertThat(view.getRevision().getName()).isEqualTo("master");
193 assertThat(view.getPathPart()).isNull();
194 assertThat(HOST.getParameters()).isEmpty();
Dave Borowitz9de65952012-08-13 16:09:45 -0700195
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400196 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+/master");
197 assertThat(view.getBreadcrumbs())
198 .containsExactly(
Dave Borowitz9de65952012-08-13 16:09:45 -0700199 breadcrumb("host", "/b/?format=HTML"),
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700200 breadcrumb("foo", "/b/foo/"),
201 breadcrumb("bar", "/b/foo/bar/"),
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400202 breadcrumb("master", "/b/foo/bar/+/master"))
203 .inOrder();
Dave Borowitz9de65952012-08-13 16:09:45 -0700204 }
205
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700206 @Test
207 public void describe() throws Exception {
Dave Borowitzcf38c032016-05-02 11:06:23 -0400208 GitilesView view =
209 GitilesView.describe()
210 .copyFrom(HOST)
211 .setRepositoryName("foo/bar")
212 .setPathPart("deadbeef")
213 .build();
Dave Borowitzba9c1182013-03-13 14:16:43 -0700214
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400215 assertThat(view.getServletPath()).isEqualTo("/b");
216 assertThat(view.getType()).isEqualTo(Type.DESCRIBE);
217 assertThat(view.getHostName()).isEqualTo("host");
218 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
219 assertThat(view.getRevision()).isEqualTo(Revision.NULL);
220 assertThat(view.getPathPart()).isEqualTo("deadbeef");
221 assertThat(HOST.getParameters()).isEmpty();
Dave Borowitzba9c1182013-03-13 14:16:43 -0700222 }
223
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700224 @Test
225 public void noPathComponents() throws Exception {
Dave Borowitz9de65952012-08-13 16:09:45 -0700226 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400227 GitilesView view =
228 GitilesView.path()
229 .copyFrom(HOST)
230 .setRepositoryName("foo/bar")
231 .setRevision(Revision.unpeeled("master", id))
232 .setPathPart("/")
233 .build();
Dave Borowitz9de65952012-08-13 16:09:45 -0700234
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400235 assertThat(view.getServletPath()).isEqualTo("/b");
236 assertThat(view.getType()).isEqualTo(Type.PATH);
237 assertThat(view.getHostName()).isEqualTo("host");
238 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
239 assertThat(view.getRevision().getId()).isEqualTo(id);
240 assertThat(view.getRevision().getName()).isEqualTo("master");
241 assertThat(view.getPathPart()).isEqualTo("");
242 assertThat(HOST.getParameters()).isEmpty();
Dave Borowitz9de65952012-08-13 16:09:45 -0700243
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400244 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+/master/");
245 assertThat(view.getBreadcrumbs())
246 .containsExactly(
Dave Borowitz9de65952012-08-13 16:09:45 -0700247 breadcrumb("host", "/b/?format=HTML"),
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700248 breadcrumb("foo", "/b/foo/"),
249 breadcrumb("bar", "/b/foo/bar/"),
Dave Borowitzd3e6dd72012-12-20 15:48:24 -0800250 breadcrumb("master", "/b/foo/bar/+/master"),
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400251 breadcrumb(".", "/b/foo/bar/+/master/"))
252 .inOrder();
Dave Borowitz9de65952012-08-13 16:09:45 -0700253 }
254
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700255 @Test
256 public void onePathComponent() throws Exception {
Dave Borowitz9de65952012-08-13 16:09:45 -0700257 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400258 GitilesView view =
259 GitilesView.path()
260 .copyFrom(HOST)
261 .setRepositoryName("foo/bar")
262 .setRevision(Revision.unpeeled("master", id))
263 .setPathPart("/file")
264 .build();
Dave Borowitz9de65952012-08-13 16:09:45 -0700265
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400266 assertThat(view.getServletPath()).isEqualTo("/b");
267 assertThat(view.getType()).isEqualTo(Type.PATH);
268 assertThat(view.getHostName()).isEqualTo("host");
269 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
270 assertThat(view.getRevision().getId()).isEqualTo(id);
271 assertThat(view.getRevision().getName()).isEqualTo("master");
272 assertThat(view.getPathPart()).isEqualTo("file");
273 assertThat(HOST.getParameters()).isEmpty();
Dave Borowitz9de65952012-08-13 16:09:45 -0700274
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400275 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+/master/file");
276 assertThat(view.getBreadcrumbs())
277 .containsExactly(
Dave Borowitz9de65952012-08-13 16:09:45 -0700278 breadcrumb("host", "/b/?format=HTML"),
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700279 breadcrumb("foo", "/b/foo/"),
280 breadcrumb("bar", "/b/foo/bar/"),
Dave Borowitzd3e6dd72012-12-20 15:48:24 -0800281 breadcrumb("master", "/b/foo/bar/+/master"),
Dave Borowitz9de65952012-08-13 16:09:45 -0700282 breadcrumb(".", "/b/foo/bar/+/master/"),
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400283 breadcrumb("file", "/b/foo/bar/+/master/file"))
284 .inOrder();
Dave Borowitz9de65952012-08-13 16:09:45 -0700285 }
286
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700287 @Test
Shawn Pearce353ba2f2015-02-12 10:22:37 -0800288 public void oneDocFileAuto() throws Exception {
289 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400290 GitilesView view =
291 GitilesView.doc()
292 .copyFrom(HOST)
293 .setRepositoryName("foo/bar")
294 .setRevision(Revision.unpeeled("master", id))
295 .setPathPart("/README.md")
296 .build();
Shawn Pearce353ba2f2015-02-12 10:22:37 -0800297
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400298 assertThat(view.getServletPath()).isEqualTo("/b");
299 assertThat(view.getType()).isEqualTo(Type.DOC);
300 assertThat(view.getHostName()).isEqualTo("host");
301 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
302 assertThat(view.getRevision().getId()).isEqualTo(id);
303 assertThat(view.getRevision().getName()).isEqualTo("master");
304 assertThat(view.getPathPart()).isEqualTo("README.md");
305 assertThat(HOST.getParameters()).isEmpty();
306 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+/master/README.md");
Shawn Pearce353ba2f2015-02-12 10:22:37 -0800307 }
308
309 @Test
310 public void oneDocTree() throws Exception {
311 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400312 GitilesView view =
313 GitilesView.doc()
314 .copyFrom(HOST)
315 .setRepositoryName("foo/bar")
316 .setRevision(Revision.unpeeled("master", id))
317 .setPathPart("/docs/")
318 .build();
Shawn Pearce353ba2f2015-02-12 10:22:37 -0800319
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400320 assertThat(view.getServletPath()).isEqualTo("/b");
321 assertThat(view.getType()).isEqualTo(Type.DOC);
322 assertThat(view.getHostName()).isEqualTo("host");
323 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
324 assertThat(view.getRevision().getId()).isEqualTo(id);
325 assertThat(view.getRevision().getName()).isEqualTo("master");
326 assertThat(view.getPathPart()).isEqualTo("docs");
327 assertThat(HOST.getParameters()).isEmpty();
328 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+doc/master/docs");
Shawn Pearce353ba2f2015-02-12 10:22:37 -0800329 }
330
331 @Test
332 public void showMarkdown() throws Exception {
333 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400334 GitilesView view =
335 GitilesView.show()
336 .copyFrom(HOST)
337 .setRepositoryName("foo/bar")
338 .setRevision(Revision.unpeeled("master", id))
339 .setPathPart("/README.md")
340 .build();
Shawn Pearce353ba2f2015-02-12 10:22:37 -0800341
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400342 assertThat(view.getServletPath()).isEqualTo("/b");
343 assertThat(view.getType()).isEqualTo(Type.SHOW);
344 assertThat(view.getHostName()).isEqualTo("host");
345 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
346 assertThat(view.getRevision().getId()).isEqualTo(id);
347 assertThat(view.getRevision().getName()).isEqualTo("master");
348 assertThat(view.getPathPart()).isEqualTo("README.md");
349 assertThat(HOST.getParameters()).isEmpty();
350 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+show/master/README.md");
Shawn Pearce353ba2f2015-02-12 10:22:37 -0800351 }
352
353 @Test
Shawn Pearce68311c72015-06-09 17:01:34 -0700354 public void rootedDoc() throws Exception {
355 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400356 GitilesView view =
357 GitilesView.rootedDoc()
358 .copyFrom(HOST)
359 .setRevision(Revision.unpeeled("master", id))
360 .setPathPart("/docs/")
361 .build();
Shawn Pearce68311c72015-06-09 17:01:34 -0700362
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400363 assertThat(view.getServletPath()).isEqualTo("/b");
364 assertThat(view.getType()).isEqualTo(Type.ROOTED_DOC);
365 assertThat(view.getHostName()).isEqualTo("host");
366 assertThat(view.getRevision().getId()).isEqualTo(id);
367 assertThat(view.getRevision().getName()).isEqualTo("master");
368 assertThat(view.getPathPart()).isEqualTo("docs");
369 assertThat(HOST.getParameters()).isEmpty();
370 assertThat(view.toUrl()).isEqualTo("/b/docs");
Shawn Pearce68311c72015-06-09 17:01:34 -0700371 }
372
373 @Test
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700374 public void multiplePathComponents() throws Exception {
Dave Borowitz9de65952012-08-13 16:09:45 -0700375 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400376 GitilesView view =
377 GitilesView.path()
378 .copyFrom(HOST)
379 .setRepositoryName("foo/bar")
380 .setRevision(Revision.unpeeled("master", id))
381 .setPathPart("/path/to/a/file")
382 .build();
Dave Borowitz9de65952012-08-13 16:09:45 -0700383
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400384 assertThat(view.getServletPath()).isEqualTo("/b");
385 assertThat(view.getType()).isEqualTo(Type.PATH);
386 assertThat(view.getHostName()).isEqualTo("host");
387 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
388 assertThat(view.getRevision().getId()).isEqualTo(id);
389 assertThat(view.getRevision().getName()).isEqualTo("master");
390 assertThat(view.getPathPart()).isEqualTo("path/to/a/file");
391 assertThat(HOST.getParameters()).isEmpty();
Dave Borowitz9de65952012-08-13 16:09:45 -0700392
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400393 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+/master/path/to/a/file");
394 assertThat(view.getBreadcrumbs())
395 .containsExactly(
Dave Borowitz9de65952012-08-13 16:09:45 -0700396 breadcrumb("host", "/b/?format=HTML"),
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700397 breadcrumb("foo", "/b/foo/"),
398 breadcrumb("bar", "/b/foo/bar/"),
Dave Borowitzd3e6dd72012-12-20 15:48:24 -0800399 breadcrumb("master", "/b/foo/bar/+/master"),
Dave Borowitz9de65952012-08-13 16:09:45 -0700400 breadcrumb(".", "/b/foo/bar/+/master/"),
401 breadcrumb("path", "/b/foo/bar/+/master/path"),
402 breadcrumb("to", "/b/foo/bar/+/master/path/to"),
403 breadcrumb("a", "/b/foo/bar/+/master/path/to/a"),
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400404 breadcrumb("file", "/b/foo/bar/+/master/path/to/a/file"))
405 .inOrder();
Dave Borowitz9de65952012-08-13 16:09:45 -0700406 }
407
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700408 @Test
409 public void diffAgainstFirstParent() throws Exception {
Dave Borowitz9de65952012-08-13 16:09:45 -0700410 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
411 ObjectId parent = ObjectId.fromString("efab5678efab5678efab5678efab5678efab5678");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400412 GitilesView view =
413 GitilesView.diff()
414 .copyFrom(HOST)
415 .setRepositoryName("foo/bar")
416 .setRevision(Revision.unpeeled("master", id))
417 .setOldRevision(Revision.unpeeled("master^", parent))
418 .setPathPart("/path/to/a/file")
419 .build();
Dave Borowitz9de65952012-08-13 16:09:45 -0700420
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400421 assertThat(view.getServletPath()).isEqualTo("/b");
422 assertThat(view.getType()).isEqualTo(Type.DIFF);
423 assertThat(view.getHostName()).isEqualTo("host");
424 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
425 assertThat(view.getRevision().getId()).isEqualTo(id);
426 assertThat(view.getRevision().getName()).isEqualTo("master");
427 assertThat(view.getOldRevision().getName()).isEqualTo("master^");
428 assertThat(view.getPathPart()).isEqualTo("path/to/a/file");
429 assertThat(HOST.getParameters()).isEmpty();
Dave Borowitz9de65952012-08-13 16:09:45 -0700430
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400431 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+/master%5E%21/path/to/a/file");
432 assertThat(view.getBreadcrumbs())
433 .containsExactly(
Dave Borowitz9de65952012-08-13 16:09:45 -0700434 breadcrumb("host", "/b/?format=HTML"),
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700435 breadcrumb("foo", "/b/foo/"),
436 breadcrumb("bar", "/b/foo/bar/"),
Dave Borowitz9de65952012-08-13 16:09:45 -0700437 breadcrumb("master^!", "/b/foo/bar/+/master%5E%21/"),
438 breadcrumb(".", "/b/foo/bar/+/master%5E%21/"),
439 breadcrumb("path", "/b/foo/bar/+/master%5E%21/path"),
440 breadcrumb("to", "/b/foo/bar/+/master%5E%21/path/to"),
441 breadcrumb("a", "/b/foo/bar/+/master%5E%21/path/to/a"),
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400442 breadcrumb("file", "/b/foo/bar/+/master%5E%21/path/to/a/file"))
443 .inOrder();
Dave Borowitz9de65952012-08-13 16:09:45 -0700444 }
445
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700446 @Test
447 public void diffAgainstEmptyRevision() throws Exception {
Dave Borowitz9de65952012-08-13 16:09:45 -0700448 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400449 GitilesView view =
450 GitilesView.diff()
451 .copyFrom(HOST)
452 .setRepositoryName("foo/bar")
453 .setRevision(Revision.unpeeled("master", id))
454 .setPathPart("/path/to/a/file")
455 .build();
Dave Borowitz9de65952012-08-13 16:09:45 -0700456
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400457 assertThat(view.getServletPath()).isEqualTo("/b");
458 assertThat(view.getType()).isEqualTo(Type.DIFF);
459 assertThat(view.getHostName()).isEqualTo("host");
460 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
461 assertThat(view.getRevision().getId()).isEqualTo(id);
462 assertThat(view.getRevision().getName()).isEqualTo("master");
463 assertThat(view.getOldRevision()).isEqualTo(Revision.NULL);
464 assertThat(view.getPathPart()).isEqualTo("path/to/a/file");
465 assertThat(HOST.getParameters()).isEmpty();
Dave Borowitz9de65952012-08-13 16:09:45 -0700466
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400467 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+/master%5E%21/path/to/a/file");
468 assertThat(view.getBreadcrumbs())
469 .containsExactly(
Dave Borowitz9de65952012-08-13 16:09:45 -0700470 breadcrumb("host", "/b/?format=HTML"),
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700471 breadcrumb("foo", "/b/foo/"),
472 breadcrumb("bar", "/b/foo/bar/"),
Dave Borowitz9de65952012-08-13 16:09:45 -0700473 breadcrumb("master^!", "/b/foo/bar/+/master%5E%21/"),
474 breadcrumb(".", "/b/foo/bar/+/master%5E%21/"),
475 breadcrumb("path", "/b/foo/bar/+/master%5E%21/path"),
476 breadcrumb("to", "/b/foo/bar/+/master%5E%21/path/to"),
477 breadcrumb("a", "/b/foo/bar/+/master%5E%21/path/to/a"),
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400478 breadcrumb("file", "/b/foo/bar/+/master%5E%21/path/to/a/file"))
479 .inOrder();
Dave Borowitz9de65952012-08-13 16:09:45 -0700480 }
481
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700482 @Test
483 public void diffAgainstOther() throws Exception {
Dave Borowitz9de65952012-08-13 16:09:45 -0700484 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
485 ObjectId other = ObjectId.fromString("efab5678efab5678efab5678efab5678efab5678");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400486 GitilesView view =
487 GitilesView.diff()
488 .copyFrom(HOST)
489 .setRepositoryName("foo/bar")
490 .setRevision(Revision.unpeeled("master", id))
491 .setOldRevision(Revision.unpeeled("efab5678", other))
492 .setPathPart("/path/to/a/file")
493 .build();
Dave Borowitz9de65952012-08-13 16:09:45 -0700494
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400495 assertThat(view.getServletPath()).isEqualTo("/b");
496 assertThat(view.getType()).isEqualTo(Type.DIFF);
497 assertThat(view.getHostName()).isEqualTo("host");
498 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
499 assertThat(view.getRevision().getId()).isEqualTo(id);
500 assertThat(view.getRevision().getName()).isEqualTo("master");
501 assertThat(view.getOldRevision().getName()).isEqualTo("efab5678");
502 assertThat(view.getPathPart()).isEqualTo("path/to/a/file");
503 assertThat(HOST.getParameters()).isEmpty();
Dave Borowitz9de65952012-08-13 16:09:45 -0700504
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400505 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+/efab5678..master/path/to/a/file");
506 assertThat(view.getBreadcrumbs())
507 .containsExactly(
Dave Borowitz9de65952012-08-13 16:09:45 -0700508 breadcrumb("host", "/b/?format=HTML"),
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700509 breadcrumb("foo", "/b/foo/"),
510 breadcrumb("bar", "/b/foo/bar/"),
Dave Borowitz9de65952012-08-13 16:09:45 -0700511 breadcrumb("efab5678..master", "/b/foo/bar/+/efab5678..master/"),
512 breadcrumb(".", "/b/foo/bar/+/efab5678..master/"),
513 breadcrumb("path", "/b/foo/bar/+/efab5678..master/path"),
514 breadcrumb("to", "/b/foo/bar/+/efab5678..master/path/to"),
515 breadcrumb("a", "/b/foo/bar/+/efab5678..master/path/to/a"),
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400516 breadcrumb("file", "/b/foo/bar/+/efab5678..master/path/to/a/file"))
517 .inOrder();
Dave Borowitz9de65952012-08-13 16:09:45 -0700518 }
519
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700520 @Test
521 public void branchLogWithoutPath() throws Exception {
Dave Borowitz9de65952012-08-13 16:09:45 -0700522 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400523 GitilesView view =
524 GitilesView.log()
525 .copyFrom(HOST)
526 .setRepositoryName("foo/bar")
527 .setRevision(Revision.unpeeled("master", id))
528 .build();
Dave Borowitz9de65952012-08-13 16:09:45 -0700529
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400530 assertThat(view.getServletPath()).isEqualTo("/b");
531 assertThat(view.getType()).isEqualTo(Type.LOG);
532 assertThat(view.getHostName()).isEqualTo("host");
533 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
534 assertThat(view.getRevision().getId()).isEqualTo(id);
535 assertThat(view.getRevision().getName()).isEqualTo("master");
536 assertThat(view.getOldRevision()).isEqualTo(Revision.NULL);
537 assertThat(view.getPathPart()).isNull();
538 assertThat(HOST.getParameters()).isEmpty();
Dave Borowitz9de65952012-08-13 16:09:45 -0700539
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400540 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+log/master");
541 assertThat(view.getBreadcrumbs())
542 .containsExactly(
Dave Borowitz9de65952012-08-13 16:09:45 -0700543 breadcrumb("host", "/b/?format=HTML"),
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700544 breadcrumb("foo", "/b/foo/"),
545 breadcrumb("bar", "/b/foo/bar/"),
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400546 breadcrumb("master", "/b/foo/bar/+log/master"))
547 .inOrder();
Dave Borowitz9de65952012-08-13 16:09:45 -0700548 }
549
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700550 @Test
551 public void idLogWithoutPath() throws Exception {
Dave Borowitz9de65952012-08-13 16:09:45 -0700552 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400553 GitilesView view =
554 GitilesView.log()
555 .copyFrom(HOST)
556 .setRepositoryName("foo/bar")
557 .setRevision(Revision.unpeeled("abcd1234", id))
558 .build();
Dave Borowitz9de65952012-08-13 16:09:45 -0700559
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400560 assertThat(view.getServletPath()).isEqualTo("/b");
561 assertThat(view.getType()).isEqualTo(Type.LOG);
562 assertThat(view.getHostName()).isEqualTo("host");
563 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
564 assertThat(view.getRevision().getId()).isEqualTo(id);
565 assertThat(view.getRevision().getName()).isEqualTo("abcd1234");
566 assertThat(view.getOldRevision()).isEqualTo(Revision.NULL);
567 assertThat(view.getPathPart()).isNull();
568 assertThat(HOST.getParameters()).isEmpty();
Dave Borowitz9de65952012-08-13 16:09:45 -0700569
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400570 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+log/abcd1234");
571 assertThat(view.getBreadcrumbs())
572 .containsExactly(
Dave Borowitz9de65952012-08-13 16:09:45 -0700573 breadcrumb("host", "/b/?format=HTML"),
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700574 breadcrumb("foo", "/b/foo/"),
575 breadcrumb("bar", "/b/foo/bar/"),
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400576 breadcrumb("abcd1234", "/b/foo/bar/+log/abcd1234"))
577 .inOrder();
Dave Borowitz9de65952012-08-13 16:09:45 -0700578 }
579
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700580 @Test
581 public void logWithoutOldRevision() throws Exception {
Dave Borowitz9de65952012-08-13 16:09:45 -0700582 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400583 GitilesView view =
584 GitilesView.log()
585 .copyFrom(HOST)
586 .setRepositoryName("foo/bar")
587 .setRevision(Revision.unpeeled("master", id))
588 .setPathPart("/path/to/a/file")
589 .build();
Dave Borowitz9de65952012-08-13 16:09:45 -0700590
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400591 assertThat(view.getServletPath()).isEqualTo("/b");
592 assertThat(view.getType()).isEqualTo(Type.LOG);
593 assertThat(view.getHostName()).isEqualTo("host");
594 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
595 assertThat(view.getRevision().getId()).isEqualTo(id);
596 assertThat(view.getRevision().getName()).isEqualTo("master");
597 assertThat(view.getOldRevision()).isEqualTo(Revision.NULL);
598 assertThat(view.getPathPart()).isEqualTo("path/to/a/file");
599 assertThat(HOST.getParameters()).isEmpty();
Dave Borowitz9de65952012-08-13 16:09:45 -0700600
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400601 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+log/master/path/to/a/file");
602 assertThat(view.getBreadcrumbs())
603 .containsExactly(
Dave Borowitz9de65952012-08-13 16:09:45 -0700604 breadcrumb("host", "/b/?format=HTML"),
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700605 breadcrumb("foo", "/b/foo/"),
606 breadcrumb("bar", "/b/foo/bar/"),
Dave Borowitzd3e6dd72012-12-20 15:48:24 -0800607 breadcrumb("master", "/b/foo/bar/+log/master"),
Dave Borowitz9de65952012-08-13 16:09:45 -0700608 breadcrumb("path", "/b/foo/bar/+log/master/path"),
609 breadcrumb("to", "/b/foo/bar/+log/master/path/to"),
610 breadcrumb("a", "/b/foo/bar/+log/master/path/to/a"),
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400611 breadcrumb("file", "/b/foo/bar/+log/master/path/to/a/file"))
612 .inOrder();
Dave Borowitz9de65952012-08-13 16:09:45 -0700613 }
614
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700615 @Test
616 public void logWithOldRevision() throws Exception {
Dave Borowitz9de65952012-08-13 16:09:45 -0700617 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
618 ObjectId parent = ObjectId.fromString("efab5678efab5678efab5678efab5678efab5678");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400619 GitilesView view =
620 GitilesView.log()
621 .copyFrom(HOST)
622 .setRepositoryName("foo/bar")
623 .setRevision(Revision.unpeeled("master", id))
624 .setOldRevision(Revision.unpeeled("master^", parent))
625 .setPathPart("/path/to/a/file")
626 .build();
Dave Borowitz9de65952012-08-13 16:09:45 -0700627
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400628 assertThat(view.getServletPath()).isEqualTo("/b");
629 assertThat(view.getType()).isEqualTo(Type.LOG);
630 assertThat(view.getHostName()).isEqualTo("host");
631 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
632 assertThat(view.getRevision().getId()).isEqualTo(id);
633 assertThat(view.getRevision().getName()).isEqualTo("master");
634 assertThat(view.getOldRevision().getName()).isEqualTo("master^");
635 assertThat(view.getPathPart()).isEqualTo("path/to/a/file");
636 assertThat(HOST.getParameters()).isEmpty();
Dave Borowitz9de65952012-08-13 16:09:45 -0700637
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400638 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+log/master%5E..master/path/to/a/file");
639 assertThat(view.getBreadcrumbs())
640 .containsExactly(
Dave Borowitz9de65952012-08-13 16:09:45 -0700641 breadcrumb("host", "/b/?format=HTML"),
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700642 breadcrumb("foo", "/b/foo/"),
643 breadcrumb("bar", "/b/foo/bar/"),
Dave Borowitz9de65952012-08-13 16:09:45 -0700644 breadcrumb("master^..master", "/b/foo/bar/+log/master%5E..master"),
645 breadcrumb("path", "/b/foo/bar/+log/master%5E..master/path"),
646 breadcrumb("to", "/b/foo/bar/+log/master%5E..master/path/to"),
647 breadcrumb("a", "/b/foo/bar/+log/master%5E..master/path/to/a"),
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400648 breadcrumb("file", "/b/foo/bar/+log/master%5E..master/path/to/a/file"))
649 .inOrder();
Dave Borowitz9de65952012-08-13 16:09:45 -0700650 }
651
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700652 @Test
653 public void logWithNoRevision() throws Exception {
Dave Borowitzcf38c032016-05-02 11:06:23 -0400654 GitilesView view = GitilesView.log().copyFrom(HOST).setRepositoryName("foo/bar").build();
Dave Borowitz80334b22013-01-11 14:19:11 -0800655
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400656 assertThat(view.getServletPath()).isEqualTo("/b");
657 assertThat(view.getType()).isEqualTo(Type.LOG);
658 assertThat(view.getHostName()).isEqualTo("host");
659 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
660 assertThat(view.getRevision()).isEqualTo(Revision.NULL);
661 assertThat(view.getOldRevision()).isEqualTo(Revision.NULL);
662 assertThat(HOST.getParameters()).isEmpty();
Dave Borowitz80334b22013-01-11 14:19:11 -0800663
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400664 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+log");
665 assertThat(view.getBreadcrumbs())
666 .containsExactly(
Dave Borowitz80334b22013-01-11 14:19:11 -0800667 breadcrumb("host", "/b/?format=HTML"),
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700668 breadcrumb("foo", "/b/foo/"),
669 breadcrumb("bar", "/b/foo/bar/"),
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400670 breadcrumb("HEAD", "/b/foo/bar/+log"))
671 .inOrder();
Dave Borowitz80334b22013-01-11 14:19:11 -0800672 }
673
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700674 @Test
675 public void archiveWithNoPath() throws Exception {
Dave Borowitz5051e672013-11-11 11:09:40 -0800676 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400677 GitilesView view =
678 GitilesView.archive()
679 .copyFrom(HOST)
680 .setRepositoryName("foo/bar")
681 .setRevision(Revision.unpeeled("master", id))
682 .setExtension(".tar.bz2")
683 .build();
Dave Borowitz5051e672013-11-11 11:09:40 -0800684
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400685 assertThat(view.getServletPath()).isEqualTo("/b");
686 assertThat(view.getType()).isEqualTo(Type.ARCHIVE);
687 assertThat(view.getHostName()).isEqualTo("host");
688 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
689 assertThat(view.getRevision().getId()).isEqualTo(id);
690 assertThat(view.getRevision().getName()).isEqualTo("master");
691 assertThat(view.getOldRevision()).isEqualTo(Revision.NULL);
692 assertThat(view.getPathPart()).isNull();
693 assertThat(HOST.getParameters()).isEmpty();
694 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+archive/master.tar.bz2");
Dave Borowitz5051e672013-11-11 11:09:40 -0800695 }
696
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700697 @Test
698 public void archiveWithPath() throws Exception {
Dave Borowitz5051e672013-11-11 11:09:40 -0800699 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400700 GitilesView view =
701 GitilesView.archive()
702 .copyFrom(HOST)
703 .setRepositoryName("foo/bar")
704 .setRevision(Revision.unpeeled("master", id))
705 .setPathPart("/path/to/a/dir")
706 .setExtension(".tar.bz2")
707 .build();
Dave Borowitz5051e672013-11-11 11:09:40 -0800708
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400709 assertThat(view.getServletPath()).isEqualTo("/b");
710 assertThat(view.getType()).isEqualTo(Type.ARCHIVE);
711 assertThat(view.getHostName()).isEqualTo("host");
712 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
713 assertThat(view.getRevision().getId()).isEqualTo(id);
714 assertThat(view.getRevision().getName()).isEqualTo("master");
715 assertThat(view.getOldRevision()).isEqualTo(Revision.NULL);
716 assertThat(view.getPathPart()).isEqualTo("path/to/a/dir");
717 assertThat(HOST.getParameters()).isEmpty();
718 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+archive/master/path/to/a/dir.tar.bz2");
Dave Borowitz5051e672013-11-11 11:09:40 -0800719 }
720
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700721 @Test
722 public void blame() throws Exception {
Dave Borowitz68c7a9b2014-01-28 12:13:21 -0800723 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400724 GitilesView view =
725 GitilesView.blame()
726 .copyFrom(HOST)
727 .setRepositoryName("foo/bar")
728 .setRevision(Revision.unpeeled("master", id))
729 .setPathPart("/dir/file")
730 .build();
Dave Borowitz68c7a9b2014-01-28 12:13:21 -0800731
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400732 assertThat(view.getServletPath()).isEqualTo("/b");
733 assertThat(view.getType()).isEqualTo(Type.BLAME);
734 assertThat(view.getHostName()).isEqualTo("host");
735 assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
736 assertThat(view.getRevision().getId()).isEqualTo(id);
737 assertThat(view.getRevision().getName()).isEqualTo("master");
738 assertThat(view.getOldRevision()).isEqualTo(Revision.NULL);
739 assertThat(view.getPathPart()).isEqualTo("dir/file");
740 assertThat(HOST.getParameters()).isEmpty();
741 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+blame/master/dir/file");
742 assertThat(view.getBreadcrumbs())
743 .containsExactly(
Dave Borowitz68c7a9b2014-01-28 12:13:21 -0800744 breadcrumb("host", "/b/?format=HTML"),
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700745 breadcrumb("foo", "/b/foo/"),
746 breadcrumb("bar", "/b/foo/bar/"),
Dave Borowitz68c7a9b2014-01-28 12:13:21 -0800747 breadcrumb("master", "/b/foo/bar/+/master"),
748 breadcrumb(".", "/b/foo/bar/+/master/"),
749 breadcrumb("dir", "/b/foo/bar/+/master/dir"),
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400750 breadcrumb("file", "/b/foo/bar/+blame/master/dir/file"))
751 .inOrder();
Dave Borowitz68c7a9b2014-01-28 12:13:21 -0800752 }
753
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700754 @Test
755 public void escaping() throws Exception {
Dave Borowitz9de65952012-08-13 16:09:45 -0700756 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
757 ObjectId parent = ObjectId.fromString("efab5678efab5678efab5678efab5678efab5678");
758 // Some of these values are not valid for Git, but check them anyway.
Dave Borowitzcf38c032016-05-02 11:06:23 -0400759 GitilesView view =
760 GitilesView.log()
761 .copyFrom(HOST)
762 .setRepositoryName("foo?bar")
763 .setRevision(Revision.unpeeled("ba/d#name", id))
764 .setOldRevision(Revision.unpeeled("other\"na/me", parent))
765 .setPathPart("we ird/pa'th/name")
766 .putParam("k e y", "val/ue")
767 .setAnchor("anc#hor")
768 .build();
Dave Borowitz9de65952012-08-13 16:09:45 -0700769
770 // Fields returned by getters are not escaped.
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400771 assertThat(view.getServletPath()).isEqualTo("/b");
772 assertThat(view.getType()).isEqualTo(Type.LOG);
773 assertThat(view.getHostName()).isEqualTo("host");
774 assertThat(view.getRepositoryName()).isEqualTo("foo?bar");
775 assertThat(view.getRevision().getId()).isEqualTo(id);
776 assertThat(view.getRevision().getName()).isEqualTo("ba/d#name");
777 assertThat(view.getOldRevision().getId()).isEqualTo(parent);
778 assertThat(view.getOldRevision().getName()).isEqualTo("other\"na/me");
779 assertThat(view.getPathPart()).isEqualTo("we ird/pa'th/name");
780 assertThat(view.getParameters())
Dave Borowitzcf38c032016-05-02 11:06:23 -0400781 .isEqualTo(ImmutableListMultimap.<String, String>of("k e y", "val/ue"));
Dave Borowitz9de65952012-08-13 16:09:45 -0700782
Dave Borowitz58a96f22014-05-06 14:29:24 -0700783 String qs = "?k+e+y=val%2Fue";
Dave Borowitzcf38c032016-05-02 11:06:23 -0400784 assertThat(view.toUrl())
785 .isEqualTo(
786 "/b/foo%3Fbar/+log/other%22na/me..ba/d%23name/we%20ird/pa%27th/name"
787 + qs
788 + "#anc%23hor");
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400789 assertThat(view.getBreadcrumbs())
790 .containsExactly(
Dave Borowitz9de65952012-08-13 16:09:45 -0700791 // Names are not escaped (auto-escaped by Soy) but values are.
792 breadcrumb("host", "/b/?format=HTML"),
793 breadcrumb("foo?bar", "/b/foo%3Fbar/"),
Dave Borowitzcf38c032016-05-02 11:06:23 -0400794 breadcrumb(
795 "other\"na/me..ba/d#name", "/b/foo%3Fbar/+log/other%22na/me..ba/d%23name" + qs),
796 breadcrumb("we ird", "/b/foo%3Fbar/+log/other%22na/me..ba/d%23name/we%20ird" + qs),
797 breadcrumb(
798 "pa'th", "/b/foo%3Fbar/+log/other%22na/me..ba/d%23name/we%20ird/pa%27th" + qs),
799 breadcrumb(
800 "name", "/b/foo%3Fbar/+log/other%22na/me..ba/d%23name/we%20ird/pa%27th/name" + qs))
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400801 .inOrder();
Dave Borowitz9de65952012-08-13 16:09:45 -0700802 }
803
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700804 @Test
805 public void breadcrumbsHasSingleTree() throws Exception {
Dave Borowitz4e8ffd82012-12-26 16:01:06 -0800806 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400807 GitilesView view =
808 GitilesView.path()
809 .copyFrom(HOST)
810 .setRepositoryName("foo/bar")
811 .setRevision(Revision.unpeeled("master", id))
812 .setPathPart("/path/to/a/file")
813 .build();
Dave Borowitz4e8ffd82012-12-26 16:01:06 -0800814
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400815 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+/master/path/to/a/file");
816 assertThat(view.getBreadcrumbs(ImmutableList.of(false, true, true)))
817 .containsExactly(
Dave Borowitz4e8ffd82012-12-26 16:01:06 -0800818 breadcrumb("host", "/b/?format=HTML"),
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700819 breadcrumb("foo", "/b/foo/"),
820 breadcrumb("bar", "/b/foo/bar/"),
Dave Borowitz4e8ffd82012-12-26 16:01:06 -0800821 breadcrumb("master", "/b/foo/bar/+/master"),
822 breadcrumb(".", "/b/foo/bar/+/master/"),
823 breadcrumb("path", "/b/foo/bar/+/master/path"),
824 breadcrumb("to", "/b/foo/bar/+/master/path/to?autodive=0"),
825 breadcrumb("a", "/b/foo/bar/+/master/path/to/a?autodive=0"),
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400826 breadcrumb("file", "/b/foo/bar/+/master/path/to/a/file"))
827 .inOrder();
828 assertThat(view.getBreadcrumbs(ImmutableList.of(true, false, false)))
829 .containsExactly(
Dave Borowitz4e8ffd82012-12-26 16:01:06 -0800830 breadcrumb("host", "/b/?format=HTML"),
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700831 breadcrumb("foo", "/b/foo/"),
832 breadcrumb("bar", "/b/foo/bar/"),
Dave Borowitz4e8ffd82012-12-26 16:01:06 -0800833 breadcrumb("master", "/b/foo/bar/+/master"),
834 breadcrumb(".", "/b/foo/bar/+/master/"),
835 breadcrumb("path", "/b/foo/bar/+/master/path?autodive=0"),
836 breadcrumb("to", "/b/foo/bar/+/master/path/to"),
837 breadcrumb("a", "/b/foo/bar/+/master/path/to/a"),
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400838 breadcrumb("file", "/b/foo/bar/+/master/path/to/a/file"))
839 .inOrder();
Dave Borowitz4e8ffd82012-12-26 16:01:06 -0800840 }
841
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700842 @Test
843 public void breadcrumbsHasSingleTreeRootPath() throws Exception {
Dave Borowitz44a15842013-01-07 09:39:05 -0800844 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400845 GitilesView view =
846 GitilesView.path()
847 .copyFrom(HOST)
848 .setRepositoryName("foo/bar")
849 .setRevision(Revision.unpeeled("master", id))
850 .setPathPart("")
851 .build();
Dave Borowitz44a15842013-01-07 09:39:05 -0800852
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400853 assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+/master/");
Dave Borowitzcf38c032016-05-02 11:06:23 -0400854 assertThat(view.getBreadcrumbs(ImmutableList.<Boolean>of()))
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400855 .containsExactly(
Dave Borowitz44a15842013-01-07 09:39:05 -0800856 breadcrumb("host", "/b/?format=HTML"),
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700857 breadcrumb("foo", "/b/foo/"),
858 breadcrumb("bar", "/b/foo/bar/"),
Dave Borowitz44a15842013-01-07 09:39:05 -0800859 breadcrumb("master", "/b/foo/bar/+/master"),
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400860 breadcrumb(".", "/b/foo/bar/+/master/"))
861 .inOrder();
Dave Borowitz44a15842013-01-07 09:39:05 -0800862 }
863
Dave Borowitz9de65952012-08-13 16:09:45 -0700864 private static ImmutableMap<String, String> breadcrumb(String text, String url) {
865 return ImmutableMap.of("text", text, "url", url);
866 }
867}