You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shindig.apache.org by mh...@apache.org on 2010/10/14 00:28:27 UTC

svn commit: r1022314 - in /shindig/trunk/java/gadgets/src: main/java/org/apache/shindig/gadgets/uri/ test/java/org/apache/shindig/gadgets/uri/

Author: mhermanto
Date: Wed Oct 13 22:28:27 2010
New Revision: 1022314

URL: http://svn.apache.org/viewvc?rev=1022314&view=rev
Log:
Augment &libs= for type=url gadgets.
http://codereview.appspot.com/2474041/

Modified:
    shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultIframeUriManager.java
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultIframeUriManagerTest.java
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/UriManagerTestBase.java

Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultIframeUriManager.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultIframeUriManager.java?rev=1022314&r1=1022313&r2=1022314&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultIframeUriManager.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultIframeUriManager.java Wed Oct 13 22:28:27 2010
@@ -39,9 +39,10 @@ import org.apache.shindig.gadgets.uri.Ur
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
+import java.util.Set;
 
 /**
- * Default implementetion of an IframeUriManager which references the /ifr endpoint.
+ * Default implementation of an IframeUriManager which references the /ifr endpoint.
  */
 public class DefaultIframeUriManager implements IframeUriManager {
   // By default, fills in values that could otherwise be templated for client population.
@@ -56,7 +57,7 @@ public class DefaultIframeUriManager imp
   private boolean ldEnabled = true;
   private TemplatingSignal tplSignal = null;
   private Versioner versioner = null;
-  
+
   private final ContainerConfig config;
   private final LockedDomainPrefixGenerator ldGen;
   private final SecurityTokenCodec securityTokenCodec;
@@ -70,7 +71,7 @@ public class DefaultIframeUriManager imp
     this.config = config;
     this.ldGen = ldGen;
     this.securityTokenCodec = securityTokenCodec;
-    
+
     Collection<String> containers = config.getContainers();
     List<String> ldSuffixes = Lists.newArrayListWithCapacity(containers.size());
     for (String container : containers) {
@@ -78,40 +79,43 @@ public class DefaultIframeUriManager imp
     }
     this.ldSuffixes = Collections.unmodifiableList(ldSuffixes);
   }
-  
+
   @Inject(optional = true)
   public void setLockedDomainEnabled(
       @Named("shindig.locked-domain.enabled") Boolean ldEnabled) {
     this.ldEnabled = ldEnabled;
   }
-  
+
   @Inject(optional = true)
   public void setVersioner(Versioner versioner) {
     this.versioner = versioner;
   }
-  
+
   @Inject(optional = true)
   public void setTemplatingSignal(TemplatingSignal tplSignal) {
     this.tplSignal = tplSignal;
   }
-  
+
   public Uri makeRenderingUri(Gadget gadget) {
     UriBuilder uri;
     View view = gadget.getCurrentView();
-    
+
     GadgetContext context = gadget.getContext();
     String container = context.getContainer();
-    
+
     if (View.ContentType.URL.equals(view.getType())) {
       // A. type=url. Initializes all except standard parameters.
       uri = new UriBuilder(view.getHref());
+
+      addExtrasForTypeUrl(uri, gadget);
+
     } else {
       // B. Others, aka. type=html and html_sanitized.
       uri = new UriBuilder();
 
       // 1. Set base path.
       uri.setPath(getReqVal(container, IFRAME_BASE_PATH_KEY));
-    
+
       // 2. Set host/authority.
       String host;
       if (usingLockedDomain(gadget, container)) {
@@ -121,17 +125,17 @@ public class DefaultIframeUriManager imp
         host = getReqVal(container, UNLOCKED_DOMAIN_KEY);
       }
       uri.setAuthority(host);
-    
+
       // 3. Set protocol/schema.
       uri.setScheme(getScheme(gadget, container));
-      
+
       // 4. Add the URL.
       uri.addQueryParameter(Param.URL.getKey(), context.getUrl().toString());
     }
-    
+
     // Add container, whose input derived other components of the URI.
     uri.addQueryParameter(Param.CONTAINER.getKey(), container);
-    
+
     // Add remaining non-url standard parameters, in templated or filled form.
     boolean useTpl = tplSignal != null ? tplSignal.useTemplates() : DEFAULT_USE_TEMPLATES;
     addParam(uri, Param.VIEW.getKey(), view.getName(), useTpl, false);
@@ -139,7 +143,7 @@ public class DefaultIframeUriManager imp
     addParam(uri, Param.COUNTRY.getKey(), context.getLocale().getCountry(), useTpl, false);
     addParam(uri, Param.DEBUG.getKey(), context.getDebug() ? "1" : "0", useTpl, false);
     addParam(uri, Param.NO_CACHE.getKey(), context.getIgnoreCache() ? "1" : "0", useTpl, false);
-    
+
     // Add all UserPrefs
     UserPrefs prefs = context.getUserPrefs();
     for (UserPref up : gadget.getSpec().getUserPrefs().values()) {
@@ -148,7 +152,7 @@ public class DefaultIframeUriManager imp
       if (data == null) {
         data = up.getDefaultValue();
       }
-      
+
       boolean upInFragment = !view.needsUserPrefSubstitution();
       addParam(uri, UriCommon.USER_PREF_PREFIX + up.getName(), data, useTpl, upInFragment);
     }
@@ -158,17 +162,17 @@ public class DefaultIframeUriManager imp
       addParam(uri, Param.VERSION.getKey(),
           versioner.version(gadget.getSpec().getUrl(), container), false, false);
     }
-    
+
     if (wantsSecurityToken(gadget)) {
       boolean securityTokenOnQuery = isTokenNeededForRendering(gadget);
-      
+
       String securityToken = generateSecurityToken(gadget);
       addParam(uri, Param.SECURITY_TOKEN.getKey(), securityToken, securityToken == null,
           !securityTokenOnQuery);
     }
-    
-    addExtras(uri);
-    
+
+    addExtras(uri, gadget);
+
     return uri.toUri();
   }
 
@@ -190,7 +194,7 @@ public class DefaultIframeUriManager imp
     return gadget.getAllFeatures().contains(SECURITY_TOKEN_FEATURE_NAME) ||
            config.getBool(gadget.getContext().getContainer(), SECURITY_TOKEN_ALWAYS_KEY);
   }
-  
+
   // This method should be overridden to provide better caching characteristics
   // for rendering Uris. In particular, it should return true only when the gadget
   // uses server-side processing of such things as OpenSocial templates, Data pipelining,
@@ -199,10 +203,10 @@ public class DefaultIframeUriManager imp
   protected boolean isTokenNeededForRendering(Gadget gadget) {
     return true;
   }
-  
+
   public UriStatus validateRenderingUri(Uri inUri) {
     UriBuilder uri = new UriBuilder(inUri);
-    
+
     String gadgetStr = uri.getQueryParameter(Param.URL.getKey());
     Uri gadgetUri = null;
     try {
@@ -211,12 +215,12 @@ public class DefaultIframeUriManager imp
       // RuntimeException eg. InvalidArgumentException
       return UriStatus.BAD_URI;
     }
-    
+
     String container = uri.getQueryParameter(Param.CONTAINER.getKey());
     if (container == null) {
       container = ContainerConfig.DEFAULT_CONTAINER;
     }
-    
+
     // Validate domain.
     String host = uri.getAuthority().toLowerCase();
     String gadgetLdPrefix = ldGen.getLockedDomainPrefix(gadgetUri).toLowerCase();
@@ -245,34 +249,39 @@ public class DefaultIframeUriManager imp
         }
       }
     }
-    
+
     String version = uri.getQueryParameter(Param.VERSION.getKey());
     if (versioner == null || version == null) {
       return UriStatus.VALID_UNVERSIONED;
     }
-    
+
     return versioner.validate(gadgetUri, container, version);
   }
-  
+
   public static String tplKey(String key) {
     return '%' + key + '%';
   }
-  
+
   /** Overridable methods for custom behavior */
   protected boolean lockedDomainExclusion() {
     // Subclass/override this to support a custom notion of dev-mode, other exclusions.
     return false;
   }
-  
+
   protected String getScheme(Gadget gadget, String container) {
     // Scheme-relative by default. Override for specific use cases.
     return null;
   }
-  
-  protected void addExtras(UriBuilder uri) {
+
+  protected void addExtrasForTypeUrl(UriBuilder uri, Gadget gadget) {
+    Set<String> features = gadget.getSpec().getModulePrefs().getFeatures().keySet();
+    addParam(uri, Param.LIBS.getKey(), DefaultJsUriManager.addJsLibs(features), false, false);
+  }
+
+  protected void addExtras(UriBuilder uri, Gadget gadget) {
     // Add whatever custom flags are desired here.
   }
-  
+
   private void addParam(UriBuilder uri, String key, String data, boolean templated,
       boolean fragment) {
     String value;
@@ -281,30 +290,30 @@ public class DefaultIframeUriManager imp
     } else {
       value = data;
     }
-    
+
     if (!fragment) {
       uri.addQueryParameter(key, value);
     } else {
       uri.addFragmentParameter(key, value);
     }
   }
-  
+
   private boolean usingLockedDomain(Gadget gadget, String container) {
     if (!ldEnabled) {
       return false;
     }
-    
+
     if (lockedDomainExclusion()) {
       return false;
     }
-    
+
     if (config.getBool(container, LOCKED_DOMAIN_REQUIRED_KEY)) {
       return true;
     }
-    
+
     return gadget.getAllFeatures().contains(LOCKED_DOMAIN_FEATURE_NAME);
   }
-  
+
   private String getReqVal(String container, String key) {
     String val = config.getString(container, key);
     if (val == null) {
@@ -313,21 +322,21 @@ public class DefaultIframeUriManager imp
     }
     return val;
   }
-  
+
   @ImplementedBy(DefaultTemplatingSignal.class)
   public static interface TemplatingSignal {
     boolean useTemplates();
   }
-  
+
   public static final class DefaultTemplatingSignal implements TemplatingSignal {
     private boolean useTemplates = true;
-    
+
     @Inject(optional = true)
     public void setUseTemplates(
         @Named("shindig.urlgen.use-templates-default") Boolean useTemplates) {
       this.useTemplates = useTemplates;
     }
-    
+
     public boolean useTemplates() {
       return useTemplates;
     }

Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultIframeUriManagerTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultIframeUriManagerTest.java?rev=1022314&r1=1022313&r2=1022314&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultIframeUriManagerTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultIframeUriManagerTest.java Wed Oct 13 22:28:27 2010
@@ -60,9 +60,9 @@ public class DefaultIframeUriManagerTest
   private static final String LD_SUFFIX = ".lockeddomain.com";
   private static final String LD_SUFFIX_ALT = ".altld.com";
   private static final String UNLOCKED_DOMAIN = "unlockeddomain.com";
-  private static final int TYPE_URL_NUM_BASE_PARAMS = 6;
-  private static final int TYPE_HTML_NUM_BASE_PARAMS = TYPE_URL_NUM_BASE_PARAMS + 1;
-  
+  private static final int TYPE_URL_NUM_BASE_PARAMS = 7;
+  private static final int TYPE_HTML_NUM_BASE_PARAMS = 7;
+
   private static final LockedDomainPrefixGenerator prefixGen = new LockedDomainPrefixGenerator() {
     public String getLockedDomainPrefix(Uri gadgetUri) {
       return LD_PREFIX;
@@ -70,7 +70,7 @@ public class DefaultIframeUriManagerTest
   };
 
   private static final SecurityTokenCodec tokenCodec = new BasicSecurityTokenCodec();
-  
+
   @Test
   public void typeHtmlBasicOptions() {
     String prefKey = "prefKey";
@@ -78,7 +78,7 @@ public class DefaultIframeUriManagerTest
     Map<String, String> prefs = Maps.newHashMap();
     prefs.put(prefKey, prefVal);
     List<String> features = Lists.newArrayList();
-    
+
     // Make the gadget.
     Gadget gadget = mockGadget(
         SPEC_URI.toString(),
@@ -89,16 +89,16 @@ public class DefaultIframeUriManagerTest
         prefs,  // prefs supplied by the requester, same k/v as spec w/ default val for simplicity
         false,  // no pref substitution needed, ergo prefs in fragment
         features);
-    
+
     // Generate a default-option manager
     TestDefaultIframeUriManager manager = makeManager(
         false,   // security token beacon not required
         false);  // locked domain not required
-    
+
     // Generate URI, turn into UriBuilder for validation
     Uri result = manager.makeRenderingUri(gadget);
     assertNotNull(result);
-    
+
     UriBuilder uri = new UriBuilder(result);
     assertEquals("", uri.getScheme());
     assertEquals(UNLOCKED_DOMAIN, uri.getAuthority());
@@ -111,17 +111,17 @@ public class DefaultIframeUriManagerTest
     assertEquals("0", uri.getQueryParameter(Param.DEBUG.getKey()));
     assertEquals("0", uri.getQueryParameter(Param.NO_CACHE.getKey()));
     assertEquals(prefVal, uri.getFragmentParameter("up_" + prefKey));
-    
+
     // Only the params that are needed.
     assertEquals(TYPE_HTML_NUM_BASE_PARAMS, uri.getQueryParameters().size());
     assertEquals(1, uri.getFragmentParameters().size());
-    
+
     assertFalse(manager.tokenForRenderingCalled());
     assertTrue(manager.schemeCalled());
     assertTrue(manager.ldExclusionCalled());
     assertTrue(manager.addExtrasCalled());
   }
-    
+
   @Test
   public void typeHtmlBasicOptionsTpl() {
     String prefKey = "prefKey";
@@ -129,7 +129,7 @@ public class DefaultIframeUriManagerTest
     Map<String, String> prefs = Maps.newHashMap();
     prefs.put(prefKey, prefVal);
     List<String> features = Lists.newArrayList();
-    
+
     // Make the gadget.
     Gadget gadget = mockGadget(
         SPEC_URI.toString(),
@@ -140,17 +140,17 @@ public class DefaultIframeUriManagerTest
         prefs,  // prefs supplied by the requester, same k/v as spec w/ default val for simplicity
         false,  // no pref substitution needed, ergo prefs in fragment
         features);
-    
+
     // Create another manager, this time templatized.
     TestDefaultIframeUriManager managerTpl = makeManager(
         false,   // security token beacon not required
         false);  // locked domain not required
     managerTpl.setTemplatingSignal(tplSignal(true));
-    
+
     // Templatized results.
     Uri resultTpl = managerTpl.makeRenderingUri(gadget);
     assertNotNull(resultTpl);
-    
+
     UriBuilder uriTpl = new UriBuilder(resultTpl);
     assertEquals("", uriTpl.getScheme());
     assertEquals(UNLOCKED_DOMAIN, uriTpl.getAuthority());
@@ -164,17 +164,17 @@ public class DefaultIframeUriManagerTest
     assertEquals(tplKey(Param.NO_CACHE.getKey()),
         uriTpl.getQueryParameter(Param.NO_CACHE.getKey()));
     assertEquals(tplKey("up_" + prefKey), uriTpl.getFragmentParameter("up_" + prefKey));
-    
+
     // Only the params that are needed.
     assertEquals(TYPE_HTML_NUM_BASE_PARAMS, uriTpl.getQueryParameters().size());
     assertEquals(1, uriTpl.getFragmentParameters().size());
-    
+
     assertFalse(managerTpl.tokenForRenderingCalled());
     assertTrue(managerTpl.schemeCalled());
     assertTrue(managerTpl.ldExclusionCalled());
     assertTrue(managerTpl.addExtrasCalled());
   }
-  
+
   @Test
   public void typeUrlDefaultOptions() {
     String gadgetSite = "http://example.com/gadget";
@@ -182,8 +182,8 @@ public class DefaultIframeUriManagerTest
     String prefVal = "prefVal";
     Map<String, String> prefs = Maps.newHashMap();
     prefs.put(prefKey, prefVal);
-    List<String> features = Lists.newArrayList();
-    
+    List<String> features = Lists.newArrayList("rpc", "setprefs");
+
     // Make the gadget.
     Gadget gadget = mockGadget(
         gadgetSite,
@@ -194,16 +194,16 @@ public class DefaultIframeUriManagerTest
         prefs,  // prefs supplied by the requester, same k/v as spec w/ default val for simplicity
         false,  // no pref substitution needed, ergo prefs in fragment
         features);
-    
+
     // Generate a default-option manager
     TestDefaultIframeUriManager manager = makeManager(
         false,   // security token beacon not required
         false);  // locked domain not required
-    
+
     // Generate URI, turn into UriBuilder for validation
     Uri result = manager.makeRenderingUri(gadget);
     assertNotNull(result);
-    
+
     UriBuilder uri = new UriBuilder(result);
     assertEquals("http", uri.getScheme());
     assertEquals("example.com", uri.getAuthority());
@@ -212,20 +212,21 @@ public class DefaultIframeUriManagerTest
     assertEquals(VIEW, uri.getQueryParameter(Param.VIEW.getKey()));
     assertEquals(LANG, uri.getQueryParameter(Param.LANG.getKey()));
     assertEquals(COUNTRY, uri.getQueryParameter(Param.COUNTRY.getKey()));
+    assertEquals("rpc:setprefs", uri.getQueryParameter(Param.LIBS.getKey()));
     assertEquals("1", uri.getQueryParameter(Param.DEBUG.getKey()));
     assertEquals("1", uri.getQueryParameter(Param.NO_CACHE.getKey()));
     assertEquals(prefVal, uri.getFragmentParameter("up_" + prefKey));
-    
+
     // Only the params that are needed.
     assertEquals(TYPE_URL_NUM_BASE_PARAMS, uri.getQueryParameters().size());
     assertEquals(1, uri.getFragmentParameters().size());
-    
+
     assertFalse(manager.tokenForRenderingCalled());
     assertFalse(manager.schemeCalled());
     assertFalse(manager.ldExclusionCalled());
     assertTrue(manager.addExtrasCalled());
   }
-  
+
   @Test
   public void typeUrlDefaultOptionsTpl() {
     String gadgetSite = "http://example.com/gadget";
@@ -234,7 +235,7 @@ public class DefaultIframeUriManagerTest
     Map<String, String> prefs = Maps.newHashMap();
     prefs.put(prefKey, prefVal);
     List<String> features = Lists.newArrayList();
-    
+
     // Make the gadget.
     Gadget gadget = mockGadget(
         gadgetSite,
@@ -245,22 +246,23 @@ public class DefaultIframeUriManagerTest
         prefs,  // prefs supplied by the requester, same k/v as spec w/ default val for simplicity
         false,  // no pref substitution needed, ergo prefs in fragment
         features);
-    
+
     // Generate a default-option manager
     TestDefaultIframeUriManager managerTpl = makeManager(
         false,   // security token beacon not required
         false);  // locked domain not required
     managerTpl.setTemplatingSignal(tplSignal(true));
-    
+
     // Generate URI, turn into UriBuilder for validation
     Uri resultTpl = managerTpl.makeRenderingUri(gadget);
     assertNotNull(resultTpl);
-    
+
     UriBuilder uriTpl = new UriBuilder(resultTpl);
     assertEquals("http", uriTpl.getScheme());
     assertEquals("example.com", uriTpl.getAuthority());
     assertEquals("/gadget", uriTpl.getPath());
     assertEquals(CONTAINER, uriTpl.getQueryParameter(Param.CONTAINER.getKey()));
+    assertEquals("", uriTpl.getQueryParameter(Param.LIBS.getKey()));
     assertEquals(tplKey(Param.VIEW.getKey()), uriTpl.getQueryParameter(Param.VIEW.getKey()));
     assertEquals(tplKey(Param.LANG.getKey()), uriTpl.getQueryParameter(Param.LANG.getKey()));
     assertEquals(tplKey(Param.COUNTRY.getKey()), uriTpl.getQueryParameter(Param.COUNTRY.getKey()));
@@ -268,17 +270,17 @@ public class DefaultIframeUriManagerTest
     assertEquals(tplKey(Param.NO_CACHE.getKey()),
         uriTpl.getQueryParameter(Param.NO_CACHE.getKey()));
     assertEquals(tplKey("up_" + prefKey), uriTpl.getFragmentParameter("up_" + prefKey));
-    
+
     // Only the params that are needed.
     assertEquals(TYPE_URL_NUM_BASE_PARAMS, uriTpl.getQueryParameters().size());
     assertEquals(1, uriTpl.getFragmentParameters().size());
-    
+
     assertFalse(managerTpl.tokenForRenderingCalled());
     assertFalse(managerTpl.schemeCalled());
     assertFalse(managerTpl.ldExclusionCalled());
     assertTrue(managerTpl.addExtrasCalled());
   }
-  
+
   @Test
   public void securityTokenAddedWhenGadgetNeedsItFragment() {
     Gadget gadget = mockGadget(SECURITY_TOKEN_FEATURE_NAME);
@@ -293,7 +295,7 @@ public class DefaultIframeUriManagerTest
         uri.getFragmentParameter(Param.SECURITY_TOKEN.getKey()));
     assertTrue(manager.tokenForRenderingCalled());
   }
-  
+
   @Test
   public void securityTokenAddedWhenGadgetNeedsItQuery() {
     Gadget gadget = mockGadget(SECURITY_TOKEN_FEATURE_NAME);
@@ -308,7 +310,7 @@ public class DefaultIframeUriManagerTest
         uri.getQueryParameter(Param.SECURITY_TOKEN.getKey()));
     assertTrue(manager.tokenForRenderingCalled());
   }
-  
+
   @Test
   public void securityTokenAddedWhenForced() {
     Gadget gadget = mockGadget("foo", "bar");
@@ -323,93 +325,93 @@ public class DefaultIframeUriManagerTest
         uri.getFragmentParameter(Param.SECURITY_TOKEN.getKey()));
     assertTrue(manager.tokenForRenderingCalled());
   }
-  
+
   @Test
   public void ldAddedGadgetRequests() {
     Gadget gadget = mockGadget(LOCKED_DOMAIN_FEATURE_NAME);
-    
+
     TestDefaultIframeUriManager manager = makeManager(
         false,   // security token beacon not required
         false);  // locked domain not (always) required
-    
+
     Uri result = manager.makeRenderingUri(gadget);
     assertNotNull(result);
-    
+
     UriBuilder uri = new UriBuilder(result);
     assertEquals("", uri.getScheme());
     assertEquals(LD_PREFIX + LD_SUFFIX, uri.getAuthority());
     assertEquals(IFRAME_PATH, uri.getPath());
-    
+
     // Basic sanity checks on params
     assertEquals(TYPE_HTML_NUM_BASE_PARAMS, uri.getQueryParameters().size());
     assertEquals(0, uri.getFragmentParameters().size());
   }
-  
+
   @Test
   public void ldAddedForcedAlways() {
     Gadget gadget = mockGadget();
-    
+
     TestDefaultIframeUriManager manager = makeManager(
         false,   // security token beacon not required
         true);   // locked domain always required
-    
+
     Uri result = manager.makeRenderingUri(gadget);
     assertNotNull(result);
-    
+
     UriBuilder uri = new UriBuilder(result);
     assertEquals("", uri.getScheme());
     assertEquals(LD_PREFIX + LD_SUFFIX, uri.getAuthority());
     assertEquals(IFRAME_PATH, uri.getPath());
-    
+
     // Basic sanity checks on params
     assertEquals(TYPE_HTML_NUM_BASE_PARAMS, uri.getQueryParameters().size());
     assertEquals(0, uri.getFragmentParameters().size());
   }
-  
+
   @Test
   public void ldNotAddedIfDisabled() {
     Gadget gadget = mockGadget(LOCKED_DOMAIN_FEATURE_NAME);
-    
+
     TestDefaultIframeUriManager manager = makeManager(
         false,   // security token beacon not required
         true);   // locked domain always required
     manager.setLockedDomainEnabled(false);  // but alas, not enabled in the 1st place
-    
+
     Uri result = manager.makeRenderingUri(gadget);
     assertNotNull(result);
-    
+
     UriBuilder uri = new UriBuilder(result);
     assertEquals("", uri.getScheme());
     assertEquals(UNLOCKED_DOMAIN, uri.getAuthority());
     assertEquals(IFRAME_PATH, uri.getPath());
-    
+
     // Basic sanity checks on params
     assertEquals(TYPE_HTML_NUM_BASE_PARAMS, uri.getQueryParameters().size());
     assertEquals(0, uri.getFragmentParameters().size());
   }
-  
+
   @Test
   public void ldNotAddedWithExclusion() {
     Gadget gadget = mockGadget(LOCKED_DOMAIN_FEATURE_NAME);
-    
+
     TestDefaultIframeUriManager manager = makeManager(
         false,   // security token beacon not required
         true);   // locked domain always required
     manager.setLdExclusion(true);  // but alas, excluded
-    
+
     Uri result = manager.makeRenderingUri(gadget);
     assertNotNull(result);
-    
+
     UriBuilder uri = new UriBuilder(result);
     assertEquals("", uri.getScheme());
     assertEquals(UNLOCKED_DOMAIN, uri.getAuthority());
     assertEquals(IFRAME_PATH, uri.getPath());
-    
+
     // Basic sanity checks on params
     assertEquals(TYPE_HTML_NUM_BASE_PARAMS, uri.getQueryParameters().size());
     assertEquals(0, uri.getFragmentParameters().size());
   }
-  
+
   @Test
   public void versionAddedWithVersioner() {
     String version = "abcdlkjwef";
@@ -422,7 +424,7 @@ public class DefaultIframeUriManagerTest
     assertEquals(TYPE_HTML_NUM_BASE_PARAMS + 1, uri.getQueryParameters().size());
     assertEquals(version, uri.getQueryParameter(Param.VERSION.getKey()));
   }
-  
+
   @Test
   public void userPrefsAddedQuery() {
     // Scenario exercises all prefs cases: overridden/known key, unknown key, missing key
@@ -432,20 +434,20 @@ public class DefaultIframeUriManagerTest
     Map<String, String> inPrefs = Maps.newHashMap();
     inPrefs.put("specKey1", "inVal1");
     inPrefs.put("otherKey1", "inVal2");
-    
+
     Gadget gadget = mockGadget(true, specPrefs, inPrefs);
     TestDefaultIframeUriManager manager = makeManager(false, false);
     Uri result = manager.makeRenderingUri(gadget);
     assertNotNull(result);
     UriBuilder uri = new UriBuilder(result);
-    
+
     // otherKey1/inVal2 pair ignored; not known by the gadget
     assertEquals(TYPE_HTML_NUM_BASE_PARAMS + 2, uri.getQueryParameters().size());
     assertEquals(0, uri.getFragmentParameters().size());
     assertEquals("inVal1", uri.getQueryParameter("up_specKey1"));
     assertEquals("specDefault2", uri.getQueryParameter("up_specKey2"));
   }
-  
+
   @Test
   public void userPrefsAddedFragment() {
     // Scenario exercises all prefs cases: overridden/known key, unknown key, missing key
@@ -455,20 +457,20 @@ public class DefaultIframeUriManagerTest
     Map<String, String> inPrefs = Maps.newHashMap();
     inPrefs.put("specKey1", "inVal1");
     inPrefs.put("otherKey1", "inVal2");
-    
+
     Gadget gadget = mockGadget(false, specPrefs, inPrefs);
     TestDefaultIframeUriManager manager = makeManager(false, false);
     Uri result = manager.makeRenderingUri(gadget);
     assertNotNull(result);
     UriBuilder uri = new UriBuilder(result);
-    
+
     // otherKey1/inVal2 pair ignored; not known by the gadget
     assertEquals(TYPE_HTML_NUM_BASE_PARAMS, uri.getQueryParameters().size());
     assertEquals(2, uri.getFragmentParameters().size());
     assertEquals("inVal1", uri.getFragmentParameter("up_specKey1"));
     assertEquals("specDefault2", uri.getFragmentParameter("up_specKey2"));
   }
-  
+
   @Test
   public void honorSchemeOverride() {
     String scheme = "file";
@@ -480,7 +482,7 @@ public class DefaultIframeUriManagerTest
     UriBuilder uri = new UriBuilder(result);
     assertEquals(scheme, uri.getScheme());
   }
-  
+
   @Test
   public void badUriValidatingUri() {
     Uri uri = new UriBuilder().addQueryParameter(Param.URL.getKey(), "^':   bad:").toUri();
@@ -488,21 +490,21 @@ public class DefaultIframeUriManagerTest
     UriStatus status = manager.validateRenderingUri(uri);
     assertEquals(UriStatus.BAD_URI, status);
   }
-  
+
   @Test
   public void invalidLockedDomainValidSuffix() {
     Uri uri = makeValidationTestUri(LD_PREFIX + LD_SUFFIX_ALT, null);
     DefaultIframeUriManager manager = makeManager(false, false);
     assertEquals(UriStatus.INVALID_DOMAIN, manager.validateRenderingUri(uri));
   }
-  
+
   @Test
   public void invalidLockedDomainInvalidSuffix() {
     Uri uri = makeValidationTestUri(LD_PREFIX + ".bad." + LD_SUFFIX, null);
     DefaultIframeUriManager manager = makeManager(false, false);
     assertEquals(UriStatus.INVALID_DOMAIN, manager.validateRenderingUri(uri));
   }
-  
+
   @Test
   public void invalidLockedDomainValidSuffixExclusionBypass() {
     Uri uri = makeValidationTestUri(LD_PREFIX + LD_SUFFIX_ALT, null);
@@ -510,7 +512,7 @@ public class DefaultIframeUriManagerTest
     manager.setLdExclusion(true);
     assertEquals(UriStatus.VALID_UNVERSIONED, manager.validateRenderingUri(uri));
   }
-  
+
   @Test
   public void invalidLockedDomainInvalidSuffixExclusionBypass() {
     Uri uri = makeValidationTestUri(LD_PREFIX + ".bad." + LD_SUFFIX, null);
@@ -518,7 +520,7 @@ public class DefaultIframeUriManagerTest
     manager.setLdExclusion(true);
     assertEquals(UriStatus.VALID_UNVERSIONED, manager.validateRenderingUri(uri));
   }
-  
+
   @Test
   public void invalidLockedDomainValidSuffixLdDisabled() {
     Uri uri = makeValidationTestUri(LD_PREFIX + LD_SUFFIX_ALT, null);
@@ -526,7 +528,7 @@ public class DefaultIframeUriManagerTest
     manager.setLockedDomainEnabled(false);
     assertEquals(UriStatus.VALID_UNVERSIONED, manager.validateRenderingUri(uri));
   }
-  
+
   @Test
   public void invalidLockedDomainInvalidSuffixLdDisabled() {
     Uri uri = makeValidationTestUri(LD_PREFIX + ".bad." + LD_SUFFIX, null);
@@ -534,14 +536,14 @@ public class DefaultIframeUriManagerTest
     manager.setLockedDomainEnabled(false);
     assertEquals(UriStatus.VALID_UNVERSIONED, manager.validateRenderingUri(uri));
   }
-  
+
   @Test
   public void validUnversionedNoVersioner() {
     Uri uri = makeValidationTestUri(LD_PREFIX + LD_SUFFIX, "version");
     DefaultIframeUriManager manager = makeManager(false, false);
     assertEquals(UriStatus.VALID_UNVERSIONED, manager.validateRenderingUri(uri));
   }
-  
+
   @Test
   public void validUnversionedNoVersion() {
     Uri uri = makeValidationTestUri(LD_PREFIX + LD_SUFFIX, null);
@@ -549,7 +551,7 @@ public class DefaultIframeUriManagerTest
     manager.setVersioner(this.mockVersioner("version", false));  // Invalid, if present.
     assertEquals(UriStatus.VALID_UNVERSIONED, manager.validateRenderingUri(uri));
   }
-  
+
   @Test
   public void versionerVersionInvalid() {
     Uri uri = makeValidationTestUri(LD_PREFIX + LD_SUFFIX, "in-version");
@@ -557,7 +559,7 @@ public class DefaultIframeUriManagerTest
     manager.setVersioner(mockVersioner("test-version", false));  // Invalid, if present.
     assertEquals(UriStatus.INVALID_VERSION, manager.validateRenderingUri(uri));
   }
-  
+
   @Test
   public void versionerVersionMatch() {
     String version = "abcdefg";
@@ -566,7 +568,7 @@ public class DefaultIframeUriManagerTest
     manager.setVersioner(mockVersioner(version, true));
     assertEquals(UriStatus.VALID_VERSIONED, manager.validateRenderingUri(uri));
   }
-  
+
   private Uri makeValidationTestUri(String domain, String version) {
     UriBuilder uri = new UriBuilder();
     uri.setAuthority(domain);
@@ -578,7 +580,7 @@ public class DefaultIframeUriManagerTest
     }
     return uri.toUri();
   }
-    
+
   private TestDefaultIframeUriManager makeManager(boolean alwaysToken, boolean ldRequired) {
     ContainerConfig config = createMock(ContainerConfig.class);
     String altContainer = CONTAINER + "-alt";
@@ -594,7 +596,7 @@ public class DefaultIframeUriManagerTest
     replay(config);
     return new TestDefaultIframeUriManager(config);
   }
-  
+
   private IframeUriManager.Versioner mockVersioner(String version, boolean valid) {
     IframeUriManager.Versioner versioner = createMock(IframeUriManager.Versioner.class);
     expect(versioner.version(isA(Uri.class), isA(String.class))).andReturn(version).anyTimes();
@@ -603,14 +605,14 @@ public class DefaultIframeUriManagerTest
     replay(versioner);
     return versioner;
   }
-  
+
   private DefaultIframeUriManager.TemplatingSignal tplSignal(boolean value) {
     DefaultIframeUriManager.DefaultTemplatingSignal tplSignal =
         new DefaultIframeUriManager.DefaultTemplatingSignal();
     tplSignal.setUseTemplates(value);
     return tplSignal;
   }
-  
+
   private static final class TestDefaultIframeUriManager extends DefaultIframeUriManager {
     private boolean ldExclusion = false;
     private boolean ldExclusionCalled = false;
@@ -619,62 +621,62 @@ public class DefaultIframeUriManagerTest
     private boolean tokenForRendering = true;
     private boolean tokenForRenderingCalled = false;
     private boolean addExtrasCalled = false;
-    
+
     private TestDefaultIframeUriManager(ContainerConfig config) {
       super(config, prefixGen, tokenCodec);
     }
-    
+
     private TestDefaultIframeUriManager setLdExclusion(boolean ldExclusion) {
       this.ldExclusion = ldExclusion;
       return this;
     }
-    
+
     private TestDefaultIframeUriManager setScheme(String scheme) {
       this.scheme = scheme;
       return this;
     }
-    
+
     private TestDefaultIframeUriManager setTokenForRendering(boolean tokenForRendering) {
       this.tokenForRendering = tokenForRendering;
       return this;
     }
-    
+
     /** Overridden methods for custom behavior */
     @Override
     protected boolean lockedDomainExclusion() {
       this.ldExclusionCalled = true;
       return ldExclusion;
     }
-    
+
     private boolean ldExclusionCalled() {
       return ldExclusionCalled;
     }
-    
+
     @Override
     protected String getScheme(Gadget gadget, String container) {
       this.schemeCalled = true;
       return scheme;
     }
-    
+
     private boolean schemeCalled() {
       return schemeCalled;
     }
-    
+
     @Override
     protected boolean isTokenNeededForRendering(Gadget gadget) {
       this.tokenForRenderingCalled = true;
       return tokenForRendering;
     }
-    
+
     private boolean tokenForRenderingCalled() {
       return tokenForRenderingCalled;
     }
-    
+
     @Override
-    protected void addExtras(UriBuilder uri) {
+    protected void addExtras(UriBuilder uri, Gadget gadget) {
       this.addExtrasCalled = true;
     }
-    
+
     private boolean addExtrasCalled() {
       return addExtrasCalled;
     }

Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/UriManagerTestBase.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/UriManagerTestBase.java?rev=1022314&r1=1022313&r2=1022314&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/UriManagerTestBase.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/UriManagerTestBase.java Wed Oct 13 22:28:27 2010
@@ -30,6 +30,7 @@ import org.apache.shindig.common.uri.Uri
 import org.apache.shindig.gadgets.Gadget;
 import org.apache.shindig.gadgets.GadgetContext;
 import org.apache.shindig.gadgets.UserPrefs;
+import org.apache.shindig.gadgets.spec.Feature;
 import org.apache.shindig.gadgets.spec.GadgetSpec;
 import org.apache.shindig.gadgets.spec.ModulePrefs;
 import org.apache.shindig.gadgets.spec.UserPref;
@@ -46,21 +47,21 @@ public class UriManagerTestBase {
   protected static final String VIEW = "theview";
   protected static final String LANG = "en";
   protected static final String COUNTRY = "US";
-  
+
   // Used for "feature-focused" tests, eg. security token and locked domain
   protected Gadget mockGadget(String... features) {
     Map<String, String> prefs = Maps.newHashMap();
     return mockGadget(SPEC_URI.toString(), false, false, false, prefs, prefs, false,
         Lists.newArrayList(features));
   }
-  
+
   // Used for prefs-focused tests
   protected Gadget mockGadget(boolean prefsForRendering, Map<String, String> specPrefs,
       Map<String, String> inPrefs) {
     return mockGadget(SPEC_URI.toString(), false, false, false, specPrefs, inPrefs,
         prefsForRendering, Lists.<String>newArrayList());
   }
-  
+
   // Used for "base" tests.
   protected Gadget mockGadget(String targetUrl, boolean isTypeUrl, boolean isDebug,
       boolean ignoreCache, Map<String, String> specPrefs, Map<String, String> inPrefs,
@@ -68,14 +69,14 @@ public class UriManagerTestBase {
     return mockGadget(targetUrl, isTypeUrl, VIEW, LANG, COUNTRY, isDebug, ignoreCache,
         specPrefs, inPrefs, needsPrefSubst, features);
   }
-  
+
   // Used for tests that don't care much about prefs or gadget type.
   protected Gadget mockGadget(boolean isDebug, boolean ignoreCache) {
     return mockGadget(SPEC_URI.toString(), false, isDebug, ignoreCache,
         Maps.<String, String>newHashMap(), Maps.<String, String>newHashMap(),
         false, Lists.<String>newArrayList());
   }
-  
+
   // Actually generates the mock gadget. Used for error (null value) tests.
   protected Gadget mockGadget(String targetUrl, boolean isTypeUrl, String viewStr, String lang,
       String country, boolean isDebug, boolean ignoreCache, Map<String, String> specPrefs,
@@ -85,7 +86,7 @@ public class UriManagerTestBase {
     GadgetSpec spec = createMock(GadgetSpec.class);
     GadgetContext context = createMock(GadgetContext.class);
     Gadget gadget = createMock(Gadget.class);
-    
+
     // Base URL/view.
     Uri targetUri = Uri.parse(targetUrl);
     if (isTypeUrl) {
@@ -96,7 +97,7 @@ public class UriManagerTestBase {
       expect(spec.getUrl()).andReturn(targetUri).anyTimes();
     }
     expect(view.getName()).andReturn(viewStr).anyTimes();
-    
+
     // Basic context info
     Locale locale = new Locale(lang, country);
     expect(context.getUrl()).andReturn(SPEC_URI).anyTimes();
@@ -105,12 +106,17 @@ public class UriManagerTestBase {
     expect(context.getDebug()).andReturn(isDebug).anyTimes();
     expect(context.getIgnoreCache()).andReturn(ignoreCache).anyTimes();
     expect(context.getToken()).andReturn(null).anyTimes();
-    
+
     // All Features (doesn't distinguish between transitive and not)
     expect(gadget.getAllFeatures()).andReturn(features).anyTimes();
-    
+    Map<String, Feature> featureMap = Maps.newLinkedHashMap();
+    for (String feature : features) {
+      featureMap.put(feature, null);
+    }
+    expect(modulePrefs.getFeatures()).andReturn(featureMap).anyTimes();
+
     // User prefs
-    Map<String,UserPref> specPrefMap = Maps.newLinkedHashMap();
+    Map<String, UserPref> specPrefMap = Maps.newLinkedHashMap();
     for (Map.Entry<String, String> specPref : specPrefs.entrySet()) {
       UserPref up = createMock(UserPref.class);
       expect(up.getName()).andReturn(specPref.getKey()).anyTimes();
@@ -123,16 +129,16 @@ public class UriManagerTestBase {
     expect(context.getUserPrefs()).andReturn(ctxPrefs).anyTimes();
     expect(context.getParameter(Param.REFRESH.getKey())).andReturn(null).anyTimes();
     expect(view.needsUserPrefSubstitution()).andReturn(needsPrefSubst).anyTimes();
-    
+
     // Link all the mocks together
     expect(spec.getModulePrefs()).andReturn(modulePrefs).anyTimes();
     expect(gadget.getCurrentView()).andReturn(view).anyTimes();
     expect(gadget.getSpec()).andReturn(spec).anyTimes();
     expect(gadget.getContext()).andReturn(context).anyTimes();
-    
+
     // Replay all
     replay(view, modulePrefs, spec, context, gadget);
-   
+
     // Return the gadget
     return gadget;
   }