diff options
-rwxr-xr-x | bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/bundles/SystemBundleTests.java | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/bundles/SystemBundleTests.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/bundles/SystemBundleTests.java index df800f410..1737b73ba 100755 --- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/bundles/SystemBundleTests.java +++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/bundles/SystemBundleTests.java @@ -96,11 +96,13 @@ import org.osgi.framework.hooks.weaving.WovenClass; import org.osgi.framework.launch.Framework; import org.osgi.framework.launch.FrameworkFactory; import org.osgi.framework.namespace.NativeNamespace; +import org.osgi.framework.namespace.PackageNamespace; import org.osgi.framework.startlevel.BundleStartLevel; import org.osgi.framework.startlevel.FrameworkStartLevel; import org.osgi.framework.wiring.BundleCapability; import org.osgi.framework.wiring.BundleRequirement; import org.osgi.framework.wiring.BundleRevision; +import org.osgi.framework.wiring.BundleWire; import org.osgi.framework.wiring.BundleWiring; import org.osgi.framework.wiring.FrameworkWiring; import org.osgi.resource.Capability; @@ -3802,4 +3804,53 @@ public class SystemBundleTests extends AbstractBundleTests { } } } + + public void testDynamicImportFromSystemBundle() throws IOException { + File config = OSGiTestsActivator.getContext().getDataFile(getName()); //$NON-NLS-1$ + Map configuration = new HashMap(); + configuration.put(Constants.FRAMEWORK_STORAGE, config.getAbsolutePath()); + configuration.put(Constants.FRAMEWORK_SYSTEMPACKAGES_EXTRA, "some.system.pkg"); + Equinox equinox = null; + try { + equinox = new Equinox(configuration); + equinox.init(); + BundleContext bc = equinox.getBundleContext(); + + Map<String, String> h2 = new HashMap<String, String>(); + h2.put(Constants.BUNDLE_MANIFESTVERSION, "2"); + h2.put(Constants.BUNDLE_SYMBOLICNAME, getName() + ".dynamicimporter"); + h2.put(Constants.DYNAMICIMPORT_PACKAGE, "some.system.*; version=1.0"); + File f2 = SystemBundleTests.createBundle(config, getName() + ".importer", h2); + Bundle b2 = bc.installBundle("reference:file:///" + f2.getAbsolutePath()); //$NON-NLS-1$ + b2.getResource("does/not/exist.txt"); + + Map<String, String> h1 = new HashMap<String, String>(); + h1.put(Constants.BUNDLE_MANIFESTVERSION, "2"); + h1.put(Constants.BUNDLE_SYMBOLICNAME, getName() + ".exporter"); + h1.put(Constants.EXPORT_PACKAGE, "some.system.pkg; version=1.0"); + File f1 = SystemBundleTests.createBundle(config, getName() + ".exporter", h1); + Bundle b1 = bc.installBundle("reference:file:///" + f1.getAbsolutePath()); //$NON-NLS-1$ + + b2.getResource("some/system/pkg/Test"); + + BundleWiring w = b2.adapt(BundleWiring.class); + assertNotNull("Null wiring.", w); + List<BundleWire> pkgWires = w.getRequiredWires(PackageNamespace.PACKAGE_NAMESPACE); + assertFalse("Empty wires.", pkgWires.isEmpty()); + assertEquals("Wrong provider", b1.adapt(BundleRevision.class), pkgWires.iterator().next().getProvider()); + } catch (BundleException e) { + fail("Unexpected BundleException", e); + } finally { + try { + if (equinox != null) { + equinox.stop(); + equinox.waitForStop(1000); + } + } catch (BundleException e) { + fail("Failed to stop framework.", e); + } catch (InterruptedException e) { + fail("Failed to stop framework.", e); + } + } + } } |