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 +