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


Reply via email to