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