public synchronized List<String> getAllFeatures() { if (allGadgetFeatures == null) { Preconditions.checkState(featureRegistry != null, "setGadgetFeatureRegistry must be called before Gadget.getAllFeatures()"); allGadgetFeatures = featureRegistry.getFeatures(Lists.newArrayList(getDirectFeatureDeps())); } return allGadgetFeatures; }
/** * Check that all gadget required features exists */ protected void checkRequiredFeatures(Gadget gadget, FeatureRegistry featureRegistry) throws GadgetException { List<String> unsupported = Lists.newLinkedList(); // Get all resources requested by the gadget's requires/optional features. Map<String, Feature> featureMap = gadget.getViewFeatures(); List<String> gadgetFeatureKeys = Lists.newLinkedList(gadget.getDirectFeatureDeps()); featureRegistry.getFeatureResources(gadget.getContext(), gadgetFeatureKeys, unsupported) .getResources(); if (!unsupported.isEmpty()) { List<String> requiredUnsupported = Lists.newLinkedList(); for (String notThere : unsupported) { if (!featureMap.containsKey(notThere) || featureMap.get(notThere).getRequired()) { // if !containsKey, the lib was forced with Gadget.addFeature(...) so implicitly req'd. requiredUnsupported.add(notThere); } } if (!requiredUnsupported.isEmpty()) { throw new UnsupportedFeatureException(requiredUnsupported.toString()); } } }
private void testFeatureRemoved() { assertFalse("Feature wasn't removed", gadget.getDirectFeatureDeps().contains("opensocial-templates")); }
private void testFeatureNotRemoved() { assertTrue("Feature was removed", gadget.getDirectFeatureDeps().contains("opensocial-templates")); }
private void testFeatureNotRemoved() { assertTrue("Feature was removed", gadget.getDirectFeatureDeps().contains("opensocial-templates")); }
private void testFeatureRemoved() { assertFalse("Feature wasn't removed", gadget.getDirectFeatureDeps().contains("opensocial-templates")); }
private void testFeatureRemoved() { assertFalse("Feature wasn't removed", gadget.getDirectFeatureDeps().contains("opensocial-templates")); }
private void testFeatureNotRemoved() { assertTrue("Feature was removed", gadget.getDirectFeatureDeps().contains("opensocial-templates")); }
List<String> gadgetFeatureKeys = Lists.newArrayList(gadget.getDirectFeatureDeps()); List<FeatureResource> gadgetResources = featureRegistry.getFeatureResources(context, gadgetFeatureKeys, unsupported);
Collection<String> gadgetLibs = Lists.newArrayList(gadget.getDirectFeatureDeps()); List<Feature> gadgetFeatures = gadget.getSpec().getModulePrefs().getAllFeatures(); for(Feature feature : gadgetFeatures) {
private void expectFeatureCalls(Gadget gadget, List<FeatureResource> gadgetResources, Set<String> externLibs, List<FeatureResource> externResources) { reset(featureRegistry); GadgetContext gadgetContext = gadget.getContext(); List<String> gadgetFeatures = Lists.newArrayList(gadget.getDirectFeatureDeps()); List<String> allFeatures = Lists.newArrayList(gadgetFeatures); List<String> allFeaturesAndLibs = Lists.newArrayList(gadgetFeatures); allFeaturesAndLibs.addAll(externLibs); List<String> emptyList = Lists.newArrayList(); expect(featureRegistry.getFeatureResources(same(gadgetContext), eq(externLibs), eq(emptyList))) .andReturn(externResources); expect(featureRegistry.getFeatureResources(same(gadgetContext), eq(gadgetFeatures), eq(emptyList))) .andReturn(gadgetResources); expect(featureRegistry.getFeatures(eq(allFeatures))) .andReturn(allFeatures); expect(featureRegistry.getFeatures(eq(allFeaturesAndLibs))) .andReturn(allFeaturesAndLibs); // Add CoreUtilConfigContributor behavior expect(featureRegistry.getAllFeatureNames()). andReturn(ImmutableSet.of("foo", "foo2", "core.util")).anyTimes(); replay(featureRegistry); }
expect(lr2.getResources()).andReturn(ImmutableList.<FeatureResource>of()); replay(lr2); assertTrue(gadget.getDirectFeatureDeps().contains("core")); assertTrue(gadget.getDirectFeatureDeps().contains("foo")); assertEquals(gadget.getDirectFeatureDeps().size(),2); Lists.newLinkedList(); expect(featureRegistry.getFeatureResources(same(gadget.getContext()), eq(Lists.newLinkedList(gadget.getDirectFeatureDeps())), eq(Lists.<String>newLinkedList()))) .andAnswer(new IAnswer<FeatureRegistry.LookupResult>() { @SuppressWarnings("unchecked")
expect(lr2.getResources()).andReturn(ImmutableList.<FeatureResource>of()); replay(lr2); assertTrue(gadget.getDirectFeatureDeps().contains("core")); assertTrue(gadget.getDirectFeatureDeps().contains("foo")); assertEquals(gadget.getDirectFeatureDeps().size(),2); Lists.newLinkedList(); expect(featureRegistry.getFeatureResources(same(gadget.getContext()), eq(Lists.newLinkedList(gadget.getDirectFeatureDeps())), eq(Lists.<String>newLinkedList()))) .andAnswer(new IAnswer<FeatureRegistry.LookupResult>() { @SuppressWarnings("unchecked")
expect(lr2.getResources()).andReturn(ImmutableList.<FeatureResource>of()); replay(lr2); assertTrue(gadget.getDirectFeatureDeps().contains("core")); assertTrue(gadget.getDirectFeatureDeps().contains("foo")); assertEquals(gadget.getDirectFeatureDeps().size(),2); expect(featureRegistry.getFeatureResources(same(gadget.getContext()), eq(Lists.newLinkedList(gadget.getDirectFeatureDeps())), eq(Lists.<String>newLinkedList()))) .andAnswer(new IAnswer<FeatureRegistry.LookupResult>() { @SuppressWarnings("unchecked")
expect(lr2.getResources()).andReturn(ImmutableList.<FeatureResource>of()); replay(lr2); assertTrue(gadget.getDirectFeatureDeps().contains("core")); assertTrue(gadget.getDirectFeatureDeps().contains("foo")); assertEquals(gadget.getDirectFeatureDeps().size(),2); expect(featureRegistry.getFeatureResources(same(gadget.getContext()), eq(Lists.newLinkedList(gadget.getDirectFeatureDeps())), eq(Lists.<String>newLinkedList()))) .andAnswer(new IAnswer<FeatureRegistry.LookupResult>() { @SuppressWarnings("unchecked")
reset(featureRegistry); GadgetContext gadgetContext = gadget.getContext(); List<String> gadgetFeatures = Lists.newLinkedList(gadget.getDirectFeatureDeps()); List<String> allFeatures = Lists.newLinkedList(gadgetFeatures); List<String> allFeaturesAndLibs = Lists.newLinkedList(gadgetFeatures);
reset(featureRegistry); GadgetContext gadgetContext = gadget.getContext(); List<String> gadgetFeatures = Lists.newLinkedList(gadget.getDirectFeatureDeps()); List<String> allFeatures = Lists.newLinkedList(gadgetFeatures); List<String> allFeaturesAndLibs = Lists.newLinkedList(gadgetFeatures);
@Test public void rewrite() throws Exception { setupGadget(getGadgetXml(CONTENT)); Capture<PipelinedData.Batch> batchCapture = new Capture<PipelinedData.Batch>(); // Dummy return results (the "real" return would have two values) Callable<PreloadedData> callable = createPreloadTask( "key", "{result: {foo: 'bar'}}"); // One batch with 1 each HTTP and Social preload expect(preloader.createPreloadTasks(same(gadget.getContext()), and(eqBatch(1, 1), capture(batchCapture)))) .andReturn(ImmutableList.of(callable)); control.replay(); rewriter.rewrite(gadget, content); // Verify the data set is injected, and the os-data was deleted assertTrue("Script not inserted", content.getContent().contains("DataContext.putDataSet(\"key\",{\"foo\":\"bar\"})")); assertFalse("os-data wasn't deleted", content.getContent().contains("type=\"text/os-data\"")); assertTrue(batchCapture.getValue().getPreloads().containsKey("me")); assertTrue(batchCapture.getValue().getPreloads().containsKey("json")); assertFalse(gadget.getDirectFeatureDeps().contains("opensocial-data")); assertTrue(gadget.getDirectFeatureDeps().contains("opensocial-data-context")); control.verify(); } @Test
@Test public void rewrite() throws Exception { setupGadget(getGadgetXml(CONTENT)); Capture<PipelinedData.Batch> batchCapture = new Capture<PipelinedData.Batch>(); // Dummy return results (the "real" return would have two values) Callable<PreloadedData> callable = createPreloadTask( "key", "{result: {foo: 'bar'}}"); // One batch with 1 each HTTP and Social preload expect(preloader.createPreloadTasks(same(gadget.getContext()), and(eqBatch(1, 1), capture(batchCapture)))) .andReturn(ImmutableList.of(callable)); control.replay(); rewriter.rewrite(gadget, content); // Verify the data set is injected, and the os-data was deleted assertTrue("Script not inserted", content.getContent().contains("DataContext.putDataSet(\"key\",{\"foo\":\"bar\"})")); assertFalse("os-data wasn't deleted", content.getContent().contains("type=\"text/os-data\"")); assertTrue(batchCapture.getValue().getPreloads().containsKey("me")); assertTrue(batchCapture.getValue().getPreloads().containsKey("json")); assertFalse(gadget.getDirectFeatureDeps().contains("opensocial-data")); assertTrue(gadget.getDirectFeatureDeps().contains("opensocial-data-context")); control.verify(); } @Test
@Test public void rewrite() throws Exception { setupGadget(getGadgetXml(CONTENT)); Capture<PipelinedData.Batch> batchCapture = new Capture<PipelinedData.Batch>(); // Dummy return results (the "real" return would have two values) Callable<PreloadedData> callable = createPreloadTask( "key", "{result: {foo: 'bar'}}"); // One batch with 1 each HTTP and Social preload expect(preloader.createPreloadTasks(same(gadget.getContext()), and(eqBatch(1, 1), capture(batchCapture)))) .andReturn(ImmutableList.of(callable)); control.replay(); rewriter.rewrite(gadget, content); // Verify the data set is injected, and the os-data was deleted assertTrue("Script not inserted", content.getContent().contains("DataContext.putDataSet(\"key\",{\"foo\":\"bar\"})")); assertFalse("os-data wasn't deleted", content.getContent().contains("type=\"text/os-data\"")); assertTrue(batchCapture.getValue().getPreloads().containsKey("me")); assertTrue(batchCapture.getValue().getPreloads().containsKey("json")); assertFalse(gadget.getDirectFeatureDeps().contains("opensocial-data")); assertTrue(gadget.getDirectFeatureDeps().contains("opensocial-data-context")); control.verify(); } @Test