private void initFeaturesLists() { if (allFeatures == null) { // Lazy-initialize these, to avoid computation where not needed. allFeatures = registry.getFeatures(jsUri.getLibs()); loadedFeatures = registry.getFeatures(jsUri.getLoadedLibs()); newFeatures = Lists.newLinkedList(); for (String candidate : allFeatures) { if (!loadedFeatures.contains(candidate)) { newFeatures.add(candidate); } } } } }
private JsUri mockJsUri(JsCompileMode mode, boolean isJsload, List<String> libs) { JsUri result = createMock(JsUri.class); expect(result.getCompileMode()).andStubReturn(mode); expect(result.getRepository()).andStubReturn(null); expect(result.isJsload()).andReturn(isJsload).anyTimes(); expect(result.getLibs()).andReturn(libs).anyTimes(); expect(result.getLoadedLibs()).andReturn(LOADED).anyTimes(); replay(result); return result; }
private JsUri mockJsUri(JsCompileMode mode, boolean isJsload, List<String> libs) { JsUri result = createMock(JsUri.class); expect(result.getCompileMode()).andStubReturn(mode); expect(result.getRepository()).andStubReturn(null); expect(result.isJsload()).andReturn(isJsload).anyTimes(); expect(result.getLibs()).andReturn(libs).anyTimes(); expect(result.getLoadedLibs()).andReturn(LOADED).anyTimes(); replay(result); return result; }
private void checkNoMatchingFeaturesDoesNothing(RenderingContext ctx) throws Exception { JsResponseBuilder builder = prepareRequestReturnBuilder(ctx); Map<String, Object> baseConfig = Maps.newHashMap(); baseConfig.put("feature1", "config1"); Map<String, String> f2MapConfig = Maps.newHashMap(); f2MapConfig.put("key1", "val1"); f2MapConfig.put("key2", "val2"); baseConfig.put("feature2", f2MapConfig); expect(containerConfig.getMap(CONTAINER, ConfigInjectionProcessor.GADGETS_FEATURES_KEY)) .andReturn(baseConfig); List<String> libs = ImmutableList.of("lib1", "lib2"); expect(jsUri.getLibs()).andReturn(libs); expect(jsUri.getLoadedLibs()).andReturn(EMPTY_LIST); expect(registry.getFeatures(libs)).andReturn(libs); expect(request.getHost()).andReturn("host"); control.replay(); assertTrue(processor.process(request, builder)); control.verify(); assertEquals(BASE_CODE, builder.build().toJsString()); }
private void checkNoMatchingFeaturesDoesNothing(RenderingContext ctx) throws Exception { JsResponseBuilder builder = prepareRequestReturnBuilder(ctx); Map<String, Object> baseConfig = Maps.newHashMap(); baseConfig.put("feature1", "config1"); Map<String, String> f2MapConfig = Maps.newHashMap(); f2MapConfig.put("key1", "val1"); f2MapConfig.put("key2", "val2"); baseConfig.put("feature2", f2MapConfig); expect(containerConfig.getMap(CONTAINER, ConfigInjectionProcessor.GADGETS_FEATURES_KEY)) .andReturn(baseConfig); List<String> libs = ImmutableList.of("lib1", "lib2"); expect(jsUri.getLibs()).andReturn(libs); expect(jsUri.getLoadedLibs()).andReturn(EMPTY_LIST); expect(registry.getFeatures(libs)).andReturn(libs); expect(request.getHost()).andReturn("host"); control.replay(); assertTrue(processor.process(request, builder)); control.verify(); assertEquals(BASE_CODE, builder.build().toJsString()); }
public JsUri(UriStatus status, JsUri origJsUri) { super(status, origJsUri.getRefresh(), origJsUri.isDebug(), origJsUri.isNoCache(), origJsUri.getContainer(), origJsUri.getGadget()); this.setCajoleContent(origJsUri.cajoleContent()); this.libs = origJsUri.getLibs(); this.loadedLibs = origJsUri.getLoadedLibs(); this.onload = origJsUri.getOnload(); this.jsload = origJsUri.isJsload(); this.nohint = origJsUri.isNohint(); this.compileMode = origJsUri.getCompileMode(); this.context = origJsUri.getContext(); this.origUri = origJsUri.getOrigUri(); this.repository = origJsUri.getRepository(); this.extensionParams = origJsUri.getExtensionParams(); }
@SuppressWarnings("unchecked") private void setupJsUriAndRegistry(UriStatus uriStatus, List<String> reqLibs, List<FeatureBundle> reqLookupBundles, List<String> loadLibs, List<FeatureBundle> loadLookupBundles) { expect(jsUri.getStatus()).andReturn(uriStatus); expect(jsUri.getContainer()).andReturn("container"); expect(jsUri.getContext()).andReturn(RenderingContext.CONFIGURED_GADGET); expect(jsUri.isDebug()).andReturn(false); expect(jsUri.getLibs()).andReturn(reqLibs); expect(jsUri.getLoadedLibs()).andReturn(loadLibs); expect(request.getJsUri()).andReturn(jsUri); LookupResult reqLookup = mockLookupResult(reqLookupBundles); LookupResult loadLookup = mockLookupResult(loadLookupBundles); expect(registry.getFeatureResources(isA(JsGadgetContext.class), eq(reqLibs), isNull(List.class))).andReturn(reqLookup); expect(registry.getFeatureResources(isA(JsGadgetContext.class), eq(loadLibs), isNull(List.class))).andReturn(loadLookup); }
@SuppressWarnings("unchecked") private void setupJsUriAndRegistry(UriStatus uriStatus, List<String> reqLibs, List<FeatureBundle> reqLookupBundles, List<String> loadLibs, List<FeatureBundle> loadLookupBundles) { expect(jsUri.getStatus()).andReturn(uriStatus); expect(jsUri.getContainer()).andReturn("container"); expect(jsUri.getContext()).andReturn(RenderingContext.CONFIGURED_GADGET); expect(jsUri.isDebug()).andReturn(false); expect(jsUri.getLibs()).andReturn(reqLibs); expect(jsUri.getLoadedLibs()).andReturn(loadLibs); expect(request.getJsUri()).andReturn(jsUri); LookupResult reqLookup = mockLookupResult(reqLookupBundles); LookupResult loadLookup = mockLookupResult(loadLookupBundles); expect(registry.getFeatureResources(isA(JsGadgetContext.class), eq(reqLibs), isNull(List.class))).andReturn(reqLookup); expect(registry.getFeatureResources(isA(JsGadgetContext.class), eq(loadLibs), isNull(List.class))).andReturn(loadLookup); }
@Test public void processPathPrefixMismatch() throws GadgetException { String targetHost = "target-host.org"; ContainerConfig config = mockConfig("http://" + targetHost, "/gadgets/js"); TestDefaultJsUriManager manager = makeManager(config, null); Uri testUri = Uri.parse("http://target-host.org/gadgets/other-js/feature" + JS_SUFFIX + '?' + Param.CONTAINER.getKey() + '=' + CONTAINER); JsUri jsUri = manager.processExternJsUri(testUri); assertFalse(manager.hadError()); List<String> extern = Lists.newArrayList("feature"); assertEquals(extern, jsUri.getLibs()); List<String> loaded = Lists.newArrayList(); assertEquals(loaded, jsUri.getLoadedLibs()); assertEquals(CONTAINER, jsUri.getContainer()); assertEquals(RenderingContext.GADGET, jsUri.getContext()); }
@Test public void newJsUriWithConfiguredGadgetContext() throws Exception { Uri uri = newTestUriBuilder(RenderingContext.CONFIGURED_GADGET, JsCompileMode.CONCAT_COMPILE_EXPORT_ALL).toUri(); JsUriManager.JsUri jsUri = new JsUriManager.JsUri(STATUS, uri, LIBS, HAVE); assertEquals(RenderingContext.CONFIGURED_GADGET, jsUri.getContext()); assertEquals(JsCompileMode.CONCAT_COMPILE_EXPORT_ALL, jsUri.getCompileMode()); assertEquals(CONTAINER_VALUE, jsUri.getContainer()); assertTrue(jsUri.isJsload()); assertTrue(jsUri.isNoCache()); assertTrue(jsUri.isNohint()); assertEquals(ONLOAD_VALUE, jsUri.getOnload()); assertEquals(LIBS, Lists.newArrayList(jsUri.getLibs())); assertEquals(HAVE, Lists.newArrayList(jsUri.getLoadedLibs())); assertEquals(uri, jsUri.getOrigUri()); }
@Test public void newJsUriWithConfiguredGadgetContext() throws Exception { Uri uri = newTestUriBuilder(RenderingContext.CONFIGURED_GADGET, JsCompileMode.CONCAT_COMPILE_EXPORT_ALL).toUri(); JsUriManager.JsUri jsUri = new JsUriManager.JsUri(STATUS, uri, LIBS, HAVE); assertEquals(RenderingContext.CONFIGURED_GADGET, jsUri.getContext()); assertEquals(JsCompileMode.CONCAT_COMPILE_EXPORT_ALL, jsUri.getCompileMode()); assertEquals(CONTAINER_VALUE, jsUri.getContainer()); assertTrue(jsUri.isJsload()); assertTrue(jsUri.isNoCache()); assertTrue(jsUri.isNohint()); assertEquals(ONLOAD_VALUE, jsUri.getOnload()); assertEquals(LIBS, Lists.newArrayList(jsUri.getLibs())); assertEquals(HAVE, Lists.newArrayList(jsUri.getLoadedLibs())); assertEquals(uri, jsUri.getOrigUri()); }
@Test public void newJsUriWithOriginalUri() throws Exception { Uri uri = newTestUriBuilder(RenderingContext.CONTAINER, JsCompileMode.CONCAT_COMPILE_EXPORT_ALL).toUri(); JsUriManager.JsUri jsUri = new JsUriManager.JsUri(STATUS, uri, LIBS, HAVE); assertEquals(RenderingContext.CONTAINER, jsUri.getContext()); assertEquals(JsCompileMode.CONCAT_COMPILE_EXPORT_ALL, jsUri.getCompileMode()); assertEquals(CONTAINER_VALUE, jsUri.getContainer()); assertTrue(jsUri.isJsload()); assertTrue(jsUri.isNoCache()); assertTrue(jsUri.isNohint()); assertEquals(ONLOAD_VALUE, jsUri.getOnload()); assertEquals(LIBS, Lists.newArrayList(jsUri.getLibs())); assertEquals(HAVE, Lists.newArrayList(jsUri.getLoadedLibs())); assertEquals(uri, jsUri.getOrigUri()); }
@Test public void processPathPrefixMismatch() throws GadgetException { String targetHost = "target-host.org"; ContainerConfig config = mockConfig("http://" + targetHost, "/gadgets/js"); TestDefaultJsUriManager manager = makeManager(config, null); Uri testUri = Uri.parse("http://target-host.org/gadgets/other-js/feature" + JS_SUFFIX + '?' + Param.CONTAINER.getKey() + '=' + CONTAINER); JsUri jsUri = manager.processExternJsUri(testUri); assertFalse(manager.hadError()); List<String> extern = Lists.newArrayList("feature"); assertEquals(extern, jsUri.getLibs()); List<String> loaded = Lists.newArrayList(); assertEquals(loaded, jsUri.getLoadedLibs()); assertEquals(CONTAINER, jsUri.getContainer()); assertEquals(RenderingContext.GADGET, jsUri.getContext()); }
@Test public void newJsUriWithOriginalUri() throws Exception { Uri uri = newTestUriBuilder(RenderingContext.CONTAINER, JsCompileMode.CONCAT_COMPILE_EXPORT_ALL).toUri(); JsUriManager.JsUri jsUri = new JsUriManager.JsUri(STATUS, uri, LIBS, HAVE); assertEquals(RenderingContext.CONTAINER, jsUri.getContext()); assertEquals(JsCompileMode.CONCAT_COMPILE_EXPORT_ALL, jsUri.getCompileMode()); assertEquals(CONTAINER_VALUE, jsUri.getContainer()); assertTrue(jsUri.isJsload()); assertTrue(jsUri.isNoCache()); assertTrue(jsUri.isNohint()); assertEquals(ONLOAD_VALUE, jsUri.getOnload()); assertEquals(LIBS, Lists.newArrayList(jsUri.getLibs())); assertEquals(HAVE, Lists.newArrayList(jsUri.getLoadedLibs())); assertEquals(uri, jsUri.getOrigUri()); }
@Test public void newJsUriWithEmptyOriginalUri() throws Exception { JsUriManager.JsUri jsUri = new JsUriManager.JsUri(STATUS, null, Collections.<String>emptyList(), null); // Null URI. assertEquals(RenderingContext.GADGET, jsUri.getContext()); assertEquals(ContainerConfig.DEFAULT_CONTAINER, jsUri.getContainer()); assertEquals(JsCompileMode.COMPILE_CONCAT, jsUri.getCompileMode()); assertFalse(jsUri.isJsload()); assertFalse(jsUri.isNoCache()); assertFalse(jsUri.isNohint()); assertNull(jsUri.getOnload()); assertTrue(jsUri.getLibs().isEmpty()); assertTrue(jsUri.getLoadedLibs().isEmpty()); assertNull(jsUri.getOrigUri()); }
@Test public void newJsUriWithEmptyOriginalUri() throws Exception { JsUriManager.JsUri jsUri = new JsUriManager.JsUri(STATUS, null, Collections.<String>emptyList(), null); // Null URI. assertEquals(RenderingContext.GADGET, jsUri.getContext()); assertEquals(ContainerConfig.DEFAULT_CONTAINER, jsUri.getContainer()); assertEquals(JsCompileMode.COMPILE_CONCAT, jsUri.getCompileMode()); assertFalse(jsUri.isJsload()); assertFalse(jsUri.isNoCache()); assertFalse(jsUri.isNohint()); assertNull(jsUri.getOnload()); assertTrue(jsUri.getLibs().isEmpty()); assertTrue(jsUri.getLoadedLibs().isEmpty()); assertNull(jsUri.getOrigUri()); }
@Test public void processPathWithLoadedJs() throws GadgetException { ContainerConfig config = mockConfig("http://host", "/gadgets/js"); TestDefaultJsUriManager manager = makeManager(config, null); Uri testUri = Uri.parse("http://host/gadgets/js/feature:another!load1:load2.js?" + Param.LOADED.getKey() + "=load3:load4&" + Param.CONTAINER.getKey() + '=' + CONTAINER); JsUri jsUri = manager.processExternJsUri(testUri); assertFalse(manager.hadError()); List<String> extern = Lists.newArrayList("feature", "another"); assertCollectionEquals(jsUri.getLibs(), extern); assertCollectionEquals(jsUri.getLoadedLibs(), Lists.newArrayList( "load1", "load2", "load3", "load4")); }
private void checkNoFeaturesDoesNothing(RenderingContext ctx) throws Exception { JsResponseBuilder builder = prepareRequestReturnBuilder(ctx); expect(containerConfig.getMap(CONTAINER, ConfigInjectionProcessor.GADGETS_FEATURES_KEY)) .andReturn(null); List<String> libs = ImmutableList.of(); expect(jsUri.getLibs()).andReturn(libs); expect(jsUri.getLoadedLibs()).andReturn(EMPTY_LIST); expect(registry.getFeatures(libs)).andReturn(libs); expect(request.getHost()).andReturn("host"); control.replay(); assertTrue(processor.process(request, builder)); control.verify(); assertEquals(BASE_CODE, builder.build().toJsString()); }
@Test public void processPathWithLoadedJs() throws GadgetException { ContainerConfig config = mockConfig("http://host", "/gadgets/js"); TestDefaultJsUriManager manager = makeManager(config, null); Uri testUri = Uri.parse("http://host/gadgets/js/feature:another!load1:load2.js?" + Param.LOADED.getKey() + "=load3:load4&" + Param.CONTAINER.getKey() + '=' + CONTAINER); JsUri jsUri = manager.processExternJsUri(testUri); assertFalse(manager.hadError()); List<String> extern = Lists.newArrayList("feature", "another"); assertCollectionEquals(jsUri.getLibs(), extern); assertCollectionEquals(jsUri.getLoadedLibs(), Lists.newArrayList( "load1", "load2", "load3", "load4")); }
private void checkNoFeaturesDoesNothing(RenderingContext ctx) throws Exception { JsResponseBuilder builder = prepareRequestReturnBuilder(ctx); expect(containerConfig.getMap(CONTAINER, ConfigInjectionProcessor.GADGETS_FEATURES_KEY)) .andReturn(null); List<String> libs = ImmutableList.of(); expect(jsUri.getLibs()).andReturn(libs); expect(jsUri.getLoadedLibs()).andReturn(EMPTY_LIST); expect(registry.getFeatures(libs)).andReturn(libs); expect(request.getHost()).andReturn("host"); control.replay(); assertTrue(processor.process(request, builder)); control.verify(); assertEquals(BASE_CODE, builder.build().toJsString()); }