ServletTest: base class for servlet tests

There was some code duplication in servlet test classes. Also some of
them created a servlet class (e.g. DocServlet) directly, and some of them
used TestGitilesServlet.

This change:

* adds ServletTest class with methods buildHtml, buildData, buildText and
  buildJson. It uses TestGitilesServlet.
* inherits all servlet test classes from ServletTest and removes a lot
  of duplicated code.

Change-Id: Ie81c6cb4d6a4d3627d1dd462e89dfdf8f1ee54ee
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 467a65e..04f82fd 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/RefServletTest.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/RefServletTest.java
@@ -21,21 +21,14 @@
 
 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;
 import com.google.gson.reflect.TypeToken;
 
-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.eclipse.jgit.lib.ObjectId;
 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;
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
@@ -48,17 +41,7 @@
 
 /** Tests for {@link Linkifier}. */
 @RunWith(JUnit4.class)
-public class RefServletTest {
-  private TestRepository<DfsRepository> repo;
-  private GitilesServlet servlet;
-
-  @Before
-  public void setUp() throws Exception {
-    DfsRepository r = new InMemoryRepository(new DfsRepositoryDescription("test"));
-    repo = new TestRepository<>(r);
-    servlet = TestGitilesServlet.create(repo);
-  }
-
+public class RefServletTest extends ServletTest {
   private void setUpSimpleRefs() throws Exception {
     RevCommit commit = repo.branch("refs/heads/master").commit().create();
     repo.update("refs/heads/branch", commit);
@@ -75,12 +58,7 @@
     assertTrue(Repository.isValidRefName(evilRefName));
     repo.branch(evilRefName).commit().create();
 
-    FakeHttpServletRequest req = FakeHttpServletRequest.newRequest();
-    req.setPathInfo("/test/+refs/evil");
-    req.setQueryString("format=TEXT");
-    FakeHttpServletResponse res = new FakeHttpServletResponse();
-    servlet.service(req, res);
-
+    FakeHttpServletResponse res = buildText("/repo/+refs/evil");
     assertEquals(
         id(evilRefName) + " refs/evil/&lt;script&gt;window.close();&lt;/script&gt;/&amp;foo\n",
         res.getActualBodyString());
@@ -89,13 +67,8 @@
   @Test
   public void getRefsTextAll() throws Exception {
     setUpSimpleRefs();
-    FakeHttpServletRequest req = FakeHttpServletRequest.newRequest();
-    req.setPathInfo("/test/+refs");
-    req.setQueryString("format=TEXT");
-    FakeHttpServletResponse res = new FakeHttpServletResponse();
-    servlet.service(req, res);
+    FakeHttpServletResponse res = buildText("/repo/+refs");
 
-    assertEquals(200, res.getStatus());
     assertEquals(
         id("HEAD") + " HEAD\n"
         + id("refs/heads/branch") + " refs/heads/branch\n"
@@ -109,13 +82,8 @@
   @Test
   public void getRefsTextAllTrailingSlash() throws Exception {
     setUpSimpleRefs();
-    FakeHttpServletRequest req = FakeHttpServletRequest.newRequest();
-    req.setPathInfo("/test/+refs");
-    req.setQueryString("format=TEXT");
-    FakeHttpServletResponse res = new FakeHttpServletResponse();
-    servlet.service(req, res);
+    FakeHttpServletResponse res = buildText("/repo/+refs/");
 
-    assertEquals(200, res.getStatus());
     assertEquals(
         id("HEAD") + " HEAD\n"
         + id("refs/heads/branch") + " refs/heads/branch\n"
@@ -129,13 +97,8 @@
   @Test
   public void getRefsHeadsText() throws Exception {
     setUpSimpleRefs();
-    FakeHttpServletRequest req = FakeHttpServletRequest.newRequest();
-    req.setPathInfo("/test/+refs/heads");
-    req.setQueryString("format=TEXT");
-    FakeHttpServletResponse res = new FakeHttpServletResponse();
-    servlet.service(req, res);
+    FakeHttpServletResponse res = buildText("/repo/+refs/heads");
 
-    assertEquals(200, res.getStatus());
     assertEquals(
         id("refs/heads/branch") + " refs/heads/branch\n"
         + id("refs/heads/master") + " refs/heads/master\n",
@@ -145,13 +108,8 @@
   @Test
   public void getRefsHeadsTextTrailingSlash() throws Exception {
     setUpSimpleRefs();
-    FakeHttpServletRequest req = FakeHttpServletRequest.newRequest();
-    req.setPathInfo("/test/+refs/heads/");
-    req.setQueryString("format=TEXT");
-    FakeHttpServletResponse res = new FakeHttpServletResponse();
-    servlet.service(req, res);
+    FakeHttpServletResponse res = buildText("/repo/+refs/heads/");
 
-    assertEquals(200, res.getStatus());
     assertEquals(
         id("refs/heads/branch") + " refs/heads/branch\n"
         + id("refs/heads/master") + " refs/heads/master\n",
@@ -161,13 +119,8 @@
   @Test
   public void noHeadText() throws Exception {
     setUpSimpleRefs();
-    FakeHttpServletRequest req = FakeHttpServletRequest.newRequest();
-    req.setPathInfo("/test/+refs/HEAD");
-    req.setQueryString("format=TEXT");
-    FakeHttpServletResponse res = new FakeHttpServletResponse();
-    servlet.service(req, res);
+    FakeHttpServletResponse res = buildText("/repo/+refs/HEAD");
 
-    assertEquals(200, res.getStatus());
     // /+refs/foo means refs/foo(/*), so this is empty.
     assertEquals("", res.getActualBodyString());
   }
@@ -175,13 +128,8 @@
   @Test
   public void singleHeadText() throws Exception {
     setUpSimpleRefs();
-    FakeHttpServletRequest req = FakeHttpServletRequest.newRequest();
-    req.setPathInfo("/test/+refs/heads/master");
-    req.setQueryString("format=TEXT");
-    FakeHttpServletResponse res = new FakeHttpServletResponse();
-    servlet.service(req, res);
+    FakeHttpServletResponse res = buildText("/repo/+refs/heads/master");
 
-    assertEquals(200, res.getStatus());
     assertEquals(
         id("refs/heads/master") + " refs/heads/master\n",
         res.getActualBodyString());
@@ -190,13 +138,8 @@
   @Test
   public void singlePeeledTagText() throws Exception {
     setUpSimpleRefs();
-    FakeHttpServletRequest req = FakeHttpServletRequest.newRequest();
-    req.setPathInfo("/test/+refs/tags/atag");
-    req.setQueryString("format=TEXT");
-    FakeHttpServletResponse res = new FakeHttpServletResponse();
-    servlet.service(req, res);
+    FakeHttpServletResponse res = buildText("/repo/+refs/tags/atag");
 
-    assertEquals(200, res.getStatus());
     assertEquals(
         id("refs/tags/atag") + " refs/tags/atag\n"
         + peeled("refs/tags/atag") + " refs/tags/atag^{}\n",
@@ -206,7 +149,7 @@
   @Test
   public void getRefsJsonAll() throws Exception {
     setUpSimpleRefs();
-    Map<String, RefJsonData> result = buildJson("/test/+refs");
+    Map<String, RefJsonData> result = buildRefJson("/repo/+refs");
     List<String> keys = ImmutableList.copyOf(result.keySet());
     assertEquals(ImmutableList.of(
           "HEAD",
@@ -245,7 +188,7 @@
   @Test
   public void getRefsHeadsJson() throws Exception {
     setUpSimpleRefs();
-    Map<String, RefJsonData> result = buildJson("/test/+refs/heads");
+    Map<String, RefJsonData> result = buildRefJson("/repo/+refs/heads");
     List<String> keys = ImmutableList.copyOf(result.keySet());
     assertEquals(ImmutableList.of(
           "branch",
@@ -263,19 +206,10 @@
     assertNull(master.target);
   }
 
-  private Map<String, RefJsonData> buildJson(String path) throws Exception {
-    FakeHttpServletRequest req = FakeHttpServletRequest.newRequest();
-    req.setPathInfo(path);
-    req.setQueryString("format=JSON");
-    FakeHttpServletResponse res = new FakeHttpServletResponse();
-    servlet.service(req, res);
-
-    assertEquals(200, res.getStatus());
-    assertEquals("application/json", res.getHeader(HttpHeaders.CONTENT_TYPE));
-    String body = res.getActualBodyString();
-    String magic = ")]}'\n";
-    assertEquals(magic, body.substring(0, magic.length()));
-    return new Gson().fromJson(body.substring(magic.length()), new TypeToken<Map<String, RefJsonData>>() {}.getType());
+  private Map<String, RefJsonData> buildRefJson(String path) throws Exception {
+    return buildJson(
+        path,
+        new TypeToken<Map<String, RefJsonData>>() {}.getType());
   }
 
   @Test