| // 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 static com.google.common.truth.Truth.assertThat; |
| |
| import com.google.common.collect.ImmutableList; |
| import com.google.common.collect.ImmutableListMultimap; |
| import com.google.common.collect.ImmutableMap; |
| import org.eclipse.jgit.lib.ObjectId; |
| import org.junit.Test; |
| import org.junit.runner.RunWith; |
| import org.junit.runners.JUnit4; |
| |
| /** Tests for Gitiles views. */ |
| @RunWith(JUnit4.class) |
| public class GitilesViewTest { |
| private static final GitilesView HOST = |
| GitilesView.hostIndex().setServletPath("/b").setHostName("host").build(); |
| |
| @Test |
| public void emptyServletPath() throws Exception { |
| GitilesView view = GitilesView.hostIndex().setServletPath("").setHostName("host").build(); |
| assertThat(view.getServletPath()).isEqualTo(""); |
| assertThat(view.getType()).isEqualTo(GitilesView.Type.HOST_INDEX); |
| assertThat(view.getHostName()).isEqualTo("host"); |
| assertThat(view.getRepositoryName()).isNull(); |
| assertThat(view.getRevision()).isEqualTo(Revision.NULL); |
| assertThat(view.getPathPart()).isNull(); |
| assertThat(HOST.getParameters()).isEmpty(); |
| |
| assertThat(view.toUrl()).isEqualTo("/?format=HTML"); |
| assertThat(view.getBreadcrumbs()).containsExactly(breadcrumb("host", "/?format=HTML")); |
| } |
| |
| @Test |
| public void hostIndex() throws Exception { |
| assertThat(HOST.getServletPath()).isEqualTo("/b"); |
| assertThat(HOST.getType()).isEqualTo(GitilesView.Type.HOST_INDEX); |
| assertThat(HOST.getHostName()).isEqualTo("host"); |
| assertThat(HOST.getRepositoryName()).isNull(); |
| assertThat(HOST.getRevision()).isEqualTo(Revision.NULL); |
| assertThat(HOST.getPathPart()).isNull(); |
| assertThat(HOST.getParameters()).isEmpty(); |
| |
| assertThat(HOST.toUrl()).isEqualTo("/b/?format=HTML"); |
| assertThat(HOST.getBreadcrumbs()).containsExactly(breadcrumb("host", "/b/?format=HTML")); |
| } |
| |
| @Test |
| public void hostIndexOneComponentPrefix() throws Exception { |
| GitilesView view = GitilesView.hostIndex().copyFrom(HOST).setRepositoryPrefix("foo").build(); |
| |
| assertThat(view.toUrl()).isEqualTo("/b/foo/"); |
| assertThat(view.getBreadcrumbs()) |
| .containsExactly(breadcrumb("host", "/b/?format=HTML"), breadcrumb("foo", "/b/foo/")) |
| .inOrder(); |
| } |
| |
| @Test |
| public void hostIndexTwoComponentPrefix() throws Exception { |
| GitilesView view = |
| GitilesView.hostIndex().copyFrom(HOST).setRepositoryPrefix("foo/bar").build(); |
| |
| assertThat(view.toUrl()).isEqualTo("/b/foo/bar/"); |
| assertThat(view.getBreadcrumbs()) |
| .containsExactly( |
| breadcrumb("host", "/b/?format=HTML"), |
| breadcrumb("foo", "/b/foo/"), |
| breadcrumb("bar", "/b/foo/bar/")) |
| .inOrder(); |
| } |
| |
| @Test |
| public void queryParams() throws Exception { |
| GitilesView view = |
| GitilesView.log() |
| .copyFrom(HOST) |
| .setRepositoryName("repo") |
| .setRevision(Revision.named("master")) |
| .putParam("foo", "foovalue") |
| .putParam("bar", "barvalue") |
| .build(); |
| |
| assertThat(view.getServletPath()).isEqualTo("/b"); |
| assertThat(view.getType()).isEqualTo(GitilesView.Type.LOG); |
| assertThat(view.getHostName()).isEqualTo("host"); |
| assertThat(view.getRepositoryName()).isEqualTo("repo"); |
| assertThat(view.getRevision()).isEqualTo(Revision.named("master")); |
| assertThat(view.getPathPart()).isNull(); |
| assertThat(view.getParameters()) |
| .containsExactlyEntriesIn( |
| ImmutableListMultimap.of( |
| "foo", "foovalue", |
| "bar", "barvalue")); |
| |
| assertThat(view.toUrl()).isEqualTo("/b/repo/+log/master?foo=foovalue&bar=barvalue"); |
| assertThat(view.getBreadcrumbs()) |
| .containsExactly( |
| breadcrumb("host", "/b/?format=HTML"), |
| breadcrumb("repo", "/b/repo/"), |
| breadcrumb("master", "/b/repo/+log/master?foo=foovalue&bar=barvalue")) |
| .inOrder(); |
| } |
| |
| @Test |
| public void queryParamsCopiedOnlyOnSameType() throws Exception { |
| GitilesView view = |
| GitilesView.repositoryIndex() |
| .copyFrom(HOST) |
| .setRepositoryName("repo") |
| .putParam("foo", "foovalue") |
| .putParam("bar", "barvalue") |
| .build(); |
| assertThat(view.getParameters()).isNotEmpty(); |
| assertThat(GitilesView.repositoryIndex().copyFrom(view).build().getParameters()) |
| .isEqualTo(view.getParameters()); |
| assertThat(GitilesView.hostIndex().copyFrom(view).build().getParameters()).isEmpty(); |
| } |
| |
| @Test |
| public void repositoryIndex() throws Exception { |
| GitilesView view = |
| GitilesView.repositoryIndex().copyFrom(HOST).setRepositoryName("foo/bar").build(); |
| |
| assertThat(view.getServletPath()).isEqualTo("/b"); |
| assertThat(view.getType()).isEqualTo(GitilesView.Type.REPOSITORY_INDEX); |
| assertThat(view.getHostName()).isEqualTo("host"); |
| assertThat(view.getRepositoryName()).isEqualTo("foo/bar"); |
| assertThat(view.getRevision()).isEqualTo(Revision.NULL); |
| assertThat(view.getPathPart()).isNull(); |
| assertThat(HOST.getParameters()).isEmpty(); |
| |
| assertThat(view.toUrl()).isEqualTo("/b/foo/bar/"); |
| assertThat(view.getBreadcrumbs()) |
| .containsExactly( |
| breadcrumb("host", "/b/?format=HTML"), |
| breadcrumb("foo", "/b/foo/"), |
| breadcrumb("bar", "/b/foo/bar/")) |
| .inOrder(); |
| } |
| |
| @Test |
| public void refs() throws Exception { |
| GitilesView view = GitilesView.refs().copyFrom(HOST).setRepositoryName("foo/bar").build(); |
| |
| assertThat(view.getServletPath()).isEqualTo("/b"); |
| assertThat(view.getType()).isEqualTo(GitilesView.Type.REFS); |
| assertThat(view.getHostName()).isEqualTo("host"); |
| assertThat(view.getRepositoryName()).isEqualTo("foo/bar"); |
| assertThat(view.getRevision()).isEqualTo(Revision.NULL); |
| assertThat(view.getPathPart()).isNull(); |
| assertThat(HOST.getParameters()).isEmpty(); |
| |
| assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+refs"); |
| assertThat(view.getBreadcrumbs()) |
| .containsExactly( |
| breadcrumb("host", "/b/?format=HTML"), |
| breadcrumb("foo", "/b/foo/"), |
| breadcrumb("bar", "/b/foo/bar/")) |
| .inOrder(); |
| } |
| |
| @Test |
| public void refWithRevision() throws Exception { |
| ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234"); |
| GitilesView view = |
| GitilesView.revision() |
| .copyFrom(HOST) |
| .setRepositoryName("foo/bar") |
| .setRevision(Revision.unpeeled("master", id)) |
| .build(); |
| |
| assertThat(view.getServletPath()).isEqualTo("/b"); |
| assertThat(view.getType()).isEqualTo(GitilesView.Type.REVISION); |
| assertThat(view.getHostName()).isEqualTo("host"); |
| assertThat(view.getRepositoryName()).isEqualTo("foo/bar"); |
| assertThat(view.getRevision().getId()).isEqualTo(id); |
| assertThat(view.getRevision().getName()).isEqualTo("master"); |
| assertThat(view.getPathPart()).isNull(); |
| assertThat(HOST.getParameters()).isEmpty(); |
| |
| assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+/master"); |
| assertThat(view.getBreadcrumbs()) |
| .containsExactly( |
| breadcrumb("host", "/b/?format=HTML"), |
| breadcrumb("foo", "/b/foo/"), |
| breadcrumb("bar", "/b/foo/bar/"), |
| breadcrumb("master", "/b/foo/bar/+/master")) |
| .inOrder(); |
| } |
| |
| @Test |
| public void describe() throws Exception { |
| GitilesView view = |
| GitilesView.describe() |
| .copyFrom(HOST) |
| .setRepositoryName("foo/bar") |
| .setPathPart("deadbeef") |
| .build(); |
| |
| assertThat(view.getServletPath()).isEqualTo("/b"); |
| assertThat(view.getType()).isEqualTo(GitilesView.Type.DESCRIBE); |
| assertThat(view.getHostName()).isEqualTo("host"); |
| assertThat(view.getRepositoryName()).isEqualTo("foo/bar"); |
| assertThat(view.getRevision()).isEqualTo(Revision.NULL); |
| assertThat(view.getPathPart()).isEqualTo("deadbeef"); |
| assertThat(HOST.getParameters()).isEmpty(); |
| } |
| |
| @Test |
| public void noPathComponents() throws Exception { |
| ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234"); |
| GitilesView view = |
| GitilesView.path() |
| .copyFrom(HOST) |
| .setRepositoryName("foo/bar") |
| .setRevision(Revision.unpeeled("master", id)) |
| .setPathPart("/") |
| .build(); |
| |
| assertThat(view.getServletPath()).isEqualTo("/b"); |
| assertThat(view.getType()).isEqualTo(GitilesView.Type.PATH); |
| assertThat(view.getHostName()).isEqualTo("host"); |
| assertThat(view.getRepositoryName()).isEqualTo("foo/bar"); |
| assertThat(view.getRevision().getId()).isEqualTo(id); |
| assertThat(view.getRevision().getName()).isEqualTo("master"); |
| assertThat(view.getPathPart()).isEqualTo(""); |
| assertThat(HOST.getParameters()).isEmpty(); |
| |
| assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+/master/"); |
| assertThat(view.getBreadcrumbs()) |
| .containsExactly( |
| breadcrumb("host", "/b/?format=HTML"), |
| breadcrumb("foo", "/b/foo/"), |
| breadcrumb("bar", "/b/foo/bar/"), |
| breadcrumb("master", "/b/foo/bar/+/master"), |
| breadcrumb(".", "/b/foo/bar/+/master/")) |
| .inOrder(); |
| } |
| |
| @Test |
| public void onePathComponent() throws Exception { |
| ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234"); |
| GitilesView view = |
| GitilesView.path() |
| .copyFrom(HOST) |
| .setRepositoryName("foo/bar") |
| .setRevision(Revision.unpeeled("master", id)) |
| .setPathPart("/file") |
| .build(); |
| |
| assertThat(view.getServletPath()).isEqualTo("/b"); |
| assertThat(view.getType()).isEqualTo(GitilesView.Type.PATH); |
| assertThat(view.getHostName()).isEqualTo("host"); |
| assertThat(view.getRepositoryName()).isEqualTo("foo/bar"); |
| assertThat(view.getRevision().getId()).isEqualTo(id); |
| assertThat(view.getRevision().getName()).isEqualTo("master"); |
| assertThat(view.getPathPart()).isEqualTo("file"); |
| assertThat(HOST.getParameters()).isEmpty(); |
| |
| assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+/master/file"); |
| assertThat(view.getBreadcrumbs()) |
| .containsExactly( |
| breadcrumb("host", "/b/?format=HTML"), |
| breadcrumb("foo", "/b/foo/"), |
| breadcrumb("bar", "/b/foo/bar/"), |
| breadcrumb("master", "/b/foo/bar/+/master"), |
| breadcrumb(".", "/b/foo/bar/+/master/"), |
| breadcrumb("file", "/b/foo/bar/+/master/file")) |
| .inOrder(); |
| } |
| |
| @Test |
| public void oneDocFileAuto() throws Exception { |
| ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234"); |
| GitilesView view = |
| GitilesView.doc() |
| .copyFrom(HOST) |
| .setRepositoryName("foo/bar") |
| .setRevision(Revision.unpeeled("master", id)) |
| .setPathPart("/README.md") |
| .build(); |
| |
| assertThat(view.getServletPath()).isEqualTo("/b"); |
| assertThat(view.getType()).isEqualTo(GitilesView.Type.DOC); |
| assertThat(view.getHostName()).isEqualTo("host"); |
| assertThat(view.getRepositoryName()).isEqualTo("foo/bar"); |
| assertThat(view.getRevision().getId()).isEqualTo(id); |
| assertThat(view.getRevision().getName()).isEqualTo("master"); |
| assertThat(view.getPathPart()).isEqualTo("README.md"); |
| assertThat(HOST.getParameters()).isEmpty(); |
| assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+/master/README.md"); |
| } |
| |
| @Test |
| public void oneDocTree() throws Exception { |
| ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234"); |
| GitilesView view = |
| GitilesView.doc() |
| .copyFrom(HOST) |
| .setRepositoryName("foo/bar") |
| .setRevision(Revision.unpeeled("master", id)) |
| .setPathPart("/docs/") |
| .build(); |
| |
| assertThat(view.getServletPath()).isEqualTo("/b"); |
| assertThat(view.getType()).isEqualTo(GitilesView.Type.DOC); |
| assertThat(view.getHostName()).isEqualTo("host"); |
| assertThat(view.getRepositoryName()).isEqualTo("foo/bar"); |
| assertThat(view.getRevision().getId()).isEqualTo(id); |
| assertThat(view.getRevision().getName()).isEqualTo("master"); |
| assertThat(view.getPathPart()).isEqualTo("docs"); |
| assertThat(HOST.getParameters()).isEmpty(); |
| assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+doc/master/docs"); |
| } |
| |
| @Test |
| public void showMarkdown() throws Exception { |
| ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234"); |
| GitilesView view = |
| GitilesView.show() |
| .copyFrom(HOST) |
| .setRepositoryName("foo/bar") |
| .setRevision(Revision.unpeeled("master", id)) |
| .setPathPart("/README.md") |
| .build(); |
| |
| assertThat(view.getServletPath()).isEqualTo("/b"); |
| assertThat(view.getType()).isEqualTo(GitilesView.Type.SHOW); |
| assertThat(view.getHostName()).isEqualTo("host"); |
| assertThat(view.getRepositoryName()).isEqualTo("foo/bar"); |
| assertThat(view.getRevision().getId()).isEqualTo(id); |
| assertThat(view.getRevision().getName()).isEqualTo("master"); |
| assertThat(view.getPathPart()).isEqualTo("README.md"); |
| assertThat(HOST.getParameters()).isEmpty(); |
| assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+show/master/README.md"); |
| } |
| |
| @Test |
| public void rootedDoc() throws Exception { |
| ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234"); |
| GitilesView view = |
| GitilesView.rootedDoc() |
| .copyFrom(HOST) |
| .setRevision(Revision.unpeeled("master", id)) |
| .setPathPart("/docs/") |
| .build(); |
| |
| assertThat(view.getServletPath()).isEqualTo("/b"); |
| assertThat(view.getType()).isEqualTo(GitilesView.Type.ROOTED_DOC); |
| assertThat(view.getHostName()).isEqualTo("host"); |
| assertThat(view.getRevision().getId()).isEqualTo(id); |
| assertThat(view.getRevision().getName()).isEqualTo("master"); |
| assertThat(view.getPathPart()).isEqualTo("docs"); |
| assertThat(HOST.getParameters()).isEmpty(); |
| assertThat(view.toUrl()).isEqualTo("/b/docs"); |
| } |
| |
| @Test |
| public void multiplePathComponents() throws Exception { |
| ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234"); |
| GitilesView view = |
| GitilesView.path() |
| .copyFrom(HOST) |
| .setRepositoryName("foo/bar") |
| .setRevision(Revision.unpeeled("master", id)) |
| .setPathPart("/path/to/a/file") |
| .build(); |
| |
| assertThat(view.getServletPath()).isEqualTo("/b"); |
| assertThat(view.getType()).isEqualTo(GitilesView.Type.PATH); |
| assertThat(view.getHostName()).isEqualTo("host"); |
| assertThat(view.getRepositoryName()).isEqualTo("foo/bar"); |
| assertThat(view.getRevision().getId()).isEqualTo(id); |
| assertThat(view.getRevision().getName()).isEqualTo("master"); |
| assertThat(view.getPathPart()).isEqualTo("path/to/a/file"); |
| assertThat(HOST.getParameters()).isEmpty(); |
| |
| assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+/master/path/to/a/file"); |
| assertThat(view.getBreadcrumbs()) |
| .containsExactly( |
| breadcrumb("host", "/b/?format=HTML"), |
| breadcrumb("foo", "/b/foo/"), |
| breadcrumb("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")) |
| .inOrder(); |
| } |
| |
| @Test |
| public void diffAgainstFirstParent() 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)) |
| .setPathPart("/path/to/a/file") |
| .build(); |
| |
| assertThat(view.getServletPath()).isEqualTo("/b"); |
| assertThat(view.getType()).isEqualTo(GitilesView.Type.DIFF); |
| assertThat(view.getHostName()).isEqualTo("host"); |
| assertThat(view.getRepositoryName()).isEqualTo("foo/bar"); |
| assertThat(view.getRevision().getId()).isEqualTo(id); |
| assertThat(view.getRevision().getName()).isEqualTo("master"); |
| assertThat(view.getOldRevision().getName()).isEqualTo("master^"); |
| assertThat(view.getPathPart()).isEqualTo("path/to/a/file"); |
| assertThat(HOST.getParameters()).isEmpty(); |
| |
| assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+/master%5E%21/path/to/a/file"); |
| assertThat(view.getBreadcrumbs()) |
| .containsExactly( |
| breadcrumb("host", "/b/?format=HTML"), |
| breadcrumb("foo", "/b/foo/"), |
| breadcrumb("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")) |
| .inOrder(); |
| } |
| |
| @Test |
| public void diffAgainstEmptyRevision() throws Exception { |
| ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234"); |
| GitilesView view = |
| GitilesView.diff() |
| .copyFrom(HOST) |
| .setRepositoryName("foo/bar") |
| .setRevision(Revision.unpeeled("master", id)) |
| .setPathPart("/path/to/a/file") |
| .build(); |
| |
| assertThat(view.getServletPath()).isEqualTo("/b"); |
| assertThat(view.getType()).isEqualTo(GitilesView.Type.DIFF); |
| assertThat(view.getHostName()).isEqualTo("host"); |
| assertThat(view.getRepositoryName()).isEqualTo("foo/bar"); |
| assertThat(view.getRevision().getId()).isEqualTo(id); |
| assertThat(view.getRevision().getName()).isEqualTo("master"); |
| assertThat(view.getOldRevision()).isEqualTo(Revision.NULL); |
| assertThat(view.getPathPart()).isEqualTo("path/to/a/file"); |
| assertThat(HOST.getParameters()).isEmpty(); |
| |
| assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+/master%5E%21/path/to/a/file"); |
| assertThat(view.getBreadcrumbs()) |
| .containsExactly( |
| breadcrumb("host", "/b/?format=HTML"), |
| breadcrumb("foo", "/b/foo/"), |
| breadcrumb("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")) |
| .inOrder(); |
| } |
| |
| @Test |
| public void diffAgainstOther() 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)) |
| .setPathPart("/path/to/a/file") |
| .build(); |
| |
| assertThat(view.getServletPath()).isEqualTo("/b"); |
| assertThat(view.getType()).isEqualTo(GitilesView.Type.DIFF); |
| assertThat(view.getHostName()).isEqualTo("host"); |
| assertThat(view.getRepositoryName()).isEqualTo("foo/bar"); |
| assertThat(view.getRevision().getId()).isEqualTo(id); |
| assertThat(view.getRevision().getName()).isEqualTo("master"); |
| assertThat(view.getOldRevision().getName()).isEqualTo("efab5678"); |
| assertThat(view.getPathPart()).isEqualTo("path/to/a/file"); |
| assertThat(HOST.getParameters()).isEmpty(); |
| |
| assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+/efab5678..master/path/to/a/file"); |
| assertThat(view.getBreadcrumbs()) |
| .containsExactly( |
| breadcrumb("host", "/b/?format=HTML"), |
| breadcrumb("foo", "/b/foo/"), |
| breadcrumb("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")) |
| .inOrder(); |
| } |
| |
| @Test |
| public void branchLogWithoutPath() throws Exception { |
| ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234"); |
| GitilesView view = |
| GitilesView.log() |
| .copyFrom(HOST) |
| .setRepositoryName("foo/bar") |
| .setRevision(Revision.unpeeled("master", id)) |
| .build(); |
| |
| assertThat(view.getServletPath()).isEqualTo("/b"); |
| assertThat(view.getType()).isEqualTo(GitilesView.Type.LOG); |
| assertThat(view.getHostName()).isEqualTo("host"); |
| assertThat(view.getRepositoryName()).isEqualTo("foo/bar"); |
| assertThat(view.getRevision().getId()).isEqualTo(id); |
| assertThat(view.getRevision().getName()).isEqualTo("master"); |
| assertThat(view.getOldRevision()).isEqualTo(Revision.NULL); |
| assertThat(view.getPathPart()).isNull(); |
| assertThat(HOST.getParameters()).isEmpty(); |
| |
| assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+log/master"); |
| assertThat(view.getBreadcrumbs()) |
| .containsExactly( |
| breadcrumb("host", "/b/?format=HTML"), |
| breadcrumb("foo", "/b/foo/"), |
| breadcrumb("bar", "/b/foo/bar/"), |
| breadcrumb("master", "/b/foo/bar/+log/master")) |
| .inOrder(); |
| } |
| |
| @Test |
| public void idLogWithoutPath() throws Exception { |
| ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234"); |
| GitilesView view = |
| GitilesView.log() |
| .copyFrom(HOST) |
| .setRepositoryName("foo/bar") |
| .setRevision(Revision.unpeeled("abcd1234", id)) |
| .build(); |
| |
| assertThat(view.getServletPath()).isEqualTo("/b"); |
| assertThat(view.getType()).isEqualTo(GitilesView.Type.LOG); |
| assertThat(view.getHostName()).isEqualTo("host"); |
| assertThat(view.getRepositoryName()).isEqualTo("foo/bar"); |
| assertThat(view.getRevision().getId()).isEqualTo(id); |
| assertThat(view.getRevision().getName()).isEqualTo("abcd1234"); |
| assertThat(view.getOldRevision()).isEqualTo(Revision.NULL); |
| assertThat(view.getPathPart()).isNull(); |
| assertThat(HOST.getParameters()).isEmpty(); |
| |
| assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+log/abcd1234"); |
| assertThat(view.getBreadcrumbs()) |
| .containsExactly( |
| breadcrumb("host", "/b/?format=HTML"), |
| breadcrumb("foo", "/b/foo/"), |
| breadcrumb("bar", "/b/foo/bar/"), |
| breadcrumb("abcd1234", "/b/foo/bar/+log/abcd1234")) |
| .inOrder(); |
| } |
| |
| @Test |
| public void logWithoutOldRevision() throws Exception { |
| ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234"); |
| GitilesView view = |
| GitilesView.log() |
| .copyFrom(HOST) |
| .setRepositoryName("foo/bar") |
| .setRevision(Revision.unpeeled("master", id)) |
| .setPathPart("/path/to/a/file") |
| .build(); |
| |
| assertThat(view.getServletPath()).isEqualTo("/b"); |
| assertThat(view.getType()).isEqualTo(GitilesView.Type.LOG); |
| assertThat(view.getHostName()).isEqualTo("host"); |
| assertThat(view.getRepositoryName()).isEqualTo("foo/bar"); |
| assertThat(view.getRevision().getId()).isEqualTo(id); |
| assertThat(view.getRevision().getName()).isEqualTo("master"); |
| assertThat(view.getOldRevision()).isEqualTo(Revision.NULL); |
| assertThat(view.getPathPart()).isEqualTo("path/to/a/file"); |
| assertThat(HOST.getParameters()).isEmpty(); |
| |
| assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+log/master/path/to/a/file"); |
| assertThat(view.getBreadcrumbs()) |
| .containsExactly( |
| breadcrumb("host", "/b/?format=HTML"), |
| breadcrumb("foo", "/b/foo/"), |
| breadcrumb("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")) |
| .inOrder(); |
| } |
| |
| @Test |
| public void logWithOldRevision() 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)) |
| .setPathPart("/path/to/a/file") |
| .build(); |
| |
| assertThat(view.getServletPath()).isEqualTo("/b"); |
| assertThat(view.getType()).isEqualTo(GitilesView.Type.LOG); |
| assertThat(view.getHostName()).isEqualTo("host"); |
| assertThat(view.getRepositoryName()).isEqualTo("foo/bar"); |
| assertThat(view.getRevision().getId()).isEqualTo(id); |
| assertThat(view.getRevision().getName()).isEqualTo("master"); |
| assertThat(view.getOldRevision().getName()).isEqualTo("master^"); |
| assertThat(view.getPathPart()).isEqualTo("path/to/a/file"); |
| assertThat(HOST.getParameters()).isEmpty(); |
| |
| assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+log/master%5E..master/path/to/a/file"); |
| assertThat(view.getBreadcrumbs()) |
| .containsExactly( |
| breadcrumb("host", "/b/?format=HTML"), |
| breadcrumb("foo", "/b/foo/"), |
| breadcrumb("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")) |
| .inOrder(); |
| } |
| |
| @Test |
| public void logWithNoRevision() throws Exception { |
| GitilesView view = GitilesView.log().copyFrom(HOST).setRepositoryName("foo/bar").build(); |
| |
| assertThat(view.getServletPath()).isEqualTo("/b"); |
| assertThat(view.getType()).isEqualTo(GitilesView.Type.LOG); |
| assertThat(view.getHostName()).isEqualTo("host"); |
| assertThat(view.getRepositoryName()).isEqualTo("foo/bar"); |
| assertThat(view.getRevision()).isEqualTo(Revision.NULL); |
| assertThat(view.getOldRevision()).isEqualTo(Revision.NULL); |
| assertThat(HOST.getParameters()).isEmpty(); |
| |
| assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+log"); |
| assertThat(view.getBreadcrumbs()) |
| .containsExactly( |
| breadcrumb("host", "/b/?format=HTML"), |
| breadcrumb("foo", "/b/foo/"), |
| breadcrumb("bar", "/b/foo/bar/"), |
| breadcrumb("HEAD", "/b/foo/bar/+log")) |
| .inOrder(); |
| } |
| |
| @Test |
| public void archiveWithNoPath() throws Exception { |
| ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234"); |
| GitilesView view = |
| GitilesView.archive() |
| .copyFrom(HOST) |
| .setRepositoryName("foo/bar") |
| .setRevision(Revision.unpeeled("master", id)) |
| .setExtension(".tar.bz2") |
| .build(); |
| |
| assertThat(view.getServletPath()).isEqualTo("/b"); |
| assertThat(view.getType()).isEqualTo(GitilesView.Type.ARCHIVE); |
| assertThat(view.getHostName()).isEqualTo("host"); |
| assertThat(view.getRepositoryName()).isEqualTo("foo/bar"); |
| assertThat(view.getRevision().getId()).isEqualTo(id); |
| assertThat(view.getRevision().getName()).isEqualTo("master"); |
| assertThat(view.getOldRevision()).isEqualTo(Revision.NULL); |
| assertThat(view.getPathPart()).isNull(); |
| assertThat(HOST.getParameters()).isEmpty(); |
| assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+archive/master.tar.bz2"); |
| } |
| |
| @Test |
| public void archiveWithPath() throws Exception { |
| ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234"); |
| GitilesView view = |
| GitilesView.archive() |
| .copyFrom(HOST) |
| .setRepositoryName("foo/bar") |
| .setRevision(Revision.unpeeled("master", id)) |
| .setPathPart("/path/to/a/dir") |
| .setExtension(".tar.bz2") |
| .build(); |
| |
| assertThat(view.getServletPath()).isEqualTo("/b"); |
| assertThat(view.getType()).isEqualTo(GitilesView.Type.ARCHIVE); |
| assertThat(view.getHostName()).isEqualTo("host"); |
| assertThat(view.getRepositoryName()).isEqualTo("foo/bar"); |
| assertThat(view.getRevision().getId()).isEqualTo(id); |
| assertThat(view.getRevision().getName()).isEqualTo("master"); |
| assertThat(view.getOldRevision()).isEqualTo(Revision.NULL); |
| assertThat(view.getPathPart()).isEqualTo("path/to/a/dir"); |
| assertThat(HOST.getParameters()).isEmpty(); |
| assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+archive/master/path/to/a/dir.tar.bz2"); |
| } |
| |
| @Test |
| public void blame() throws Exception { |
| ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234"); |
| GitilesView view = |
| GitilesView.blame() |
| .copyFrom(HOST) |
| .setRepositoryName("foo/bar") |
| .setRevision(Revision.unpeeled("master", id)) |
| .setPathPart("/dir/file") |
| .build(); |
| |
| assertThat(view.getServletPath()).isEqualTo("/b"); |
| assertThat(view.getType()).isEqualTo(GitilesView.Type.BLAME); |
| assertThat(view.getHostName()).isEqualTo("host"); |
| assertThat(view.getRepositoryName()).isEqualTo("foo/bar"); |
| assertThat(view.getRevision().getId()).isEqualTo(id); |
| assertThat(view.getRevision().getName()).isEqualTo("master"); |
| assertThat(view.getOldRevision()).isEqualTo(Revision.NULL); |
| assertThat(view.getPathPart()).isEqualTo("dir/file"); |
| assertThat(HOST.getParameters()).isEmpty(); |
| assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+blame/master/dir/file"); |
| assertThat(view.getBreadcrumbs()) |
| .containsExactly( |
| breadcrumb("host", "/b/?format=HTML"), |
| breadcrumb("foo", "/b/foo/"), |
| breadcrumb("bar", "/b/foo/bar/"), |
| breadcrumb("master", "/b/foo/bar/+/master"), |
| breadcrumb(".", "/b/foo/bar/+/master/"), |
| breadcrumb("dir", "/b/foo/bar/+/master/dir"), |
| breadcrumb("file", "/b/foo/bar/+blame/master/dir/file")) |
| .inOrder(); |
| } |
| |
| @Test |
| public void escaping() 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)) |
| .setPathPart("we ird/pa'th/name") |
| .putParam("k e y", "val/ue") |
| .setAnchor("anc#hor") |
| .build(); |
| |
| // Fields returned by getters are not escaped. |
| assertThat(view.getServletPath()).isEqualTo("/b"); |
| assertThat(view.getType()).isEqualTo(GitilesView.Type.LOG); |
| assertThat(view.getHostName()).isEqualTo("host"); |
| assertThat(view.getRepositoryName()).isEqualTo("foo?bar"); |
| assertThat(view.getRevision().getId()).isEqualTo(id); |
| assertThat(view.getRevision().getName()).isEqualTo("ba/d#name"); |
| assertThat(view.getOldRevision().getId()).isEqualTo(parent); |
| assertThat(view.getOldRevision().getName()).isEqualTo("other\"na/me"); |
| assertThat(view.getPathPart()).isEqualTo("we ird/pa'th/name"); |
| assertThat(view.getParameters()) |
| .isEqualTo(ImmutableListMultimap.<String, String>of("k e y", "val/ue")); |
| |
| String qs = "?k+e+y=val%2Fue"; |
| assertThat(view.toUrl()) |
| .isEqualTo( |
| "/b/foo%3Fbar/+log/other%22na/me..ba/d%23name/we%20ird/pa%27th/name" |
| + qs |
| + "#anc%23hor"); |
| assertThat(view.getBreadcrumbs()) |
| .containsExactly( |
| // 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" + qs), |
| breadcrumb("we ird", "/b/foo%3Fbar/+log/other%22na/me..ba/d%23name/we%20ird" + qs), |
| breadcrumb( |
| "pa'th", "/b/foo%3Fbar/+log/other%22na/me..ba/d%23name/we%20ird/pa%27th" + qs), |
| breadcrumb( |
| "name", "/b/foo%3Fbar/+log/other%22na/me..ba/d%23name/we%20ird/pa%27th/name" + qs)) |
| .inOrder(); |
| } |
| |
| @Test |
| public void breadcrumbsHasSingleTree() throws Exception { |
| ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234"); |
| GitilesView view = |
| GitilesView.path() |
| .copyFrom(HOST) |
| .setRepositoryName("foo/bar") |
| .setRevision(Revision.unpeeled("master", id)) |
| .setPathPart("/path/to/a/file") |
| .build(); |
| |
| assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+/master/path/to/a/file"); |
| assertThat(view.getBreadcrumbs(ImmutableList.of(false, true, true))) |
| .containsExactly( |
| breadcrumb("host", "/b/?format=HTML"), |
| breadcrumb("foo", "/b/foo/"), |
| breadcrumb("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?autodive=0"), |
| breadcrumb("a", "/b/foo/bar/+/master/path/to/a?autodive=0"), |
| breadcrumb("file", "/b/foo/bar/+/master/path/to/a/file")) |
| .inOrder(); |
| assertThat(view.getBreadcrumbs(ImmutableList.of(true, false, false))) |
| .containsExactly( |
| breadcrumb("host", "/b/?format=HTML"), |
| breadcrumb("foo", "/b/foo/"), |
| breadcrumb("bar", "/b/foo/bar/"), |
| breadcrumb("master", "/b/foo/bar/+/master"), |
| breadcrumb(".", "/b/foo/bar/+/master/"), |
| breadcrumb("path", "/b/foo/bar/+/master/path?autodive=0"), |
| 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")) |
| .inOrder(); |
| } |
| |
| @Test |
| public void breadcrumbsHasSingleTreeRootPath() throws Exception { |
| ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234"); |
| GitilesView view = |
| GitilesView.path() |
| .copyFrom(HOST) |
| .setRepositoryName("foo/bar") |
| .setRevision(Revision.unpeeled("master", id)) |
| .setPathPart("") |
| .build(); |
| |
| assertThat(view.toUrl()).isEqualTo("/b/foo/bar/+/master/"); |
| assertThat(view.getBreadcrumbs(ImmutableList.<Boolean>of())) |
| .containsExactly( |
| breadcrumb("host", "/b/?format=HTML"), |
| breadcrumb("foo", "/b/foo/"), |
| breadcrumb("bar", "/b/foo/bar/"), |
| breadcrumb("master", "/b/foo/bar/+/master"), |
| breadcrumb(".", "/b/foo/bar/+/master/")) |
| .inOrder(); |
| } |
| |
| private static ImmutableMap<String, String> breadcrumb(String text, String url) { |
| return ImmutableMap.of("text", text, "url", url); |
| } |
| } |