public void testContainingNullAndUnmodifiable() { MutableSet<Object> x = MutableSet.<Object>of("x", null); Assert.assertTrue(x.contains(null)); Set<Object> x1 = x.asUnmodifiable(); Set<Object> x2 = x.asUnmodifiableCopy(); Set<Object> x3 = x.asImmutableCopy(); x.remove(null); Assert.assertFalse(x.contains(null)); Assert.assertFalse(x1.contains(null)); Assert.assertTrue(x2.contains(null)); Assert.assertTrue(x3.contains(null)); try { x1.remove("x"); Assert.fail(); } catch (Exception e) { /* expected */ } try { x2.remove("x"); Assert.fail(); } catch (Exception e) { /* expected */ } try { x3.remove("x"); Assert.fail(); } catch (Exception e) { /* expected */ } Assert.assertTrue(x1.contains("x")); Assert.assertTrue(x2.contains("x")); Assert.assertTrue(x3.contains("x")); }
@Test public void testReadAManifest() throws Exception { Enumeration<URL> manifests = this.getClass().getClassLoader().getResources("META-INF/MANIFEST.MF"); log.info("Bundles and exported packages:"); MutableSet<String> allPackages = MutableSet.of(); while (manifests.hasMoreElements()) { ManifestHelper mf = ManifestHelper.forManifestContents(Streams.readFullyStringAndClose(manifests.nextElement().openStream())); List<String> mfPackages = mf.getExportedPackages(); log.info(" " + mf.getSymbolicNameVersion() + ": " + mfPackages); allPackages.addAll(mfPackages); } log.info("Total export package count: " + allPackages.size()); Assert.assertTrue(allPackages.size() > 20, "did not find enough packages"); // probably much larger Assert.assertTrue(allPackages.contains(EmbeddedFelixFramework.class.getPackage().getName())); }
@SuppressWarnings("deprecation") protected Set<ConfigKey<?>> findKeys(Predicate<? super ConfigKey<?>> filter, KeyFindingMode mode) { MutableSet<ConfigKey<?>> result = MutableSet.of(); if (mode==KeyFindingMode.DECLARED_OR_PRESENT) { result.addAll( Iterables.filter(getKeysAtContainer(getContainer()), filter) ); } for (ConfigKey<?> k: Iterables.filter(ownConfig.keySet(), filter)) { if (result.contains(k)) continue; if (mode!=KeyFindingMode.PRESENT_NOT_RESOLVED) { ConfigKey<?> k2 = getKeyAtContainer(getContainer(), k); if (k2!=null) k = k2; } result.add(k); } // due to set semantics local should be added first, it prevents equal items from parent from being added on top if (getParent()!=null) { // now take from runtime parents, but filtered Set<ConfigKey<?>> inherited; switch (mode) { case DECLARED_OR_PRESENT: inherited = getParentInternal().config().getInternalConfigMap().findKeysDeclared(filter); break; case PRESENT_AND_RESOLVED: inherited = getParentInternal().config().getInternalConfigMap().findKeysPresent(filter); break; case PRESENT_NOT_RESOLVED: inherited = getParentInternal().config().getInternalConfigMap().findKeys(filter); break; default: throw new IllegalStateException("Unsupported key finding mode: "+mode); } // TODO due to recursive nature we call this N times for the Nth level ancestor result.addAll( filterOutRuntimeNotReinherited(inherited) ); } return result; }