Gitiles is a simple browser for Git repositories It is based on JGit and uses Google Closure Templates as a templating language. Access to underlying repositories is based on a few simple interfaces; currently, there is only a simple disk-based implementation, but other implementations are possible. Features include viewing repositories by branch, shortlogs, showing individual files and diffs with syntax highlighting, with many more planned. The application itself is a standard Java servlet and is configured primarily via a git config format file. Deploying the WAR in any servlet container should be possible. In addition, a standalone server may be run with jetty-maven-plugin with `mvn package && mvn jetty:run`. Change-Id: I0ab8875b6c50f7df03b9a42b4a60923a4827bde7
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/LinkifierTest.java b/gitiles-servlet/src/test/java/com/google/gitiles/LinkifierTest.java new file mode 100644 index 0000000..6f6caf2 --- /dev/null +++ b/gitiles-servlet/src/test/java/com/google/gitiles/LinkifierTest.java
@@ -0,0 +1,113 @@ +// 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.ImmutableMap; + +import junit.framework.TestCase; + +import javax.servlet.http.HttpServletRequest; + +/** Tests for {@link Linkifier}. */ +public class LinkifierTest extends TestCase { + private static final HttpServletRequest REQ = FakeHttpServletRequest.newRequest(); + + @Override + protected void setUp() throws Exception { + } + + public void testlinkifyMessageNoMatch() throws Exception { + Linkifier l = new Linkifier(TestGitilesUrls.URLS); + assertEquals(ImmutableList.of(ImmutableMap.of("text", "some message text")), + l.linkify(FakeHttpServletRequest.newRequest(), "some message text")); + } + + public void testlinkifyMessageUrl() throws Exception { + Linkifier l = new Linkifier(TestGitilesUrls.URLS); + assertEquals(ImmutableList.of( + ImmutableMap.of("text", "http://my/url", "url", "http://my/url")), + l.linkify(REQ, "http://my/url")); + assertEquals(ImmutableList.of( + ImmutableMap.of("text", "https://my/url", "url", "https://my/url")), + l.linkify(REQ, "https://my/url")); + assertEquals(ImmutableList.of( + ImmutableMap.of("text", "foo "), + ImmutableMap.of("text", "http://my/url", "url", "http://my/url"), + ImmutableMap.of("text", " bar")), + l.linkify(REQ, "foo http://my/url bar")); + assertEquals(ImmutableList.of( + ImmutableMap.of("text", "foo "), + ImmutableMap.of("text", "http://my/url", "url", "http://my/url"), + ImmutableMap.of("text", " bar "), + ImmutableMap.of("text", "http://my/other/url", "url", "http://my/other/url"), + ImmutableMap.of("text", " baz")), + l.linkify(REQ, "foo http://my/url bar http://my/other/url baz")); + } + + public void testlinkifyMessageChangeIdNoGerrit() throws Exception { + Linkifier l = new Linkifier(new GitilesUrls() { + @Override + public String getBaseGerritUrl(HttpServletRequest req) { + return null; + } + + @Override + public String getHostName(HttpServletRequest req) { + throw new UnsupportedOperationException(); + } + + @Override + public String getBaseGitUrl(HttpServletRequest req) { + throw new UnsupportedOperationException(); + } + }); + assertEquals(ImmutableList.of(ImmutableMap.of("text", "I0123456789")), + l.linkify(REQ, "I0123456789")); + assertEquals(ImmutableList.of(ImmutableMap.of("text", "Change-Id: I0123456789")), + l.linkify(REQ, "Change-Id: I0123456789")); + assertEquals(ImmutableList.of(ImmutableMap.of("text", "Change-Id: I0123456789 does not exist")), + l.linkify(REQ, "Change-Id: I0123456789 does not exist")); + } + + public void testlinkifyMessageChangeId() throws Exception { + Linkifier l = new Linkifier(TestGitilesUrls.URLS); + assertEquals(ImmutableList.of( + ImmutableMap.of("text", "I0123456789", + "url", "http://test-host-review/foo/#/q/I0123456789,n,z")), + l.linkify(REQ, "I0123456789")); + assertEquals(ImmutableList.of( + ImmutableMap.of("text", "Change-Id: "), + ImmutableMap.of("text", "I0123456789", + "url", "http://test-host-review/foo/#/q/I0123456789,n,z")), + l.linkify(REQ, "Change-Id: I0123456789")); + assertEquals(ImmutableList.of( + ImmutableMap.of("text", "Change-Id: "), + ImmutableMap.of("text", "I0123456789", + "url", "http://test-host-review/foo/#/q/I0123456789,n,z"), + ImmutableMap.of("text", " exists")), + l.linkify(REQ, "Change-Id: I0123456789 exists")); + } + + public void testlinkifyMessageUrlAndChangeId() throws Exception { + Linkifier l = new Linkifier(TestGitilesUrls.URLS); + assertEquals(ImmutableList.of( + ImmutableMap.of("text", "http://my/url/I0123456789", "url", "http://my/url/I0123456789"), + ImmutableMap.of("text", " is not change "), + ImmutableMap.of("text", "I0123456789", + "url", "http://test-host-review/foo/#/q/I0123456789,n,z")), + l.linkify(REQ, "http://my/url/I0123456789 is not change I0123456789")); + } +}