You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shindig.apache.org by ga...@apache.org on 2010/10/08 20:52:38 UTC

svn commit: r1005954 - in /shindig/trunk/java: common/conf/ gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ gadgets/src/test/java/org/apache/shindig/gadgets/render/ gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/

Author: gagan
Date: Fri Oct  8 18:52:38 2010
New Revision: 1005954

URL: http://svn.apache.org/viewvc?rev=1005954&view=rev
Log:
patch by Kuntal Loya | Issue 2164045: Enabling single resource concatenation

Modified:
    shindig/trunk/java/common/conf/shindig.properties
    shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ConcatVisitor.java
    shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterFeature.java
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/SanitizingGadgetRewriterTest.java
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/SanitizingResponseRewriterTest.java
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/BaseRewriterTestCase.java
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ConcatVisitorTest.java
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ContentRewriterFeatureTestCase.java
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ContentRewriterFeatureTestCaseOS9.java
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/RewriterTestBase.java

Modified: shindig/trunk/java/common/conf/shindig.properties
URL: http://svn.apache.org/viewvc/shindig/trunk/java/common/conf/shindig.properties?rev=1005954&r1=1005953&r2=1005954&view=diff
==============================================================================
--- shindig/trunk/java/common/conf/shindig.properties (original)
+++ shindig/trunk/java/common/conf/shindig.properties Fri Oct  8 18:52:38 2010
@@ -53,6 +53,7 @@ shindig.content-rewrite.expires=86400
 shindig.content-rewrite.proxy-url=/gadgets/proxy?container=default&url=
 shindig.content-rewrite.concat-url=/gadgets/concat?container=default&
 shindig.content-rewrite.enable-split-js-concat=true
+shindig.content-rewrite.enable-single-resource-concat=false
 
 #
 # Default set of forced libs to allow for better caching

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=1005954&r1=1005953&r2=1005954&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 Fri Oct  8 18:52:38 2010
@@ -58,6 +58,7 @@ public class ConcatVisitor implements Do
   private final ConcatUriManager.Type type;
   private final ContentRewriterFeature.Config config;
   private final boolean split;
+  private final boolean singleResourceConcat;
 
   private ConcatVisitor(ContentRewriterFeature.Config config,
       ConcatUriManager uriManager, ConcatUriManager.Type type) {
@@ -65,6 +66,7 @@ public class ConcatVisitor implements Do
     this.type = type;
     this.config = config;
     this.split = (type == ConcatUriManager.Type.JS && config.isSplitJsEnabled());
+    this.singleResourceConcat = config.isSingleResourceConcatEnabled();
   }
 
   public VisitStatus visit(Gadget gadget, Node node) throws RewritingException {
@@ -77,7 +79,7 @@ public class ConcatVisitor implements Do
 
     Element element = (Element)node;
     if (isRewritableExternData(element)) {
-      if (split ||
+      if (split || singleResourceConcat ||
           isRewritableExternData(getSibling(element, true)) ||
           isRewritableExternData(getSibling(element, false))) {
         return VisitStatus.RESERVE_NODE;

Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterFeature.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterFeature.java?rev=1005954&r1=1005953&r2=1005954&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterFeature.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterFeature.java Fri Oct  8 18:52:38 2010
@@ -121,7 +121,7 @@ public class ContentRewriterFeature {
     public Config createRewriteAllFeature(int ttl) {
       return new Config(
           ".*", "", (ttl == -1) ? "HTTP" : Integer.toString(ttl),
-          "", false, true);
+          "", false, true, false);
     }
   }
 
@@ -134,8 +134,11 @@ public class ContentRewriterFeature {
         @Named("shindig.content-rewrite.expires")String expires,
         @Named("shindig.content-rewrite.include-tags")String includeTags,
         @Named("shindig.content-rewrite.only-allow-excludes")boolean onlyAllowExcludes,
-        @Named("shindig.content-rewrite.enable-split-js-concat")boolean enableSplitJsConcat) {
-      super(includeUrls, excludeUrls, expires, includeTags, onlyAllowExcludes, enableSplitJsConcat);
+        @Named("shindig.content-rewrite.enable-split-js-concat")boolean enableSplitJsConcat,
+        @Named("shindig.content-rewrite.enable-single-resource-concat")boolean
+            enableSingleResourceConcatenation) {
+      super(includeUrls, excludeUrls, expires, includeTags, onlyAllowExcludes,
+            enableSplitJsConcat, enableSingleResourceConcatenation);
     }
   }
 
@@ -151,6 +154,7 @@ public class ContentRewriterFeature {
     private final Integer expires;
     private final boolean onlyAllowExcludes;
     private final boolean enableSplitJs;
+    private final boolean enableSingleResourceConcatenation;
 
     // Lazily computed
     private Integer fingerprint;
@@ -166,10 +170,11 @@ public class ContentRewriterFeature {
      * @param defaultTags Set of default tags that can be rewritten
      * @param onlyAllowExcludes If includes are always implicitly "all"
      * @param enableSplitJs If split-JS technique is enabled
+     * @param enableSingleResourceConcatenation If single resource can be concatenated with itself
      */
     Config(String defaultInclude,
         String defaultExclude, String defaultExpires, String defaultTags,
-        boolean onlyAllowExcludes, boolean enableSplitJs) {
+        boolean onlyAllowExcludes, boolean enableSplitJs, boolean enableSingleResourceConcatenation) {
       // Set up includes from defaultInclude param
       this.includes = getMatchBundle(paramTrim(defaultInclude),
           Collections.<String>emptyList());
@@ -199,6 +204,7 @@ public class ContentRewriterFeature {
       // Save config for onlyAllowExcludes
       this.onlyAllowExcludes = onlyAllowExcludes;
       this.enableSplitJs = enableSplitJs;
+      this.enableSingleResourceConcatenation = enableSingleResourceConcatenation;
     }
 
     Config(GadgetSpec spec, Config defaultConfig) {
@@ -275,6 +281,7 @@ public class ContentRewriterFeature {
       }
       this.expires = expiresVal;
       this.enableSplitJs = defaultConfig.enableSplitJs;
+      this.enableSingleResourceConcatenation = defaultConfig.enableSingleResourceConcatenation;
     }
 
     private String paramTrim(String param) {
@@ -380,6 +387,10 @@ public class ContentRewriterFeature {
       return enableSplitJs;
     }
 
+    public boolean isSingleResourceConcatEnabled() {
+      return enableSingleResourceConcatenation;
+    }
+
     /**
      * @return fingerprint of rewriting rule for cache-busting
      */

Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/SanitizingGadgetRewriterTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/SanitizingGadgetRewriterTest.java?rev=1005954&r1=1005953&r2=1005954&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/SanitizingGadgetRewriterTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/SanitizingGadgetRewriterTest.java Fri Oct  8 18:52:38 2010
@@ -121,7 +121,7 @@ public class SanitizingGadgetRewriterTes
     ContentRewriterFeature.Factory rewriterFeatureFactory =
         new ContentRewriterFeature.Factory(null,
           new ContentRewriterFeature.DefaultConfig(
-            ".*", "", "HTTP", "embed,img,script,link,style", false, false));
+            ".*", "", "HTTP", "embed,img,script,link,style", false, false, false));
     return new SanitizingGadgetRewriter(newTags, attributes, rewriterFeatureFactory,
         new CajaCssSanitizer(new CajaCssParser()), new PassthruManager("host.com", "/proxy"));
   }

Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/SanitizingResponseRewriterTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/SanitizingResponseRewriterTest.java?rev=1005954&r1=1005953&r2=1005954&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/SanitizingResponseRewriterTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/SanitizingResponseRewriterTest.java Fri Oct  8 18:52:38 2010
@@ -57,7 +57,7 @@ public class SanitizingResponseRewriterT
     ContentRewriterFeature.Factory rewriterFeatureFactory =
         new ContentRewriterFeature.Factory(null,
           new ContentRewriterFeature.DefaultConfig(
-            ".*", "", "HTTP", "embed,img,script,link,style", false, false));
+            ".*", "", "HTTP", "embed,img,script,link,style", false, false, false));
     return new SanitizingResponseRewriter(rewriterFeatureFactory,
         new CajaCssSanitizer(new CajaCssParser()), new PassthruManager());
   }

Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/BaseRewriterTestCase.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/BaseRewriterTestCase.java?rev=1005954&r1=1005953&r2=1005954&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/BaseRewriterTestCase.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/BaseRewriterTestCase.java Fri Oct  8 18:52:38 2010
@@ -74,7 +74,7 @@ public abstract class BaseRewriterTestCa
   @Before
   public void setUp() throws Exception {
     rewriterFeatureFactory = new ContentRewriterFeature.Factory(null,
-        new ContentRewriterFeature.DefaultConfig(".*", "", "86400", "embed,img,script,link,style", false, false));
+        new ContentRewriterFeature.DefaultConfig(".*", "", "86400", "embed,img,script,link,style", false, false, false));
     defaultRewriterFeature = rewriterFeatureFactory.getDefault();
     tags = defaultRewriterFeature.getIncludedTags();
     injector = Guice.createInjector(getParseModule(), new PropertiesModule(), new TestModule());
@@ -221,7 +221,7 @@ public abstract class BaseRewriterTestCa
     private final ContentRewriterFeature.Config feature;
 
     public FakeRewriterFeatureFactory(ContentRewriterFeature.Config feature) {
-      super(null, new ContentRewriterFeature.DefaultConfig(".*", "", "HTTP", "", false, false));
+      super(null, new ContentRewriterFeature.DefaultConfig(".*", "", "HTTP", "", false, false, false));
       this.feature = feature;
     }
 

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=1005954&r1=1005953&r2=1005954&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 Fri Oct  8 18:52:38 2010
@@ -27,6 +27,7 @@ import static org.junit.Assert.assertFal
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
+import org.apache.commons.lang.StringUtils;
 
 import org.apache.shindig.common.uri.Uri;
 import org.apache.shindig.common.uri.UriBuilder;
@@ -128,28 +129,41 @@ public class ConcatVisitorTest extends D
 
   @Test
   public void dontVisitSingleJs() throws Exception {
-    assertEquals(VisitStatus.BYPASS, getVisitStatusJs(js1, null, false));
+    assertEquals(VisitStatus.BYPASS, getVisitStatusJs(js1, null, false, false));
   }
 
   @Test
   public void dontVisitSingleCss() throws Exception {
-    assertEquals(VisitStatus.BYPASS, getVisitStatusCss(css1, null));
+    assertEquals(VisitStatus.BYPASS, getVisitStatusCss(css1, null, false));
+  }
+
+  @Test
+  public void visitSingleJsWhenSingleResourceEnabled() throws Exception {
+    assertEquals(VisitStatus.RESERVE_NODE, getVisitStatusJs(js1, null, false, true));
+  }
+
+  @Test
+  public void visitSingleCssWhenSingleResourceEnabled() throws Exception {
+    assertEquals(VisitStatus.RESERVE_NODE, getVisitStatusCss(css1, null, true));
   }
 
   @Test
   public void dontVisitJsWithoutSrc() throws Exception {
-    assertEquals(VisitStatus.BYPASS, getVisitStatusJs(elem("script"), null, false));
+    assertEquals(VisitStatus.BYPASS, getVisitStatusJs(elem("script"), null, false, false));
+    assertEquals(VisitStatus.BYPASS, getVisitStatusJs(elem("script"), null, false, true));
   }
 
   @Test
   public void dontVisitUnknown() throws Exception {
-    assertEquals(VisitStatus.BYPASS, getVisitStatusJs(elem("div"), null, true));
-    assertEquals(VisitStatus.BYPASS, getVisitStatusCss(elem("div"), null));
+    assertEquals(VisitStatus.BYPASS, getVisitStatusJs(elem("div"), null, true, false));
+    assertEquals(VisitStatus.BYPASS, getVisitStatusJs(elem("div"), null, true, true));
+    assertEquals(VisitStatus.BYPASS, getVisitStatusCss(elem("div"), null, false));
+    assertEquals(VisitStatus.BYPASS, getVisitStatusCss(elem("div"), null, true));
   }
 
   @Test
   public void dontVisitContigJsMiddleNotRewritable() throws Exception {
-    ContentRewriterFeature.Config config = config(".*two.*", false);
+    ContentRewriterFeature.Config config = config(".*two.*", false, false);
     seqNodes(js1, js2, js3);
     assertEquals(VisitStatus.BYPASS, getVisitStatusJs(config, js1));
     assertEquals(VisitStatus.BYPASS, getVisitStatusJs(config, js2));
@@ -157,8 +171,17 @@ public class ConcatVisitorTest extends D
   }
 
   @Test
+  public void visitJsButNotMiddleWhenNotRewritable() throws Exception {
+    ContentRewriterFeature.Config config = config(".*two.*", false, true);
+    seqNodes(js1, js2, js3);
+    assertEquals(VisitStatus.RESERVE_NODE, getVisitStatusJs(config, js1));
+    assertEquals(VisitStatus.BYPASS, getVisitStatusJs(config, js2));
+    assertEquals(VisitStatus.RESERVE_NODE, getVisitStatusJs(config, js3));
+  }
+
+  @Test
   public void dontVisitContigCssMiddleNotRewritable() throws Exception {
-    ContentRewriterFeature.Config config = config(".*two.*", true);
+    ContentRewriterFeature.Config config = config(".*two.*", true, false);
     seqNodes(css1, css2, css3);
     assertEquals(VisitStatus.BYPASS, getVisitStatusCss(config, css1));
     assertEquals(VisitStatus.BYPASS, getVisitStatusCss(config, css2));
@@ -166,8 +189,17 @@ public class ConcatVisitorTest extends D
   }
 
   @Test
+  public void visitCssButNotMiddleWhenNotRewritable() throws Exception {
+    ContentRewriterFeature.Config config = config(".*two.*", true, true);
+    seqNodes(css1, css2, css3);
+    assertEquals(VisitStatus.RESERVE_NODE, getVisitStatusCss(config, css1));
+    assertEquals(VisitStatus.BYPASS, getVisitStatusCss(config, css2));
+    assertEquals(VisitStatus.RESERVE_NODE, getVisitStatusCss(config, css3));
+  }
+
+  @Test
   public void dontVisitSeparatedJsNotSplit() throws Exception {
-    ContentRewriterFeature.Config config = config(null, false);
+    ContentRewriterFeature.Config config = config(null, false, false);
     Node sep1 = elem("div");
     Node sep2 = elem("span");
     seqNodes(js1, sep1, js2, sep2, js3);
@@ -183,7 +215,8 @@ public class ConcatVisitorTest extends D
     Node textNode = doc.createTextNode("");
     Node node = elem("link", "type", "text/css", "rel", "stylesheet", "href", CSS1_URL_STR);
     seqNodes(node, textNode, css1);
-    assertEquals(VisitStatus.RESERVE_NODE, getVisitStatusCss(node, null));
+    assertEquals(VisitStatus.RESERVE_NODE, getVisitStatusCss(node, null, false));
+    assertEquals(VisitStatus.RESERVE_NODE, getVisitStatusCss(node, null, true));
   }
 
   @Test
@@ -191,7 +224,8 @@ public class ConcatVisitorTest extends D
     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));
+    assertEquals(VisitStatus.RESERVE_NODE, getVisitStatusCss(node, null, false));
+    assertEquals(VisitStatus.RESERVE_NODE, getVisitStatusCss(node, null, true));
   }
 
   @Test
@@ -199,7 +233,8 @@ public class ConcatVisitorTest extends D
     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));
+    assertEquals(VisitStatus.RESERVE_NODE, getVisitStatusCss(node, null, false));
+    assertEquals(VisitStatus.RESERVE_NODE, getVisitStatusCss(node, null, true));
   }
 
   @Test
@@ -207,79 +242,117 @@ public class ConcatVisitorTest extends D
     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));
+    assertEquals(VisitStatus.BYPASS, getVisitStatusCss(node, null, false));
   }
 
   @Test
-  public void dontVisitRelFreeCss() throws Exception {
+  public void visitCssSeperatedByConditionalCommentWhenSingleResourceConcatEnabled()
+      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.RESERVE_NODE, getVisitStatusCss(node, null, true));
+  }
+
+
+  @Test
+  public void dontVisitCssWithoutRelAttrib() throws Exception {
     Node node = elem("link", "type", "text/css", "href", CSS1_URL_STR);
     seqNodes(node, css1);
-    assertEquals(VisitStatus.BYPASS, getVisitStatusCss(node, null));
+    assertEquals(VisitStatus.BYPASS, getVisitStatusCss(node, null, false));
+    assertEquals(VisitStatus.BYPASS, getVisitStatusCss(node, null, true));
   }
 
   @Test
-  public void dontVisitTypeCssFreeCss() throws Exception {
+  public void dontVisitCssWithoutTypeAttribAsCss() throws Exception {
     Node node = elem("link", "rel", "stylesheet", "href", CSS1_URL_STR);
     seqNodes(node, css1);
-    assertEquals(VisitStatus.BYPASS, getVisitStatusCss(node, null));
+    assertEquals(VisitStatus.BYPASS, getVisitStatusCss(node, null, false));
+    assertEquals(VisitStatus.BYPASS, getVisitStatusCss(node, null, true));
   }
 
   @Test
   public void dontVisitTypeCssWrongRelAttributes() throws Exception {
     Node node = elem("link", "rel", "alternate", "type", "text/css", "href", CSS1_URL_STR);
     seqNodes(node, css1);
-    assertEquals(VisitStatus.BYPASS, getVisitStatusCss(node, null));
+    assertEquals(VisitStatus.BYPASS, getVisitStatusCss(node, null, false));
+    assertEquals(VisitStatus.BYPASS, getVisitStatusCss(node, null, true));
   }
 
   @Test
   public void dontVisitTypeCssWrongTypeAttributes() throws Exception {
     Node node = elem("link", "rel", "stylesheet", "type", "text/javascript", "href", CSS1_URL_STR);
     seqNodes(node, css1);
-    assertEquals(VisitStatus.BYPASS, getVisitStatusCss(node, null));
+    assertEquals(VisitStatus.BYPASS, getVisitStatusCss(node, null, false));
+    assertEquals(VisitStatus.BYPASS, getVisitStatusCss(node, null, true));
   }
 
   @Test
   public void dontVisitCssWithoutAttribs() throws Exception {
     Node node = elem("link", "href", CSS1_URL_STR);
     seqNodes(node, css1);
-    assertEquals(VisitStatus.BYPASS, getVisitStatusCss(node, null));
+    assertEquals(VisitStatus.BYPASS, getVisitStatusCss(node, null, false));
+    assertEquals(VisitStatus.BYPASS, getVisitStatusCss(node, null, true));
   }
 
   @Test
   public void visitContigJs() throws Exception {
     seqNodes(js1, js2, js3);
-    assertEquals(VisitStatus.RESERVE_NODE, getVisitStatusJs(js1, null, false));
-    assertEquals(VisitStatus.RESERVE_NODE, getVisitStatusJs(js2, null, false));
-    assertEquals(VisitStatus.RESERVE_NODE, getVisitStatusJs(js3, null, false));
+    assertEquals(VisitStatus.RESERVE_NODE, getVisitStatusJs(js1, null, false, false));
+    assertEquals(VisitStatus.RESERVE_NODE, getVisitStatusJs(js2, null, false, false));
+    assertEquals(VisitStatus.RESERVE_NODE, getVisitStatusJs(js3, null, false, false));
   }
 
   @Test
   public void visitContigCss() throws Exception {
     seqNodes(css1, css2, css3);
-    assertEquals(VisitStatus.RESERVE_NODE, getVisitStatusCss(css1, null));
-    assertEquals(VisitStatus.RESERVE_NODE, getVisitStatusCss(css2, null));
-    assertEquals(VisitStatus.RESERVE_NODE, getVisitStatusCss(css3, null));
+    assertEquals(VisitStatus.RESERVE_NODE, getVisitStatusCss(css1, null, false));
+    assertEquals(VisitStatus.RESERVE_NODE, getVisitStatusCss(css2, null, false));
+    assertEquals(VisitStatus.RESERVE_NODE, getVisitStatusCss(css3, null, false));
   }
 
   @Test
   public void visitSplitJsSingle() throws Exception {
-    assertEquals(VisitStatus.RESERVE_NODE, getVisitStatusJs(js1, null, true));
+    assertEquals(VisitStatus.RESERVE_NODE, getVisitStatusJs(js1, null, true, false));
   }
 
   @Test
   public void visitSplitJsSeparated() throws Exception {
     seqNodes(js1, elem("span"), js2, elem("div"), js3);
-    assertEquals(VisitStatus.RESERVE_NODE, getVisitStatusJs(js1, null, true));
-    assertEquals(VisitStatus.RESERVE_NODE, getVisitStatusJs(js2, null, true));
-    assertEquals(VisitStatus.RESERVE_NODE, getVisitStatusJs(js3, null, true));
+    assertEquals(VisitStatus.RESERVE_NODE, getVisitStatusJs(js1, null, true, false));
+    assertEquals(VisitStatus.RESERVE_NODE, getVisitStatusJs(js2, null, true, false));
+    assertEquals(VisitStatus.RESERVE_NODE, getVisitStatusJs(js3, null, true, false));
   }
 
   @Test
   public void visitSplitJsContiguous() throws Exception {
     seqNodes(js1, js2, js3);
-    assertEquals(VisitStatus.RESERVE_NODE, getVisitStatusJs(js1, null, true));
-    assertEquals(VisitStatus.RESERVE_NODE, getVisitStatusJs(js2, null, true));
-    assertEquals(VisitStatus.RESERVE_NODE, getVisitStatusJs(js3, null, true));
+    assertEquals(VisitStatus.RESERVE_NODE, getVisitStatusJs(js1, null, true, false));
+    assertEquals(VisitStatus.RESERVE_NODE, getVisitStatusJs(js2, null, true, false));
+    assertEquals(VisitStatus.RESERVE_NODE, getVisitStatusJs(js3, null, true, false));
+  }
+
+  @Test
+  public void concatSingleJs() throws Exception {
+    List<Node> nodes = seqNodes(js1);
+    Node parent = js1.getParentNode();
+
+    // Sanity check.
+    assertEquals(1, parent.getChildNodes().getLength());
+
+    SimpleConcatUriManager mgr = simpleMgr();
+    ConcatVisitor.Js rewriter = new ConcatVisitor.Js(config(null, false, true), mgr);
+    assertTrue(rewriter.revisit(gadget(), nodes));
+
+    // There should be one JS node child which is rewritten.
+    assertEquals(1, parent.getChildNodes().getLength());
+    Element concatNode = (Element)parent.getChildNodes().item(0);
+    Uri concatUri = Uri.parse(concatNode.getAttribute("src"));
+    assertEquals(CONCAT_BASE_URI.getScheme(), concatUri.getScheme());
+    assertEquals(CONCAT_BASE_URI.getAuthority(), concatUri.getAuthority());
+    assertEquals(CONCAT_BASE_URI.getPath(), concatUri.getPath());
+    assertEquals(JS1_URL_STR, concatUri.getQueryParameter("1"));
+    assertNull(concatUri.getQueryParameter("2"));
   }
 
   @Test
@@ -291,7 +364,7 @@ public class ConcatVisitorTest extends D
     assertEquals(3, parent.getChildNodes().getLength());
 
     SimpleConcatUriManager mgr = simpleMgr();
-    ConcatVisitor.Js rewriter = new ConcatVisitor.Js(config(null, false), mgr);
+    ConcatVisitor.Js rewriter = new ConcatVisitor.Js(config(null, false, false), mgr);
     assertTrue(rewriter.revisit(gadget(), nodes));
 
     // Should be left with a single JS node child to parent.
@@ -307,6 +380,29 @@ public class ConcatVisitorTest extends D
   }
 
   @Test
+  public void concatSingleCss() throws Exception {
+    List<Node> nodes = seqNodes(css1);
+    Node parent = css1.getParentNode();
+
+    // Sanity check.
+    assertEquals(1, parent.getChildNodes().getLength());
+
+    SimpleConcatUriManager mgr = simpleMgr();
+    ConcatVisitor.Css rewriter = new ConcatVisitor.Css(config(null, false, true), mgr);
+    assertTrue(rewriter.revisit(gadget(), nodes));
+
+    // There should be one CSS node child which is rewritten.
+    assertEquals(1, parent.getChildNodes().getLength());
+    Element concatNode = (Element)parent.getChildNodes().item(0);
+    Uri concatUri = Uri.parse(concatNode.getAttribute("href"));
+    assertEquals(CONCAT_BASE_URI.getScheme(), concatUri.getScheme());
+    assertEquals(CONCAT_BASE_URI.getAuthority(), concatUri.getAuthority());
+    assertEquals(CONCAT_BASE_URI.getPath(), concatUri.getPath());
+    assertEquals(CSS1_URL_STR, concatUri.getQueryParameter("1"));
+    assertNull(concatUri.getQueryParameter("2"));
+  }
+
+  @Test
   public void concatSingleBatchCss() throws Exception {
     List<Node> nodes = seqNodes(css1, css2, css3);
     Node parent = css1.getParentNode();
@@ -315,10 +411,10 @@ public class ConcatVisitorTest extends D
     assertEquals(3, parent.getChildNodes().getLength());
 
     SimpleConcatUriManager mgr = simpleMgr();
-    ConcatVisitor.Css rewriter = new ConcatVisitor.Css(config(null, false), mgr);
+    ConcatVisitor.Css rewriter = new ConcatVisitor.Css(config(null, false, false), mgr);
     assertTrue(rewriter.revisit(gadget(), nodes));
 
-    // Should be left with a single JS node child to parent.
+    // Should be left with a single CSS node child to parent.
     assertEquals(1, parent.getChildNodes().getLength());
     Element concatNode = (Element)parent.getChildNodes().item(0);
     Uri concatUri = Uri.parse(concatNode.getAttribute("href"));
@@ -358,7 +454,7 @@ public class ConcatVisitorTest extends D
     assertEquals(3, parent.getChildNodes().getLength());
 
     SimpleConcatUriManager mgr = simpleMgr();
-    ConcatVisitor.Css rewriter = new ConcatVisitor.Css(config(null, false), mgr);
+    ConcatVisitor.Css rewriter = new ConcatVisitor.Css(config(null, false, false), mgr);
     assertTrue(rewriter.revisit(gadget(), nodes));
 
     // Should be left with a single JS node child to parent.
@@ -396,7 +492,7 @@ public class ConcatVisitorTest extends D
     assertEquals(2, js3.getParentNode().getChildNodes().getLength());
 
     SimpleConcatUriManager mgr = simpleMgr();
-    ConcatVisitor.Js rewriter = new ConcatVisitor.Js(config(null, false), mgr);
+    ConcatVisitor.Js rewriter = new ConcatVisitor.Js(config(null, false, false), mgr);
     assertTrue(rewriter.revisit(gadget(), fullListJs));
 
     // Should have been independently concatenated.
@@ -422,6 +518,42 @@ public class ConcatVisitorTest extends D
   }
 
   @Test
+  public void concatMultiBatchJsWithSingleResource() throws Exception {
+    List<Node> fullListJs = Lists.newArrayList();
+    fullListJs.addAll(seqNodes(js1, js2));
+    Node parent1 = js1.getParentNode();
+    assertEquals(2, parent1.getChildNodes().getLength());
+
+    fullListJs.addAll(seqNodes(js3));
+    Node parent2 = js3.getParentNode();
+    assertEquals(1, js3.getParentNode().getChildNodes().getLength());
+
+    SimpleConcatUriManager mgr = simpleMgr();
+    ConcatVisitor.Js rewriter = new ConcatVisitor.Js(config(null, false, true), mgr);
+    assertTrue(rewriter.revisit(gadget(), fullListJs));
+
+    // Should have been independently concatenated.
+    assertEquals(1, parent1.getChildNodes().getLength());
+    Element cn1 = (Element)parent1.getChildNodes().item(0);
+    Uri concatUri1 = Uri.parse(cn1.getAttribute("src"));
+    assertEquals(CONCAT_BASE_URI.getScheme(), concatUri1.getScheme());
+    assertEquals(CONCAT_BASE_URI.getAuthority(), concatUri1.getAuthority());
+    assertEquals(CONCAT_BASE_URI.getPath(), concatUri1.getPath());
+    assertEquals(JS1_URL_STR, concatUri1.getQueryParameter("1"));
+    assertEquals(JS2_URL_STR, concatUri1.getQueryParameter("2"));
+    assertNull(concatUri1.getQueryParameter("3"));
+
+    assertEquals(1, parent2.getChildNodes().getLength());
+    Element cn2 = (Element)parent2.getChildNodes().item(0);
+    Uri concatUri2 = Uri.parse(cn2.getAttribute("src"));
+    assertEquals(CONCAT_BASE_URI.getScheme(), concatUri2.getScheme());
+    assertEquals(CONCAT_BASE_URI.getAuthority(), concatUri2.getAuthority());
+    assertEquals(CONCAT_BASE_URI.getPath(), concatUri2.getPath());
+    assertEquals(JS3_URL_STR, concatUri2.getQueryParameter("1"));
+    assertNull(concatUri2.getQueryParameter("2"));
+  }
+
+  @Test
   public void concatMultiBatchCss() throws Exception {
     List<Node> fullListCss = Lists.newArrayList();
     fullListCss.addAll(seqNodes(css1, css2));
@@ -433,7 +565,7 @@ public class ConcatVisitorTest extends D
     assertEquals(7, css3.getParentNode().getChildNodes().getLength());
 
     SimpleConcatUriManager mgr = simpleMgr();
-    ConcatVisitor.Css rewriter = new ConcatVisitor.Css(config(null, false), mgr);
+    ConcatVisitor.Css rewriter = new ConcatVisitor.Css(config(null, false, false), mgr);
     assertTrue(rewriter.revisit(gadget(), fullListCss));
 
     // Should have been independently concatenated.
@@ -485,7 +617,7 @@ public class ConcatVisitorTest extends D
     assertEquals(10, parent1.getChildNodes().getLength());
 
     SimpleConcatUriManager mgr = simpleMgr();
-    ConcatVisitor.Css rewriter = new ConcatVisitor.Css(config(null, false), mgr);
+    ConcatVisitor.Css rewriter = new ConcatVisitor.Css(config(null, false, false), mgr);
     assertTrue(rewriter.revisit(gadget(), fullListCss));
 
     // Should have been split across 'all' media type and then batches should be independently
@@ -555,6 +687,42 @@ public class ConcatVisitorTest extends D
   }
 
   @Test
+  public void concatMultiBatchCssWithSingleResource() throws Exception {
+    List<Node> fullListCss = Lists.newArrayList();
+    fullListCss.addAll(seqNodes(css1, css2));
+    Node parent1 = css1.getParentNode();
+    assertEquals(2, parent1.getChildNodes().getLength());
+
+    fullListCss.addAll(seqNodes(css3));
+    Node parent2 = css3.getParentNode();
+    assertEquals(1, css3.getParentNode().getChildNodes().getLength());
+
+    SimpleConcatUriManager mgr = simpleMgr();
+    ConcatVisitor.Css rewriter = new ConcatVisitor.Css(config(null, false, true), mgr);
+    assertTrue(rewriter.revisit(gadget(), fullListCss));
+
+    // Should have been independently concatenated.
+    assertEquals(1, parent1.getChildNodes().getLength());
+    Element cn1 = (Element)parent1.getChildNodes().item(0);
+    Uri concatUri1 = Uri.parse(cn1.getAttribute("href"));
+    assertEquals(CONCAT_BASE_URI.getScheme(), concatUri1.getScheme());
+    assertEquals(CONCAT_BASE_URI.getAuthority(), concatUri1.getAuthority());
+    assertEquals(CONCAT_BASE_URI.getPath(), concatUri1.getPath());
+    assertEquals(CSS1_URL_STR, concatUri1.getQueryParameter("1"));
+    assertEquals(CSS2_URL_STR, concatUri1.getQueryParameter("2"));
+    assertNull(concatUri1.getQueryParameter("3"));
+
+    assertEquals(1, parent2.getChildNodes().getLength());
+    Element cn2 = (Element)parent2.getChildNodes().item(0);
+    Uri concatUri2 = Uri.parse(cn2.getAttribute("href"));
+    assertEquals(CONCAT_BASE_URI.getScheme(), concatUri2.getScheme());
+    assertEquals(CONCAT_BASE_URI.getAuthority(), concatUri2.getAuthority());
+    assertEquals(CONCAT_BASE_URI.getPath(), concatUri2.getPath());
+    assertEquals(CSS3_URL_STR, concatUri2.getQueryParameter("1"));
+    assertNull(concatUri2.getQueryParameter("2"));
+  }
+
+  @Test
   public void concatMultiBatchJsBadBatch() throws Exception {
     List<Node> fullListJs = Lists.newArrayList();
     fullListJs.addAll(seqNodes(js1, js2));
@@ -570,7 +738,7 @@ public class ConcatVisitorTest extends D
     assertEquals(2, js3.getParentNode().getChildNodes().getLength());
 
     SimpleConcatUriManager mgr = simpleMgr();
-    ConcatVisitor.Js rewriter = new ConcatVisitor.Js(config(null, false), mgr);
+    ConcatVisitor.Js rewriter = new ConcatVisitor.Js(config(null, false, false), mgr);
     assertTrue(rewriter.revisit(gadget(), fullListJs));
 
     // Should have been independently concatenated. Batches #1 and #2 are OK. Middle skipped.
@@ -604,7 +772,7 @@ public class ConcatVisitorTest extends D
     assertEquals(2, parent.getChildNodes().getLength());
 
     SimpleConcatUriManager mgr = simpleMgr();
-    ConcatVisitor.Js rewriter = new ConcatVisitor.Js(config(null, true), mgr);
+    ConcatVisitor.Js rewriter = new ConcatVisitor.Js(config(null, true, false), mgr);
     assertTrue(rewriter.revisit(gadget(), nodes));
 
     // Same number of nodes. Now the second JS node is a new script node eval'ing JS.
@@ -646,7 +814,7 @@ public class ConcatVisitorTest extends D
     assertEquals(6, parent.getChildNodes().getLength());
 
     SimpleConcatUriManager mgr = simpleMgr();
-    ConcatVisitor.Js rewriter = new ConcatVisitor.Js(config(null, true), mgr);
+    ConcatVisitor.Js rewriter = new ConcatVisitor.Js(config(null, true, false), mgr);
     assertTrue(rewriter.revisit(gadget(), nodes));
 
     // Same number of nodes. Now the second JS node is a new script node eval'ing JS.
@@ -680,9 +848,10 @@ public class ConcatVisitorTest extends D
     return new ConcatVisitor.Js(config, null).visit(gadget(), node);
   }
 
-  private VisitStatus getVisitStatusJs(Node node, String rewriteRegex, boolean splitJs)
+  private VisitStatus getVisitStatusJs(
+      Node node, String rewriteRegex, boolean splitJs, boolean singleResouce)
       throws Exception {
-    ContentRewriterFeature.Config config = config(rewriteRegex, splitJs);
+    ContentRewriterFeature.Config config = config(rewriteRegex, splitJs, singleResouce);
     return getVisitStatusJs(config, node);
   }
 
@@ -691,16 +860,17 @@ public class ConcatVisitorTest extends D
     return new ConcatVisitor.Css(config, null).visit(gadget(), node);
   }
 
-  private VisitStatus getVisitStatusCss(Node node, String rewriteRegex)
+  private VisitStatus getVisitStatusCss(Node node, String rewriteRegex, boolean singleResource)
       throws Exception {
     // True, but never used (splitJS support)
-    ContentRewriterFeature.Config config = config(rewriteRegex, true);
+    ContentRewriterFeature.Config config = config(rewriteRegex, true, singleResource);
     return getVisitStatusCss(config, node);
   }
 
-  private ContentRewriterFeature.Config config(String exclude, boolean splitJs) {
+  private ContentRewriterFeature.Config config(
+      String exclude, boolean splitJs, boolean singleResourceConcat) {
     return new ContentRewriterFeature.DefaultConfig(".*", exclude == null ? "" : exclude,
-        "0", "", false, splitJs);
+        "0", "", false, splitJs, singleResourceConcat);
   }
 
   private List<Node> seqNodes(Node... nodes) {

Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ContentRewriterFeatureTestCase.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ContentRewriterFeatureTestCase.java?rev=1005954&r1=1005953&r2=1005954&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ContentRewriterFeatureTestCase.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ContentRewriterFeatureTestCase.java Fri Oct  8 18:52:38 2010
@@ -32,7 +32,7 @@ public class ContentRewriterFeatureTestC
   public void testContainerDefaultIncludeAll() throws Exception {
     defaultRewriterFeature =
         new ContentRewriterFeature.Config(createSpecWithoutRewrite(),
-          new ContentRewriterFeature.DefaultConfig(".*", "", "0", TAGS, false, false));
+          new ContentRewriterFeature.DefaultConfig(".*", "", "0", TAGS, false, false, false));
     assertTrue(defaultRewriterFeature.isRewriteEnabled());
     assertTrue(defaultRewriterFeature.shouldRewriteURL("http://www.test.com"));
   }
@@ -41,7 +41,7 @@ public class ContentRewriterFeatureTestC
   public void testContainerDefaultIncludeNone() throws Exception {
     defaultRewriterFeature =
         new ContentRewriterFeature.Config(createSpecWithoutRewrite(),
-          new ContentRewriterFeature.DefaultConfig("", ".*", "0", TAGS, false, false));
+          new ContentRewriterFeature.DefaultConfig("", ".*", "0", TAGS, false, false, false));
     assertFalse(defaultRewriterFeature.isRewriteEnabled());
     assertFalse(defaultRewriterFeature.shouldRewriteURL("http://www.test.com"));
   }
@@ -49,7 +49,7 @@ public class ContentRewriterFeatureTestC
   @Test
   public void testContainerDefaultExcludeOverridesInclude() throws Exception {
     defaultRewriterFeature = new ContentRewriterFeature.Config(createSpecWithoutRewrite(),
-        new ContentRewriterFeature.DefaultConfig(".*", ".*", "0", TAGS, false, false));
+        new ContentRewriterFeature.DefaultConfig(".*", ".*", "0", TAGS, false, false, false));
     assertFalse(defaultRewriterFeature.isRewriteEnabled());
     assertFalse(defaultRewriterFeature.shouldRewriteURL("http://www.test.com"));
   }
@@ -58,7 +58,7 @@ public class ContentRewriterFeatureTestC
   public void testSpecExcludeOverridesContainerDefaultInclude() throws Exception {
     defaultRewriterFeature = new ContentRewriterFeature.Config(
         createSpecWithRewrite("", ".*", "0", tags),
-        new ContentRewriterFeature.DefaultConfig(".*", "", "0", TAGS, false, false));
+        new ContentRewriterFeature.DefaultConfig(".*", "", "0", TAGS, false, false, false));
     assertFalse(defaultRewriterFeature.isRewriteEnabled());
     assertFalse(defaultRewriterFeature.shouldRewriteURL("http://www.test.com"));
   }
@@ -67,7 +67,7 @@ public class ContentRewriterFeatureTestC
   public void testSpecExcludeOnlyOverridesContainerDefaultInclude() throws Exception {
     defaultRewriterFeature = new ContentRewriterFeature.Config(
         createSpecWithRewrite(null, ".*", null, null),
-        new ContentRewriterFeature.DefaultConfig(".*", "", "0", TAGS, false, false));
+        new ContentRewriterFeature.DefaultConfig(".*", "", "0", TAGS, false, false, false));
     assertFalse(defaultRewriterFeature.isRewriteEnabled());
     assertFalse(defaultRewriterFeature.shouldRewriteURL("http://www.test.com"));
   }
@@ -76,7 +76,7 @@ public class ContentRewriterFeatureTestC
   public void testSpecExcludeOverridesContainerDefaultExclude() throws Exception {
     defaultRewriterFeature = new ContentRewriterFeature.Config(
         createSpecWithRewrite(".*", "", "0", tags),
-        new ContentRewriterFeature.DefaultConfig("", ".*", "0", TAGS, false, false));
+        new ContentRewriterFeature.DefaultConfig("", ".*", "0", TAGS, false, false, false));
     assertTrue(defaultRewriterFeature.isRewriteEnabled());
     assertTrue(defaultRewriterFeature.shouldRewriteURL("http://www.test.com"));
   }
@@ -85,7 +85,7 @@ public class ContentRewriterFeatureTestC
   public void testExcludeOverridesInclude() throws Exception {
     defaultRewriterFeature = new ContentRewriterFeature.Config(
         createSpecWithRewrite("test\\.com", "test", "0", tags),
-        new ContentRewriterFeature.DefaultConfig("", "", "0", TAGS, false, false));
+        new ContentRewriterFeature.DefaultConfig("", "", "0", TAGS, false, false, false));
     assertTrue(defaultRewriterFeature.isRewriteEnabled());
     assertFalse(defaultRewriterFeature.shouldRewriteURL("http://www.test.com"));
   }
@@ -94,7 +94,7 @@ public class ContentRewriterFeatureTestC
   public void testIncludeOnlyMatch() throws Exception {
     defaultRewriterFeature = new ContentRewriterFeature.Config(
         createSpecWithRewrite("test\\.com", "testx", "0", tags),
-        new ContentRewriterFeature.DefaultConfig("", "", "0", TAGS, false, false));
+        new ContentRewriterFeature.DefaultConfig("", "", "0", TAGS, false, false, false));
     assertTrue(defaultRewriterFeature.isRewriteEnabled());
     assertTrue(defaultRewriterFeature.shouldRewriteURL("http://www.test.com"));
     assertFalse(defaultRewriterFeature.shouldRewriteURL("http://testx.test.com"));
@@ -104,7 +104,7 @@ public class ContentRewriterFeatureTestC
   public void testTagRewrite() throws Exception {
     defaultRewriterFeature = new ContentRewriterFeature.Config(
         createSpecWithRewrite("test\\.com", "testx", "0", tags),
-        new ContentRewriterFeature.DefaultConfig("", "", "0", TAGS, false, false));
+        new ContentRewriterFeature.DefaultConfig("", "", "0", TAGS, false, false, false));
     assertFalse(defaultRewriterFeature.shouldRewriteTag("IFRAME"));
     assertTrue(defaultRewriterFeature.shouldRewriteTag("img"));
     assertTrue(defaultRewriterFeature.shouldRewriteTag("ScripT"));
@@ -115,7 +115,7 @@ public class ContentRewriterFeatureTestC
     Set<String> newTags = Sets.newHashSet("iframe");
     defaultRewriterFeature = new ContentRewriterFeature.Config(
         createSpecWithRewrite("test\\.com", "testx", "0", newTags),
-        new ContentRewriterFeature.DefaultConfig("", "", "0", TAGS, false, false));
+        new ContentRewriterFeature.DefaultConfig("", "", "0", TAGS, false, false, false));
     assertTrue(defaultRewriterFeature.shouldRewriteTag("IFRAME"));
     assertFalse(defaultRewriterFeature.shouldRewriteTag("img"));
     assertFalse(defaultRewriterFeature.shouldRewriteTag("ScripT"));
@@ -126,7 +126,7 @@ public class ContentRewriterFeatureTestC
   public void testExpiresTimeParse() throws Exception {
     defaultRewriterFeature = new ContentRewriterFeature.Config(
         createSpecWithRewrite("test\\.com", "testx", "12345", tags),
-        new ContentRewriterFeature.DefaultConfig("", "", "0", TAGS, false, false));
+        new ContentRewriterFeature.DefaultConfig("", "", "0", TAGS, false, false, false));
     assertNotNull(defaultRewriterFeature.getExpires());
     assertNotNull(defaultRewriterFeature.getExpires() == 12345);
   }
@@ -135,7 +135,7 @@ public class ContentRewriterFeatureTestC
   public void testExpiresHTTPParse() throws Exception {
     defaultRewriterFeature = new ContentRewriterFeature.Config(
         createSpecWithRewrite("test\\.com", "testx", "htTp ", tags),
-        new ContentRewriterFeature.DefaultConfig("", "", "12345", TAGS, false, false));
+        new ContentRewriterFeature.DefaultConfig("", "", "12345", TAGS, false, false, false));
     assertEquals(ContentRewriterFeature.EXPIRES_HTTP, defaultRewriterFeature.getExpires());
   }
 
@@ -143,7 +143,7 @@ public class ContentRewriterFeatureTestC
   public void testExpiresOverwriteTooBig() throws Exception {
     defaultRewriterFeature = new ContentRewriterFeature.Config(
         createSpecWithRewrite("test\\.com", "testx", "20000", tags),
-        new ContentRewriterFeature.DefaultConfig("", "", "12345", TAGS, false, false));
+        new ContentRewriterFeature.DefaultConfig("", "", "12345", TAGS, false, false, false));
     assertEquals(12345, defaultRewriterFeature.getExpires().intValue());
   }
 
@@ -151,7 +151,7 @@ public class ContentRewriterFeatureTestC
   public void testExpiresBadValue() throws Exception {
     defaultRewriterFeature = new ContentRewriterFeature.Config(
         createSpecWithRewrite("test\\.com", "testx", "X", tags),
-        new ContentRewriterFeature.DefaultConfig("", "", "12345", TAGS, false, false));
+        new ContentRewriterFeature.DefaultConfig("", "", "12345", TAGS, false, false, false));
     assertEquals(12345, defaultRewriterFeature.getExpires().intValue());
   }
 
@@ -159,7 +159,7 @@ public class ContentRewriterFeatureTestC
   public void testExpiresOverwrite() throws Exception {
     defaultRewriterFeature = new ContentRewriterFeature.Config(
         createSpecWithRewrite("test\\.com", "testx", "10", tags),
-        new ContentRewriterFeature.DefaultConfig("", "", "12345", TAGS, false, false));
+        new ContentRewriterFeature.DefaultConfig("", "", "12345", TAGS, false, false, false));
     assertEquals(10, defaultRewriterFeature.getExpires().intValue());
   }
 
@@ -167,7 +167,7 @@ public class ContentRewriterFeatureTestC
   public void testExpiresOverwriteDefault() throws Exception {
     defaultRewriterFeature = new ContentRewriterFeature.Config(
         createSpecWithRewrite("test\\.com", "testx", "10", tags),
-        new ContentRewriterFeature.DefaultConfig("", "", "-1", TAGS, false, false));
+        new ContentRewriterFeature.DefaultConfig("", "", "-1", TAGS, false, false, false));
     assertEquals(10, defaultRewriterFeature.getExpires().intValue());
   }
 
@@ -175,7 +175,7 @@ public class ContentRewriterFeatureTestC
   public void testExpiresInvalidParse() throws Exception {
     defaultRewriterFeature = new ContentRewriterFeature.Config(
         createSpecWithRewrite("test\\.com", "testx", "junk", tags),
-        new ContentRewriterFeature.DefaultConfig("", "", "12345", TAGS, false, false));
+        new ContentRewriterFeature.DefaultConfig("", "", "12345", TAGS, false, false, false));
     assertNotNull(defaultRewriterFeature.getExpires());
     assertNotNull(defaultRewriterFeature.getExpires() == 12345);
   }
@@ -184,7 +184,7 @@ public class ContentRewriterFeatureTestC
   public void testSpecEmptyContainerWithExclude() throws Exception {
     defaultRewriterFeature = new ContentRewriterFeature.Config(
         createSpecWithRewrite(null, null, null, null),
-        new ContentRewriterFeature.DefaultConfig(".*", "test", "0", TAGS, false, false));
+        new ContentRewriterFeature.DefaultConfig(".*", "test", "0", TAGS, false, false, false));
     assertTrue(defaultRewriterFeature.isRewriteEnabled());
     assertTrue(defaultRewriterFeature.shouldRewriteURL("http://www.foobar.com"));
     assertFalse(defaultRewriterFeature.shouldRewriteURL("http://www.test.com"));
@@ -194,7 +194,7 @@ public class ContentRewriterFeatureTestC
   public void testSpecExcludeOnlyOverridesContainerWithExclude() throws Exception {
     defaultRewriterFeature = new ContentRewriterFeature.Config(
         createSpecWithRewrite(null, "", null, null),
-        new ContentRewriterFeature.DefaultConfig(".*", "test", "0", TAGS, false, false));
+        new ContentRewriterFeature.DefaultConfig(".*", "test", "0", TAGS, false, false, false));
     assertTrue(defaultRewriterFeature.isRewriteEnabled());
     assertTrue(defaultRewriterFeature.shouldRewriteURL("http://www.foobar.com"));
     assertTrue(defaultRewriterFeature.shouldRewriteURL("http://www.test.com"));
@@ -204,7 +204,7 @@ public class ContentRewriterFeatureTestC
   public void testSpecEmptyDoesNotOverridesContainerDefaultNoInclude() throws Exception {
     defaultRewriterFeature = new ContentRewriterFeature.Config(
         createSpecWithRewrite(null, null, null, null),
-        new ContentRewriterFeature.DefaultConfig("", "test", "0", TAGS, false, false));
+        new ContentRewriterFeature.DefaultConfig("", "test", "0", TAGS, false, false, false));
     assertFalse(defaultRewriterFeature.isRewriteEnabled());
     assertFalse(defaultRewriterFeature.shouldRewriteURL("http://www.foobar.com"));
     assertFalse(defaultRewriterFeature.shouldRewriteURL("http://www.test.com"));
@@ -214,7 +214,7 @@ public class ContentRewriterFeatureTestC
   public void testSpecIncludeOnlyOverridesContainerDefaultNoInclude() throws Exception {
     defaultRewriterFeature = new ContentRewriterFeature.Config(
         createSpecWithRewrite(".*", null, null, null),
-        new ContentRewriterFeature.DefaultConfig("", "test", "0", TAGS, false, false));
+        new ContentRewriterFeature.DefaultConfig("", "test", "0", TAGS, false, false, false));
     assertTrue(defaultRewriterFeature.isRewriteEnabled());
     assertTrue(defaultRewriterFeature.shouldRewriteURL("http://www.foobar.com"));
     assertFalse(defaultRewriterFeature.shouldRewriteURL("http://www.test.com"));
@@ -223,14 +223,28 @@ public class ContentRewriterFeatureTestC
   @Test
   public void testSplitJsSupported() throws Exception {
     defaultRewriterFeature =
-        new ContentRewriterFeature.DefaultConfig("", "test", "0", TAGS, false, true);
+        new ContentRewriterFeature.DefaultConfig("", "test", "0", TAGS, false, true, false);
     assertTrue(defaultRewriterFeature.isSplitJsEnabled());
   }
 
   @Test
   public void testSplitJsNotSupported() throws Exception {
     defaultRewriterFeature =
-      new ContentRewriterFeature.DefaultConfig("", "test", "0", TAGS, false, false);
+      new ContentRewriterFeature.DefaultConfig("", "test", "0", TAGS, false, false, false);
     assertFalse(defaultRewriterFeature.isSplitJsEnabled());
   }
+
+  @Test
+  public void testSingleResourceConcatEnabled() throws Exception {
+    defaultRewriterFeature =
+        new ContentRewriterFeature.DefaultConfig("", "test", "0", TAGS, false, false, true);
+    assertTrue(defaultRewriterFeature.isSingleResourceConcatEnabled());
+  }
+
+  @Test
+  public void testSingleResourceConcatNotEnabled() throws Exception {
+    defaultRewriterFeature =
+      new ContentRewriterFeature.DefaultConfig("", "test", "0", TAGS, false, false, false);
+    assertFalse(defaultRewriterFeature.isSingleResourceConcatEnabled());
+  }
 }

Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ContentRewriterFeatureTestCaseOS9.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ContentRewriterFeatureTestCaseOS9.java?rev=1005954&r1=1005953&r2=1005954&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ContentRewriterFeatureTestCaseOS9.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ContentRewriterFeatureTestCaseOS9.java Fri Oct  8 18:52:38 2010
@@ -35,7 +35,7 @@ public class ContentRewriterFeatureTestC
       throws Exception {
     defaultRewriterFeature = new ContentRewriterFeature.Config(
         createSpecWithRewriteOS9(new String[] { "" }, new String[] { "*" }, "0", tags),
-        new ContentRewriterFeature.DefaultConfig(".*", "", "0", TAGS, false, false));
+        new ContentRewriterFeature.DefaultConfig(".*", "", "0", TAGS, false, false, false));
     assertFalse(defaultRewriterFeature.isRewriteEnabled());
     assertFalse(defaultRewriterFeature.shouldRewriteURL("http://www.test.com"));
   }
@@ -45,7 +45,7 @@ public class ContentRewriterFeatureTestC
       throws Exception {
     defaultRewriterFeature = new ContentRewriterFeature.Config(
         createSpecWithRewriteOS9(null, new String[] { "foo", "bar" }, "0", tags),
-        new ContentRewriterFeature.DefaultConfig(".*", "", "0", TAGS, false, false));
+        new ContentRewriterFeature.DefaultConfig(".*", "", "0", TAGS, false, false, false));
     assertTrue(defaultRewriterFeature.isRewriteEnabled());
     assertTrue(defaultRewriterFeature.shouldRewriteURL("http://www.test.com"));
     assertFalse(defaultRewriterFeature.shouldRewriteURL("http://www.foo.com"));
@@ -57,7 +57,7 @@ public class ContentRewriterFeatureTestC
       throws Exception {
     defaultRewriterFeature = new ContentRewriterFeature.Config(
         createSpecWithRewriteOS9(null, new String[] { "*" }, null, null),
-        new ContentRewriterFeature.DefaultConfig(".*", "", "0", TAGS, false, false));
+        new ContentRewriterFeature.DefaultConfig(".*", "", "0", TAGS, false, false, false));
     assertFalse(defaultRewriterFeature.isRewriteEnabled());
     assertFalse(defaultRewriterFeature.shouldRewriteURL("http://www.test.com"));
   }
@@ -67,7 +67,7 @@ public class ContentRewriterFeatureTestC
       throws Exception {
     defaultRewriterFeature = new ContentRewriterFeature.Config(
         createSpecWithRewriteOS9(new String[] { "*" }, new String[] { "" }, "0", tags),
-        new ContentRewriterFeature.DefaultConfig("", ".*", "0", TAGS, false, false));
+        new ContentRewriterFeature.DefaultConfig("", ".*", "0", TAGS, false, false, false));
     assertTrue(defaultRewriterFeature.isRewriteEnabled());
     assertTrue(defaultRewriterFeature.shouldRewriteURL("http://www.test.com"));
   }
@@ -76,7 +76,7 @@ public class ContentRewriterFeatureTestC
   public void testExcludeOverridesInclude() throws Exception {
     defaultRewriterFeature = new ContentRewriterFeature.Config(
         createSpecWithRewriteOS9(new String[] { "test.com" }, new String[] { "test" }, "0", tags),
-        new ContentRewriterFeature.DefaultConfig("", "", "0", TAGS, false, false));
+        new ContentRewriterFeature.DefaultConfig("", "", "0", TAGS, false, false, false));
     assertTrue(defaultRewriterFeature.isRewriteEnabled());
     assertFalse(defaultRewriterFeature.shouldRewriteURL("http://www.test.com"));
   }
@@ -85,7 +85,7 @@ public class ContentRewriterFeatureTestC
   public void testIncludeOnlyMatch() throws Exception {
     defaultRewriterFeature = new ContentRewriterFeature.Config(
         createSpecWithRewriteOS9(new String[] { "test.com" }, new String[] { "testx" }, "0", tags),
-        new ContentRewriterFeature.DefaultConfig("", "", "0", TAGS, false, false));
+        new ContentRewriterFeature.DefaultConfig("", "", "0", TAGS, false, false, false));
     assertTrue(defaultRewriterFeature.isRewriteEnabled());
     assertTrue(defaultRewriterFeature.shouldRewriteURL("http://www.test.com"));
     assertFalse(defaultRewriterFeature
@@ -96,7 +96,7 @@ public class ContentRewriterFeatureTestC
   public void testSpecEmptyContainerWithExclude() throws Exception {
     defaultRewriterFeature = new ContentRewriterFeature.Config(
         createSpecWithRewriteOS9(null, null, null, null),
-        new ContentRewriterFeature.DefaultConfig(".*", "test", "0", TAGS, false, false));
+        new ContentRewriterFeature.DefaultConfig(".*", "test", "0", TAGS, false, false, false));
     assertTrue(defaultRewriterFeature.isRewriteEnabled());
     assertTrue(defaultRewriterFeature.shouldRewriteURL("http://www.foobar.com"));
     assertFalse(defaultRewriterFeature.shouldRewriteURL("http://www.test.com"));
@@ -107,7 +107,7 @@ public class ContentRewriterFeatureTestC
       throws Exception {
     defaultRewriterFeature = new ContentRewriterFeature.Config(
         createSpecWithRewriteOS9(null, new String[] { "" }, null, null),
-        new ContentRewriterFeature.DefaultConfig(".*", "test", "0", TAGS, false, false));
+        new ContentRewriterFeature.DefaultConfig(".*", "test", "0", TAGS, false, false, false));
     assertTrue(defaultRewriterFeature.isRewriteEnabled());
     assertTrue(defaultRewriterFeature.shouldRewriteURL("http://www.foobar.com"));
     assertTrue(defaultRewriterFeature.shouldRewriteURL("http://www.test.com"));
@@ -118,7 +118,7 @@ public class ContentRewriterFeatureTestC
       throws Exception {
     defaultRewriterFeature = new ContentRewriterFeature.Config(
         createSpecWithRewriteOS9(null, null, null, null),
-        new ContentRewriterFeature.DefaultConfig("", "test", "0", TAGS, false, false));
+        new ContentRewriterFeature.DefaultConfig("", "test", "0", TAGS, false, false, false));
     assertFalse(defaultRewriterFeature.isRewriteEnabled());
     assertFalse(defaultRewriterFeature
         .shouldRewriteURL("http://www.foobar.com"));
@@ -130,7 +130,7 @@ public class ContentRewriterFeatureTestC
       throws Exception {
     defaultRewriterFeature = new ContentRewriterFeature.Config(
         createSpecWithRewriteOS9(new String[] { "*" }, null, null, null),
-        new ContentRewriterFeature.DefaultConfig("", "test", "0", TAGS, false, false));
+        new ContentRewriterFeature.DefaultConfig("", "test", "0", TAGS, false, false, false));
     assertTrue(defaultRewriterFeature.isRewriteEnabled());
     assertTrue(defaultRewriterFeature.shouldRewriteURL("http://www.foobar.com"));
     assertFalse(defaultRewriterFeature.shouldRewriteURL("http://www.test.com"));
@@ -141,7 +141,7 @@ public class ContentRewriterFeatureTestC
       throws Exception {
     defaultRewriterFeature = new ContentRewriterFeature.Config(
         createSpecWithRewriteOS9(new String[] { "foo", "bar" }, null, null, null),
-        new ContentRewriterFeature.DefaultConfig("", "test", "0", TAGS, false, false));
+        new ContentRewriterFeature.DefaultConfig("", "test", "0", TAGS, false, false, false));
     assertTrue(defaultRewriterFeature.isRewriteEnabled());
     assertTrue(defaultRewriterFeature.shouldRewriteURL("http://www.foo.com"));
     assertTrue(defaultRewriterFeature.shouldRewriteURL("http://www.bar.com"));
@@ -153,7 +153,7 @@ public class ContentRewriterFeatureTestC
       throws Exception {
     defaultRewriterFeature = new ContentRewriterFeature.Config(
         createSpecWithRewriteOS9(new String[] { "foo", "bar" }, null, null, null),
-        new ContentRewriterFeature.DefaultConfig("*", "test", "0", TAGS, false, false));
+        new ContentRewriterFeature.DefaultConfig("*", "test", "0", TAGS, false, false, false));
     assertTrue(defaultRewriterFeature.isRewriteEnabled());
     assertTrue(defaultRewriterFeature.shouldRewriteURL("http://www.foo.com"));
     assertTrue(defaultRewriterFeature.shouldRewriteURL("http://www.bar.com"));
@@ -164,7 +164,7 @@ public class ContentRewriterFeatureTestC
   public void testSpecExcludeDisallowOverrideIncludeUrls() throws Exception {
     defaultRewriterFeature = new ContentRewriterFeature.Config(
         createSpecWithRewrite("norewrite", null, null, null),
-        new ContentRewriterFeature.DefaultConfig("^http://www.include.com", "def", "3600", TAGS, true, false));
+        new ContentRewriterFeature.DefaultConfig("^http://www.include.com", "def", "3600", TAGS, true, false, false));
     assertTrue(defaultRewriterFeature.isRewriteEnabled());
     assertTrue(defaultRewriterFeature
         .shouldRewriteURL("http://www.include.com/abc"));
@@ -178,7 +178,7 @@ public class ContentRewriterFeatureTestC
   public void testSpecExcludeOverrideExcludeUrls() throws Exception {
     defaultRewriterFeature = new ContentRewriterFeature.Config(
         createSpecWithRewrite(null, "abc", null, null),
-        new ContentRewriterFeature.DefaultConfig("^http://www.include.com", "def", "3600", TAGS, true, false));
+        new ContentRewriterFeature.DefaultConfig("^http://www.include.com", "def", "3600", TAGS, true, false, false));
     assertTrue(defaultRewriterFeature.isRewriteEnabled());
     assertFalse(defaultRewriterFeature
         .shouldRewriteURL("http://www.include.com/abc"));
@@ -192,7 +192,7 @@ public class ContentRewriterFeatureTestC
   public void testSpecExcludeDisallowOverrideIncludeUrlOS9() throws Exception {
     defaultRewriterFeature = new ContentRewriterFeature.Config(
         createSpecWithRewriteOS9(new String[] { "abc" }, null, null, null),
-        new ContentRewriterFeature.DefaultConfig("^http://www.include.com", "", "3600", TAGS, true, false));
+        new ContentRewriterFeature.DefaultConfig("^http://www.include.com", "", "3600", TAGS, true, false, false));
     assertTrue(defaultRewriterFeature.isRewriteEnabled());
     assertTrue(defaultRewriterFeature
         .shouldRewriteURL("http://www.include.com/abc"));
@@ -204,7 +204,7 @@ public class ContentRewriterFeatureTestC
   public void testSpecExcludeDisallowOverrideExcludeUrlOS9() throws Exception {
     defaultRewriterFeature = new ContentRewriterFeature.Config(
         createSpecWithRewriteOS9(null, new String[] { "def" }, null, null),
-        new ContentRewriterFeature.DefaultConfig("^http://www.include.com", "", "3600", TAGS, true, false));
+        new ContentRewriterFeature.DefaultConfig("^http://www.include.com", "", "3600", TAGS, true, false, false));
     assertTrue(defaultRewriterFeature.isRewriteEnabled());
     assertTrue(defaultRewriterFeature
         .shouldRewriteURL("http://www.include.com/abc"));
@@ -218,7 +218,7 @@ public class ContentRewriterFeatureTestC
   public void testSpecExcludeDisallowOverrideDefaultExpires() throws Exception {
     defaultRewriterFeature = new ContentRewriterFeature.Config(
         createSpecWithRewrite("test\\.com", "testx", "3000", tags),
-        new ContentRewriterFeature.DefaultConfig("", "", "", TAGS, true, false));
+        new ContentRewriterFeature.DefaultConfig("", "", "", TAGS, true, false, false));
     assertNotNull(defaultRewriterFeature.getExpires());
     assertNotNull(defaultRewriterFeature.getExpires() == 3000);
   }
@@ -227,7 +227,7 @@ public class ContentRewriterFeatureTestC
   public void testSpecExcludeDisallowOverrideExpiresGreater() throws Exception {
     defaultRewriterFeature = new ContentRewriterFeature.Config(
         createSpecWithRewrite("test\\.com", "testx", "8000", tags),
-        new ContentRewriterFeature.DefaultConfig("", "", "3000", TAGS, true, false));
+        new ContentRewriterFeature.DefaultConfig("", "", "3000", TAGS, true, false, false));
     assertNotNull(defaultRewriterFeature.getExpires());
     assertNotNull(defaultRewriterFeature.getExpires() == 3000);
   }
@@ -236,7 +236,7 @@ public class ContentRewriterFeatureTestC
   public void testSpecExcludeDisallowOverrideExpiresLesser() throws Exception {
     defaultRewriterFeature = new ContentRewriterFeature.Config(
         createSpecWithRewrite("test\\.com", "testx", "2000", tags),
-        new ContentRewriterFeature.DefaultConfig("", "", "3000", TAGS, true, false));
+        new ContentRewriterFeature.DefaultConfig("", "", "3000", TAGS, true, false, false));
     assertNotNull(defaultRewriterFeature.getExpires());
     assertNotNull(defaultRewriterFeature.getExpires() == 2000);
   }
@@ -245,7 +245,7 @@ public class ContentRewriterFeatureTestC
   public void testSpecExcludeDisallowOverrideTagsSubset() throws Exception {
     defaultRewriterFeature = new ContentRewriterFeature.Config(
         createSpecWithRewrite("test\\.com", "testx", "0", Sets.newHashSet("img")),
-        new ContentRewriterFeature.DefaultConfig("", "", "0", "img,script", true, false));
+        new ContentRewriterFeature.DefaultConfig("", "", "0", "img,script", true, false, false));
     assertFalse(defaultRewriterFeature.shouldRewriteTag("IFRAME"));
     assertTrue(defaultRewriterFeature.shouldRewriteTag("img"));
     assertFalse(defaultRewriterFeature.shouldRewriteTag("ScripT"));
@@ -255,7 +255,7 @@ public class ContentRewriterFeatureTestC
   public void testSpecExcludeDisallowOverrideTagsSuperset() throws Exception {
     defaultRewriterFeature = new ContentRewriterFeature.Config(
         createSpecWithRewrite( "test\\.com", "testx", "0", Sets.newHashSet("img", "script", "link")),
-        new ContentRewriterFeature.DefaultConfig("", "", "0", "img,script", true, false));
+        new ContentRewriterFeature.DefaultConfig("", "", "0", "img,script", true, false, false));
     assertFalse(defaultRewriterFeature.shouldRewriteTag("IFRAME"));
     assertTrue(defaultRewriterFeature.shouldRewriteTag("img"));
     assertTrue(defaultRewriterFeature.shouldRewriteTag("ScripT"));

Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/RewriterTestBase.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/RewriterTestBase.java?rev=1005954&r1=1005953&r2=1005954&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/RewriterTestBase.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/RewriterTestBase.java Fri Oct  8 18:52:38 2010
@@ -71,7 +71,7 @@ public abstract class RewriterTestBase {
   @Before
   public void setUp() throws Exception {
     rewriterFeatureFactory = new ContentRewriterFeature.Factory(null,
-        new ContentRewriterFeature.DefaultConfig(".*", "", "86400", TAGS, false, false));
+        new ContentRewriterFeature.DefaultConfig(".*", "", "86400", TAGS, false, false, false));
     defaultRewriterFeature = rewriterFeatureFactory.getDefault();
     tags = defaultRewriterFeature.getIncludedTags();
     injector = Guice.createInjector(getParseModule(), new PropertiesModule(), new TestModule());