Author: mhermanto
Date: Tue Aug  2 21:18:37 2011
New Revision: 1153273

URL: http://svn.apache.org/viewvc?rev=1153273&view=rev
Log:
Correcting [Export|Defer]JsProcessor to satisfy compiler obfuscation.
http://codereview.appspot.com/4841047/

Added:
    
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/js/BaseSurfaceJsProcessor.java
Modified:
    
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/js/DeferJsProcessor.java
    
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/js/ExportJsProcessor.java
    
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/js/DeferJsProcessorTest.java
    
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/js/ExportJsProcessorTest.java

Added: 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/js/BaseSurfaceJsProcessor.java
URL: 
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/js/BaseSurfaceJsProcessor.java?rev=1153273&view=auto
==============================================================================
--- 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/js/BaseSurfaceJsProcessor.java
 (added)
+++ 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/js/BaseSurfaceJsProcessor.java
 Tue Aug  2 21:18:37 2011
@@ -0,0 +1,156 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package org.apache.shindig.gadgets.js;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.inject.Provider;
+
+import org.apache.shindig.gadgets.GadgetContext;
+import org.apache.shindig.gadgets.GadgetException;
+import org.apache.shindig.gadgets.JsCompileMode;
+import org.apache.shindig.gadgets.features.ApiDirective;
+import org.apache.shindig.gadgets.features.FeatureRegistry;
+import org.apache.shindig.gadgets.features.FeatureRegistry.FeatureBundle;
+import org.apache.shindig.gadgets.features.FeatureRegistry.LookupResult;
+import org.apache.shindig.gadgets.features.FeatureRegistryProvider;
+import org.apache.shindig.gadgets.features.FeatureResource;
+import org.apache.shindig.gadgets.uri.JsUriManager.JsUri;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+public abstract class BaseSurfaceJsProcessor implements JsProcessor {
+
+  protected final FeatureRegistryProvider featureRegistryProvider;
+  protected final Provider<GadgetContext> context;
+
+  protected BaseSurfaceJsProcessor(FeatureRegistryProvider 
featureRegistryProvider,
+      Provider<GadgetContext> context) {
+    this.featureRegistryProvider = featureRegistryProvider;
+    this.context = context;
+  }
+  
+  protected final FeatureRegistry getFeatureRegistry(JsUri jsUri) throws 
JsException {
+    try {
+      return featureRegistryProvider.get(jsUri.getRepository());
+    } catch (GadgetException e) {
+      throw new JsException(e.getHttpStatusCode(), e.getMessage());
+    }
+  }
+  
+  protected final List<String> getExports(FeatureBundle bundle, JsUri jsUri) {
+    // Add exports of bundle, regardless.
+    if (jsUri.getCompileMode() == JsCompileMode.CONCAT_COMPILE_EXPORT_ALL) {
+      return bundle.getApis(ApiDirective.Type.JS, true);
+
+    // Add exports of bundle if it is an explicitly-specified feature.
+    } else if (jsUri.getCompileMode() == 
JsCompileMode.CONCAT_COMPILE_EXPORT_EXPLICIT) {
+      if (jsUri.getLibs().contains(bundle.getName())) {
+        return bundle.getApis(ApiDirective.Type.JS, true);
+      }
+    }
+    
+    return Lists.newArrayList();
+  }
+
+  protected final List<JsContent> getSurfaceJsContents(
+      FeatureRegistry featureRegistry, String featureName) {
+    ImmutableList.Builder<JsContent> result = ImmutableList.builder();
+    LookupResult lookup = featureRegistry.getFeatureResources(context.get(),
+        ImmutableList.of(featureName), null);
+    for (FeatureBundle bundle : lookup.getBundles()) {
+      for (FeatureResource resource : bundle.getResources()) {
+        result.add(JsContent.fromFeature(
+            resource.getDebugContent(), resource.getName(),
+            bundle, resource));
+      }
+    }
+    return result.build();
+  }
+
+  protected Collection<Input> generateInputs(List<String> symbols) {
+    Map<String, Input> result = Maps.newLinkedHashMap();
+    for (String symbol : symbols) {
+      String ns = getNamespace(symbol);
+      Input input = result.get(ns);
+      if (input == null) {
+        input = (ns != null) ? Input.newLocal(ns, expandNamespace(ns)) : 
Input.newGlobal();
+        result.put(ns, input);
+      }
+      String property = (ns != null) ? getProperty(symbol) : symbol;
+      input.properties.add(property);
+    }
+    return result.values();
+  }
+
+  private List<String> expandNamespace(String namespace) {
+    List<String> result = Lists.newArrayList();
+    for (int from = 0; ;) {
+      int idx = namespace.indexOf('.', from);
+      if (idx >= 0) {
+        result.add(namespace.substring(0, idx));
+        from = idx + 1;
+      } else {
+        result.add(namespace);
+        break;
+      }
+    }
+    return result;
+  }
+  
+  /**
+   * Return the namespace for symbol (before last dot). If symbol is global,
+   * return null, to indicate "window" namespace.
+   */
+  private String getNamespace(String symbol) {
+    int idx = symbol.lastIndexOf('.');
+    return (idx >= 0) ? symbol.substring(0, idx) : null;
+  }
+
+  /**
+   * Return the property of symbol (after last dot). If symbol is global,
+   * return the original string.
+   */
+  private String getProperty(String symbol) {
+    int idx = symbol.lastIndexOf('.');
+    return (idx >= 0) ? symbol.substring(idx + 1) : symbol;
+  }
+
+  protected static class Input {
+    String namespace;
+    List<String> components;
+    List<String> properties;
+
+    private Input(String namespace, List<String> components) {
+      this.namespace = namespace;
+      this.components = components;
+      this.properties = Lists.newArrayList();
+    }
+
+    static Input newGlobal() {
+      return new Input(null, ImmutableList.<String>of());
+    }
+
+    static Input newLocal(String namespace, List<String> components) {
+      return new Input(namespace, components);
+    }
+  }
+}

Modified: 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/js/DeferJsProcessor.java
URL: 
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/js/DeferJsProcessor.java?rev=1153273&r1=1153272&r2=1153273&view=diff
==============================================================================
--- 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/js/DeferJsProcessor.java
 (original)
+++ 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/js/DeferJsProcessor.java
 Tue Aug  2 21:18:37 2011
@@ -17,19 +17,27 @@
  */
 package org.apache.shindig.gadgets.js;
 
+import com.google.common.annotations.VisibleForTesting;
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Lists;
 import com.google.inject.Inject;
 import com.google.inject.Provider;
 
 import org.apache.shindig.gadgets.GadgetContext;
-import org.apache.shindig.gadgets.GadgetException;
 import org.apache.shindig.gadgets.features.FeatureRegistry;
 import org.apache.shindig.gadgets.features.FeatureRegistry.FeatureBundle;
 import org.apache.shindig.gadgets.features.FeatureRegistry.LookupResult;
 import org.apache.shindig.gadgets.features.FeatureRegistryProvider;
 import org.apache.shindig.gadgets.uri.JsUriManager.JsUri;
 
-public class DeferJsProcessor extends ExportJsProcessor {
+import java.util.List;
+
+public class DeferJsProcessor extends BaseSurfaceJsProcessor {
+
+  @VisibleForTesting
+  static final String FEATURE_NAME = "deferjs";
+
+  private static final String FUNCTION_NAME = "deferJs";
 
   @Inject
   public DeferJsProcessor(FeatureRegistryProvider featureRegistryProvider,
@@ -37,45 +45,76 @@ public class DeferJsProcessor extends Ex
     super(featureRegistryProvider, context);
   }
 
-  @Override
   public boolean process(JsRequest jsRequest, JsResponseBuilder builder) 
throws JsException {
     JsUri jsUri = jsRequest.getJsUri();
     ImmutableList.Builder<JsContent> resp = ImmutableList.builder();
+    FeatureRegistry featureRegistry = getFeatureRegistry(jsUri);
 
-    FeatureRegistry featureRegistry;
-    try {
-      featureRegistry = featureRegistryProvider.get(jsUri.getRepository());
-    } catch (GadgetException e) {
-      throw new JsException(e.getHttpStatusCode(), e.getMessage());
-    }
-
-    boolean neededExportJs = false;
-    FeatureBundle last = null;
+    boolean needDefers = false;
     if (jsUri.isJsload()) {
       // append all exports for deferred symbols
-      neededExportJs = appendExportJsStatementsDeferred(featureRegistry, resp, 
jsRequest);
+      List<FeatureBundle> bundles = getSupportDeferBundles(featureRegistry, 
jsRequest);
+      for (FeatureBundle bundle : bundles) {
+        needDefers |= appendDeferJsStatements(resp, jsRequest.getJsUri(), 
bundle);
+      }
     }
     
-    builder.clearJs();
-    if (neededExportJs) {
-      builder.appendAllJs(getExportJsContents(featureRegistry));
+    // TODO: Instead of clearing, do a replacement of feature impl with defer 
stubs.
+    // Clearing has an effect of ignoring previous processors work.  
+    if (needDefers) {
+      builder.clearJs();
+      builder.appendAllJs(getSurfaceJsContents(featureRegistry, FEATURE_NAME));
     }
     builder.appendAllJs(resp.build());
     return true;
   }
 
-  private boolean appendExportJsStatementsDeferred(FeatureRegistry registry,
-      ImmutableList.Builder<JsContent> builder, JsRequest jsRequest) {
+  private boolean appendDeferJsStatements(ImmutableList.Builder<JsContent> 
builder,
+       JsUri jsUri, FeatureBundle bundle) {
+    List<String> exports = getExports(bundle, jsUri);
+    if (!exports.isEmpty()) {
+      StringBuilder sb = new StringBuilder();
+      for (Input input : generateInputs(exports)) {
+        sb.append(toDeferStatement(input));
+      }
+      builder.add(JsContent.fromFeature(sb.toString(), 
"[generated-symbol-exports]",
+          bundle, null));
+      return true;
+    }
+    return false;
+  }
+  
+  private String toDeferStatement(Input input) {
+    StringBuilder result = new StringBuilder();
+
+    // Local namespace.
+    if (input.namespace != null) {
+      
result.append(FUNCTION_NAME).append("('").append(input.namespace).append("',[");
+      for (int i = 0; i < input.properties.size(); i++) {
+        String prop = input.properties.get(i);
+        if (i > 0) result.append(",");
+        result.append("'").append(prop).append("'");
+      }
+      result.append("]);");
+
+    // Global/window namespace.
+    } else {
+      for (String prop : input.properties) {
+        result.append(FUNCTION_NAME).append("('").append(prop).append("');");
+      }
+    }
+    return result.toString();
+  }
+
+  private List<FeatureBundle> getSupportDeferBundles(FeatureRegistry registry, 
JsRequest jsRequest) {
+    List<FeatureBundle> result = Lists.newArrayList();
     LookupResult lookup = registry.getFeatureResources(context.get(),
-        jsRequest.getNewFeatures(), null, false);
-    
-    boolean neededExports = false;
+      jsRequest.getNewFeatures(), null, false);
     for (FeatureBundle bundle : lookup.getBundles()) {
       if (bundle.isSupportDefer()) {
-        neededExports |= appendExportJsStatementsForFeature(builder, 
jsRequest.getJsUri(), bundle);
+        result.add(bundle);
       }
     }
-    
-    return neededExports;
+    return result;
   }
 }

Modified: 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/js/ExportJsProcessor.java
URL: 
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/js/ExportJsProcessor.java?rev=1153273&r1=1153272&r2=1153273&view=diff
==============================================================================
--- 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/js/ExportJsProcessor.java
 (original)
+++ 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/js/ExportJsProcessor.java
 Tue Aug  2 21:18:37 2011
@@ -18,192 +18,100 @@
 package org.apache.shindig.gadgets.js;
 
 import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Joiner;
 import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
 import com.google.inject.Inject;
 import com.google.inject.Provider;
 
 import org.apache.shindig.gadgets.GadgetContext;
-import org.apache.shindig.gadgets.GadgetException;
-import org.apache.shindig.gadgets.JsCompileMode;
-import org.apache.shindig.gadgets.features.ApiDirective;
 import org.apache.shindig.gadgets.features.FeatureRegistry;
 import org.apache.shindig.gadgets.features.FeatureRegistry.FeatureBundle;
-import org.apache.shindig.gadgets.features.FeatureRegistry.LookupResult;
 import org.apache.shindig.gadgets.features.FeatureRegistryProvider;
-import org.apache.shindig.gadgets.features.FeatureResource;
 import org.apache.shindig.gadgets.uri.JsUriManager.JsUri;
 
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Iterator;
 import java.util.List;
-import java.util.Map;
 
-public class ExportJsProcessor implements JsProcessor {
+public class ExportJsProcessor extends BaseSurfaceJsProcessor {
 
   @VisibleForTesting
   static final String FEATURE_NAME = "exportjs";
 
   private static final String FUNCTION_NAME = "exportJs";
 
-  protected final FeatureRegistryProvider featureRegistryProvider;
-  protected final Provider<GadgetContext> context;
-
   @Inject
   public ExportJsProcessor(FeatureRegistryProvider featureRegistryProvider,
       Provider<GadgetContext> context) {
-    this.featureRegistryProvider = featureRegistryProvider;
-    this.context = context;
+    super(featureRegistryProvider, context);
   }
 
   public boolean process(JsRequest jsRequest, JsResponseBuilder builder) 
throws JsException {
     JsUri jsUri = jsRequest.getJsUri();
     ImmutableList.Builder<JsContent> resp = ImmutableList.builder();
+    FeatureRegistry featureRegistry = getFeatureRegistry(jsUri);
 
-    FeatureRegistry featureRegistry;
-    try {
-      featureRegistry = featureRegistryProvider.get(jsUri.getRepository());
-    } catch (GadgetException e) {
-      throw new JsException(e.getHttpStatusCode(), e.getMessage());
-    }
-
-    boolean neededExportJs = false;
+    boolean needExports = false;
     FeatureBundle last = null;
     if (!jsUri.isJsload()) {
       for (JsContent jsc : builder.build().getAllJsContent()) {
         FeatureBundle current = jsc.getFeatureBundle();
         if (last != null && current != last) {
-          neededExportJs |= appendExportJsStatementsForFeature(resp, jsUri, 
last);
+          needExports |= appendExportJsStatements(resp, jsUri, last);
         }
         resp.add(jsc);
         last = current;
       }
       if (last != null) {
-        neededExportJs |= appendExportJsStatementsForFeature(resp, jsUri, 
last);
+        needExports |= appendExportJsStatements(resp, jsUri, last);
       }
     }
     
     builder.clearJs();
-    if (neededExportJs) {
-      builder.appendAllJs(getExportJsContents(featureRegistry));
+    if (needExports) {
+      builder.appendAllJs(getSurfaceJsContents(featureRegistry, FEATURE_NAME));
     }
     builder.appendAllJs(resp.build());
     return true;
   }
 
-  protected boolean 
appendExportJsStatementsForFeature(ImmutableList.Builder<JsContent> builder,
+  private boolean appendExportJsStatements(ImmutableList.Builder<JsContent> 
builder,
       JsUri jsUri, FeatureBundle bundle) {
-    List<String> exports = Lists.newArrayList();
-
-    // Add exports of bundle, regardless.
-    if (jsUri.getCompileMode() == JsCompileMode.CONCAT_COMPILE_EXPORT_ALL) {
-      exports = bundle.getApis(ApiDirective.Type.JS, true);
-
-    // Add exports of bundle if it is an explicitly-specified feature.
-    } else if (jsUri.getCompileMode() == 
JsCompileMode.CONCAT_COMPILE_EXPORT_EXPLICIT) {
-      if (jsUri.getLibs().contains(bundle.getName())) {
-        exports = bundle.getApis(ApiDirective.Type.JS, true);
-      }
-    }
-    
+    List<String> exports = getExports(bundle, jsUri);
     if (!exports.isEmpty()) {
       StringBuilder sb = new StringBuilder();
       for (Input input : generateInputs(exports)) {
-        sb.append(input.toExportStatement(jsUri.isJsload()));
+        sb.append(toExportStatement(input));
       }
-      builder.add(JsContent.fromFeature(sb.toString(),
-          "[generated-symbol-exports]", bundle, null));
+      builder.add(JsContent.fromFeature(sb.toString(), 
"[generated-symbol-exports]",
+          bundle, null));
       return true;
     }
     return false;
   }
-
-  protected List<JsContent> getExportJsContents(FeatureRegistry 
featureRegistry) {
-    ImmutableList.Builder<JsContent> result = ImmutableList.builder();
-    LookupResult lookup = featureRegistry.getFeatureResources(context.get(),
-        ImmutableList.of(FEATURE_NAME), null);
-    for (FeatureBundle bundle : lookup.getBundles()) {
-      for (FeatureResource resource : bundle.getResources()) {
-        result.add(JsContent.fromFeature(
-            resource.getDebugContent(), resource.getName(),
-            bundle, resource));
-      }
-    }
-    return result.build();
-  }
-
-  private static class Input {
-    String namespace;
-    List<String> properties;
-
-    private Input(String namespace) {
-      this.namespace = namespace;
-      this.properties = Lists.newArrayList();
-    }
-
-    public String toExportStatement(boolean isJsload) {
-      StringBuilder result = new StringBuilder();
-      result.append(FUNCTION_NAME).append("('").append(namespace).append("',");
-      appendPropMap(result, Arrays.asList(namespace.split("\\.")));
-      result.append(',');
-      appendPropMap(result, properties);
-      if (isJsload) {
-        result.append(",1");
-      }
-      result.append(");");
-      return result.toString();
-    }
-    
-    private void appendPropMap(StringBuilder result, Iterable<String> 
properties) {
-      result.append("{");
-      boolean first = true;
-      Iterator<String> propIterator = properties.iterator();
-      while (propIterator.hasNext()) {
-        String prop = propIterator.next();
-        if ("prototype".equals(prop)) continue;
-        if (!first) result.append(",");
-        first = false;
+  
+  private String toExportStatement(Input input) {
+    StringBuilder result = new StringBuilder();
+
+    // Local namespace.
+    if (input.namespace != null) {
+      
result.append(FUNCTION_NAME).append("('").append(input.namespace).append("',[");
+      result.append(Joiner.on(',').join(input.components));
+      result.append("],{");
+      for (int i = 0; i < input.properties.size(); i++) {
+        String prop = input.properties.get(i);
+        if (i > 0) result.append(",");
         result.append(prop).append(":'").append(prop).append("'");
       }
-      result.append("}");
-    }
-  }
+      result.append("});");
 
-  private Collection<Input> generateInputs(List<String> symbols) {
-    Map<String, Input> result = Maps.newLinkedHashMap();
-    for (String symbol : symbols) {
-      String ns = getNamespace(symbol);
-      Input input = result.get(ns);
-      if (input == null) {
-        input = new Input(ns);
-        result.put(ns, input);
-      }
-      String property = getProperty(symbol);
-      if (property != null) {
-        input.properties.add(property);
+    // Global/window namespace.
+    } else {
+      for (String prop : input.properties) {
+        result.append(FUNCTION_NAME).append("(");
+        result.append("'").append(prop).append("',[");
+        result.append(prop);
+        result.append("]);");
       }
     }
-    return result.values();
-  }
-
-  /**
-   * Return the namespace for symbol (before last dot). If symbol is global,
-   * return null, to indicate "window" namespace.
-   */
-  private String getNamespace(String symbol) {
-    int idx = symbol.lastIndexOf('.');
-    return (idx >= 0) ? symbol.substring(0, idx) : symbol;
+    return result.toString();
   }
-
-  /**
-   * Return the property of symbol (after last dot). If symbol is global,
-   * return the original string.
-   */
-  private String getProperty(String symbol) {
-    int idx = symbol.lastIndexOf('.');
-    return (idx >= 0) ? symbol.substring(idx + 1) : null;
-  }
-
 }

Modified: 
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/js/DeferJsProcessorTest.java
URL: 
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/js/DeferJsProcessorTest.java?rev=1153273&r1=1153272&r2=1153273&view=diff
==============================================================================
--- 
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/js/DeferJsProcessorTest.java
 (original)
+++ 
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/js/DeferJsProcessorTest.java
 Tue Aug  2 21:18:37 2011
@@ -46,11 +46,12 @@ import org.junit.Test;
 import java.util.List;
 
 public class DeferJsProcessorTest {
-  private final String DEFER_JS_DEB = "function deferJs() { };";
+  private final String DEFER_JS_DEB = "function deferJs() {};";
 
   private final List<String> EXPORTS_1 = ImmutableList.of(
       "gadgets",
       "gadgets.rpc.call",
+      "gadgets.rpc.register",
       "shindig",
       "shindig.random");
 
@@ -59,15 +60,16 @@ public class DeferJsProcessorTest {
       "foo.prototype.bar");
 
   private final String EXPORT_STRING_1_DEFER =
-    "exportJs('gadgets',{gadgets:'gadgets'},{},1);" +
-    "exportJs('gadgets.rpc',{gadgets:'gadgets',rpc:'rpc'},{call:'call'},1);" +
-    "exportJs('shindig',{shindig:'shindig'},{random:'random'},1);";
+    "deferJs('gadgets');" +
+    "deferJs('shindig');" +
+    "deferJs('gadgets.rpc',['call','register']);" +
+    "deferJs('shindig',['random']);";
 
   private final List<String> LIBS_WITH_DEFER = Lists.newArrayList("lib1");
   private final List<String> LIBS_WITHOUT_DEFER = Lists.newArrayList("lib2");
   private final List<String> LOADED = Lists.newArrayList();
 
-  private DeferJsProcessor compiler;
+  private DeferJsProcessor processor;
   private FeatureRegistry featureRegistry;
 
   @Before
@@ -80,19 +82,20 @@ public class DeferJsProcessorTest {
     final FeatureRegistry featureRegistryMock = mockRegistry(lookupMock);
     featureRegistry = featureRegistryMock;
     FeatureRegistryProvider registryProvider = new FeatureRegistryProvider() {
+      @Override
       public FeatureRegistry get(String repository) {
         return featureRegistryMock;
       }
     };
-    compiler = new DeferJsProcessor(registryProvider, contextProviderMock);
+    processor = new DeferJsProcessor(registryProvider, contextProviderMock);
   }
 
   @Test
-  public void testProcessWithOneNonEmptyFeatureDeferred() throws Exception {
+  public void processWithOneNonEmptyFeatureDeferred() throws Exception {
     JsUri jsUri = mockJsUri(JsCompileMode.CONCAT_COMPILE_EXPORT_ALL, true, 
LIBS_WITH_DEFER);
     JsRequest jsRequest = new JsRequest(jsUri, null, false, featureRegistry);
     JsResponseBuilder jsBuilder = new JsResponseBuilder();
-    boolean actualReturnCode = compiler.process(jsRequest, jsBuilder);
+    boolean actualReturnCode = processor.process(jsRequest, jsBuilder);
     assertTrue(actualReturnCode);
     assertEquals(
         DEFER_JS_DEB + EXPORT_STRING_1_DEFER,
@@ -100,11 +103,11 @@ public class DeferJsProcessorTest {
   }
 
   @Test
-  public void testProcessWithOneNonEmptyFeatureDeferredNotSupported() throws 
Exception {
+  public void processWithOneNonEmptyFeatureDeferredNotSupported() throws 
Exception {
     JsUri jsUri = mockJsUri(JsCompileMode.CONCAT_COMPILE_EXPORT_ALL, true, 
LIBS_WITHOUT_DEFER);
     JsRequest jsRequest = new JsRequest(jsUri, null, false, featureRegistry);
     JsResponseBuilder jsBuilder = new JsResponseBuilder();
-    boolean actualReturnCode = compiler.process(jsRequest, jsBuilder);
+    boolean actualReturnCode = processor.process(jsRequest, jsBuilder);
     assertTrue(actualReturnCode);
     assertEquals(
         "",

Modified: 
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/js/ExportJsProcessorTest.java
URL: 
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/js/ExportJsProcessorTest.java?rev=1153273&r1=1153272&r2=1153273&view=diff
==============================================================================
--- 
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/js/ExportJsProcessorTest.java
 (original)
+++ 
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/js/ExportJsProcessorTest.java
 Tue Aug  2 21:18:37 2011
@@ -56,6 +56,7 @@ public class ExportJsProcessorTest {
   private final List<String> EXPORTS_1 = ImmutableList.of(
       "gadgets",
       "gadgets.rpc.call",
+      "gadgets.rpc.register",
       "shindig",
       "shindig.random");
 
@@ -66,23 +67,19 @@ public class ExportJsProcessorTest {
   private final List<String> EXPORTS_3 = ImmutableList.<String>of();
 
   private final String EXPORT_STRING_1 =
-      "exportJs('gadgets',{gadgets:'gadgets'},{});" +
-      "exportJs('gadgets.rpc',{gadgets:'gadgets',rpc:'rpc'},{call:'call'});" +
-      "exportJs('shindig',{shindig:'shindig'},{random:'random'});";
+      "exportJs('gadgets',[gadgets]);" +
+      "exportJs('shindig',[shindig]);" +
+      
"exportJs('gadgets.rpc',[gadgets,gadgets.rpc],{call:'call',register:'register'});"
 +
+      "exportJs('shindig',[shindig],{random:'random'});";
   
-  private final String EXPORT_STRING_1_DEFER =
-    "exportJs('gadgets',{gadgets:'gadgets'},{},1);" +
-    "exportJs('gadgets.rpc',{gadgets:'gadgets',rpc:'rpc'},{call:'call'},1);" +
-    "exportJs('shindig',{shindig:'shindig'},{random:'random'},1);";
-
   private final String EXPORT_STRING_2 =
-      "exportJs('foo',{foo:'foo'},{});" +
-      "exportJs('foo.prototype',{foo:'foo'},{bar:'bar'});";
+      "exportJs('foo',[foo]);" +
+      "exportJs('foo.prototype',[foo,foo.prototype],{bar:'bar'});";
 
   private final String EXPORT_STRING_3 = "";
   
-  private final List<String> LIBS_DEFER = Lists.newArrayList("lib1");
-  private final List<String> LIBS = Lists.newArrayList("lib2");
+  private final List<String> LIBS1 = Lists.newArrayList("lib1");
+  private final List<String> LIBS2 = Lists.newArrayList("lib2");
   private final List<String> LOADED = Lists.newArrayList();
 
   private JsContent textJsContent1;
@@ -90,8 +87,7 @@ public class ExportJsProcessorTest {
   private JsContent featureJsContent1;
   private JsContent featureJsContent2;
   private JsContent featureJsContent3;
-  private ExportJsProcessor compiler;
-  private FeatureRegistry featureRegistry;
+  private ExportJsProcessor processor;
 
   @Before
   public void setUp() throws Exception {
@@ -101,8 +97,8 @@ public class ExportJsProcessorTest {
     FeatureRegistry.FeatureBundle bundle = mockExportJsBundle(resource);
     LookupResult lookupMock = mockLookupResult(bundle);
     final FeatureRegistry featureRegistryMock = mockRegistry(lookupMock);
-    featureRegistry = featureRegistryMock;
     FeatureRegistryProvider registryProvider = new FeatureRegistryProvider() {
+      @Override
       public FeatureRegistry get(String repository) {
         return featureRegistryMock;
       }
@@ -113,7 +109,7 @@ public class ExportJsProcessorTest {
     featureJsContent1 = JsContent.fromFeature(FEATURE_CONTENT_1, "source3", 
mockBundle(EXPORTS_1), null);
     featureJsContent2 = JsContent.fromFeature(FEATURE_CONTENT_2, "source4", 
mockBundle(EXPORTS_2), null);
     featureJsContent3 = JsContent.fromFeature(FEATURE_CONTENT_3, "source5", 
mockBundle(EXPORTS_3), null);
-    compiler = new ExportJsProcessor(registryProvider, contextProviderMock);
+    processor = new ExportJsProcessor(registryProvider, contextProviderMock);
   }
 
   @SuppressWarnings("unchecked")
@@ -123,13 +119,13 @@ public class ExportJsProcessorTest {
         isA(GadgetContext.class), isA(List.class), 
EasyMock.isNull(List.class))).
         andReturn(lookupMock).anyTimes();
     expect(result.getFeatureResources(
-        isA(GadgetContext.class), eq(LIBS_DEFER), EasyMock.isNull(List.class), 
eq(false))).
+        isA(GadgetContext.class), eq(LIBS1), EasyMock.isNull(List.class), 
eq(false))).
         andReturn(mockLookupResult(mockBundle(EXPORTS_1))).anyTimes();
     expect(result.getFeatureResources(
-        isA(GadgetContext.class), eq(LIBS), EasyMock.isNull(List.class), 
eq(false))).
+        isA(GadgetContext.class), eq(LIBS2), EasyMock.isNull(List.class), 
eq(false))).
         andReturn(mockLookupResult(mockBundle(EXPORTS_2))).anyTimes();
-    expect(result.getFeatures(LIBS)).andReturn(LIBS).anyTimes();
-    expect(result.getFeatures(LIBS_DEFER)).andReturn(LIBS_DEFER).anyTimes();
+    expect(result.getFeatures(LIBS2)).andReturn(LIBS2).anyTimes();
+    expect(result.getFeatures(LIBS1)).andReturn(LIBS1).anyTimes();
     expect(result.getFeatures(LOADED)).andReturn(LOADED).anyTimes();
     replay(result);
     return result;
@@ -140,7 +136,7 @@ public class ExportJsProcessorTest {
   }
   
   private JsUri mockJsUri(JsCompileMode mode, boolean isJsload) {
-    return mockJsUri(mode, isJsload, LIBS);
+    return mockJsUri(mode, isJsload, LIBS2);
   }
   
   private JsUri mockJsUri(JsCompileMode mode, boolean isJsload, List<String> 
libs) {
@@ -197,22 +193,22 @@ public class ExportJsProcessorTest {
   }
 
   @Test
-  public void testProcessEmpty() throws Exception {
+  public void processEmpty() throws Exception {
     JsUri jsUri = mockJsUri(JsCompileMode.CONCAT_COMPILE_EXPORT_ALL);
     JsRequest jsRequest = new JsRequest(jsUri, null, false, null);
     JsResponseBuilder jsBuilder = new JsResponseBuilder();
-    boolean actualReturnCode = compiler.process(jsRequest, jsBuilder);
+    boolean actualReturnCode = processor.process(jsRequest, jsBuilder);
     assertTrue(actualReturnCode);
     assertEquals("", jsBuilder.build().toJsString());
   }
 
   @Test
-  public void testProcessWithOneText() throws Exception {
+  public void processWithOneText() throws Exception {
     JsUri jsUri = mockJsUri(JsCompileMode.CONCAT_COMPILE_EXPORT_ALL);
     JsRequest jsRequest = new JsRequest(jsUri, null, false, null);
     JsResponseBuilder jsBuilder = new JsResponseBuilder();
     jsBuilder.appendJs(textJsContent1);
-    boolean actualReturnCode = compiler.process(jsRequest, jsBuilder);
+    boolean actualReturnCode = processor.process(jsRequest, jsBuilder);
     assertTrue(actualReturnCode);
     assertEquals(
         TEXT_CONTENT_1,
@@ -220,37 +216,25 @@ public class ExportJsProcessorTest {
   }
 
   @Test
-  public void testProcessWithOneNonEmptyFeature() throws Exception {
+  public void processWithOneNonEmptyFeature() throws Exception {
     JsUri jsUri = mockJsUri(JsCompileMode.CONCAT_COMPILE_EXPORT_ALL);
     JsRequest jsRequest = new JsRequest(jsUri, null, false, null);
     JsResponseBuilder jsBuilder = new JsResponseBuilder();
     jsBuilder.appendJs(featureJsContent1);
-    boolean actualReturnCode = compiler.process(jsRequest, jsBuilder);
+    boolean actualReturnCode = processor.process(jsRequest, jsBuilder);
     assertTrue(actualReturnCode);
     assertEquals(
         EXPORT_JS_DEB + FEATURE_CONTENT_1 + EXPORT_STRING_1,
         jsBuilder.build().toJsString());
   }
-    
-  @Test
-  public void testProcessWithOneNonEmptyFeatureNotDeferredMode() throws 
Exception {
-    JsUri jsUri = mockJsUri(JsCompileMode.CONCAT_COMPILE_EXPORT_ALL, true);
-    JsRequest jsRequest = new JsRequest(jsUri, null, false, featureRegistry);
-    JsResponseBuilder jsBuilder = new JsResponseBuilder();
-    boolean actualReturnCode = compiler.process(jsRequest, jsBuilder);
-    assertTrue(actualReturnCode);
-    assertEquals(
-        "",
-        jsBuilder.build().toJsString());
-  }
 
   @Test
-  public void testProcessWithOneEmptyFeature() throws Exception {
+  public void processWithOneEmptyFeature() throws Exception {
     JsUri jsUri = mockJsUri(JsCompileMode.CONCAT_COMPILE_EXPORT_ALL);
     JsRequest jsRequest = new JsRequest(jsUri, null, false, null);
     JsResponseBuilder jsBuilder = new JsResponseBuilder();
     jsBuilder.appendJs(featureJsContent3);
-    boolean actualReturnCode = compiler.process(jsRequest, jsBuilder);
+    boolean actualReturnCode = processor.process(jsRequest, jsBuilder);
     assertTrue(actualReturnCode);
     assertEquals(
         FEATURE_CONTENT_3 + EXPORT_STRING_3,
@@ -258,7 +242,7 @@ public class ExportJsProcessorTest {
   }
 
   @Test
-  public void testProcessWithFeaturesAndTexts() throws Exception {
+  public void processWithFeaturesAndTexts() throws Exception {
     JsUri jsUri = mockJsUri(JsCompileMode.CONCAT_COMPILE_EXPORT_ALL);
     JsRequest jsRequest = new JsRequest(jsUri, null, false, null);
     JsResponseBuilder jsBuilder = new JsResponseBuilder();
@@ -267,7 +251,7 @@ public class ExportJsProcessorTest {
     jsBuilder.appendJs(featureJsContent2);
     jsBuilder.appendJs(textJsContent2);
     jsBuilder.appendJs(featureJsContent3);
-    boolean actualReturnCode = compiler.process(jsRequest, jsBuilder);
+    boolean actualReturnCode = processor.process(jsRequest, jsBuilder);
     assertTrue(actualReturnCode);
     assertEquals(EXPORT_JS_DEB + TEXT_CONTENT_1 +
         FEATURE_CONTENT_1 + EXPORT_STRING_1 +


Reply via email to