Author: gagan
Date: Mon Oct  4 17:22:23 2010
New Revision: 1004328

URL: http://svn.apache.org/viewvc?rev=1004328&view=rev
Log:
Patch by satya3656 | Issue 2085042: Updated few checks in ConcatVisitor, to 
increase its coverage

Modified:
    
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ConcatVisitor.java
    
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ConcatVisitorTest.java

Modified: 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ConcatVisitor.java
URL: 
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ConcatVisitor.java?rev=1004328&r1=1004327&r2=1004328&view=diff
==============================================================================
--- 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ConcatVisitor.java
 (original)
+++ 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ConcatVisitor.java
 Mon Oct  4 17:22:23 2010
@@ -247,9 +247,12 @@ public class ConcatVisitor implements Do
   private Element getSibling(Element root, boolean isPrev) {
     Node cur = root;
     while ((cur = getNext(cur, isPrev)) != null) {
-      if (cur.getNodeType() == Node.TEXT_NODE && 
StringUtils.isEmpty(cur.getTextContent())) {
+      // Text nodes are safe to skip, as they won't effect styles or scripts.
+      // It is also safe to skip comment nodes except for conditional comments.
+      if (cur.getNodeType() == Node.TEXT_NODE ||
+          (cur.getNodeType() == Node.COMMENT_NODE && 
!isConditionalComment(cur))) {
         continue;
-      }
+      } 
       break;
     }
     if (cur != null && cur.getNodeType() == Node.ELEMENT_NODE) {
@@ -302,4 +305,11 @@ public class ConcatVisitor implements Do
     // styles.
     return areLinkNodesCompatible && 
current.getAttribute("title").equals(next.getAttribute("title"));
   }
+
+  /**
+   * Checks if a given comment node is coditional comment.
+   */
+  private boolean isConditionalComment(Node node) {
+    return node.getNodeValue().trim().startsWith("[if");
+  }
 }

Modified: 
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ConcatVisitorTest.java
URL: 
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ConcatVisitorTest.java?rev=1004328&r1=1004327&r2=1004328&view=diff
==============================================================================
--- 
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ConcatVisitorTest.java
 (original)
+++ 
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ConcatVisitorTest.java
 Mon Oct  4 17:22:23 2010
@@ -187,10 +187,26 @@ public class ConcatVisitorTest extends D
   }
 
   @Test
-  public void dontVisitCssSeperatedByNonEmptyTextNode() throws Exception {
+  public void visitCssSeperatedByTextNode() throws Exception {
     Node textNode = doc.createTextNode("Data\n");
     Node node = elem("link", "type", "text/css", "rel", "stylesheet", "href", 
CSS1_URL_STR);
     seqNodes(node, textNode, css1);
+    assertEquals(VisitStatus.RESERVE_NODE, getVisitStatusCss(node, null));
+  }
+
+  @Test
+  public void visitCssSeperatedByNormalComment() throws Exception {
+    Node commentNode = doc.createComment("This is a comment");
+    Node node = elem("link", "type", "text/css", "rel", "stylesheet", "href", 
CSS1_URL_STR);
+    seqNodes(node, commentNode, css1);
+    assertEquals(VisitStatus.RESERVE_NODE, getVisitStatusCss(node, null));
+  }
+
+  @Test
+  public void dontVisitCssSeperatedByConditionalComment() throws Exception {
+    Node commentNode = doc.createComment("[if IE]");
+    Node node = elem("link", "type", "text/css", "rel", "stylesheet", "href", 
CSS1_URL_STR);
+    seqNodes(node, commentNode, css1);
     assertEquals(VisitStatus.BYPASS, getVisitStatusCss(node, null));
   }
 


Reply via email to