blob: cf246b9cced7757c4ade4dc127292ac3ea1d14fb [file] [log] [blame] [raw]
// Copyright 2012 Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package com.google.gitiles;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableListMultimap;
import com.google.common.collect.ImmutableMap;
import com.google.gitiles.GitilesView.Type;
import junit.framework.TestCase;
import org.eclipse.jgit.lib.ObjectId;
/** Tests for Gitiles views. */
public class GitilesViewTest extends TestCase {
private static final GitilesView HOST = GitilesView.hostIndex()
.setServletPath("/b")
.setHostName("host")
.build();
public void testEmptyServletPath() throws Exception {
GitilesView view = GitilesView.hostIndex()
.setServletPath("")
.setHostName("host")
.build();
assertEquals("", view.getServletPath());
assertEquals(Type.HOST_INDEX, view.getType());
assertEquals("host", view.getHostName());
assertNull(view.getRepositoryName());
assertEquals(Revision.NULL, view.getRevision());
assertNull(view.getTreePath());
assertTrue(HOST.getParameters().isEmpty());
assertEquals("/?format=HTML", view.toUrl());
assertEquals(ImmutableList.of(ImmutableMap.of("text", "host", "url", "/?format=HTML")),
view.getBreadcrumbs());
}
public void testHostIndex() throws Exception {
assertEquals("/b", HOST.getServletPath());
assertEquals(Type.HOST_INDEX, HOST.getType());
assertEquals("host", HOST.getHostName());
assertNull(HOST.getRepositoryName());
assertEquals(Revision.NULL, HOST.getRevision());
assertNull(HOST.getTreePath());
assertTrue(HOST.getParameters().isEmpty());
assertEquals("/b/?format=HTML", HOST.toUrl());
assertEquals(ImmutableList.of(ImmutableMap.of("text", "host", "url", "/b/?format=HTML")),
HOST.getBreadcrumbs());
}
public void testQueryParams() throws Exception {
GitilesView view = GitilesView.hostIndex().copyFrom(HOST)
.putParam("foo", "foovalue")
.putParam("bar", "barvalue")
.build();
assertEquals("/b", view.getServletPath());
assertEquals(Type.HOST_INDEX, view.getType());
assertEquals("host", view.getHostName());
assertNull(view.getRepositoryName());
assertEquals(Revision.NULL, view.getRevision());
assertNull(view.getTreePath());
assertEquals(
ImmutableListMultimap.of(
"foo", "foovalue",
"bar", "barvalue"),
view.getParameters());
assertEquals("/b/?format=HTML&foo=foovalue&bar=barvalue", view.toUrl());
assertEquals(ImmutableList.of(ImmutableMap.of("text", "host", "url", "/b/?format=HTML")),
view.getBreadcrumbs());
}
public void testQueryParamsNotCopied() throws Exception {
GitilesView view = GitilesView.hostIndex().copyFrom(HOST)
.putParam("foo", "foovalue")
.putParam("bar", "barvalue")
.build();
GitilesView copy = GitilesView.hostIndex().copyFrom(view).build();
assertFalse(view.getParameters().isEmpty());
assertTrue(copy.getParameters().isEmpty());
}
public void testRepositoryIndex() throws Exception {
GitilesView view = GitilesView.repositoryIndex()
.copyFrom(HOST)
.setRepositoryName("foo/bar")
.build();
assertEquals("/b", view.getServletPath());
assertEquals(Type.REPOSITORY_INDEX, view.getType());
assertEquals("host", view.getHostName());
assertEquals("foo/bar", view.getRepositoryName());
assertEquals(Revision.NULL, view.getRevision());
assertNull(view.getTreePath());
assertTrue(HOST.getParameters().isEmpty());
assertEquals("/b/foo/bar/", view.toUrl());
assertEquals(
ImmutableList.of(
breadcrumb("host", "/b/?format=HTML"),
breadcrumb("foo/bar", "/b/foo/bar/")),
view.getBreadcrumbs());
}
public void testRefWithRevision() throws Exception {
ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
GitilesView view = GitilesView.revision()
.copyFrom(HOST)
.setRepositoryName("foo/bar")
.setRevision(Revision.unpeeled("master", id))
.build();
assertEquals("/b", view.getServletPath());
assertEquals(Type.REVISION, view.getType());
assertEquals("host", view.getHostName());
assertEquals("foo/bar", view.getRepositoryName());
assertEquals(id, view.getRevision().getId());
assertEquals("master", view.getRevision().getName());
assertNull(view.getTreePath());
assertTrue(HOST.getParameters().isEmpty());
assertEquals("/b/foo/bar/+/master", view.toUrl());
assertEquals(
ImmutableList.of(
breadcrumb("host", "/b/?format=HTML"),
breadcrumb("foo/bar", "/b/foo/bar/"),
breadcrumb("master", "/b/foo/bar/+/master")),
view.getBreadcrumbs());
}
public void testNoPathComponents() throws Exception {
ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
GitilesView view = GitilesView.path()
.copyFrom(HOST)
.setRepositoryName("foo/bar")
.setRevision(Revision.unpeeled("master", id))
.setTreePath("/")
.build();
assertEquals("/b", view.getServletPath());
assertEquals(Type.PATH, view.getType());
assertEquals("host", view.getHostName());
assertEquals("foo/bar", view.getRepositoryName());
assertEquals(id, view.getRevision().getId());
assertEquals("master", view.getRevision().getName());
assertEquals("", view.getTreePath());
assertTrue(HOST.getParameters().isEmpty());
assertEquals("/b/foo/bar/+/master/", view.toUrl());
assertEquals(
ImmutableList.of(
breadcrumb("host", "/b/?format=HTML"),
breadcrumb("foo/bar", "/b/foo/bar/"),
breadcrumb("master", "/b/foo/bar/+/master"),
breadcrumb(".", "/b/foo/bar/+/master/")),
view.getBreadcrumbs());
}
public void testOnePathComponent() throws Exception {
ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
GitilesView view = GitilesView.path()
.copyFrom(HOST)
.setRepositoryName("foo/bar")
.setRevision(Revision.unpeeled("master", id))
.setTreePath("/file")
.build();
assertEquals("/b", view.getServletPath());
assertEquals(Type.PATH, view.getType());
assertEquals("host", view.getHostName());
assertEquals("foo/bar", view.getRepositoryName());
assertEquals(id, view.getRevision().getId());
assertEquals("master", view.getRevision().getName());
assertEquals("file", view.getTreePath());
assertTrue(HOST.getParameters().isEmpty());
assertEquals("/b/foo/bar/+/master/file", view.toUrl());
assertEquals(
ImmutableList.of(
breadcrumb("host", "/b/?format=HTML"),
breadcrumb("foo/bar", "/b/foo/bar/"),
breadcrumb("master", "/b/foo/bar/+/master"),
breadcrumb(".", "/b/foo/bar/+/master/"),
breadcrumb("file", "/b/foo/bar/+/master/file")),
view.getBreadcrumbs());
}
public void testMultiplePathComponents() throws Exception {
ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
GitilesView view = GitilesView.path()
.copyFrom(HOST)
.setRepositoryName("foo/bar")
.setRevision(Revision.unpeeled("master", id))
.setTreePath("/path/to/a/file")
.build();
assertEquals("/b", view.getServletPath());
assertEquals(Type.PATH, view.getType());
assertEquals("host", view.getHostName());
assertEquals("foo/bar", view.getRepositoryName());
assertEquals(id, view.getRevision().getId());
assertEquals("master", view.getRevision().getName());
assertEquals("path/to/a/file", view.getTreePath());
assertTrue(HOST.getParameters().isEmpty());
assertEquals("/b/foo/bar/+/master/path/to/a/file", view.toUrl());
assertEquals(
ImmutableList.of(
breadcrumb("host", "/b/?format=HTML"),
breadcrumb("foo/bar", "/b/foo/bar/"),
breadcrumb("master", "/b/foo/bar/+/master"),
breadcrumb(".", "/b/foo/bar/+/master/"),
breadcrumb("path", "/b/foo/bar/+/master/path"),
breadcrumb("to", "/b/foo/bar/+/master/path/to"),
breadcrumb("a", "/b/foo/bar/+/master/path/to/a"),
breadcrumb("file", "/b/foo/bar/+/master/path/to/a/file")),
view.getBreadcrumbs());
}
public void testDiffAgainstFirstParent() throws Exception {
ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
ObjectId parent = ObjectId.fromString("efab5678efab5678efab5678efab5678efab5678");
GitilesView view = GitilesView.diff()
.copyFrom(HOST)
.setRepositoryName("foo/bar")
.setRevision(Revision.unpeeled("master", id))
.setOldRevision(Revision.unpeeled("master^", parent))
.setTreePath("/path/to/a/file")
.build();
assertEquals("/b", view.getServletPath());
assertEquals(Type.DIFF, view.getType());
assertEquals("host", view.getHostName());
assertEquals("foo/bar", view.getRepositoryName());
assertEquals(id, view.getRevision().getId());
assertEquals("master", view.getRevision().getName());
assertEquals("master^", view.getOldRevision().getName());
assertEquals("path/to/a/file", view.getTreePath());
assertTrue(HOST.getParameters().isEmpty());
assertEquals("/b/foo/bar/+/master%5E%21/path/to/a/file", view.toUrl());
assertEquals(
ImmutableList.of(
breadcrumb("host", "/b/?format=HTML"),
breadcrumb("foo/bar", "/b/foo/bar/"),
breadcrumb("master^!", "/b/foo/bar/+/master%5E%21/"),
breadcrumb(".", "/b/foo/bar/+/master%5E%21/"),
breadcrumb("path", "/b/foo/bar/+/master%5E%21/path"),
breadcrumb("to", "/b/foo/bar/+/master%5E%21/path/to"),
breadcrumb("a", "/b/foo/bar/+/master%5E%21/path/to/a"),
breadcrumb("file", "/b/foo/bar/+/master%5E%21/path/to/a/file")),
view.getBreadcrumbs());
}
public void testDiffAgainstEmptyRevision() throws Exception {
ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
GitilesView view = GitilesView.diff()
.copyFrom(HOST)
.setRepositoryName("foo/bar")
.setRevision(Revision.unpeeled("master", id))
.setTreePath("/path/to/a/file")
.build();
assertEquals("/b", view.getServletPath());
assertEquals(Type.DIFF, view.getType());
assertEquals("host", view.getHostName());
assertEquals("foo/bar", view.getRepositoryName());
assertEquals(id, view.getRevision().getId());
assertEquals("master", view.getRevision().getName());
assertEquals(Revision.NULL, view.getOldRevision());
assertEquals("path/to/a/file", view.getTreePath());
assertTrue(HOST.getParameters().isEmpty());
assertEquals("/b/foo/bar/+/master%5E%21/path/to/a/file", view.toUrl());
assertEquals(
ImmutableList.of(
breadcrumb("host", "/b/?format=HTML"),
breadcrumb("foo/bar", "/b/foo/bar/"),
breadcrumb("master^!", "/b/foo/bar/+/master%5E%21/"),
breadcrumb(".", "/b/foo/bar/+/master%5E%21/"),
breadcrumb("path", "/b/foo/bar/+/master%5E%21/path"),
breadcrumb("to", "/b/foo/bar/+/master%5E%21/path/to"),
breadcrumb("a", "/b/foo/bar/+/master%5E%21/path/to/a"),
breadcrumb("file", "/b/foo/bar/+/master%5E%21/path/to/a/file")),
view.getBreadcrumbs());
}
public void testDiffAgainstOther() throws Exception {
ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
ObjectId other = ObjectId.fromString("efab5678efab5678efab5678efab5678efab5678");
GitilesView view = GitilesView.diff()
.copyFrom(HOST)
.setRepositoryName("foo/bar")
.setRevision(Revision.unpeeled("master", id))
.setOldRevision(Revision.unpeeled("efab5678", other))
.setTreePath("/path/to/a/file")
.build();
assertEquals("/b", view.getServletPath());
assertEquals(Type.DIFF, view.getType());
assertEquals("host", view.getHostName());
assertEquals("foo/bar", view.getRepositoryName());
assertEquals(id, view.getRevision().getId());
assertEquals("master", view.getRevision().getName());
assertEquals("efab5678", view.getOldRevision().getName());
assertEquals("path/to/a/file", view.getTreePath());
assertTrue(HOST.getParameters().isEmpty());
assertEquals("/b/foo/bar/+/efab5678..master/path/to/a/file", view.toUrl());
assertEquals(
ImmutableList.of(
breadcrumb("host", "/b/?format=HTML"),
breadcrumb("foo/bar", "/b/foo/bar/"),
breadcrumb("efab5678..master", "/b/foo/bar/+/efab5678..master/"),
breadcrumb(".", "/b/foo/bar/+/efab5678..master/"),
breadcrumb("path", "/b/foo/bar/+/efab5678..master/path"),
breadcrumb("to", "/b/foo/bar/+/efab5678..master/path/to"),
breadcrumb("a", "/b/foo/bar/+/efab5678..master/path/to/a"),
breadcrumb("file", "/b/foo/bar/+/efab5678..master/path/to/a/file")),
view.getBreadcrumbs());
}
public void testBranchLogWithoutPath() throws Exception {
ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
GitilesView view = GitilesView.log()
.copyFrom(HOST)
.setRepositoryName("foo/bar")
.setRevision(Revision.unpeeled("master", id))
.build();
assertEquals("/b", view.getServletPath());
assertEquals(Type.LOG, view.getType());
assertEquals("host", view.getHostName());
assertEquals("foo/bar", view.getRepositoryName());
assertEquals(id, view.getRevision().getId());
assertEquals("master", view.getRevision().getName());
assertEquals(Revision.NULL, view.getOldRevision());
assertNull(view.getTreePath());
assertTrue(HOST.getParameters().isEmpty());
assertEquals("/b/foo/bar/+log/master", view.toUrl());
assertEquals(
ImmutableList.of(
breadcrumb("host", "/b/?format=HTML"),
breadcrumb("foo/bar", "/b/foo/bar/"),
breadcrumb("master", "/b/foo/bar/+log/master")),
view.getBreadcrumbs());
}
public void testIdLogWithoutPath() throws Exception {
ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
GitilesView view = GitilesView.log()
.copyFrom(HOST)
.setRepositoryName("foo/bar")
.setRevision(Revision.unpeeled("abcd1234", id))
.build();
assertEquals("/b", view.getServletPath());
assertEquals(Type.LOG, view.getType());
assertEquals("host", view.getHostName());
assertEquals("foo/bar", view.getRepositoryName());
assertEquals(id, view.getRevision().getId());
assertEquals("abcd1234", view.getRevision().getName());
assertEquals(Revision.NULL, view.getOldRevision());
assertNull(view.getTreePath());
assertTrue(HOST.getParameters().isEmpty());
assertEquals("/b/foo/bar/+log/abcd1234", view.toUrl());
assertEquals(
ImmutableList.of(
breadcrumb("host", "/b/?format=HTML"),
breadcrumb("foo/bar", "/b/foo/bar/"),
breadcrumb("abcd1234", "/b/foo/bar/+log/abcd1234")),
view.getBreadcrumbs());
}
public void testLogWithoutOldRevision() throws Exception {
ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
GitilesView view = GitilesView.log()
.copyFrom(HOST)
.setRepositoryName("foo/bar")
.setRevision(Revision.unpeeled("master", id))
.setTreePath("/path/to/a/file")
.build();
assertEquals("/b", view.getServletPath());
assertEquals(Type.LOG, view.getType());
assertEquals("host", view.getHostName());
assertEquals("foo/bar", view.getRepositoryName());
assertEquals(id, view.getRevision().getId());
assertEquals("master", view.getRevision().getName());
assertEquals(Revision.NULL, view.getOldRevision());
assertEquals("path/to/a/file", view.getTreePath());
assertTrue(HOST.getParameters().isEmpty());
assertEquals("/b/foo/bar/+log/master/path/to/a/file", view.toUrl());
assertEquals(
ImmutableList.of(
breadcrumb("host", "/b/?format=HTML"),
breadcrumb("foo/bar", "/b/foo/bar/"),
breadcrumb("master", "/b/foo/bar/+log/master"),
breadcrumb("path", "/b/foo/bar/+log/master/path"),
breadcrumb("to", "/b/foo/bar/+log/master/path/to"),
breadcrumb("a", "/b/foo/bar/+log/master/path/to/a"),
breadcrumb("file", "/b/foo/bar/+log/master/path/to/a/file")),
view.getBreadcrumbs());
}
public void testLogWithOldRevision() throws Exception {
ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
ObjectId parent = ObjectId.fromString("efab5678efab5678efab5678efab5678efab5678");
GitilesView view = GitilesView.log()
.copyFrom(HOST)
.setRepositoryName("foo/bar")
.setRevision(Revision.unpeeled("master", id))
.setOldRevision(Revision.unpeeled("master^", parent))
.setTreePath("/path/to/a/file")
.build();
assertEquals("/b", view.getServletPath());
assertEquals(Type.LOG, view.getType());
assertEquals("host", view.getHostName());
assertEquals("foo/bar", view.getRepositoryName());
assertEquals(id, view.getRevision().getId());
assertEquals("master", view.getRevision().getName());
assertEquals("master^", view.getOldRevision().getName());
assertEquals("path/to/a/file", view.getTreePath());
assertTrue(HOST.getParameters().isEmpty());
assertEquals("/b/foo/bar/+log/master%5E..master/path/to/a/file", view.toUrl());
assertEquals(
ImmutableList.of(
breadcrumb("host", "/b/?format=HTML"),
breadcrumb("foo/bar", "/b/foo/bar/"),
breadcrumb("master^..master", "/b/foo/bar/+log/master%5E..master"),
breadcrumb("path", "/b/foo/bar/+log/master%5E..master/path"),
breadcrumb("to", "/b/foo/bar/+log/master%5E..master/path/to"),
breadcrumb("a", "/b/foo/bar/+log/master%5E..master/path/to/a"),
breadcrumb("file", "/b/foo/bar/+log/master%5E..master/path/to/a/file")),
view.getBreadcrumbs());
}
public void testEscaping() throws Exception {
ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
ObjectId parent = ObjectId.fromString("efab5678efab5678efab5678efab5678efab5678");
// Some of these values are not valid for Git, but check them anyway.
GitilesView view = GitilesView.log()
.copyFrom(HOST)
.setRepositoryName("foo?bar")
.setRevision(Revision.unpeeled("ba/d#name", id))
.setOldRevision(Revision.unpeeled("other\"na/me", parent))
.setTreePath("we ird/pa'th/name")
.putParam("k e y", "val/ue")
.setAnchor("anc#hor")
.build();
// Fields returned by getters are not escaped.
assertEquals("/b", view.getServletPath());
assertEquals(Type.LOG, view.getType());
assertEquals("host", view.getHostName());
assertEquals("foo?bar", view.getRepositoryName());
assertEquals(id, view.getRevision().getId());
assertEquals("ba/d#name", view.getRevision().getName());
assertEquals(parent, view.getOldRevision().getId());
assertEquals("other\"na/me", view.getOldRevision().getName());
assertEquals("we ird/pa'th/name", view.getTreePath());
assertEquals(ImmutableListMultimap.<String, String> of("k e y", "val/ue"),
view.getParameters());
assertEquals(
"/b/foo%3Fbar/+log/other%22na/me..ba/d%23name/we%20ird/pa%27th/name"
+ "?k+e+y=val%2Fue#anc%23hor", view.toUrl());
assertEquals(
ImmutableList.of(
// Names are not escaped (auto-escaped by Soy) but values are.
breadcrumb("host", "/b/?format=HTML"),
breadcrumb("foo?bar", "/b/foo%3Fbar/"),
breadcrumb("other\"na/me..ba/d#name", "/b/foo%3Fbar/+log/other%22na/me..ba/d%23name"),
breadcrumb("we ird", "/b/foo%3Fbar/+log/other%22na/me..ba/d%23name/we%20ird"),
breadcrumb("pa'th", "/b/foo%3Fbar/+log/other%22na/me..ba/d%23name/we%20ird/pa%27th"),
breadcrumb("name",
"/b/foo%3Fbar/+log/other%22na/me..ba/d%23name/we%20ird/pa%27th/name")),
view.getBreadcrumbs());
}
private static ImmutableMap<String, String> breadcrumb(String text, String url) {
return ImmutableMap.of("text", text, "url", url);
}
}