Java tutorial
// 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/+show/master", view.toUrl()); assertEquals(ImmutableList.of(breadcrumb("host", "/b/?format=HTML"), breadcrumb("foo/bar", "/b/foo/bar/"), breadcrumb("master", "/b/foo/bar/+show/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/+show/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/+show/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/+show/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/+/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 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/+/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); } }