Move RepositoryIndexServletTest methods to RefServletTest

These are just testing the output of static methods in RefServlet.
There are no repository-index-specific tests remaining in this class,
so we can delete it entirely.

Change-Id: I0d9ff2c42ca7ca26d37d30364782f0dc29f27656
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/RefServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/RefServlet.java
index 9f551df..05a985d 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/RefServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/RefServlet.java
@@ -22,6 +22,7 @@
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Ordering;
+import com.google.common.primitives.Ints;
 import com.google.common.util.concurrent.UncheckedExecutionException;
 import com.google.gson.reflect.TypeToken;
 
@@ -37,9 +38,9 @@
 import java.io.IOException;
 import java.io.Writer;
 import java.util.Collection;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.LinkedHashMap;
 
 import javax.annotation.Nullable;
 import javax.servlet.http.HttpServletRequest;
@@ -165,7 +166,7 @@
       @Nullable Ref headLeaf,
       int limit) throws IOException {
     Collection<Ref> refs = refdb.getRefs(prefix).values();
-    refs = ordering.leastOf(refs, limit > 0 ? limit + 1 : refs.size());
+    refs = ordering.leastOf(refs, limit > 0 ? Ints.saturatedCast(limit + 1L) : refs.size());
     List<Map<String, Object>> result = Lists.newArrayListWithCapacity(refs.size());
 
     for (Ref ref : refs) {
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/RefServletTest.java b/gitiles-servlet/src/test/java/com/google/gitiles/RefServletTest.java
index fcd91f3..c5b6482 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/RefServletTest.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/RefServletTest.java
@@ -14,11 +14,13 @@
 
 package com.google.gitiles;
 
+import static com.google.gitiles.TestGitilesUrls.URLS;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
 import com.google.common.net.HttpHeaders;
 import com.google.gitiles.RefServlet.RefJsonData;
 import com.google.gson.Gson;
@@ -32,6 +34,7 @@
 import org.eclipse.jgit.lib.Repository;
 import org.eclipse.jgit.revwalk.RevCommit;
 import org.eclipse.jgit.revwalk.RevTag;
+import org.eclipse.jgit.revwalk.RevWalk;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -39,6 +42,8 @@
 import java.util.List;
 import java.util.Map;
 
+import javax.servlet.http.HttpServletRequest;
+
 /** Tests for {@link Linkifier}. */
 public class RefServletTest {
   private TestRepository<DfsRepository> repo;
@@ -48,28 +53,21 @@
   public void setUp() throws Exception {
     DfsRepository r = new InMemoryRepository(new DfsRepositoryDescription("test"));
     repo = new TestRepository<DfsRepository>(r);
+    servlet = TestGitilesServlet.create(repo);
+  }
 
+  private void setUpSimpleRefs() throws Exception {
     RevCommit commit = repo.branch("refs/heads/master").commit().create();
     repo.update("refs/heads/branch", commit);
     repo.update("refs/tags/ctag", commit);
     RevTag tag = repo.tag("atag", commit);
     repo.update("refs/tags/atag", tag);
-    r.updateRef("HEAD").link("refs/heads/master");
-
-    servlet = TestGitilesServlet.create(repo);
-  }
-
-  private String id(String refName) throws IOException {
-    return ObjectId.toString(repo.getRepository().getRef(refName).getObjectId());
-  }
-
-  private String peeled(String refName) throws IOException {
-    return ObjectId.toString(repo.getRepository().peel(
-          repo.getRepository().getRef(refName)).getPeeledObjectId());
+    repo.getRepository().updateRef("HEAD").link("refs/heads/master");
   }
 
   @Test
   public void evilRefName() throws Exception {
+    setUpSimpleRefs();
     String evilRefName = "refs/evil/<script>window.close();</script>/&foo";
     assertTrue(Repository.isValidRefName(evilRefName));
     repo.branch(evilRefName).commit().create();
@@ -87,6 +85,7 @@
 
   @Test
   public void getRefsTextAll() throws Exception {
+    setUpSimpleRefs();
     FakeHttpServletRequest req = FakeHttpServletRequest.newRequest();
     req.setPathInfo("/test/+refs");
     req.setQueryString("format=TEXT");
@@ -106,6 +105,7 @@
 
   @Test
   public void getRefsTextAllTrailingSlash() throws Exception {
+    setUpSimpleRefs();
     FakeHttpServletRequest req = FakeHttpServletRequest.newRequest();
     req.setPathInfo("/test/+refs");
     req.setQueryString("format=TEXT");
@@ -125,6 +125,7 @@
 
   @Test
   public void getRefsHeadsText() throws Exception {
+    setUpSimpleRefs();
     FakeHttpServletRequest req = FakeHttpServletRequest.newRequest();
     req.setPathInfo("/test/+refs/heads");
     req.setQueryString("format=TEXT");
@@ -140,6 +141,7 @@
 
   @Test
   public void getRefsHeadsTextTrailingSlash() throws Exception {
+    setUpSimpleRefs();
     FakeHttpServletRequest req = FakeHttpServletRequest.newRequest();
     req.setPathInfo("/test/+refs/heads/");
     req.setQueryString("format=TEXT");
@@ -155,6 +157,7 @@
 
   @Test
   public void noHeadText() throws Exception {
+    setUpSimpleRefs();
     FakeHttpServletRequest req = FakeHttpServletRequest.newRequest();
     req.setPathInfo("/test/+refs/HEAD");
     req.setQueryString("format=TEXT");
@@ -168,6 +171,7 @@
 
   @Test
   public void singleHeadText() throws Exception {
+    setUpSimpleRefs();
     FakeHttpServletRequest req = FakeHttpServletRequest.newRequest();
     req.setPathInfo("/test/+refs/heads/master");
     req.setQueryString("format=TEXT");
@@ -182,6 +186,7 @@
 
   @Test
   public void singlePeeledTagText() throws Exception {
+    setUpSimpleRefs();
     FakeHttpServletRequest req = FakeHttpServletRequest.newRequest();
     req.setPathInfo("/test/+refs/tags/atag");
     req.setQueryString("format=TEXT");
@@ -197,6 +202,7 @@
 
   @Test
   public void getRefsJsonAll() throws Exception {
+    setUpSimpleRefs();
     Map<String, RefJsonData> result = buildJson("/test/+refs");
     List<String> keys = ImmutableList.copyOf(result.keySet());
     assertEquals(ImmutableList.of(
@@ -235,6 +241,7 @@
 
   @Test
   public void getRefsHeadsJson() throws Exception {
+    setUpSimpleRefs();
     Map<String, RefJsonData> result = buildJson("/test/+refs/heads");
     List<String> keys = ImmutableList.copyOf(result.keySet());
     assertEquals(ImmutableList.of(
@@ -267,4 +274,112 @@
     assertEquals(magic, body.substring(0, magic.length()));
     return new Gson().fromJson(body.substring(magic.length()), new TypeToken<Map<String, RefJsonData>>() {}.getType());
   }
+
+  @Test
+  public void emptySoy() throws Exception {
+    assertEquals(ImmutableList.of(), buildBranchesSoyData());
+    assertEquals(ImmutableList.of(), buildTagsSoyData());
+  }
+
+  @Test
+  public void branchesAndTagsSoy() throws Exception {
+    repo.branch("refs/heads/foo").commit().create();
+    repo.branch("refs/heads/bar").commit().create();
+    repo.branch("refs/tags/baz").commit().create();
+    repo.branch("refs/nope/quux").commit().create();
+
+    assertEquals(
+        ImmutableList.of(
+            ref("/b/test/+/bar", "bar"),
+            ref("/b/test/+/foo", "foo")),
+        buildBranchesSoyData());
+    assertEquals(
+        ImmutableList.of(
+            ref("/b/test/+/baz", "baz")),
+        buildTagsSoyData());
+  }
+
+  @Test
+  public void ambiguousBranchSoy() throws Exception {
+    repo.branch("refs/heads/foo").commit().create();
+    repo.branch("refs/heads/bar").commit().create();
+    repo.branch("refs/tags/foo").commit().create();
+
+    assertEquals(
+        ImmutableList.of(
+            ref("/b/test/+/bar", "bar"),
+            ref("/b/test/+/refs/heads/foo", "foo")),
+        buildBranchesSoyData());
+    assertEquals(
+        ImmutableList.of(
+            // refs/tags/ is searched before refs/heads/, so this does not
+            // appear ambiguous.
+            ref("/b/test/+/foo", "foo")),
+        buildTagsSoyData());
+  }
+
+  @Test
+  public void ambiguousRelativeToNonBranchOrTagSoy() throws Exception {
+    repo.branch("refs/foo").commit().create();
+    repo.branch("refs/heads/foo").commit().create();
+    repo.branch("refs/tags/foo").commit().create();
+
+    assertEquals(
+        ImmutableList.of(
+            ref("/b/test/+/refs/heads/foo", "foo")),
+        buildBranchesSoyData());
+    assertEquals(
+        ImmutableList.of(
+            ref("/b/test/+/refs/tags/foo", "foo")),
+        buildTagsSoyData());
+  }
+
+  @Test
+  public void refsHeadsSoy() throws Exception {
+    repo.branch("refs/heads/foo").commit().create();
+    repo.branch("refs/heads/refs/heads/foo").commit().create();
+
+    assertEquals(
+        ImmutableList.of(
+            ref("/b/test/+/foo", "foo"),
+            ref("/b/test/+/refs/heads/refs/heads/foo", "refs/heads/foo")),
+        buildBranchesSoyData());
+  }
+
+  private HttpServletRequest buildSoyRequest() {
+    HttpServletRequest req = FakeHttpServletRequest.newRequest(repo.getRepository());
+    ViewFilter.setView(req, GitilesView.repositoryIndex()
+        .setHostName(URLS.getHostName(req))
+        .setServletPath(req.getServletPath())
+        .setRepositoryName("test")
+        .build());
+    return req;
+  }
+
+  private List<?> buildBranchesSoyData() throws Exception {
+    return RefServlet.getBranchesSoyData(buildSoyRequest(), Integer.MAX_VALUE);
+  }
+
+  private List<?> buildTagsSoyData() throws Exception {
+    RevWalk rw = new RevWalk(repo.getRepository());
+    try {
+      return RefServlet.getTagsSoyData(buildSoyRequest(),
+          new TimeCache(TimeCache.defaultBuilder()), rw, Integer.MAX_VALUE);
+    } finally {
+      rw.release();
+    }
+  }
+
+  private String id(String refName) throws IOException {
+    return ObjectId.toString(repo.getRepository().getRef(refName).getObjectId());
+  }
+
+  private String peeled(String refName) throws IOException {
+    return ObjectId.toString(repo.getRepository().peel(
+          repo.getRepository().getRef(refName)).getPeeledObjectId());
+  }
+
+  private Map<String, String> ref(String url, String name) {
+    return ImmutableMap.of("url", url, "name", name);
+  }
 }
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/RepositoryIndexServletTest.java b/gitiles-servlet/src/test/java/com/google/gitiles/RepositoryIndexServletTest.java
deleted file mode 100644
index b4243c4..0000000
--- a/gitiles-servlet/src/test/java/com/google/gitiles/RepositoryIndexServletTest.java
+++ /dev/null
@@ -1,139 +0,0 @@
-// 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.gitiles.TestGitilesUrls.URLS;
-import static org.junit.Assert.assertEquals;
-
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
-
-import org.eclipse.jgit.internal.storage.dfs.DfsRepository;
-import org.eclipse.jgit.internal.storage.dfs.DfsRepositoryDescription;
-import org.eclipse.jgit.internal.storage.dfs.InMemoryRepository;
-import org.eclipse.jgit.junit.TestRepository;
-import org.junit.Before;
-import org.junit.Test;
-
-import java.io.IOException;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-
-/** Tests for {@link RepositoryIndexServlet}. */
-public class RepositoryIndexServletTest {
-  private TestRepository<DfsRepository> repo;
-  private RepositoryIndexServlet servlet;
-
-  @Before
-  public void setUp() throws Exception {
-    repo = new TestRepository<DfsRepository>(
-        new InMemoryRepository(new DfsRepositoryDescription("test")));
-    servlet = new RepositoryIndexServlet(
-        new TestGitilesAccess(repo.getRepository()),
-        new DefaultRenderer(),
-        new TimeCache());
-  }
-
-  @Test
-  public void empty() throws Exception {
-    Map<String, ?> data = buildData();
-    assertEquals(ImmutableList.of(), data.get("branches"));
-    assertEquals(ImmutableList.of(), data.get("tags"));
-  }
-
-  @Test
-  public void branchesAndTags() throws Exception {
-    repo.branch("refs/heads/foo").commit().create();
-    repo.branch("refs/heads/bar").commit().create();
-    repo.branch("refs/tags/baz").commit().create();
-    repo.branch("refs/nope/quux").commit().create();
-    Map<String, ?> data = buildData();
-
-    assertEquals(
-        ImmutableList.of(
-            ref("/b/test/+/bar", "bar"),
-            ref("/b/test/+/foo", "foo")),
-        data.get("branches"));
-    assertEquals(
-        ImmutableList.of(
-            ref("/b/test/+/baz", "baz")),
-        data.get("tags"));
-  }
-
-  @Test
-  public void ambiguousBranch() throws Exception {
-    repo.branch("refs/heads/foo").commit().create();
-    repo.branch("refs/heads/bar").commit().create();
-    repo.branch("refs/tags/foo").commit().create();
-    Map<String, ?> data = buildData();
-
-    assertEquals(
-        ImmutableList.of(
-            ref("/b/test/+/bar", "bar"),
-            ref("/b/test/+/refs/heads/foo", "foo")),
-        data.get("branches"));
-    assertEquals(
-        ImmutableList.of(
-            // refs/tags/ is searched before refs/heads/, so this does not
-            // appear ambiguous.
-            ref("/b/test/+/foo", "foo")),
-        data.get("tags"));
-  }
-
-  @Test
-  public void ambiguousRelativeToNonBranchOrTag() throws Exception {
-    repo.branch("refs/foo").commit().create();
-    repo.branch("refs/heads/foo").commit().create();
-    repo.branch("refs/tags/foo").commit().create();
-    Map<String, ?> data = buildData();
-
-    assertEquals(
-        ImmutableList.of(
-            ref("/b/test/+/refs/heads/foo", "foo")),
-        data.get("branches"));
-    assertEquals(
-        ImmutableList.of(
-            ref("/b/test/+/refs/tags/foo", "foo")),
-        data.get("tags"));
-  }
-
-  @Test
-  public void refsHeads() throws Exception {
-    repo.branch("refs/heads/foo").commit().create();
-    repo.branch("refs/heads/refs/heads/foo").commit().create();
-    Map<String, ?> data = buildData();
-
-    assertEquals(
-        ImmutableList.of(
-            ref("/b/test/+/foo", "foo"),
-            ref("/b/test/+/refs/heads/refs/heads/foo", "refs/heads/foo")),
-        data.get("branches"));
-  }
-
-  private Map<String, ?> buildData() throws IOException {
-    HttpServletRequest req = FakeHttpServletRequest.newRequest(repo.getRepository());
-    ViewFilter.setView(req, GitilesView.repositoryIndex()
-        .setHostName(URLS.getHostName(req))
-        .setServletPath(req.getServletPath())
-        .setRepositoryName("test")
-        .build());
-    return servlet.buildData(req);
-  }
-
-  private Map<String, String> ref(String url, String name) {
-    return ImmutableMap.of("url", url, "name", name);
-  }
-}