blob: 2e1e005413681e3521e06f86fc151ae945445d83 [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
Shawn Pearceb43b2d52013-03-18 10:55:15 -070017import junit.framework.TestCase;
18
19import org.eclipse.jgit.lib.ObjectId;
20
Dave Borowitz9de65952012-08-13 16:09:45 -070021import com.google.common.collect.ImmutableList;
22import com.google.common.collect.ImmutableListMultimap;
23import com.google.common.collect.ImmutableMap;
24import com.google.gitiles.GitilesView.Type;
25
Dave Borowitz9de65952012-08-13 16:09:45 -070026/** Tests for Gitiles views. */
27public class GitilesViewTest extends TestCase {
28 private static final GitilesView HOST = GitilesView.hostIndex()
29 .setServletPath("/b")
30 .setHostName("host")
31 .build();
32
33 public void testEmptyServletPath() throws Exception {
34 GitilesView view = GitilesView.hostIndex()
35 .setServletPath("")
36 .setHostName("host")
37 .build();
38 assertEquals("", view.getServletPath());
39 assertEquals(Type.HOST_INDEX, view.getType());
40 assertEquals("host", view.getHostName());
41 assertNull(view.getRepositoryName());
42 assertEquals(Revision.NULL, view.getRevision());
Dave Borowitzdd3c3d92013-03-11 16:38:41 -070043 assertNull(view.getPathPart());
Dave Borowitz9de65952012-08-13 16:09:45 -070044 assertTrue(HOST.getParameters().isEmpty());
45
46 assertEquals("/?format=HTML", view.toUrl());
47 assertEquals(ImmutableList.of(ImmutableMap.of("text", "host", "url", "/?format=HTML")),
48 view.getBreadcrumbs());
49 }
50
51 public void testHostIndex() throws Exception {
52 assertEquals("/b", HOST.getServletPath());
53 assertEquals(Type.HOST_INDEX, HOST.getType());
54 assertEquals("host", HOST.getHostName());
55 assertNull(HOST.getRepositoryName());
56 assertEquals(Revision.NULL, HOST.getRevision());
Dave Borowitzdd3c3d92013-03-11 16:38:41 -070057 assertNull(HOST.getPathPart());
Dave Borowitz9de65952012-08-13 16:09:45 -070058 assertTrue(HOST.getParameters().isEmpty());
59
60 assertEquals("/b/?format=HTML", HOST.toUrl());
61 assertEquals(ImmutableList.of(ImmutableMap.of("text", "host", "url", "/b/?format=HTML")),
62 HOST.getBreadcrumbs());
63 }
64
65 public void testQueryParams() throws Exception {
66 GitilesView view = GitilesView.hostIndex().copyFrom(HOST)
67 .putParam("foo", "foovalue")
68 .putParam("bar", "barvalue")
69 .build();
70
71 assertEquals("/b", view.getServletPath());
72 assertEquals(Type.HOST_INDEX, view.getType());
73 assertEquals("host", view.getHostName());
74 assertNull(view.getRepositoryName());
75 assertEquals(Revision.NULL, view.getRevision());
Dave Borowitzdd3c3d92013-03-11 16:38:41 -070076 assertNull(view.getPathPart());
Dave Borowitz9de65952012-08-13 16:09:45 -070077 assertEquals(
78 ImmutableListMultimap.of(
79 "foo", "foovalue",
80 "bar", "barvalue"),
81 view.getParameters());
82
83 assertEquals("/b/?format=HTML&foo=foovalue&bar=barvalue", view.toUrl());
84 assertEquals(ImmutableList.of(ImmutableMap.of("text", "host", "url", "/b/?format=HTML")),
85 view.getBreadcrumbs());
86 }
87
88 public void testQueryParamsNotCopied() throws Exception {
89 GitilesView view = GitilesView.hostIndex().copyFrom(HOST)
90 .putParam("foo", "foovalue")
91 .putParam("bar", "barvalue")
92 .build();
93 GitilesView copy = GitilesView.hostIndex().copyFrom(view).build();
94 assertFalse(view.getParameters().isEmpty());
95 assertTrue(copy.getParameters().isEmpty());
96 }
97
98 public void testRepositoryIndex() throws Exception {
99 GitilesView view = GitilesView.repositoryIndex()
100 .copyFrom(HOST)
101 .setRepositoryName("foo/bar")
102 .build();
103
104 assertEquals("/b", view.getServletPath());
105 assertEquals(Type.REPOSITORY_INDEX, view.getType());
106 assertEquals("host", view.getHostName());
107 assertEquals("foo/bar", view.getRepositoryName());
108 assertEquals(Revision.NULL, view.getRevision());
Dave Borowitzdd3c3d92013-03-11 16:38:41 -0700109 assertNull(view.getPathPart());
Dave Borowitz9de65952012-08-13 16:09:45 -0700110 assertTrue(HOST.getParameters().isEmpty());
111
112 assertEquals("/b/foo/bar/", view.toUrl());
113 assertEquals(
114 ImmutableList.of(
115 breadcrumb("host", "/b/?format=HTML"),
116 breadcrumb("foo/bar", "/b/foo/bar/")),
117 view.getBreadcrumbs());
118 }
119
Dave Borowitz209d0aa2012-12-28 14:28:53 -0800120 public void testRefs() throws Exception {
121 GitilesView view = GitilesView.refs()
122 .copyFrom(HOST)
123 .setRepositoryName("foo/bar")
124 .build();
125
126 assertEquals("/b", view.getServletPath());
127 assertEquals(Type.REFS, view.getType());
128 assertEquals("host", view.getHostName());
129 assertEquals("foo/bar", view.getRepositoryName());
130 assertEquals(Revision.NULL, view.getRevision());
Dave Borowitzdd3c3d92013-03-11 16:38:41 -0700131 assertNull(view.getPathPart());
Dave Borowitz209d0aa2012-12-28 14:28:53 -0800132 assertTrue(HOST.getParameters().isEmpty());
133
134 assertEquals("/b/foo/bar/+refs", view.toUrl());
135 assertEquals(
136 ImmutableList.of(
137 breadcrumb("host", "/b/?format=HTML"),
138 breadcrumb("foo/bar", "/b/foo/bar/")),
139 view.getBreadcrumbs());
140 }
141
Dave Borowitz9de65952012-08-13 16:09:45 -0700142 public void testRefWithRevision() throws Exception {
143 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
144 GitilesView view = GitilesView.revision()
145 .copyFrom(HOST)
146 .setRepositoryName("foo/bar")
147 .setRevision(Revision.unpeeled("master", id))
148 .build();
149
150 assertEquals("/b", view.getServletPath());
151 assertEquals(Type.REVISION, view.getType());
152 assertEquals("host", view.getHostName());
153 assertEquals("foo/bar", view.getRepositoryName());
154 assertEquals(id, view.getRevision().getId());
155 assertEquals("master", view.getRevision().getName());
Dave Borowitzdd3c3d92013-03-11 16:38:41 -0700156 assertNull(view.getPathPart());
Dave Borowitz9de65952012-08-13 16:09:45 -0700157 assertTrue(HOST.getParameters().isEmpty());
158
Dave Borowitzd3e6dd72012-12-20 15:48:24 -0800159 assertEquals("/b/foo/bar/+/master", view.toUrl());
Dave Borowitz9de65952012-08-13 16:09:45 -0700160 assertEquals(
161 ImmutableList.of(
162 breadcrumb("host", "/b/?format=HTML"),
163 breadcrumb("foo/bar", "/b/foo/bar/"),
Dave Borowitzd3e6dd72012-12-20 15:48:24 -0800164 breadcrumb("master", "/b/foo/bar/+/master")),
Dave Borowitz9de65952012-08-13 16:09:45 -0700165 view.getBreadcrumbs());
166 }
167
Dave Borowitzba9c1182013-03-13 14:16:43 -0700168 public void testDescribe() throws Exception {
169 GitilesView view = GitilesView.describe()
170 .copyFrom(HOST)
171 .setRepositoryName("foo/bar")
172 .setPathPart("deadbeef")
173 .build();
174
175 assertEquals("/b", view.getServletPath());
176 assertEquals(Type.DESCRIBE, view.getType());
177 assertEquals("host", view.getHostName());
178 assertEquals("foo/bar", view.getRepositoryName());
179 assertEquals(Revision.NULL, view.getRevision());
180 assertEquals("deadbeef", view.getPathPart());
181 assertTrue(HOST.getParameters().isEmpty());
182 }
183
Dave Borowitz9de65952012-08-13 16:09:45 -0700184 public void testNoPathComponents() throws Exception {
185 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
186 GitilesView view = GitilesView.path()
187 .copyFrom(HOST)
188 .setRepositoryName("foo/bar")
189 .setRevision(Revision.unpeeled("master", id))
Dave Borowitzdd3c3d92013-03-11 16:38:41 -0700190 .setPathPart("/")
Dave Borowitz9de65952012-08-13 16:09:45 -0700191 .build();
192
193 assertEquals("/b", view.getServletPath());
194 assertEquals(Type.PATH, view.getType());
195 assertEquals("host", view.getHostName());
196 assertEquals("foo/bar", view.getRepositoryName());
197 assertEquals(id, view.getRevision().getId());
198 assertEquals("master", view.getRevision().getName());
Dave Borowitzdd3c3d92013-03-11 16:38:41 -0700199 assertEquals("", view.getPathPart());
Dave Borowitz9de65952012-08-13 16:09:45 -0700200 assertTrue(HOST.getParameters().isEmpty());
201
202 assertEquals("/b/foo/bar/+/master/", view.toUrl());
203 assertEquals(
204 ImmutableList.of(
205 breadcrumb("host", "/b/?format=HTML"),
206 breadcrumb("foo/bar", "/b/foo/bar/"),
Dave Borowitzd3e6dd72012-12-20 15:48:24 -0800207 breadcrumb("master", "/b/foo/bar/+/master"),
Dave Borowitz9de65952012-08-13 16:09:45 -0700208 breadcrumb(".", "/b/foo/bar/+/master/")),
209 view.getBreadcrumbs());
210 }
211
212 public void testOnePathComponent() throws Exception {
213 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
214 GitilesView view = GitilesView.path()
215 .copyFrom(HOST)
216 .setRepositoryName("foo/bar")
217 .setRevision(Revision.unpeeled("master", id))
Dave Borowitzdd3c3d92013-03-11 16:38:41 -0700218 .setPathPart("/file")
Dave Borowitz9de65952012-08-13 16:09:45 -0700219 .build();
220
221 assertEquals("/b", view.getServletPath());
222 assertEquals(Type.PATH, view.getType());
223 assertEquals("host", view.getHostName());
224 assertEquals("foo/bar", view.getRepositoryName());
225 assertEquals(id, view.getRevision().getId());
226 assertEquals("master", view.getRevision().getName());
Dave Borowitzdd3c3d92013-03-11 16:38:41 -0700227 assertEquals("file", view.getPathPart());
Dave Borowitz9de65952012-08-13 16:09:45 -0700228 assertTrue(HOST.getParameters().isEmpty());
229
230 assertEquals("/b/foo/bar/+/master/file", view.toUrl());
231 assertEquals(
232 ImmutableList.of(
233 breadcrumb("host", "/b/?format=HTML"),
234 breadcrumb("foo/bar", "/b/foo/bar/"),
Dave Borowitzd3e6dd72012-12-20 15:48:24 -0800235 breadcrumb("master", "/b/foo/bar/+/master"),
Dave Borowitz9de65952012-08-13 16:09:45 -0700236 breadcrumb(".", "/b/foo/bar/+/master/"),
237 breadcrumb("file", "/b/foo/bar/+/master/file")),
238 view.getBreadcrumbs());
239 }
240
241 public void testMultiplePathComponents() throws Exception {
242 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
243 GitilesView view = GitilesView.path()
244 .copyFrom(HOST)
245 .setRepositoryName("foo/bar")
246 .setRevision(Revision.unpeeled("master", id))
Dave Borowitzdd3c3d92013-03-11 16:38:41 -0700247 .setPathPart("/path/to/a/file")
Dave Borowitz9de65952012-08-13 16:09:45 -0700248 .build();
249
250 assertEquals("/b", view.getServletPath());
251 assertEquals(Type.PATH, view.getType());
252 assertEquals("host", view.getHostName());
253 assertEquals("foo/bar", view.getRepositoryName());
254 assertEquals(id, view.getRevision().getId());
255 assertEquals("master", view.getRevision().getName());
Dave Borowitzdd3c3d92013-03-11 16:38:41 -0700256 assertEquals("path/to/a/file", view.getPathPart());
Dave Borowitz9de65952012-08-13 16:09:45 -0700257 assertTrue(HOST.getParameters().isEmpty());
258
259 assertEquals("/b/foo/bar/+/master/path/to/a/file", view.toUrl());
260 assertEquals(
261 ImmutableList.of(
262 breadcrumb("host", "/b/?format=HTML"),
263 breadcrumb("foo/bar", "/b/foo/bar/"),
Dave Borowitzd3e6dd72012-12-20 15:48:24 -0800264 breadcrumb("master", "/b/foo/bar/+/master"),
Dave Borowitz9de65952012-08-13 16:09:45 -0700265 breadcrumb(".", "/b/foo/bar/+/master/"),
266 breadcrumb("path", "/b/foo/bar/+/master/path"),
267 breadcrumb("to", "/b/foo/bar/+/master/path/to"),
268 breadcrumb("a", "/b/foo/bar/+/master/path/to/a"),
269 breadcrumb("file", "/b/foo/bar/+/master/path/to/a/file")),
270 view.getBreadcrumbs());
271 }
272
273 public void testDiffAgainstFirstParent() throws Exception {
274 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
275 ObjectId parent = ObjectId.fromString("efab5678efab5678efab5678efab5678efab5678");
276 GitilesView view = GitilesView.diff()
277 .copyFrom(HOST)
278 .setRepositoryName("foo/bar")
279 .setRevision(Revision.unpeeled("master", id))
280 .setOldRevision(Revision.unpeeled("master^", parent))
Dave Borowitzdd3c3d92013-03-11 16:38:41 -0700281 .setPathPart("/path/to/a/file")
Dave Borowitz9de65952012-08-13 16:09:45 -0700282 .build();
283
284 assertEquals("/b", view.getServletPath());
285 assertEquals(Type.DIFF, view.getType());
286 assertEquals("host", view.getHostName());
287 assertEquals("foo/bar", view.getRepositoryName());
288 assertEquals(id, view.getRevision().getId());
289 assertEquals("master", view.getRevision().getName());
290 assertEquals("master^", view.getOldRevision().getName());
Dave Borowitzdd3c3d92013-03-11 16:38:41 -0700291 assertEquals("path/to/a/file", view.getPathPart());
Dave Borowitz9de65952012-08-13 16:09:45 -0700292 assertTrue(HOST.getParameters().isEmpty());
293
294 assertEquals("/b/foo/bar/+/master%5E%21/path/to/a/file", view.toUrl());
295 assertEquals(
296 ImmutableList.of(
297 breadcrumb("host", "/b/?format=HTML"),
298 breadcrumb("foo/bar", "/b/foo/bar/"),
299 breadcrumb("master^!", "/b/foo/bar/+/master%5E%21/"),
300 breadcrumb(".", "/b/foo/bar/+/master%5E%21/"),
301 breadcrumb("path", "/b/foo/bar/+/master%5E%21/path"),
302 breadcrumb("to", "/b/foo/bar/+/master%5E%21/path/to"),
303 breadcrumb("a", "/b/foo/bar/+/master%5E%21/path/to/a"),
304 breadcrumb("file", "/b/foo/bar/+/master%5E%21/path/to/a/file")),
305 view.getBreadcrumbs());
306 }
307
308 public void testDiffAgainstEmptyRevision() throws Exception {
309 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
310 GitilesView view = GitilesView.diff()
311 .copyFrom(HOST)
312 .setRepositoryName("foo/bar")
313 .setRevision(Revision.unpeeled("master", id))
Dave Borowitzdd3c3d92013-03-11 16:38:41 -0700314 .setPathPart("/path/to/a/file")
Dave Borowitz9de65952012-08-13 16:09:45 -0700315 .build();
316
317 assertEquals("/b", view.getServletPath());
318 assertEquals(Type.DIFF, view.getType());
319 assertEquals("host", view.getHostName());
320 assertEquals("foo/bar", view.getRepositoryName());
321 assertEquals(id, view.getRevision().getId());
322 assertEquals("master", view.getRevision().getName());
323 assertEquals(Revision.NULL, view.getOldRevision());
Dave Borowitzdd3c3d92013-03-11 16:38:41 -0700324 assertEquals("path/to/a/file", view.getPathPart());
Dave Borowitz9de65952012-08-13 16:09:45 -0700325 assertTrue(HOST.getParameters().isEmpty());
326
327 assertEquals("/b/foo/bar/+/master%5E%21/path/to/a/file", view.toUrl());
328 assertEquals(
329 ImmutableList.of(
330 breadcrumb("host", "/b/?format=HTML"),
331 breadcrumb("foo/bar", "/b/foo/bar/"),
332 breadcrumb("master^!", "/b/foo/bar/+/master%5E%21/"),
333 breadcrumb(".", "/b/foo/bar/+/master%5E%21/"),
334 breadcrumb("path", "/b/foo/bar/+/master%5E%21/path"),
335 breadcrumb("to", "/b/foo/bar/+/master%5E%21/path/to"),
336 breadcrumb("a", "/b/foo/bar/+/master%5E%21/path/to/a"),
337 breadcrumb("file", "/b/foo/bar/+/master%5E%21/path/to/a/file")),
338 view.getBreadcrumbs());
339 }
340
341 public void testDiffAgainstOther() throws Exception {
342 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
343 ObjectId other = ObjectId.fromString("efab5678efab5678efab5678efab5678efab5678");
344 GitilesView view = GitilesView.diff()
345 .copyFrom(HOST)
346 .setRepositoryName("foo/bar")
347 .setRevision(Revision.unpeeled("master", id))
348 .setOldRevision(Revision.unpeeled("efab5678", other))
Dave Borowitzdd3c3d92013-03-11 16:38:41 -0700349 .setPathPart("/path/to/a/file")
Dave Borowitz9de65952012-08-13 16:09:45 -0700350 .build();
351
352 assertEquals("/b", view.getServletPath());
353 assertEquals(Type.DIFF, view.getType());
354 assertEquals("host", view.getHostName());
355 assertEquals("foo/bar", view.getRepositoryName());
356 assertEquals(id, view.getRevision().getId());
357 assertEquals("master", view.getRevision().getName());
358 assertEquals("efab5678", view.getOldRevision().getName());
Dave Borowitzdd3c3d92013-03-11 16:38:41 -0700359 assertEquals("path/to/a/file", view.getPathPart());
Dave Borowitz9de65952012-08-13 16:09:45 -0700360 assertTrue(HOST.getParameters().isEmpty());
361
362 assertEquals("/b/foo/bar/+/efab5678..master/path/to/a/file", view.toUrl());
363 assertEquals(
364 ImmutableList.of(
365 breadcrumb("host", "/b/?format=HTML"),
366 breadcrumb("foo/bar", "/b/foo/bar/"),
367 breadcrumb("efab5678..master", "/b/foo/bar/+/efab5678..master/"),
368 breadcrumb(".", "/b/foo/bar/+/efab5678..master/"),
369 breadcrumb("path", "/b/foo/bar/+/efab5678..master/path"),
370 breadcrumb("to", "/b/foo/bar/+/efab5678..master/path/to"),
371 breadcrumb("a", "/b/foo/bar/+/efab5678..master/path/to/a"),
372 breadcrumb("file", "/b/foo/bar/+/efab5678..master/path/to/a/file")),
373 view.getBreadcrumbs());
374 }
375
376 public void testBranchLogWithoutPath() throws Exception {
377 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
378 GitilesView view = GitilesView.log()
379 .copyFrom(HOST)
380 .setRepositoryName("foo/bar")
381 .setRevision(Revision.unpeeled("master", id))
382 .build();
383
384 assertEquals("/b", view.getServletPath());
385 assertEquals(Type.LOG, view.getType());
386 assertEquals("host", view.getHostName());
387 assertEquals("foo/bar", view.getRepositoryName());
388 assertEquals(id, view.getRevision().getId());
389 assertEquals("master", view.getRevision().getName());
390 assertEquals(Revision.NULL, view.getOldRevision());
Dave Borowitzdd3c3d92013-03-11 16:38:41 -0700391 assertNull(view.getPathPart());
Dave Borowitz9de65952012-08-13 16:09:45 -0700392 assertTrue(HOST.getParameters().isEmpty());
393
Dave Borowitzd3e6dd72012-12-20 15:48:24 -0800394 assertEquals("/b/foo/bar/+log/master", view.toUrl());
Dave Borowitz9de65952012-08-13 16:09:45 -0700395 assertEquals(
396 ImmutableList.of(
397 breadcrumb("host", "/b/?format=HTML"),
398 breadcrumb("foo/bar", "/b/foo/bar/"),
Dave Borowitzd3e6dd72012-12-20 15:48:24 -0800399 breadcrumb("master", "/b/foo/bar/+log/master")),
Dave Borowitz9de65952012-08-13 16:09:45 -0700400 view.getBreadcrumbs());
401 }
402
403 public void testIdLogWithoutPath() throws Exception {
404 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
405 GitilesView view = GitilesView.log()
406 .copyFrom(HOST)
407 .setRepositoryName("foo/bar")
408 .setRevision(Revision.unpeeled("abcd1234", id))
409 .build();
410
411 assertEquals("/b", view.getServletPath());
412 assertEquals(Type.LOG, view.getType());
413 assertEquals("host", view.getHostName());
414 assertEquals("foo/bar", view.getRepositoryName());
415 assertEquals(id, view.getRevision().getId());
416 assertEquals("abcd1234", view.getRevision().getName());
417 assertEquals(Revision.NULL, view.getOldRevision());
Dave Borowitzdd3c3d92013-03-11 16:38:41 -0700418 assertNull(view.getPathPart());
Dave Borowitz9de65952012-08-13 16:09:45 -0700419 assertTrue(HOST.getParameters().isEmpty());
420
421 assertEquals("/b/foo/bar/+log/abcd1234", view.toUrl());
422 assertEquals(
423 ImmutableList.of(
424 breadcrumb("host", "/b/?format=HTML"),
425 breadcrumb("foo/bar", "/b/foo/bar/"),
426 breadcrumb("abcd1234", "/b/foo/bar/+log/abcd1234")),
427 view.getBreadcrumbs());
428 }
429
430 public void testLogWithoutOldRevision() throws Exception {
431 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
432 GitilesView view = GitilesView.log()
433 .copyFrom(HOST)
434 .setRepositoryName("foo/bar")
435 .setRevision(Revision.unpeeled("master", id))
Dave Borowitzdd3c3d92013-03-11 16:38:41 -0700436 .setPathPart("/path/to/a/file")
Dave Borowitz9de65952012-08-13 16:09:45 -0700437 .build();
438
439 assertEquals("/b", view.getServletPath());
440 assertEquals(Type.LOG, view.getType());
441 assertEquals("host", view.getHostName());
442 assertEquals("foo/bar", view.getRepositoryName());
443 assertEquals(id, view.getRevision().getId());
444 assertEquals("master", view.getRevision().getName());
445 assertEquals(Revision.NULL, view.getOldRevision());
Dave Borowitzdd3c3d92013-03-11 16:38:41 -0700446 assertEquals("path/to/a/file", view.getPathPart());
Dave Borowitz9de65952012-08-13 16:09:45 -0700447 assertTrue(HOST.getParameters().isEmpty());
448
449 assertEquals("/b/foo/bar/+log/master/path/to/a/file", view.toUrl());
450 assertEquals(
451 ImmutableList.of(
452 breadcrumb("host", "/b/?format=HTML"),
453 breadcrumb("foo/bar", "/b/foo/bar/"),
Dave Borowitzd3e6dd72012-12-20 15:48:24 -0800454 breadcrumb("master", "/b/foo/bar/+log/master"),
Dave Borowitz9de65952012-08-13 16:09:45 -0700455 breadcrumb("path", "/b/foo/bar/+log/master/path"),
456 breadcrumb("to", "/b/foo/bar/+log/master/path/to"),
457 breadcrumb("a", "/b/foo/bar/+log/master/path/to/a"),
458 breadcrumb("file", "/b/foo/bar/+log/master/path/to/a/file")),
459 view.getBreadcrumbs());
460 }
461
462 public void testLogWithOldRevision() throws Exception {
463 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
464 ObjectId parent = ObjectId.fromString("efab5678efab5678efab5678efab5678efab5678");
465 GitilesView view = GitilesView.log()
466 .copyFrom(HOST)
467 .setRepositoryName("foo/bar")
468 .setRevision(Revision.unpeeled("master", id))
469 .setOldRevision(Revision.unpeeled("master^", parent))
Dave Borowitzdd3c3d92013-03-11 16:38:41 -0700470 .setPathPart("/path/to/a/file")
Dave Borowitz9de65952012-08-13 16:09:45 -0700471 .build();
472
473 assertEquals("/b", view.getServletPath());
474 assertEquals(Type.LOG, view.getType());
475 assertEquals("host", view.getHostName());
476 assertEquals("foo/bar", view.getRepositoryName());
477 assertEquals(id, view.getRevision().getId());
478 assertEquals("master", view.getRevision().getName());
479 assertEquals("master^", view.getOldRevision().getName());
Dave Borowitzdd3c3d92013-03-11 16:38:41 -0700480 assertEquals("path/to/a/file", view.getPathPart());
Dave Borowitz9de65952012-08-13 16:09:45 -0700481 assertTrue(HOST.getParameters().isEmpty());
482
483 assertEquals("/b/foo/bar/+log/master%5E..master/path/to/a/file", view.toUrl());
484 assertEquals(
485 ImmutableList.of(
486 breadcrumb("host", "/b/?format=HTML"),
487 breadcrumb("foo/bar", "/b/foo/bar/"),
488 breadcrumb("master^..master", "/b/foo/bar/+log/master%5E..master"),
489 breadcrumb("path", "/b/foo/bar/+log/master%5E..master/path"),
490 breadcrumb("to", "/b/foo/bar/+log/master%5E..master/path/to"),
491 breadcrumb("a", "/b/foo/bar/+log/master%5E..master/path/to/a"),
492 breadcrumb("file", "/b/foo/bar/+log/master%5E..master/path/to/a/file")),
493 view.getBreadcrumbs());
494 }
495
Dave Borowitz80334b22013-01-11 14:19:11 -0800496 public void testLogWithNoRevision() throws Exception {
497 GitilesView view = GitilesView.log()
498 .copyFrom(HOST)
499 .setRepositoryName("foo/bar")
500 .build();
501
502 assertEquals("/b", view.getServletPath());
503 assertEquals(Type.LOG, view.getType());
504 assertEquals("host", view.getHostName());
505 assertEquals("foo/bar", view.getRepositoryName());
506 assertEquals(Revision.NULL, view.getRevision());
507 assertEquals(Revision.NULL, view.getOldRevision());
508 assertTrue(HOST.getParameters().isEmpty());
509
510 assertEquals("/b/foo/bar/+log", view.toUrl());
511 assertEquals(
512 ImmutableList.of(
513 breadcrumb("host", "/b/?format=HTML"),
514 breadcrumb("foo/bar", "/b/foo/bar/"),
515 breadcrumb("HEAD", "/b/foo/bar/+log")),
516 view.getBreadcrumbs());
517 }
518
Dave Borowitz5051e672013-11-11 11:09:40 -0800519 public void testArchiveWithNoPath() throws Exception {
520 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
521 GitilesView view = GitilesView.archive()
522 .copyFrom(HOST)
523 .setRepositoryName("foo/bar")
524 .setRevision(Revision.unpeeled("master", id))
525 .setExtension(".tar.bz2")
526 .build();
527
528 assertEquals("/b", view.getServletPath());
529 assertEquals(Type.ARCHIVE, view.getType());
530 assertEquals("host", view.getHostName());
531 assertEquals("foo/bar", view.getRepositoryName());
532 assertEquals(id, view.getRevision().getId());
533 assertEquals("master", view.getRevision().getName());
534 assertEquals(Revision.NULL, view.getOldRevision());
535 assertNull(view.getPathPart());
536 assertTrue(HOST.getParameters().isEmpty());
537 assertEquals("/b/foo/bar/+archive/master.tar.bz2", view.toUrl());
538 }
539
540 public void testArchiveWithPath() throws Exception {
541 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
542 GitilesView view = GitilesView.archive()
543 .copyFrom(HOST)
544 .setRepositoryName("foo/bar")
545 .setRevision(Revision.unpeeled("master", id))
546 .setPathPart("/path/to/a/dir")
547 .setExtension(".tar.bz2")
548 .build();
549
550 assertEquals("/b", view.getServletPath());
551 assertEquals(Type.ARCHIVE, view.getType());
552 assertEquals("host", view.getHostName());
553 assertEquals("foo/bar", view.getRepositoryName());
554 assertEquals(id, view.getRevision().getId());
555 assertEquals("master", view.getRevision().getName());
556 assertEquals(Revision.NULL, view.getOldRevision());
557 assertEquals("path/to/a/dir", view.getPathPart());
558 assertTrue(HOST.getParameters().isEmpty());
559 assertEquals("/b/foo/bar/+archive/master/path/to/a/dir.tar.bz2", view.toUrl());
560 }
561
Dave Borowitz68c7a9b2014-01-28 12:13:21 -0800562 public void testBlame() throws Exception {
563 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
564 GitilesView view = GitilesView.blame()
565 .copyFrom(HOST)
566 .setRepositoryName("foo/bar")
567 .setRevision(Revision.unpeeled("master", id))
568 .setPathPart("/dir/file")
569 .build();
570
571 assertEquals("/b", view.getServletPath());
572 assertEquals(Type.BLAME, view.getType());
573 assertEquals("host", view.getHostName());
574 assertEquals("foo/bar", view.getRepositoryName());
575 assertEquals(id, view.getRevision().getId());
576 assertEquals("master", view.getRevision().getName());
577 assertEquals(Revision.NULL, view.getOldRevision());
578 assertEquals("dir/file", view.getPathPart());
579 assertTrue(HOST.getParameters().isEmpty());
580 assertEquals("/b/foo/bar/+blame/master/dir/file", view.toUrl());
581 assertEquals(
582 ImmutableList.of(
583 breadcrumb("host", "/b/?format=HTML"),
584 breadcrumb("foo/bar", "/b/foo/bar/"),
585 breadcrumb("master", "/b/foo/bar/+/master"),
586 breadcrumb(".", "/b/foo/bar/+/master/"),
587 breadcrumb("dir", "/b/foo/bar/+/master/dir"),
588 breadcrumb("file", "/b/foo/bar/+blame/master/dir/file")),
589 view.getBreadcrumbs());
590 }
591
Dave Borowitz9de65952012-08-13 16:09:45 -0700592 public void testEscaping() throws Exception {
593 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
594 ObjectId parent = ObjectId.fromString("efab5678efab5678efab5678efab5678efab5678");
595 // Some of these values are not valid for Git, but check them anyway.
596 GitilesView view = GitilesView.log()
597 .copyFrom(HOST)
598 .setRepositoryName("foo?bar")
599 .setRevision(Revision.unpeeled("ba/d#name", id))
600 .setOldRevision(Revision.unpeeled("other\"na/me", parent))
Dave Borowitzdd3c3d92013-03-11 16:38:41 -0700601 .setPathPart("we ird/pa'th/name")
Dave Borowitz9de65952012-08-13 16:09:45 -0700602 .putParam("k e y", "val/ue")
603 .setAnchor("anc#hor")
604 .build();
605
606 // Fields returned by getters are not escaped.
607 assertEquals("/b", view.getServletPath());
608 assertEquals(Type.LOG, view.getType());
609 assertEquals("host", view.getHostName());
610 assertEquals("foo?bar", view.getRepositoryName());
611 assertEquals(id, view.getRevision().getId());
612 assertEquals("ba/d#name", view.getRevision().getName());
613 assertEquals(parent, view.getOldRevision().getId());
614 assertEquals("other\"na/me", view.getOldRevision().getName());
Dave Borowitzdd3c3d92013-03-11 16:38:41 -0700615 assertEquals("we ird/pa'th/name", view.getPathPart());
Dave Borowitz9de65952012-08-13 16:09:45 -0700616 assertEquals(ImmutableListMultimap.<String, String> of("k e y", "val/ue"),
617 view.getParameters());
618
619 assertEquals(
620 "/b/foo%3Fbar/+log/other%22na/me..ba/d%23name/we%20ird/pa%27th/name"
621 + "?k+e+y=val%2Fue#anc%23hor", view.toUrl());
622 assertEquals(
623 ImmutableList.of(
624 // Names are not escaped (auto-escaped by Soy) but values are.
625 breadcrumb("host", "/b/?format=HTML"),
626 breadcrumb("foo?bar", "/b/foo%3Fbar/"),
627 breadcrumb("other\"na/me..ba/d#name", "/b/foo%3Fbar/+log/other%22na/me..ba/d%23name"),
628 breadcrumb("we ird", "/b/foo%3Fbar/+log/other%22na/me..ba/d%23name/we%20ird"),
629 breadcrumb("pa'th", "/b/foo%3Fbar/+log/other%22na/me..ba/d%23name/we%20ird/pa%27th"),
630 breadcrumb("name",
631 "/b/foo%3Fbar/+log/other%22na/me..ba/d%23name/we%20ird/pa%27th/name")),
632 view.getBreadcrumbs());
633 }
634
Dave Borowitz4e8ffd82012-12-26 16:01:06 -0800635 public void testBreadcrumbsHasSingleTree() throws Exception {
636 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
637 GitilesView view = GitilesView.path()
638 .copyFrom(HOST)
639 .setRepositoryName("foo/bar")
640 .setRevision(Revision.unpeeled("master", id))
Dave Borowitzdd3c3d92013-03-11 16:38:41 -0700641 .setPathPart("/path/to/a/file")
Dave Borowitz4e8ffd82012-12-26 16:01:06 -0800642 .build();
643
644 assertEquals("/b/foo/bar/+/master/path/to/a/file", view.toUrl());
645 assertEquals(
646 ImmutableList.of(
647 breadcrumb("host", "/b/?format=HTML"),
648 breadcrumb("foo/bar", "/b/foo/bar/"),
649 breadcrumb("master", "/b/foo/bar/+/master"),
650 breadcrumb(".", "/b/foo/bar/+/master/"),
651 breadcrumb("path", "/b/foo/bar/+/master/path"),
652 breadcrumb("to", "/b/foo/bar/+/master/path/to?autodive=0"),
653 breadcrumb("a", "/b/foo/bar/+/master/path/to/a?autodive=0"),
654 breadcrumb("file", "/b/foo/bar/+/master/path/to/a/file")),
655 view.getBreadcrumbs(ImmutableList.of(false, true, true)));
656 assertEquals(
657 ImmutableList.of(
658 breadcrumb("host", "/b/?format=HTML"),
659 breadcrumb("foo/bar", "/b/foo/bar/"),
660 breadcrumb("master", "/b/foo/bar/+/master"),
661 breadcrumb(".", "/b/foo/bar/+/master/"),
662 breadcrumb("path", "/b/foo/bar/+/master/path?autodive=0"),
663 breadcrumb("to", "/b/foo/bar/+/master/path/to"),
664 breadcrumb("a", "/b/foo/bar/+/master/path/to/a"),
665 breadcrumb("file", "/b/foo/bar/+/master/path/to/a/file")),
666 view.getBreadcrumbs(ImmutableList.of(true, false, false)));
667 }
668
Dave Borowitz44a15842013-01-07 09:39:05 -0800669 public void testBreadcrumbsHasSingleTreeRootPath() throws Exception {
670 ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
671 GitilesView view = GitilesView.path()
672 .copyFrom(HOST)
673 .setRepositoryName("foo/bar")
674 .setRevision(Revision.unpeeled("master", id))
Dave Borowitzdd3c3d92013-03-11 16:38:41 -0700675 .setPathPart("")
Dave Borowitz44a15842013-01-07 09:39:05 -0800676 .build();
677
678 assertEquals("/b/foo/bar/+/master/", view.toUrl());
679 assertEquals(
680 ImmutableList.of(
681 breadcrumb("host", "/b/?format=HTML"),
682 breadcrumb("foo/bar", "/b/foo/bar/"),
683 breadcrumb("master", "/b/foo/bar/+/master"),
684 breadcrumb(".", "/b/foo/bar/+/master/")),
685 view.getBreadcrumbs(ImmutableList.<Boolean> of()));
686 }
687
Dave Borowitz9de65952012-08-13 16:09:45 -0700688 private static ImmutableMap<String, String> breadcrumb(String text, String url) {
689 return ImmutableMap.of("text", text, "url", url);
690 }
691}