com.google.gitiles.GitilesViewTest.java Source code

Java tutorial

Introduction

Here is the source code for com.google.gitiles.GitilesViewTest.java

Source

// 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);
    }
}