Author: awiner
Date: Thu Jun 4 22:02:34 2009
New Revision: 781859
URL: http://svn.apache.org/viewvc?rev=781859&view=rev
Log:
SHINDIG-1076: SocialMarkupHtmlParser breaks the document order of comments
- Patch from Márton Salomváry didn't compile, but followed idea
- And added test to verify bug and fix
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/nekohtml/NekoSimplifiedHtmlParser.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/nekohtml/SocialMarkupHtmlParser.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/parse/nekohtml/SocialMarkupHtmlParserTest.java
incubator/shindig/trunk/java/gadgets/src/test/resources/org/apache/shindig/gadgets/parse/nekohtml/test-socialmarkup.html
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/nekohtml/NekoSimplifiedHtmlParser.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/nekohtml/NekoSimplifiedHtmlParser.java?rev=781859&r1=781858&r2=781859&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/nekohtml/NekoSimplifiedHtmlParser.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/nekohtml/NekoSimplifiedHtmlParser.java
Thu Jun 4 22:02:34 2009
@@ -257,6 +257,17 @@
}
}
+ /**
+ * Flush any existing text content to the document. Call this before
appending any
+ * nodes.
+ */
+ protected void flushTextBuffer() {
+ if (builder.length() > 0) {
+ appendChild(document.createTextNode(builder.toString()));
+ builder.setLength(0);
+ }
+ }
+
/** Write an unimportant element into content as raw text */
private void startUnimportantElement(QName qName, XMLAttributes
xmlAttributes) {
builder.append('<').append(qName.rawname);
@@ -272,10 +283,7 @@
/** Create an Element in the DOM for an important element */
private Element startImportantElement(QName qName, XMLAttributes
xmlAttributes) {
- if (builder.length() > 0) {
- appendChild(document.createTextNode(builder.toString()));
- builder.setLength(0);
- }
+ flushTextBuffer();
Element element;
// Preserve XML namespace if present
@@ -385,10 +393,7 @@
public void endElement(QName qName, Augmentations augs) throws
XNIException {
if (isElementImportant(qName)) {
- if (builder.length() > 0) {
-
elementStack.peek().appendChild(document.createTextNode(builder.toString()));
- builder.setLength(0);
- }
+ flushTextBuffer();
elementStack.pop();
} else {
builder.append("</").append(qName.rawname).append('>');
@@ -404,10 +409,7 @@
}
public void endDocument(Augmentations augs) throws XNIException {
- if (builder.length() > 0) {
- appendChild(document.createTextNode(builder.toString()));
- builder.setLength(0);
- }
+ flushTextBuffer();
elementStack.pop();
}
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/nekohtml/SocialMarkupHtmlParser.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/nekohtml/SocialMarkupHtmlParser.java?rev=781859&r1=781858&r2=781859&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/nekohtml/SocialMarkupHtmlParser.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/nekohtml/SocialMarkupHtmlParser.java
Thu Jun 4 22:02:34 2009
@@ -103,6 +103,8 @@
@Override
public void comment(XMLString text, Augmentations augs) throws
XNIException {
+ flushTextBuffer();
+
// Add comments as comment nodes - needed to support sanitization
// of SocialMarkup-parsed content
Node comment = getDocument().createComment(new String(text.ch,
text.offset, text.length));
Modified:
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/parse/nekohtml/SocialMarkupHtmlParserTest.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/parse/nekohtml/SocialMarkupHtmlParserTest.java?rev=781859&r1=781858&r2=781859&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/parse/nekohtml/SocialMarkupHtmlParserTest.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/parse/nekohtml/SocialMarkupHtmlParserTest.java
Thu Jun 4 22:02:34 2009
@@ -108,7 +108,6 @@
}
@Test
- @org.junit.Ignore
public void testPlainContent() {
// Verify text content is preserved in non-script content
NodeList spanElements = document.getElementsByTagName("span");
@@ -117,6 +116,19 @@
}
@Test
+ public void testCommentOrdering() {
+ NodeList divElements = document.getElementsByTagName("div");
+ assertEquals(1, divElements.getLength());
+ NodeList children = divElements.item(0).getChildNodes();
+ assertEquals(3, children.getLength());
+
+ // Should be comment/text/comment, not comment/comment/text
+ assertEquals(Node.COMMENT_NODE, children.item(0).getNodeType());
+ assertEquals(Node.TEXT_NODE, children.item(1).getNodeType());
+ assertEquals(Node.COMMENT_NODE, children.item(2).getNodeType());
+ }
+
+ @Test
public void testInvalid() throws Exception {
String content = "<html><div id=\"div_super\" class=\"div_super\"
valign:\"middle\"></div></html>";
try {
Modified:
incubator/shindig/trunk/java/gadgets/src/test/resources/org/apache/shindig/gadgets/parse/nekohtml/test-socialmarkup.html
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/resources/org/apache/shindig/gadgets/parse/nekohtml/test-socialmarkup.html?rev=781859&r1=781858&r2=781859&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/test/resources/org/apache/shindig/gadgets/parse/nekohtml/test-socialmarkup.html
(original)
+++
incubator/shindig/trunk/java/gadgets/src/test/resources/org/apache/shindig/gadgets/parse/nekohtml/test-socialmarkup.html
Thu Jun 4 22:02:34 2009
@@ -12,4 +12,6 @@
<b>Some ${viewer} content</b>
</script>
-<span>Some content</span>
\ No newline at end of file
+<span>Some content</span>
+
+<div><!-- foo -->bar<!-- baz --></div>
\ No newline at end of file