The gadget loaded by Shindig doesn't contain proper title element
SHINDIG-1978
Committed for Jiaqing Guo

git-svn-id: https://svn.apache.org/repos/asf/shindig/trunk@1634227 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriter.java b/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriter.java
index c66394f..e36f8ef 100644
--- a/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriter.java
+++ b/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriter.java
@@ -61,6 +61,7 @@
 import org.apache.shindig.gadgets.rewrite.RewritingException;
 import org.apache.shindig.gadgets.spec.Feature;
 import org.apache.shindig.gadgets.spec.MessageBundle;
+import org.apache.shindig.gadgets.spec.ModulePrefs;
 import org.apache.shindig.gadgets.spec.UserPref;
 import org.apache.shindig.gadgets.spec.View;
 import org.apache.shindig.gadgets.templates.MessageELResolver;
@@ -237,9 +238,19 @@
       processChildNodes(document);
       Element head = (Element) DomUtil.getFirstNamedChildNode(document.getDocumentElement(), "head");
 
+      Element title = document.createElement("title");
+      ModulePrefs mps = gadget.getSpec().getModulePrefs();
+      String titleValue = "default title";
+      if (mps != null && mps.getTitle() != null && !mps.getTitle().isEmpty()){
+        titleValue = mps.getTitle();
+      }
+      title.appendChild(title.getOwnerDocument().createTextNode(titleValue));
+
       // Insert new content before any of the existing children of the head element
       Node firstHeadChild = head.getFirstChild();
 
+      head.insertBefore(title, firstHeadChild);
+
       Element injectedStyle = document.createElement("style");
       injectedStyle.setAttribute("type", "text/css");
       head.insertBefore(injectedStyle, firstHeadChild);
diff --git a/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriterTest.java b/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriterTest.java
index 69bc12a..d2c7169 100644
--- a/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriterTest.java
+++ b/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriterTest.java
@@ -177,6 +177,11 @@
     return makeGadgetWithSpec(defaultXml);
   }
 
+  private Gadget makeDefaultOpenSocial2GadgetWithTitle(boolean useQuirks, String title) throws GadgetException {
+    String defaultXml = "<Module specificationVersion='2' ><ModulePrefs " + (useQuirks ? "doctype='quirksmode'" : "") +" title='" + title + "'/><Content type='html'/></Module>";
+    return makeGadgetWithSpec(defaultXml);
+  }
+
   private String rewrite(Gadget gadget, String content) throws Exception {
     MutableContent mc = new MutableContent(parser, content);
     rewriter.rewrite(gadget, mc);
@@ -226,6 +231,34 @@
   }
 
   @Test
+  public void createDefaultTitleElement() throws Exception{
+    Gadget gadget = makeDefaultOpenSocial2Gadget(false);
+    String body = "hello, world.";
+    String doc = new StringBuilder()
+        .append("<html><head>")
+        .append("</head><body>")
+        .append(body)
+        .append("</body></html>")
+        .toString();
+    String rewritten = rewrite(gadget, doc);
+    assertTrue(rewritten.contains("<title>default title</title>"));
+  }
+
+  @Test
+  public void createSpecifiedTitleElement() throws Exception{
+    Gadget gadget = makeDefaultOpenSocial2GadgetWithTitle(false, "Here is title");
+    String body = "hello, world.";
+    String doc = new StringBuilder()
+        .append("<html><head>")
+        .append("</head><body>")
+        .append(body)
+        .append("</body></html>")
+        .toString();
+    String rewritten = rewrite(gadget, doc);
+    assertTrue(rewritten.contains("<title>Here is title</title>"));
+  }
+
+  @Test
   public void quirksmodeInOS2() throws Exception{
     Gadget gadget = makeDefaultOpenSocial2Gadget(true);
     String body = "hello, world.";
diff --git a/java/server/src/test/java/org/apache/shindig/server/endtoend/EndToEndTest.java b/java/server/src/test/java/org/apache/shindig/server/endtoend/EndToEndTest.java
index 834c160..f9b6e9f 100644
--- a/java/server/src/test/java/org/apache/shindig/server/endtoend/EndToEndTest.java
+++ b/java/server/src/test/java/org/apache/shindig/server/endtoend/EndToEndTest.java
@@ -215,7 +215,10 @@
   @Test
   public void testPipelining() throws Exception {
     HtmlPage page = executePageTest("pipeliningTest", null);
-    JSONArray array = new JSONArray(page.asText());
+    String text = page.asText();
+    String title = page.getTitleText();
+    assertEquals("EndToEndTest", title);
+    JSONArray array = new JSONArray(text.substring(title.length(), text.length()));
     assertEquals(3, array.length());
     Map<String, JSONObject> jsonObjects = Maps.newHashMap();
     for (int i = 0; i < array.length(); i++) {