You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shindig.apache.org by li...@apache.org on 2010/08/31 12:31:13 UTC

svn commit: r991145 - in /shindig/trunk/java/gadgets/src: main/java/org/apache/shindig/gadgets/rewrite/StyleAdjacencyVisitor.java test/java/org/apache/shindig/gadgets/rewrite/StyleAdjacencyVisitorTest.java

Author: lindner
Date: Tue Aug 31 10:31:12 2010
New Revision: 991145

URL: http://svn.apache.org/viewvc?rev=991145&view=rev
Log:
new test case for StyleAdjacency, and fix

Modified:
    shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/StyleAdjacencyVisitor.java
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/StyleAdjacencyVisitorTest.java

Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/StyleAdjacencyVisitor.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/StyleAdjacencyVisitor.java?rev=991145&r1=991144&r2=991145&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/StyleAdjacencyVisitor.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/StyleAdjacencyVisitor.java Tue Aug 31 10:31:12 2010
@@ -18,6 +18,8 @@
  */
 package org.apache.shindig.gadgets.rewrite;
 
+import com.google.common.base.Objects;
+import com.google.common.collect.Iterables;
 import org.apache.shindig.common.xml.DomUtil;
 import org.apache.shindig.gadgets.Gadget;
 import org.apache.shindig.gadgets.rewrite.DomWalker.Visitor;
@@ -60,20 +62,24 @@ public class StyleAdjacencyVisitor imple
       return false;
     }
 
-    Node firstChild = head.getFirstChild();
-    for (int i = nodes.size() - 1; i >= 0; i--) {
-      // Insert all in the top of the head. Relative order is maintained.
-      Node currentNode = nodes.get(i);
-      currentNode.getParentNode().removeChild(currentNode);
-      if (firstChild == null) {
-        head.appendChild(currentNode);
-      } else {
-        head.insertBefore(currentNode, firstChild);
-      }
+    // Detach nodes
+    for (Node n : nodes) {
+      n.getParentNode().removeChild(n);
+    }
 
-      firstChild = currentNode;
+    // Add nodes back to DOM
+    if (head.getFirstChild() == null) {
+      // add each node to head
+      for (Node n : nodes) {
+        head.appendChild(n);
+      }
+    } else {
+      // existing nodes in head, inject all nodes before the first one
+      Node firstChild = head.getFirstChild();
+      for (Node n : nodes)
+        head.insertBefore(n, firstChild);
     }
-    
+
     return true;
   }
 
@@ -87,6 +93,6 @@ public class StyleAdjacencyVisitor imple
         break;
       }
     }
-    return value == null ? "" : value;
+    return Objects.firstNonNull(value, "");
   }
 }

Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/StyleAdjacencyVisitorTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/StyleAdjacencyVisitorTest.java?rev=991145&r1=991144&r2=991145&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/StyleAdjacencyVisitorTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/StyleAdjacencyVisitorTest.java Tue Aug 31 10:31:12 2010
@@ -23,6 +23,7 @@ import static org.junit.Assert.assertFal
 import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
 
+import org.apache.shindig.gadgets.Gadget;
 import org.apache.shindig.gadgets.rewrite.DomWalker.Visitor.VisitStatus;
 
 import org.w3c.dom.Node;
@@ -267,7 +268,27 @@ public class StyleAdjacencyVisitorTest e
     assertEquals(1, html.getChildNodes().getLength());
     assertSame(body, html.getFirstChild());
   }
-  
+
+  @Test
+  public void singleStyleNodeInHead() throws Exception {
+    Node style = elem("style", "type", "text/css");
+    Node head = elem("head");
+    head.appendChild(style);
+
+    Node html = elem("html");
+    html.appendChild(head);
+    html.appendChild(elem("body"));
+    doc.appendChild(html);
+
+    assertTrue(revisit(style));
+
+    // Document structure sanity tests.
+    assertEquals(2, html.getChildNodes().getLength());
+    assertSame(head, html.getFirstChild());
+  }
+
+
+
   private VisitStatus visit(Node node) throws Exception {
     return new StyleAdjacencyVisitor().visit(gadget(), node);
   }