Author: zhoresh
Date: Fri Jul  2 21:22:09 2010
New Revision: 960109

URL: http://svn.apache.org/viewvc?rev=960109&view=rev
Log:
Improve error handling for Js config
http://codereview.appspot.com/1708051/show

Modified:
    
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/JsServlet.java
    
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultJsUriManager.java
    
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/JsUriManager.java
    
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultJsUriManagerTest.java

Modified: 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/JsServlet.java
URL: 
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/JsServlet.java?rev=960109&r1=960108&r2=960109&view=diff
==============================================================================
--- 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/JsServlet.java
 (original)
+++ 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/JsServlet.java
 Fri Jul  2 21:22:09 2010
@@ -29,6 +29,7 @@ import org.apache.shindig.common.servlet
 import org.apache.shindig.common.uri.UriBuilder;
 import org.apache.shindig.config.ContainerConfig;
 import org.apache.shindig.gadgets.GadgetContext;
+import org.apache.shindig.gadgets.GadgetException;
 import org.apache.shindig.gadgets.RenderingContext;
 import org.apache.shindig.gadgets.config.ConfigContributor;
 import org.apache.shindig.gadgets.features.FeatureRegistry;
@@ -78,7 +79,7 @@ public class JsServlet extends InjectedS
     }
     this.registry = registry;
   }
-  
+
   @Inject
   public void setUrlGenerator(JsUriManager jsUriManager) {
     if (initialized) {
@@ -115,7 +116,13 @@ public class JsServlet extends InjectedS
     // If an If-Modified-Since header is ever provided, we always say
     // not modified. This is because when there actually is a change,
     // cache busting should occur.
-    UriStatus vstatus = jsUriManager.processExternJsUri(new 
UriBuilder(req).toUri()).getStatus();
+    UriStatus vstatus;
+    try {
+      vstatus = jsUriManager.processExternJsUri(new 
UriBuilder(req).toUri()).getStatus();
+    } catch (GadgetException e) {
+      resp.sendError(e.getHttpStatusCode(), e.getMessage());
+      return;
+    }
     if (req.getHeader("If-Modified-Since") != null &&
         vstatus == UriStatus.VALID_VERSIONED) {
       resp.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
@@ -142,7 +149,7 @@ public class JsServlet extends InjectedS
     boolean debug = "1".equals(debugStr);
     final RenderingContext context = "1".equals(containerStr) ?
         RenderingContext.CONTAINER : RenderingContext.GADGET;
-    final String container = 
+    final String container =
         containerParam != null ? containerParam : 
ContainerConfig.DEFAULT_CONTAINER;
 
     GadgetContext ctx = new GadgetContext() {
@@ -150,7 +157,7 @@ public class JsServlet extends InjectedS
       public RenderingContext getRenderingContext() {
         return context;
       }
-      
+
       @Override
       public String getContainer() {
         return container;
@@ -194,7 +201,7 @@ public class JsServlet extends InjectedS
         
jsData.append("gadgets.config.init(").append(JsonSerializer.serialize(config)).append(");\n");
       }
     }
-    
+
     String onloadStr = req.getParameter("onload");
     if (onloadStr != null) {
       if (!ONLOAD_FN_PATTERN.matcher(onloadStr).matches()) {
@@ -203,7 +210,7 @@ public class JsServlet extends InjectedS
       }
       jsData.append(String.format(ONLOAD_JS_TPL, 
StringEscapeUtils.escapeJavaScript(onloadStr)));
     }
-    
+
     if (jsData.length() == 0) {
       resp.setStatus(HttpServletResponse.SC_NOT_FOUND);
       return;

Modified: 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultJsUriManager.java
URL: 
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultJsUriManager.java?rev=960109&r1=960108&r2=960109&view=diff
==============================================================================
--- 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultJsUriManager.java
 (original)
+++ 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultJsUriManager.java
 Fri Jul  2 21:22:09 2010
@@ -26,6 +26,9 @@ import org.apache.shindig.common.uri.Uri
 import org.apache.shindig.common.uri.UriBuilder;
 import org.apache.shindig.config.ContainerConfig;
 import org.apache.shindig.gadgets.Gadget;
+import org.apache.shindig.gadgets.GadgetException;
+import org.apache.shindig.gadgets.GadgetException.Code;
+import org.apache.shindig.gadgets.http.HttpResponse;
 import org.apache.shindig.gadgets.uri.UriCommon.Param;
 
 import java.util.Arrays;
@@ -40,10 +43,10 @@ public class DefaultJsUriManager impleme
   static final JsUri INVALID_URI = new JsUri(UriStatus.BAD_URI, 
Lists.<String>newArrayList());
   protected static final String JS_SUFFIX = ".js";
   protected static final String JS_DELIMITER = ":";
-  
+
   private final ContainerConfig config;
   private final Versioner versioner;
-  
+
   @Inject
   public DefaultJsUriManager(ContainerConfig config,
                              Versioner versioner) {
@@ -55,10 +58,10 @@ public class DefaultJsUriManager impleme
     String container = gadget.getContext().getContainer();
     String jsHost = getReqConfig(container, JS_HOST_PARAM);
     String jsPathBase = getReqConfig(container, JS_PATH_PARAM);
-    
+
     // We somewhat cheat in that jsHost may contain protocol/scheme as well.
     UriBuilder uri = new UriBuilder(Uri.parse(jsHost));
-    
+
     // Add JS info to path and set it in URI.
     StringBuilder jsPath = new StringBuilder(jsPathBase);
     if (!jsPathBase.endsWith("/")) {
@@ -67,29 +70,29 @@ public class DefaultJsUriManager impleme
     jsPath.append(addJsLibs(extern));
     jsPath.append(JS_SUFFIX);
     uri.setPath(jsPath.toString());
-    
+
     // Standard container param, as JS may be container-specific.
     uri.addQueryParameter(Param.CONTAINER.getKey(), container);
-    
+
     // Pass through nocache param for dev purposes.
     uri.addQueryParameter(Param.NO_CACHE.getKey(),
         gadget.getContext().getIgnoreCache() ? "1" : "0");
-    
+
     // Pass through debug param for debugging use.
     uri.addQueryParameter(Param.DEBUG.getKey(),
         gadget.getContext().getDebug() ? "1" : "0");
-    
+
     // Pass through gadget Uri
     if (addGadgetUri()) {
       uri.addQueryParameter(Param.URL.getKey(), 
gadget.getSpec().getUrl().toString());
     }
-    
+
     // Finally, version it, but only if !nocache.
     if (versioner != null && !gadget.getContext().getIgnoreCache()) {
       uri.addQueryParameter(Param.VERSION.getKey(),
           versioner.version(gadget.getContext().getUrl(), container, extern));
     }
-    
+
     return uri.toUri();
   }
 
@@ -97,23 +100,23 @@ public class DefaultJsUriManager impleme
    * Essentially pulls apart a Uri created by makeExternJsUri, validating its
    * contents, especially the version key.
    */
-  public JsUri processExternJsUri(Uri uri) {
+  public JsUri processExternJsUri(Uri uri) throws GadgetException {
     // Validate basic Uri structure and params
     String container = uri.getQueryParameter(Param.CONTAINER.getKey());
     if (container == null) {
       container = ContainerConfig.DEFAULT_CONTAINER;
     }
-    
+
     // Get config values up front.
     getReqConfig(container, JS_HOST_PARAM); // validate that it exists
     String jsPrefix = getReqConfig(container, JS_PATH_PARAM);
-    
+
     String host = uri.getAuthority();
     if (host == null) {
       issueUriFormatError("Unexpected: Js Uri has no host");
       return INVALID_URI;
     }
-    
+
     // Pull out the collection of features referenced by the Uri.
     String path = uri.getPath();
     if (path == null) {
@@ -128,14 +131,14 @@ public class DefaultJsUriManager impleme
       issueUriFormatError("Js Uri path invalid, expected suffix: " + JS_SUFFIX 
+ ", is: " + path);
       return INVALID_URI;
     }
-    
+
     // Pull off prefix and suffix strings
     path = path.substring(jsPrefix.length());
     path = path.substring(0, path.length() - JS_SUFFIX.length());
     while (path.startsWith("/")) {
       path = path.substring(1);
     }
-    
+
     Collection<String> libs = getJsLibs(path);
     UriStatus status = UriStatus.VALID_UNVERSIONED;
     String version = uri.getQueryParameter(Param.VERSION.getKey());
@@ -147,32 +150,35 @@ public class DefaultJsUriManager impleme
       }
       status = versioner.validate(gadgetUri, container, libs, version);
     }
-    
+
     return new JsUri(status, libs);
   }
-  
+
   static String addJsLibs(Collection<String> extern) {
     return StringUtils.join(extern, JS_DELIMITER);
   }
-  
+
   static Collection<String> getJsLibs(String path) {
     return Arrays.asList(StringUtils.split(path, JS_DELIMITER));
   }
-  
+
   private String getReqConfig(String container, String key) {
     String ret = config.getString(container, key);
     if (ret == null) {
-      throw new RuntimeException("Container '" + container +
-          "' missing config for required param: " + key);
+      ret = config.getString(ContainerConfig.DEFAULT_CONTAINER, key);
+      if (ret == null) {
+        throw new RuntimeException("Container '" + container +
+            "' missing config for required param: " + key);
+      }
     }
     return ret;
   }
-  
+
   // May be overridden to report errors in an alternate way to the user.
-  protected void issueUriFormatError(String err) {
-    throw new RuntimeException(err);
+  protected void issueUriFormatError(String err) throws GadgetException {
+    throw new GadgetException(Code.INVALID_PARAMETER, err, 
HttpResponse.SC_BAD_REQUEST);
   }
-  
+
   // Overridable in the event that a Versioner implementation is injected
   // that uses the gadget itself to perform intelligent optimization and 
versioning.
   // This isn't the cleanest logic, so should be cleaned up when better 
concrete

Modified: 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/JsUriManager.java
URL: 
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/JsUriManager.java?rev=960109&r1=960108&r2=960109&view=diff
==============================================================================
--- 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/JsUriManager.java
 (original)
+++ 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/JsUriManager.java
 Fri Jul  2 21:22:09 2010
@@ -23,6 +23,7 @@ import java.util.Collections;
 
 import org.apache.shindig.common.uri.Uri;
 import org.apache.shindig.gadgets.Gadget;
+import org.apache.shindig.gadgets.GadgetException;
 
 import com.google.inject.ImplementedBy;
 
@@ -33,34 +34,34 @@ public interface JsUriManager {
    * @return The uri for the externed javascript that includes all listed 
extern libraries.
    */
   Uri makeExternJsUri(Gadget gadget, Collection<String> extern);
-  
+
   /**
    * Processes the inbound URL, for use by serving code in determining which 
JS to serve
    * and with what caching properties.
-   * 
+   *
    * @param uri Generated extern JS Uri
    * @return Processed status of the provided Uri.
    */
-  JsUri processExternJsUri(Uri uri);
-  
+  JsUri processExternJsUri(Uri uri) throws GadgetException;
+
   public static class JsUri {
     private final UriStatus status;
     private final Collection<String> libs;
-    
+
     public JsUri(UriStatus status, Collection<String> libs) {
       this.status = status;
       this.libs = libs;
     }
-    
+
     public UriStatus getStatus() {
       return status;
     }
-    
+
     public Collection<String> getLibs() {
       return Collections.unmodifiableCollection(libs);
     }
   }
-  
+
   @ImplementedBy(DefaultJsVersioner.class)
   public interface Versioner {
     /**
@@ -69,7 +70,7 @@ public interface JsUriManager {
      * @return Version string for the Uri.
      */
     String version(Uri gadgetUri, String container, Collection<String> extern);
-    
+
     /**
      * @param gadgetUri Gadget for which extern Uri was generated.
      * @param extern Collection of libs externed.

Modified: 
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultJsUriManagerTest.java
URL: 
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultJsUriManagerTest.java?rev=960109&r1=960108&r2=960109&view=diff
==============================================================================
--- 
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultJsUriManagerTest.java
 (original)
+++ 
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultJsUriManagerTest.java
 Fri Jul  2 21:22:09 2010
@@ -34,6 +34,7 @@ import org.apache.shindig.common.uri.Uri
 import org.apache.shindig.config.ContainerConfig;
 import org.apache.shindig.gadgets.Gadget;
 import org.apache.shindig.gadgets.GadgetContext;
+import org.apache.shindig.gadgets.GadgetException;
 import org.apache.shindig.gadgets.uri.JsUriManager.JsUri;
 import org.apache.shindig.gadgets.uri.JsUriManager.Versioner;
 import org.apache.shindig.gadgets.uri.UriCommon.Param;
@@ -45,7 +46,7 @@ import java.util.List;
 public class DefaultJsUriManagerTest {
   private static final String CONTAINER = "container";
   private static final Uri GADGET_URI = 
Uri.parse("http://example.com/gadget.xml";);
-  
+
   // makeJsUri tests
   @Test(expected = RuntimeException.class)
   public void makeMissingHostConfig() {
@@ -54,7 +55,7 @@ public class DefaultJsUriManagerTest {
     Gadget gadget = mockGadget(false, false);
     manager.makeExternJsUri(gadget, null);
   }
-  
+
   @Test(expected = RuntimeException.class)
   public void makeMissingPathConfig() {
     ContainerConfig config = mockConfig("foo", null);
@@ -62,7 +63,7 @@ public class DefaultJsUriManagerTest {
     Gadget gadget = mockGadget(false, false);
     manager.makeExternJsUri(gadget, null);
   }
-  
+
   @Test
   public void makeJsUriNoPathSlashNoVersion() {
     ContainerConfig config = mockConfig("http://www.js.org";, "/gadgets/js/");
@@ -78,7 +79,7 @@ public class DefaultJsUriManagerTest {
     assertEquals("0", jsUri.getQueryParameter(Param.NO_CACHE.getKey()));
     assertEquals("0", jsUri.getQueryParameter(Param.DEBUG.getKey()));
   }
-  
+
   @Test
   public void makeJsUriAddPathSlashNoVersion() {
     ContainerConfig config = mockConfig("http://www.js.org";, "/gadgets/js");
@@ -94,7 +95,7 @@ public class DefaultJsUriManagerTest {
     assertEquals("0", jsUri.getQueryParameter(Param.NO_CACHE.getKey()));
     assertEquals("0", jsUri.getQueryParameter(Param.DEBUG.getKey()));
   }
-  
+
   @Test
   public void makeJsUriAddPathSlashVersioned() {
     ContainerConfig config = mockConfig("http://www.js.org";, "/gadgets/js");
@@ -113,7 +114,7 @@ public class DefaultJsUriManagerTest {
     assertEquals("0", jsUri.getQueryParameter(Param.NO_CACHE.getKey()));
     assertEquals("0", jsUri.getQueryParameter(Param.DEBUG.getKey()));
   }
-  
+
   @Test
   public void makeJsUriWithVersionerNoVersionOnIgnoreCache() {
     ContainerConfig config = mockConfig("http://www.js.org";, "/gadgets/js");
@@ -133,24 +134,31 @@ public class DefaultJsUriManagerTest {
     assertEquals("1", jsUri.getQueryParameter(Param.NO_CACHE.getKey()));
     assertEquals("0", jsUri.getQueryParameter(Param.DEBUG.getKey()));
   }
-  
+
   // processJsUri tests
   @Test(expected = RuntimeException.class)
-  public void processMissingHostConfig() {
+  public void processMissingHostConfig() throws GadgetException {
     ContainerConfig config = mockConfig(null, "/gadgets/js");
     DefaultJsUriManager manager = makeManager(config, null);
     manager.processExternJsUri(Uri.parse("http://example.com?container="; + 
CONTAINER));
   }
-  
+
   @Test(expected = RuntimeException.class)
-  public void processMissingPathConfig() {
+  public void processMissingPathConfig() throws GadgetException {
     ContainerConfig config = mockConfig("foo", null);
     DefaultJsUriManager manager = makeManager(config, null);
     manager.processExternJsUri(Uri.parse("http://example.com?container="; + 
CONTAINER));
   }
-  
+
   @Test
-  public void processPathPrefixMismatch() {
+  public void processDefaultConfig() throws GadgetException {
+    ContainerConfig config = mockDefaultConfig("foo", "/gadgets/js");
+    DefaultJsUriManager manager = makeManager(config, null);
+    manager.processExternJsUri(Uri.parse("http://example.com?container="; + 
CONTAINER));
+  }
+
+  @Test
+  public void processPathPrefixMismatch() throws GadgetException {
     String targetHost = "target-host.org";
     ContainerConfig config = mockConfig("http://"; + targetHost, "/gadgets/js");
     TestDefaultJsUriManager manager = makeManager(config, null);
@@ -161,9 +169,20 @@ public class DefaultJsUriManagerTest {
     assertEquals(jsUri.getStatus(), UriStatus.BAD_URI);
     assertSame(DefaultJsUriManager.INVALID_URI, jsUri);
   }
-  
+
+  @Test(expected = GadgetException.class)
+  public void processNoValidJs() throws GadgetException {
+    String targetHost = "target-host.org";
+    ContainerConfig config = mockConfig("http://"; + targetHost, "/gadgets/js");
+    List<String> extern = Lists.newArrayList("feature", "another");
+    String version = "verstring";
+    DefaultJsUriManager manager = new DefaultJsUriManager(config, null);
+    Uri testUri = Uri.parse("http://target-host.org/gadgets/js?container="; + 
CONTAINER );
+    JsUri jsUri = manager.processExternJsUri(testUri);
+  }
+
   @Test
-  public void processPathSuffixMismatch() {
+  public void processPathSuffixMismatch() throws GadgetException {
     String targetHost = "target-host.org";
     ContainerConfig config = mockConfig("http://"; + targetHost, "/gadgets/js");
     TestDefaultJsUriManager manager = makeManager(config, null);
@@ -174,9 +193,9 @@ public class DefaultJsUriManagerTest {
     assertEquals(jsUri.getStatus(), UriStatus.BAD_URI);
     assertSame(DefaultJsUriManager.INVALID_URI, jsUri);
   }
-  
+
   @Test
-  public void processValidUnversionedNoVersioner() {
+  public void processValidUnversionedNoVersioner() throws GadgetException {
     String targetHost = "target-host.org";
     ContainerConfig config = mockConfig("http://"; + targetHost, "/gadgets/js");
     List<String> extern = Lists.newArrayList("feature", "another");
@@ -190,9 +209,9 @@ public class DefaultJsUriManagerTest {
     assertEquals(jsUri.getStatus(), UriStatus.VALID_UNVERSIONED);
     assertCollectionEquals(jsUri.getLibs(), extern);
   }
-  
+
   @Test
-  public void processValidInvalidVersion() {
+  public void processValidInvalidVersion() throws GadgetException {
     String targetHost = "target-host.org";
     ContainerConfig config = mockConfig("http://"; + targetHost, "/gadgets/js");
     List<String> extern = Lists.newArrayList("feature", "another");
@@ -208,9 +227,9 @@ public class DefaultJsUriManagerTest {
     assertEquals(jsUri.getStatus(), UriStatus.INVALID_VERSION);
     assertCollectionEquals(jsUri.getLibs(), extern);
   }
-  
+
   @Test
-  public void processValidUnversionedNoParam() {
+  public void processValidUnversionedNoParam() throws GadgetException {
     String targetHost = "target-host.org";
     ContainerConfig config = mockConfig("http://"; + targetHost, "/gadgets/js");
     List<String> extern = Lists.newArrayList("feature", "another");
@@ -224,9 +243,9 @@ public class DefaultJsUriManagerTest {
     assertEquals(jsUri.getStatus(), UriStatus.VALID_UNVERSIONED);
     assertCollectionEquals(jsUri.getLibs(), extern);
   }
-  
+
   @Test
-  public void processValidVersioned() {
+  public void processValidVersioned() throws GadgetException {
     String targetHost = "target-host.org";
     ContainerConfig config = mockConfig("http://"; + targetHost, "/gadgets/js");
     List<String> extern = Lists.newArrayList("feature", "another");
@@ -241,10 +260,10 @@ public class DefaultJsUriManagerTest {
     assertEquals(jsUri.getStatus(), UriStatus.VALID_VERSIONED);
     assertCollectionEquals(jsUri.getLibs(), extern);
   }
-  
+
   // end-to-end integration-ish test: makeX builds a Uri that processX 
correctly handles
   @Test
-  public void makeAndProcessSymmetric() {
+  public void makeAndProcessSymmetric() throws GadgetException {
     // Make...
     ContainerConfig config = mockConfig("http://www.js.org";, "/gadgets/js");
     Gadget gadget = mockGadget(false, false);
@@ -261,30 +280,48 @@ public class DefaultJsUriManagerTest {
     assertEquals(version, jsUri.getQueryParameter(Param.VERSION.getKey()));
     assertEquals("0", jsUri.getQueryParameter(Param.NO_CACHE.getKey()));
     assertEquals("0", jsUri.getQueryParameter(Param.DEBUG.getKey()));
-    
+
     // ...and process
     JsUri processed = manager.processExternJsUri(jsUri);
     assertEquals(UriStatus.VALID_VERSIONED, processed.getStatus());
     assertCollectionEquals(extern, processed.getLibs());
   }
-  
+
   private void assertCollectionEquals(Collection<String> expected, 
Collection<String> test) {
     assertEquals(expected.size(), test.size());
     List<String> expectedCopy = Lists.newArrayList(expected);
     List<String> testCopy = Lists.newArrayList(test);
     assertEquals(expectedCopy, testCopy);
   }
-  
+
   private ContainerConfig mockConfig(String jsHost, String jsPath) {
     ContainerConfig config = createMock(ContainerConfig.class);
     expect(config.getString(CONTAINER, DefaultJsUriManager.JS_HOST_PARAM))
         .andReturn(jsHost).anyTimes();
     expect(config.getString(CONTAINER, DefaultJsUriManager.JS_PATH_PARAM))
         .andReturn(jsPath).anyTimes();
+    expect(config.getString(ContainerConfig.DEFAULT_CONTAINER, 
DefaultJsUriManager.JS_HOST_PARAM))
+        .andReturn(null).anyTimes();
+    expect(config.getString(ContainerConfig.DEFAULT_CONTAINER, 
DefaultJsUriManager.JS_PATH_PARAM))
+        .andReturn(null).anyTimes();
     replay(config);
     return config;
   }
-  
+
+  private ContainerConfig mockDefaultConfig(String jsHost, String jsPath) {
+    ContainerConfig config = createMock(ContainerConfig.class);
+    expect(config.getString(CONTAINER, DefaultJsUriManager.JS_HOST_PARAM))
+        .andReturn(null).anyTimes();
+    expect(config.getString(CONTAINER, DefaultJsUriManager.JS_PATH_PARAM))
+        .andReturn(null).anyTimes();
+    expect(config.getString(ContainerConfig.DEFAULT_CONTAINER, 
DefaultJsUriManager.JS_HOST_PARAM))
+        .andReturn(jsHost).anyTimes();
+    expect(config.getString(ContainerConfig.DEFAULT_CONTAINER, 
DefaultJsUriManager.JS_PATH_PARAM))
+        .andReturn(jsPath).anyTimes();
+    replay(config);
+    return config;
+  }
+
   private Versioner mockVersioner(
       Collection<String> extern, String genVersion, String testVersion) {
     JsUriManager.Versioner versioner = createMock(Versioner.class);
@@ -299,7 +336,7 @@ public class DefaultJsUriManagerTest {
     replay(versioner);
     return versioner;
   }
-  
+
   private Gadget mockGadget(boolean nocache, boolean debug) {
     GadgetContext context = createMock(GadgetContext.class);
     expect(context.getContainer()).andReturn(CONTAINER).anyTimes();
@@ -309,23 +346,23 @@ public class DefaultJsUriManagerTest {
     replay(context);
     return new Gadget().setContext(context);
   }
-  
+
   private TestDefaultJsUriManager makeManager(ContainerConfig config, 
Versioner versioner) {
     return new TestDefaultJsUriManager(config, versioner);
   }
-  
+
   private static final class TestDefaultJsUriManager extends 
DefaultJsUriManager {
     private boolean errorReported = false;
-    
+
     private TestDefaultJsUriManager(ContainerConfig config, Versioner 
versioner) {
       super(config, versioner);
     }
-    
+
     @Override
     protected void issueUriFormatError(String err) {
       this.errorReported = true;
     }
-    
+
     public boolean hadError() {
       return errorReported;
     }


Reply via email to