blob: aae64bf3bce65bb19f4d37298361ae360838acbf [file] [log] [blame]
/*******************************************************************************
* 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 static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import org.eclipse.core.runtime.IAdapterFactory;
import org.eclipse.core.runtime.IAdapterManager;
import org.junit.BeforeClass;
import org.junit.Test;
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 {
private static final String NON_EXISTING = "com.does.not.Exist";
private static final String TEST_ADAPTER = "org.eclipse.equinox.common.tests.adaptable.TestAdapter";
private static IAdapterManager manager;
/*
* Return the framework log service, if available.
*/
@BeforeClass
public static void getAdapterManager() {
BundleContext context = FrameworkUtil.getBundle(IAdapterManagerServiceTest.class).getBundleContext();
ServiceTracker<IAdapterManager, IAdapterManager> adapterManagerTracker = new ServiceTracker<>(context,
IAdapterManager.class, null);
adapterManagerTracker.open();
manager = adapterManagerTracker.getService();
adapterManagerTracker.close();
}
/**
* Tests API method IAdapterManager.hasAdapter.
*/
@Test
public void testHasAdapter() {
TestAdaptable adaptable = new TestAdaptable();
// request non-existing adaptable
assertFalse("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
assertFalse("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
assertFalse("1.4", manager.hasAdapter(adaptable, "java.lang.String"));
}
/**
* Tests API method IAdapterManager.getAdapter.
*/
@Test
public void testGetAdapter() {
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.
*/
@Test
public void testLoadAdapter() {
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"));
}
}