Reviewers: MikeSamuel,

Description:
When a comment is added, CajaTreeBuilder assumes the document already
has a parent node.  This is not
true if the comment appears as the first line.

Changed processComment to add use a document fragment as a parent node
when processing a comment

Please review this at http://codereview.appspot.com/1770042/show

Affected files:
  M     src/com/google/caja/parser/html/CajaTreeBuilder.java
  M     tests/com/google/caja/parser/html/DomParserTest.java


Index: tests/com/google/caja/parser/html/DomParserTest.java
===================================================================
--- tests/com/google/caja/parser/html/DomParserTest.java        (revision 4168)
+++ tests/com/google/caja/parser/html/DomParserTest.java        (working copy)
@@ -231,6 +231,14 @@
assertEquals(config, DOM2_HTML_RENDERED_GOLDEN, Nodes.render(document));
     }
   }
+
+  public final void testParseFirstLineComment() throws Exception {
+    String DOM_WITH_COMMENT = "<!-- This is a comment -->\n" + DOM2_HTML;
+    TokenQueue<HtmlTokenType> tq = tokenizeTestInput(
+        DOM_WITH_COMMENT, false, true);
+    Element el = new DomParser(tq, false, mq).parseDocument();
+    assertEquals(DOM2_HTML_RENDERED_GOLDEN, Nodes.render(el));
+  }

   public final void testParseXmlFragmentManyWays() throws Exception {
     for (DomParser p : allPossibleConfigurations(DOM3_XML, false)) {
Index: src/com/google/caja/parser/html/CajaTreeBuilder.java
===================================================================
--- src/com/google/caja/parser/html/CajaTreeBuilder.java        (revision 4168)
+++ src/com/google/caja/parser/html/CajaTreeBuilder.java        (working copy)
@@ -144,7 +144,12 @@

   @Override
protected void appendCommentToDocument(char[] buf, int start, int length) {
-    appendComment(doc.getDocumentElement(), buf, start, length);
+    Node el = doc.getDocumentElement();
+    if (null == el) {
+      el = doc.createDocumentFragment();
+      doc.appendChild(el);
+    }
+    appendComment(el, buf, start, length);
   }

   @Override


Reply via email to