diff options
Diffstat (limited to 'bundles/org.eclipse.equinox.common.tests/src/org/eclipse/equinox/common/tests/adaptable/IAdapterManagerServiceTest.java')
-rw-r--r-- | bundles/org.eclipse.equinox.common.tests/src/org/eclipse/equinox/common/tests/adaptable/IAdapterManagerServiceTest.java | 195 |
1 files changed, 195 insertions, 0 deletions
diff --git a/bundles/org.eclipse.equinox.common.tests/src/org/eclipse/equinox/common/tests/adaptable/IAdapterManagerServiceTest.java b/bundles/org.eclipse.equinox.common.tests/src/org/eclipse/equinox/common/tests/adaptable/IAdapterManagerServiceTest.java new file mode 100644 index 000000000..950330a59 --- /dev/null +++ b/bundles/org.eclipse.equinox.common.tests/src/org/eclipse/equinox/common/tests/adaptable/IAdapterManagerServiceTest.java @@ -0,0 +1,195 @@ +/******************************************************************************* + * Copyright (c) 2007, 2018 IBM Corporation and others. + * + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * IBM - Initial API and implementation + * Alexander Kurtakov <akurtako@redhat.com> - bug 458490 + *******************************************************************************/ +package org.eclipse.equinox.common.tests.adaptable; + +import junit.framework.TestCase; +import org.eclipse.core.runtime.IAdapterFactory; +import org.eclipse.core.runtime.IAdapterManager; +import org.osgi.framework.BundleContext; +import org.osgi.framework.FrameworkUtil; +import org.osgi.util.tracker.ServiceTracker; + +/** + * Tests API on the IAdapterManager class accessed via an OSGi service. + * + * This class is a copy of IAdapterManagerTest modified to use an OSGi service + * instead of the Platform API. + */ +public class IAdapterManagerServiceTest extends TestCase { + private static final String NON_EXISTING = "com.does.not.Exist"; + private static final String TEST_ADAPTER = "org.eclipse.equinox.common.tests.adaptable.TestAdapter"; + + private ServiceTracker<IAdapterManager, IAdapterManager> adapterManagerTracker; + + public IAdapterManagerServiceTest(String name) { + super(name); + } + + public IAdapterManagerServiceTest() { + super(""); + } + + /* + * Return the framework log service, if available. + */ + public IAdapterManager getAdapterManager() { + if (adapterManagerTracker == null) { + BundleContext context = FrameworkUtil.getBundle(getClass()).getBundleContext(); + adapterManagerTracker = new ServiceTracker<>(context, IAdapterManager.class, null); + adapterManagerTracker.open(); + } + return adapterManagerTracker.getService(); + } + + @Override + protected void tearDown() throws Exception { + if (adapterManagerTracker != null) { + adapterManagerTracker.close(); + adapterManagerTracker = null; + } + super.tearDown(); + } + + /** + * Tests API method IAdapterManager.hasAdapter. + */ + public void testHasAdapter() { + IAdapterManager manager = getAdapterManager(); + + TestAdaptable adaptable = new TestAdaptable(); + //request non-existing adaptable + assertTrue("1.0", !manager.hasAdapter("", NON_EXISTING)); + + //request adapter that is in XML but has no registered factory + assertTrue("1.1", manager.hasAdapter(adaptable, TEST_ADAPTER)); + + //request adapter that is not in XML + assertTrue("1.2", !manager.hasAdapter(adaptable, "java.lang.String")); + + //register an adapter factory that maps adaptables to strings + IAdapterFactory fac = new IAdapterFactory() { + @Override + public <T> T getAdapter(Object adaptableObject, Class<T> adapterType) { + if (adapterType == String.class) { + return adapterType.cast(adaptableObject.toString()); + } + return null; + } + + @Override + public Class<?>[] getAdapterList() { + return new Class[] {String.class}; + } + }; + manager.registerAdapters(fac, TestAdaptable.class); + try { + //request adapter for factory that we've just added + assertTrue("1.3", manager.hasAdapter(adaptable, "java.lang.String")); + } finally { + manager.unregisterAdapters(fac, TestAdaptable.class); + } + + //request adapter that was unloaded + assertTrue("1.4", !manager.hasAdapter(adaptable, "java.lang.String")); + } + + /** + * Tests API method IAdapterManager.getAdapter. + */ + public void testGetAdapter() { + IAdapterManager manager = getAdapterManager(); + + TestAdaptable adaptable = new TestAdaptable(); + //request non-existing adaptable + assertNull("1.0", manager.getAdapter("", NON_EXISTING)); + + //request adapter that is in XML but has no registered factory + Object result = manager.getAdapter(adaptable, TEST_ADAPTER); + assertTrue("1.1", result instanceof TestAdapter); + + //request adapter that is not in XML + assertNull("1.2", manager.getAdapter(adaptable, "java.lang.String")); + + //register an adapter factory that maps adaptables to strings + IAdapterFactory fac = new IAdapterFactory() { + @Override + public <T> T getAdapter(Object adaptableObject, Class<T> adapterType) { + if (adapterType == String.class) { + return adapterType.cast(adaptableObject.toString()); + } + return null; + } + + @Override + public Class<?>[] getAdapterList() { + return new Class[] {String.class}; + } + }; + manager.registerAdapters(fac, TestAdaptable.class); + try { + //request adapter for factory that we've just added + result = manager.getAdapter(adaptable, "java.lang.String"); + assertTrue("1.3", result instanceof String); + } finally { + manager.unregisterAdapters(fac, TestAdaptable.class); + } + //request adapter that was unloaded + assertNull("1.4", manager.getAdapter(adaptable, "java.lang.String")); + } + + /** + * Tests API method IAdapterManager.loadAdapter. + */ + public void testLoadAdapter() { + IAdapterManager manager = getAdapterManager(); + + TestAdaptable adaptable = new TestAdaptable(); + //request non-existing adaptable + assertNull("1.0", manager.loadAdapter("", NON_EXISTING)); + + //request adapter that is in XML but has no registered factory + Object result = manager.loadAdapter(adaptable, TEST_ADAPTER); + assertTrue("1.1", result instanceof TestAdapter); + + //request adapter that is not in XML + assertNull("1.2", manager.loadAdapter(adaptable, "java.lang.String")); + + //register an adapter factory that maps adaptables to strings + IAdapterFactory fac = new IAdapterFactory() { + @Override + public <T> T getAdapter(Object adaptableObject, Class<T> adapterType) { + if (adapterType == String.class) { + return adapterType.cast(adaptableObject.toString()); + } + return null; + } + + @Override + public Class<?>[] getAdapterList() { + return new Class[] {String.class}; + } + }; + manager.registerAdapters(fac, TestAdaptable.class); + try { + //request adapter for factory that we've just added + result = manager.loadAdapter(adaptable, "java.lang.String"); + assertTrue("1.3", result instanceof String); + } finally { + manager.unregisterAdapters(fac, TestAdaptable.class); + } + //request adapter that was unloaded + assertNull("1.4", manager.loadAdapter(adaptable, "java.lang.String")); + } +} |