package org.eclipse.virgo.kernel.install.artifact.internal.scoping; import java.io.File; import java.io.FileReader; import java.util.ArrayList; import java.util.List; import junit.framework.Assert; import org.eclipse.virgo.kernel.install.artifact.internal.scoping.Scoper.DuplicateBundleSymbolicNameException; import org.eclipse.virgo.kernel.install.artifact.internal.scoping.Scoper.DuplicateExportException; import org.eclipse.virgo.kernel.install.artifact.internal.scoping.Scoper.UnsupportedBundleManifestVersionException; import org.eclipse.virgo.util.osgi.manifest.BundleManifest; import org.eclipse.virgo.util.osgi.manifest.BundleManifestFactory; import org.eclipse.virgo.util.osgi.manifest.DynamicImportPackage; import org.eclipse.virgo.util.osgi.manifest.DynamicallyImportedPackage; import org.eclipse.virgo.util.osgi.manifest.ExportPackage; import org.eclipse.virgo.util.osgi.manifest.ExportedPackage; import org.eclipse.virgo.util.osgi.manifest.ImportPackage; import org.eclipse.virgo.util.osgi.manifest.ImportedPackage; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; public class ScoperTests { private static final String SCOPE_NAME = "test_scope"; private static BundleManifest manifest = null; private static BundleManifest unscopedManifest = null; private static List<BundleManifest> bundleManifests = new ArrayList<BundleManifest>(); private static final File bundleFile = new File("src/test/resources/scoping/bundles/bug331767"); private static final Object SCOPING_ATTRIBUTE_NAME = "module_scope"; @BeforeClass public static void setUpBeforeClass() throws Exception { try (FileReader reader = new FileReader(new File(bundleFile, "META-INF/MANIFEST.MF"))) { manifest = BundleManifestFactory.createBundleManifest(reader); reader.close(); unscopedManifest = BundleManifestFactory.createBundleManifest(manifest.toDictionary()); bundleManifests.add(manifest); } } @AfterClass public static void tearDownAfterClass() throws Exception { } @Test public void testScoping() throws UnsupportedBundleManifestVersionException, DuplicateExportException, DuplicateBundleSymbolicNameException { Scoper scoper = new Scoper(bundleManifests, SCOPE_NAME); scoper.scope(); checkImports(); checkDynamicImports(); checkExports(); } private void checkImports() { ImportPackage importPackage = manifest.getImportPackage(); ImportPackage unscopedImportPackage = unscopedManifest.getImportPackage(); List<ImportedPackage> ipList = importPackage.getImportedPackages(); List<ImportedPackage> uipList = unscopedImportPackage.getImportedPackages(); for (int i = 0; i < ipList.size(); i++) { Assert.assertTrue(ipList.get(i).getPackageName().equals(uipList.get(i).getPackageName())); Assert.assertTrue(ipList.get(i).getVersion().equals(uipList.get(i).getVersion())); for (String scopedAttribute : uipList.get(i).getAttributes().keySet()) { Assert.assertTrue(ipList.get(i).getAttributes().containsKey(scopedAttribute)); } Assert.assertTrue(ipList.get(i).getAttributes().containsKey(SCOPING_ATTRIBUTE_NAME)); Assert.assertTrue(uipList.get(i).getAttributes().size() + 1 == ipList.get(i).getAttributes().size()); } } private void checkDynamicImports() { DynamicImportPackage dynamicImportPackage = manifest.getDynamicImportPackage(); DynamicImportPackage unscopedDynamicImportPackage = unscopedManifest.getDynamicImportPackage(); List<DynamicallyImportedPackage> dipList = dynamicImportPackage.getDynamicallyImportedPackages(); List<DynamicallyImportedPackage> udipList = unscopedDynamicImportPackage.getDynamicallyImportedPackages(); for (int i = 0; i < udipList.size(); i++) { Assert.assertTrue(dipList.get(i).getPackageName().equals(udipList.get(i).getPackageName())); Assert.assertTrue(dipList.get(i).getVersion().equals(udipList.get(i).getVersion())); for (String scopedAttribute : udipList.get(i).getAttributes().keySet()) { Assert.assertTrue(dipList.get(i).getAttributes().containsKey(scopedAttribute)); } Assert.assertTrue(dipList.get(i).getAttributes().containsKey(SCOPING_ATTRIBUTE_NAME)); Assert.assertTrue(udipList.get(i).getAttributes().size() + 1 == dipList.get(i).getAttributes().size()); } Assert.assertTrue(dipList.size() == udipList.size() * 2); } private void checkExports() { ExportPackage exportPackage = manifest.getExportPackage(); ExportPackage unscopedExportPackage = unscopedManifest.getExportPackage(); List<ExportedPackage> epList = exportPackage.getExportedPackages(); List<ExportedPackage> uepList = unscopedExportPackage.getExportedPackages(); for (int i = 0; i < epList.size(); i++) { Assert.assertTrue(epList.get(i).getPackageName().equals(uepList.get(i).getPackageName())); Assert.assertTrue(epList.get(i).getVersion().equals(uepList.get(i).getVersion())); for (String scopedAttribute : uepList.get(i).getAttributes().keySet()) { Assert.assertTrue(epList.get(i).getAttributes().containsKey(scopedAttribute)); } Assert.assertTrue(epList.get(i).getAttributes().containsKey(SCOPING_ATTRIBUTE_NAME)); Assert.assertTrue(uepList.get(i).getAttributes().size() + 1 == epList.get(i).getAttributes().size()); } } }