/******************************************************************************* * Copyright (c) 2008 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.osgi.tests.bundles; import junit.framework.Test; import junit.framework.TestSuite; import org.osgi.framework.Bundle; import org.osgi.framework.BundleException; import org.osgi.service.packageadmin.ExportedPackage; import org.osgi.service.packageadmin.PackageAdmin; public class SubstituteExportsBundleTests extends AbstractBundleTests { public static Test suite() { return new TestSuite(SubstituteExportsBundleTests.class); } public void testSubstituteExports01x() throws BundleException { Bundle a = installer.installBundle("substitutes.a"); //$NON-NLS-1$ Bundle b = installer.installBundle("substitutes.b"); //$NON-NLS-1$ Bundle c = installer.installBundle("substitutes.c"); //$NON-NLS-1$ Bundle d = installer.installBundle("substitutes.d"); //$NON-NLS-1$ String className = "substitutes.x.Ax"; //$NON-NLS-1$ Class ax = null; Class bx = null; Class cx = null; Class dx = null; try { ax = a.loadClass(className); bx = b.loadClass(className); cx = c.loadClass(className); dx = d.loadClass(className); } catch (ClassNotFoundException e) { fail("Unexpected exception", e); //$NON-NLS-1$ } assertEquals("class from b is wrong", ax, bx); //$NON-NLS-1$ assertEquals("class from c is wrong", ax, cx); //$NON-NLS-1$ assertEquals("class from d is wrong", ax, dx); //$NON-NLS-1$ } public void testSubstituteExports01y() throws BundleException { Bundle a = installer.installBundle("substitutes.a"); //$NON-NLS-1$ Bundle b = installer.installBundle("substitutes.b"); //$NON-NLS-1$ Bundle c = installer.installBundle("substitutes.c"); //$NON-NLS-1$ Bundle d = installer.installBundle("substitutes.d"); //$NON-NLS-1$ String className = "substitutes.y.Ay"; //$NON-NLS-1$ Class ax = null; Class bx = null; Class cx = null; Class dx = null; try { ax = a.loadClass(className); bx = b.loadClass(className); cx = c.loadClass(className); dx = d.loadClass(className); } catch (ClassNotFoundException e) { fail("Unexpected exception", e); //$NON-NLS-1$ } assertEquals("class from b is wrong", ax, bx); //$NON-NLS-1$ assertEquals("class from c is wrong", ax, cx); //$NON-NLS-1$ assertEquals("class from d is wrong", ax, dx); //$NON-NLS-1$ } public void testSubstituteExports02() throws BundleException { Bundle a = installer.installBundle("substitutes.a"); //$NON-NLS-1$ Bundle b = installer.installBundle("substitutes.b"); //$NON-NLS-1$ Bundle e = installer.installBundle("substitutes.e"); //$NON-NLS-1$ Bundle f = installer.installBundle("substitutes.f"); //$NON-NLS-1$ String className = "substitutes.x.Ax"; //$NON-NLS-1$ Class ax = null; Class bx = null; Class ex = null; Class fx = null; try { ax = a.loadClass(className); bx = b.loadClass(className); ex = e.loadClass(className); fx = f.loadClass(className); } catch (ClassNotFoundException cnfe) { fail("Unexpected exception", cnfe); //$NON-NLS-1$ } assertEquals("class from b is wrong", ax, bx); //$NON-NLS-1$ assertEquals("class from c is wrong", ax, ex); //$NON-NLS-1$ assertEquals("class from d is wrong", ax, fx); //$NON-NLS-1$ } public void testSubstituteExports03() throws BundleException { Bundle a = installer.installBundle("substitutes.a"); //$NON-NLS-1$ Bundle b = installer.installBundle("substitutes.b"); //$NON-NLS-1$ Bundle e = installer.installBundle("substitutes.e"); //$NON-NLS-1$ Bundle f = installer.installBundle("substitutes.f"); //$NON-NLS-1$ Bundle g = installer.installBundle("substitutes.g"); //$NON-NLS-1$ Bundle h = installer.installBundle("substitutes.h"); //$NON-NLS-1$ String className = "substitutes.x.Ax"; //$NON-NLS-1$ Class ax = null; Class bx = null; Class ex = null; Class fx = null; Class gx = null; Class hx = null; try { ax = a.loadClass(className); bx = b.loadClass(className); ex = e.loadClass(className); fx = f.loadClass(className); gx = g.loadClass(className); hx = h.loadClass(className); } catch (ClassNotFoundException cnfe) { fail("Unexpected exception", cnfe); //$NON-NLS-1$ } assertEquals("class from b is wrong", ax, bx); //$NON-NLS-1$ assertEquals("class from c is wrong", ax, ex); //$NON-NLS-1$ assertEquals("class from d is wrong", ax, fx); //$NON-NLS-1$ assertEquals("class from d is wrong", ax, gx); //$NON-NLS-1$ assertEquals("class from d is wrong", ax, hx); //$NON-NLS-1$ } public void testSubstituteExports04() throws BundleException { Bundle a = installer.installBundle("substitutes.a"); //$NON-NLS-1$ installer.installBundle("substitutes.a.frag"); //$NON-NLS-1$ Bundle b = installer.installBundle("substitutes.b"); //$NON-NLS-1$ installer.installBundle("substitutes.b.frag"); //$NON-NLS-1$ Bundle c = installer.installBundle("substitutes.c"); //$NON-NLS-1$ Bundle d = installer.installBundle("substitutes.d"); //$NON-NLS-1$ String className = "substitutes.x.Ax"; //$NON-NLS-1$ Class ax = null; Class bx = null; Class cx = null; Class dx = null; try { ax = a.loadClass(className); bx = b.loadClass(className); cx = c.loadClass(className); dx = d.loadClass(className); } catch (ClassNotFoundException e) { fail("Unexpected exception", e); //$NON-NLS-1$ } assertEquals("class from b is wrong", ax, bx); //$NON-NLS-1$ assertEquals("class from c is wrong", ax, cx); //$NON-NLS-1$ assertEquals("class from d is wrong", ax, dx); //$NON-NLS-1$ String className2 = "substitutes.q.AFq"; //$NON-NLS-1$ Class aq = null; Class bq = null; Class cq = null; Class dq = null; try { aq = a.loadClass(className2); bq = b.loadClass(className2); cq = c.loadClass(className2); dq = d.loadClass(className2); } catch (ClassNotFoundException e) { fail("Unexpected exception", e); //$NON-NLS-1$ } assertEquals("class from b is wrong", aq, bq); //$NON-NLS-1$ assertEquals("class from c is wrong", aq, cq); //$NON-NLS-1$ assertEquals("class from d is wrong", aq, dq); //$NON-NLS-1$ } public void testSubstituteExports05() throws BundleException { Bundle a = installer.installBundle("substitutes.a"); //$NON-NLS-1$ installer.installBundle("substitutes.a.frag"); //$NON-NLS-1$ Bundle b = installer.installBundle("substitutes.b"); //$NON-NLS-1$ installer.installBundle("substitutes.b.frag"); //$NON-NLS-1$ Bundle e = installer.installBundle("substitutes.e"); //$NON-NLS-1$ Bundle f = installer.installBundle("substitutes.f"); //$NON-NLS-1$ Bundle g = installer.installBundle("substitutes.g"); //$NON-NLS-1$ Bundle h = installer.installBundle("substitutes.h"); //$NON-NLS-1$ String className = "substitutes.x.Ax"; //$NON-NLS-1$ Class ax = null; Class bx = null; Class ex = null; Class fx = null; Class gx = null; Class hx = null; try { ax = a.loadClass(className); bx = b.loadClass(className); ex = e.loadClass(className); fx = f.loadClass(className); gx = g.loadClass(className); hx = h.loadClass(className); } catch (ClassNotFoundException cnfe) { fail("Unexpected exception", cnfe); //$NON-NLS-1$ } assertEquals("class from b is wrong", ax, bx); //$NON-NLS-1$ assertEquals("class from c is wrong", ax, ex); //$NON-NLS-1$ assertEquals("class from d is wrong", ax, fx); //$NON-NLS-1$ assertEquals("class from d is wrong", ax, gx); //$NON-NLS-1$ assertEquals("class from d is wrong", ax, hx); //$NON-NLS-1$ String className2 = "substitutes.q.AFq"; //$NON-NLS-1$ Class aq = null; Class bq = null; Class eq = null; Class fq = null; Class gq = null; Class hq = null; try { aq = a.loadClass(className2); bq = b.loadClass(className2); eq = e.loadClass(className2); fq = f.loadClass(className2); gq = g.loadClass(className2); hq = h.loadClass(className2); } catch (ClassNotFoundException cnfe) { fail("Unexpected exception", cnfe); //$NON-NLS-1$ } assertEquals("class from b is wrong", aq, bq); //$NON-NLS-1$ assertEquals("class from c is wrong", aq, eq); //$NON-NLS-1$ assertEquals("class from d is wrong", aq, fq); //$NON-NLS-1$ assertEquals("class from d is wrong", aq, gq); //$NON-NLS-1$ assertEquals("class from d is wrong", aq, hq); //$NON-NLS-1$ } public void testSubstituteExports06() throws BundleException { Bundle iBundle = installer.installBundle("substitutes.i"); //$NON-NLS-1$ Bundle jBundle = installer.installBundle("substitutes.j"); //$NON-NLS-1$ Bundle kBundle = installer.installBundle("substitutes.k"); //$NON-NLS-1$ Bundle lBundle = installer.installBundle("substitutes.l"); //$NON-NLS-1$ Bundle mBundle = installer.installBundle("substitutes.m"); //$NON-NLS-1$ Bundle nBundle = installer.installBundle("substitutes.n"); //$NON-NLS-1$ Bundle pBundle = installer.installBundle("substitutes.p"); //$NON-NLS-1$ Bundle qBundle = installer.installBundle("substitutes.q"); //$NON-NLS-1$ Bundle[] allBundles = new Bundle[] {iBundle, jBundle, kBundle, lBundle, mBundle, nBundle, pBundle, qBundle}; String classNameIx = "substitutes.x.Ix"; //$NON-NLS-1$ String classNameKx = "substitutes.x.Kx"; //$NON-NLS-1$ String classNameMx = "substitutes.x.Mx"; //$NON-NLS-1$ String classNameIy = "substitutes.y.Iy"; //$NON-NLS-1$ String classNameKy = "substitutes.y.Ky"; //$NON-NLS-1$ String classNameMy = "substitutes.y.My"; //$NON-NLS-1$ try { Class iX = iBundle.loadClass(classNameIx); assertEquals("jBundle has different copy of iX", iX, jBundle.loadClass(classNameIx)); //$NON-NLS-1$ assertEquals("mBundle has different copy of iX", iX, mBundle.loadClass(classNameIx)); //$NON-NLS-1$ assertEquals("nBundle has different copy of iX", iX, nBundle.loadClass(classNameIx)); //$NON-NLS-1$ assertEquals("pBundle has different copy of iX", iX, pBundle.loadClass(classNameIx)); //$NON-NLS-1$ assertEquals("qBundle has different copy of iX", iX, qBundle.loadClass(classNameIx)); //$NON-NLS-1$ } catch (ClassNotFoundException cnfe) { fail("Unexpected exception", cnfe); //$NON-NLS-1$ } try { Class iY = iBundle.loadClass(classNameIy); assertEquals("jBundle has different copy of iY", iY, jBundle.loadClass(classNameIy)); //$NON-NLS-1$ assertEquals("mBundle has different copy of iY", iY, mBundle.loadClass(classNameIy)); //$NON-NLS-1$ assertEquals("nBundle has different copy of iY", iY, nBundle.loadClass(classNameIy)); //$NON-NLS-1$ assertEquals("pBundle has different copy of iY", iY, pBundle.loadClass(classNameIy)); //$NON-NLS-1$ assertEquals("qBundle has different copy of iY", iY, qBundle.loadClass(classNameIy)); //$NON-NLS-1$ } catch (ClassNotFoundException cnfe) { fail("Unexpected exception", cnfe); //$NON-NLS-1$ } try { Class kX = kBundle.loadClass(classNameKx); assertEquals("lBundle has different copy of Kx", kX, lBundle.loadClass(classNameKx)); //$NON-NLS-1$ assertEquals("mBundle has different copy of Kx", kX, mBundle.loadClass(classNameKx)); //$NON-NLS-1$ assertEquals("nBundle has different copy of Kx", kX, nBundle.loadClass(classNameKx)); //$NON-NLS-1$ assertEquals("pBundle has different copy of Kx", kX, pBundle.loadClass(classNameKx)); //$NON-NLS-1$ assertEquals("qBundle has different copy of Kx", kX, qBundle.loadClass(classNameKx)); //$NON-NLS-1$ } catch (ClassNotFoundException cnfe) { fail("Unexpected exception", cnfe); //$NON-NLS-1$ } try { Class kY = kBundle.loadClass(classNameKy); assertEquals("lBundle has different copy of Ky", kY, lBundle.loadClass(classNameKy)); //$NON-NLS-1$ assertEquals("mBundle has different copy of Ky", kY, mBundle.loadClass(classNameKy)); //$NON-NLS-1$ assertEquals("nBundle has different copy of Ky", kY, nBundle.loadClass(classNameKy)); //$NON-NLS-1$ assertEquals("pBundle has different copy of Ky", kY, pBundle.loadClass(classNameKy)); //$NON-NLS-1$ assertEquals("qBundle has different copy of Ky", kY, qBundle.loadClass(classNameKy)); //$NON-NLS-1$ } catch (ClassNotFoundException cnfe) { fail("Unexpected exception", cnfe); //$NON-NLS-1$ } try { Class mX = mBundle.loadClass(classNameMx); assertEquals("nBundle has different copy of mX", mX, nBundle.loadClass(classNameMx)); //$NON-NLS-1$ assertEquals("pBundle has different copy of mX", mX, pBundle.loadClass(classNameMx)); //$NON-NLS-1$ assertEquals("qBundle has different copy of mX", mX, qBundle.loadClass(classNameMx)); //$NON-NLS-1$ } catch (ClassNotFoundException cnfe) { fail("Unexpected exception", cnfe); //$NON-NLS-1$ } try { Class mY = mBundle.loadClass(classNameMy); assertEquals("nBundle has different copy of mY", mY, nBundle.loadClass(classNameMy)); //$NON-NLS-1$ assertEquals("pBundle has different copy of mY", mY, pBundle.loadClass(classNameMy)); //$NON-NLS-1$ assertEquals("qBundle has different copy of mY", mY, qBundle.loadClass(classNameMy)); //$NON-NLS-1$ } catch (ClassNotFoundException cnfe) { fail("Unexpected exception", cnfe); //$NON-NLS-1$ } String[] unexpectedClasseNames = new String[] {"substitutes.x.Jx", "substitutes.x.Lx", "substitutes.x.Nx", "substitutes.y.Jy", "substitutes.y.Ly", "substitutes.y.Ny"}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ for (int i = 0; i < unexpectedClasseNames.length; i++) { for (int j = 0; j < allBundles.length; j++) { try { Class found = allBundles[j].loadClass(unexpectedClasseNames[i]); fail("Found class " + found + " in bundle " + allBundles[j]); //$NON-NLS-1$//$NON-NLS-2$ } catch (ClassNotFoundException cnfe) { // expected } } } } public void testSubstituteExports07() throws BundleException { // same as previous split test but bundles are installed in opposite order to force the opposite classes to load Bundle jBundle = installer.installBundle("substitutes.j"); //$NON-NLS-1$ Bundle iBundle = installer.installBundle("substitutes.i"); //$NON-NLS-1$ Bundle lBundle = installer.installBundle("substitutes.l"); //$NON-NLS-1$ Bundle kBundle = installer.installBundle("substitutes.k"); //$NON-NLS-1$ Bundle nBundle = installer.installBundle("substitutes.n"); //$NON-NLS-1$ Bundle mBundle = installer.installBundle("substitutes.m"); //$NON-NLS-1$ Bundle qBundle = installer.installBundle("substitutes.q"); //$NON-NLS-1$ Bundle pBundle = installer.installBundle("substitutes.p"); //$NON-NLS-1$ Bundle[] allBundles = new Bundle[] {iBundle, jBundle, kBundle, lBundle, mBundle, nBundle, pBundle, qBundle}; String classNameJx = "substitutes.x.Jx"; //$NON-NLS-1$ String classNameLx = "substitutes.x.Lx"; //$NON-NLS-1$ String classNameNx = "substitutes.x.Nx"; //$NON-NLS-1$ String classNameJy = "substitutes.y.Jy"; //$NON-NLS-1$ String classNameLy = "substitutes.y.Ly"; //$NON-NLS-1$ String classNameNy = "substitutes.y.Ny"; //$NON-NLS-1$ try { Class jX = jBundle.loadClass(classNameJx); assertEquals("iBundle has different copy of Jx", jX, iBundle.loadClass(classNameJx)); //$NON-NLS-1$ assertEquals("mBundle has different copy of Jx", jX, mBundle.loadClass(classNameJx)); //$NON-NLS-1$ assertEquals("nBundle has different copy of Jx", jX, nBundle.loadClass(classNameJx)); //$NON-NLS-1$ assertEquals("pBundle has different copy of Jx", jX, pBundle.loadClass(classNameJx)); //$NON-NLS-1$ assertEquals("qBundle has different copy of Jx", jX, qBundle.loadClass(classNameJx)); //$NON-NLS-1$ } catch (ClassNotFoundException cnfe) { fail("Unexpected exception", cnfe); //$NON-NLS-1$ } try { Class jY = jBundle.loadClass(classNameJy); assertEquals("jBundle has different copy of Jy", jY, iBundle.loadClass(classNameJy)); //$NON-NLS-1$ assertEquals("mBundle has different copy of Jy", jY, mBundle.loadClass(classNameJy)); //$NON-NLS-1$ assertEquals("nBundle has different copy of Jy", jY, nBundle.loadClass(classNameJy)); //$NON-NLS-1$ assertEquals("pBundle has different copy of Jy", jY, pBundle.loadClass(classNameJy)); //$NON-NLS-1$ assertEquals("qBundle has different copy of Jy", jY, qBundle.loadClass(classNameJy)); //$NON-NLS-1$ } catch (ClassNotFoundException cnfe) { fail("Unexpected exception", cnfe); //$NON-NLS-1$ } try { Class lX = lBundle.loadClass(classNameLx); assertEquals("lBundle has different copy of Lx", lX, kBundle.loadClass(classNameLx)); //$NON-NLS-1$ assertEquals("mBundle has different copy of Lx", lX, mBundle.loadClass(classNameLx)); //$NON-NLS-1$ assertEquals("nBundle has different copy of Lx", lX, nBundle.loadClass(classNameLx)); //$NON-NLS-1$ assertEquals("pBundle has different copy of Lx", lX, pBundle.loadClass(classNameLx)); //$NON-NLS-1$ assertEquals("qBundle has different copy of Lx", lX, qBundle.loadClass(classNameLx)); //$NON-NLS-1$ } catch (ClassNotFoundException cnfe) { fail("Unexpected exception", cnfe); //$NON-NLS-1$ } try { Class lY = lBundle.loadClass(classNameLy); assertEquals("lBundle has different copy of Ly", lY, kBundle.loadClass(classNameLy)); //$NON-NLS-1$ assertEquals("mBundle has different copy of Ly", lY, mBundle.loadClass(classNameLy)); //$NON-NLS-1$ assertEquals("nBundle has different copy of Ly", lY, nBundle.loadClass(classNameLy)); //$NON-NLS-1$ assertEquals("pBundle has different copy of Ly", lY, pBundle.loadClass(classNameLy)); //$NON-NLS-1$ assertEquals("qBundle has different copy of Ly", lY, qBundle.loadClass(classNameLy)); //$NON-NLS-1$ } catch (ClassNotFoundException cnfe) { fail("Unexpected exception", cnfe); //$NON-NLS-1$ } try { Class nX = nBundle.loadClass(classNameNx); assertEquals("nBundle has different copy of Nx", nX, mBundle.loadClass(classNameNx)); //$NON-NLS-1$ assertEquals("pBundle has different copy of Nx", nX, pBundle.loadClass(classNameNx)); //$NON-NLS-1$ assertEquals("qBundle has different copy of Nx", nX, qBundle.loadClass(classNameNx)); //$NON-NLS-1$ } catch (ClassNotFoundException cnfe) { fail("Unexpected exception", cnfe); //$NON-NLS-1$ } try { Class nY = nBundle.loadClass(classNameNy); assertEquals("nBundle has different copy of Ny", nY, mBundle.loadClass(classNameNy)); //$NON-NLS-1$ assertEquals("pBundle has different copy of Ny", nY, pBundle.loadClass(classNameNy)); //$NON-NLS-1$ assertEquals("qBundle has different copy of Ny", nY, qBundle.loadClass(classNameNy)); //$NON-NLS-1$ } catch (ClassNotFoundException cnfe) { fail("Unexpected exception", cnfe); //$NON-NLS-1$ } String[] unexpectedClasseNames = new String[] {"substitutes.x.Ix", "substitutes.x.Kx", "substitutes.x.Mx", "substitutes.y.Iy", "substitutes.y.Ky", "substitutes.y.My"}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ for (int i = 0; i < unexpectedClasseNames.length; i++) { for (int j = 0; j < allBundles.length; j++) { try { Class found = allBundles[j].loadClass(unexpectedClasseNames[i]); fail("Found class " + found + " in bundle " + allBundles[j]); //$NON-NLS-1$//$NON-NLS-2$ } catch (ClassNotFoundException cnfe) { // expected } } } } public void testSubstituteExports08() throws BundleException { Bundle a = installer.installBundle("substitutes.a"); //$NON-NLS-1$ Bundle b = installer.installBundle("substitutes.b"); //$NON-NLS-1$ Bundle c = installer.installBundle("substitutes.c"); //$NON-NLS-1$ Bundle d = installer.installBundle("substitutes.d"); //$NON-NLS-1$ Bundle[] allBundles = new Bundle[] {a, b, c, d}; doRefreshTest(allBundles, a); } public void testSubstituteExports09() throws BundleException { Bundle a = installer.installBundle("substitutes.a"); //$NON-NLS-1$ Bundle b = installer.installBundle("substitutes.b"); //$NON-NLS-1$ Bundle e = installer.installBundle("substitutes.e"); //$NON-NLS-1$ Bundle f = installer.installBundle("substitutes.f"); //$NON-NLS-1$ Bundle[] allBundles = new Bundle[] {a, b, e, f}; doRefreshTest(allBundles, a); } public void testSubstituteExports10() throws BundleException { Bundle a = installer.installBundle("substitutes.a"); //$NON-NLS-1$ Bundle b = installer.installBundle("substitutes.b"); //$NON-NLS-1$ Bundle e = installer.installBundle("substitutes.e"); //$NON-NLS-1$ Bundle f = installer.installBundle("substitutes.f"); //$NON-NLS-1$ Bundle g = installer.installBundle("substitutes.g"); //$NON-NLS-1$ Bundle h = installer.installBundle("substitutes.h"); //$NON-NLS-1$ Bundle[] allBundles = new Bundle[] {a, b, e, f, g, h}; doRefreshTest(allBundles, a); } public void testSubstituteExports11() throws BundleException { Bundle iBundle = installer.installBundle("substitutes.i"); //$NON-NLS-1$ Bundle jBundle = installer.installBundle("substitutes.j"); //$NON-NLS-1$ installer.installBundle("substitutes.k"); //$NON-NLS-1$ installer.installBundle("substitutes.l"); //$NON-NLS-1$ Bundle mBundle = installer.installBundle("substitutes.m"); //$NON-NLS-1$ Bundle nBundle = installer.installBundle("substitutes.n"); //$NON-NLS-1$ Bundle pBundle = installer.installBundle("substitutes.p"); //$NON-NLS-1$ Bundle qBundle = installer.installBundle("substitutes.q"); //$NON-NLS-1$ Bundle[] allBundles = new Bundle[] {iBundle, jBundle, mBundle, nBundle, pBundle, qBundle}; // k and l do not depend on i doRefreshTest(allBundles, iBundle); } public void testSubstituteExports12() throws BundleException { Bundle jBundle = installer.installBundle("substitutes.j"); //$NON-NLS-1$ Bundle iBundle = installer.installBundle("substitutes.i"); //$NON-NLS-1$ installer.installBundle("substitutes.l"); //$NON-NLS-1$ installer.installBundle("substitutes.k"); //$NON-NLS-1$ Bundle nBundle = installer.installBundle("substitutes.n"); //$NON-NLS-1$ Bundle mBundle = installer.installBundle("substitutes.m"); //$NON-NLS-1$ Bundle qBundle = installer.installBundle("substitutes.q"); //$NON-NLS-1$ Bundle pBundle = installer.installBundle("substitutes.p"); //$NON-NLS-1$ Bundle[] allBundles = new Bundle[] {iBundle, jBundle, mBundle, nBundle, pBundle, qBundle}; // k and l do not depend on j doRefreshTest(allBundles, jBundle); } private void doRefreshTest(Bundle[] allBundles, Bundle toRefresh) { installer.resolveBundles(allBundles); Bundle[] refreshed = installer.refreshPackages(new Bundle[] {toRefresh}); for (int i = 0; i < allBundles.length; i++) { boolean found = false; for (int j = 0; j < refreshed.length && !found; j++) found = allBundles[i] == refreshed[j]; if (!found) fail("bundle did not get refreshed: " + allBundles[i]); //$NON-NLS-1$ } assertEquals("Wrong number of bundles refreshed", allBundles.length, refreshed.length); //$NON-NLS-1$ } public void testSubstituteExports13() throws BundleException { Bundle a = installer.installBundle("substitutes.a"); //$NON-NLS-1$ Bundle b = installer.installBundle("substitutes.b"); //$NON-NLS-1$ Bundle c = installer.installBundle("substitutes.c"); //$NON-NLS-1$ Bundle d = installer.installBundle("substitutes.d"); //$NON-NLS-1$ Bundle[] allBundles = new Bundle[] {a, b, c, d}; assertTrue("Bundles are not resolved", installer.resolveBundles(allBundles)); //$NON-NLS-1$ PackageAdmin pa = installer.getPackageAdmin(); ExportedPackage[] xPackages = pa.getExportedPackages("substitutes.x"); //$NON-NLS-1$ assertNotNull("xPackages is null", xPackages); //$NON-NLS-1$ assertEquals("xPackages wrong number", 1, xPackages.length); //$NON-NLS-1$ assertEquals("Wrong exporter", a, xPackages[0].getExportingBundle()); //$NON-NLS-1$ Bundle[] xImporters = xPackages[0].getImportingBundles(); assertNotNull("xImporters is null", xImporters); //$NON-NLS-1$ assertEquals("Wrong number of xImporters", 3, xImporters.length); //$NON-NLS-1$ ExportedPackage[] yPackages = pa.getExportedPackages("substitutes.y"); //$NON-NLS-1$ assertNotNull("yPackages is null", yPackages); //$NON-NLS-1$ assertEquals("yPackages wrong number", 1, yPackages.length); //$NON-NLS-1$ assertEquals("Wrong exporter", a, yPackages[0].getExportingBundle()); //$NON-NLS-1$ Bundle[] yImporters = yPackages[0].getImportingBundles(); assertNotNull("yImporters is null", yImporters); //$NON-NLS-1$ assertEquals("Wrong number of yImporters", 3, yImporters.length); //$NON-NLS-1$ Bundle[] expectedImporters = new Bundle[] {b, c, d}; for (int i = 0; i < expectedImporters.length; i++) { contains("xPackages importers does not contain", xImporters, expectedImporters[i]); //$NON-NLS-1$ contains("yPackages importers does not contain", yImporters, expectedImporters[i]); //$NON-NLS-1$ } } public void testSubstituteExports14() throws BundleException { Bundle iBundle = installer.installBundle("substitutes.i"); //$NON-NLS-1$ Bundle jBundle = installer.installBundle("substitutes.j"); //$NON-NLS-1$ Bundle kBundle = installer.installBundle("substitutes.k"); //$NON-NLS-1$ Bundle lBundle = installer.installBundle("substitutes.l"); //$NON-NLS-1$ Bundle mBundle = installer.installBundle("substitutes.m"); //$NON-NLS-1$ Bundle nBundle = installer.installBundle("substitutes.n"); //$NON-NLS-1$ Bundle pBundle = installer.installBundle("substitutes.p"); //$NON-NLS-1$ Bundle qBundle = installer.installBundle("substitutes.q"); //$NON-NLS-1$ Bundle[] allBundles = new Bundle[] {iBundle, jBundle, kBundle, lBundle, mBundle, nBundle, pBundle, qBundle}; // k and l do not depend on i assertTrue("Bundles are not resolved", installer.resolveBundles(allBundles)); //$NON-NLS-1$ PackageAdmin pa = installer.getPackageAdmin(); ExportedPackage[] xPackages = pa.getExportedPackages("substitutes.x"); //$NON-NLS-1$ assertNotNull("xPackages is null", xPackages); //$NON-NLS-1$ assertEquals("xPackages wrong number", 3, xPackages.length); //$NON-NLS-1$ ExportedPackage[] yPackages = pa.getExportedPackages("substitutes.y"); //$NON-NLS-1$ assertNotNull("yPackages is null", yPackages); //$NON-NLS-1$ assertEquals("yPackages wrong number", 3, yPackages.length); //$NON-NLS-1$ Bundle[] expectedExporters = new Bundle[] {iBundle, kBundle, mBundle}; for (int i = 0; i < expectedExporters.length; i++) { boolean found = false; for (int j = 0; j < xPackages.length && !found; j++) { found = expectedExporters[i] == xPackages[j].getExportingBundle(); if (found) { Bundle[] importingBundles = xPackages[j].getImportingBundles(); Bundle[] expectedImporters = null; String message = null; if (expectedExporters[i] == iBundle) { expectedImporters = new Bundle[] {jBundle, mBundle, nBundle, pBundle, qBundle}; message = "iBundle "; //$NON-NLS-1$ } else if (expectedExporters[i] == kBundle) { expectedImporters = new Bundle[] {lBundle, mBundle, nBundle, pBundle, qBundle}; message = "kBundle "; //$NON-NLS-1$ } else if (expectedExporters[i] == mBundle) { expectedImporters = new Bundle[] {nBundle, pBundle, qBundle}; message = "mBundle "; //$NON-NLS-1$ } assertEquals(message, expectedImporters.length, importingBundles.length); for (int k = 0; k < expectedImporters.length; k++) contains(message, importingBundles, expectedImporters[k]); } } } } private void contains(String message, Bundle[] bundles, Bundle b) { boolean found = false; for (int i = 0; i < bundles.length && !found; i++) found = bundles[i] == b; if (!found) fail(message + b); } }