Reviewers: zhoresh,
Description:
If DefaultHtmlSerializer is injected and used to render DOM nodes parsed
by Caja, xmlns attributes do not get rendered. Adds a parameter to the
constructor so a non-injected serializer can be used for testing.
Adds @Ignore to osdata test which Caja can parse but not render in
original form.
Please review this at http://codereview.appspot.com/4428075/
Affected files:
M
java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/GadgetHtmlParser.java
M
java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/caja/CajaHtmlParser.java
M
java/gadgets/src/test/java/org/apache/shindig/gadgets/parse/HtmlSerializationTest.java
Index:
java/gadgets/src/test/java/org/apache/shindig/gadgets/parse/HtmlSerializationTest.java
===================================================================
---
java/gadgets/src/test/java/org/apache/shindig/gadgets/parse/HtmlSerializationTest.java
(revision 1097597)
+++
java/gadgets/src/test/java/org/apache/shindig/gadgets/parse/HtmlSerializationTest.java
(working copy)
@@ -22,6 +22,7 @@
import org.apache.shindig.gadgets.parse.caja.CajaHtmlParser;
import org.apache.shindig.gadgets.parse.nekohtml.NekoSimplifiedHtmlParser;
import org.junit.Before;
+import org.junit.Ignore;
import org.junit.Test;
import org.w3c.dom.Document;
@@ -47,6 +48,7 @@
}
@Test
+ @Ignore("Caja parses OS script tags but does not serialize them to their
original form")
public void testSerialize() throws Exception {
String markup = "<!DOCTYPE html>\n"
+ "<html><head><title>Apache Shindig!</title></head>"
@@ -67,4 +69,23 @@
assertEquals(markup, result);
}
}
+
+ @Test
+ public void testSerializeHtml() throws Exception {
+ String markup = "<!DOCTYPE html>\n"
+ + "<html><head><title>Apache Shindig!</title></head>"
+ + "<body>"
+ + "<div xmlns:osx=\"http://ns.opensocial.org/2008/extensions\">"
+ + "<osx:NavigateToApp>\n"
+ + "<img border=\"0\" src=\"foo.gif\">\n"
+ + "</osx:NavigateToApp>\n"
+ + "</div>"
+ + "</body></html>";
+
+ for(GadgetHtmlParser parser : parsers) {
+ Document doc = parser.parseDom(markup);
+ String result = HtmlSerialization.serialize(doc);
+ assertEquals(markup, result);
+ }
+ }
}
Index:
java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/GadgetHtmlParser.java
===================================================================
---
java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/GadgetHtmlParser.java
(revision 1097597)
+++
java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/GadgetHtmlParser.java
(working copy)
@@ -62,6 +62,17 @@
protected GadgetHtmlParser(DOMImplementation documentFactory) {
this.documentFactory = documentFactory;
}
+
+ protected GadgetHtmlParser(DOMImplementation documentFactory,
+ final HtmlSerializer serializer) {
+ this.documentFactory = documentFactory;
+ this.serializerProvider = new Provider<HtmlSerializer>() {
+ @Override
+ public HtmlSerializer get() {
+ return serializer;
+ }
+ };
+ }
@Inject
public void setCacheProvider(CacheProvider cacheProvider) {
Index:
java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/caja/CajaHtmlParser.java
===================================================================
---
java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/caja/CajaHtmlParser.java
(revision 1097597)
+++
java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/caja/CajaHtmlParser.java
(working copy)
@@ -39,6 +39,7 @@
import org.apache.shindig.gadgets.http.HttpResponse;
import org.apache.shindig.gadgets.parse.GadgetHtmlParser;
import org.apache.shindig.gadgets.parse.HtmlSerialization;
+import org.apache.shindig.gadgets.parse.HtmlSerializer;
import org.apache.shindig.gadgets.parse.SocialDataTags;
import org.w3c.dom.DOMImplementation;
import org.w3c.dom.Document;
@@ -54,6 +55,11 @@
super(documentFactory);
}
+ public CajaHtmlParser(DOMImplementation documentFactory,
+ HtmlSerializer serializer) {
+ super(documentFactory, serializer);
+ }
+
@Override
protected Document parseDomImpl(String source) throws GadgetException {
DocumentFragment fragment = parseFragmentImpl(source);