Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrey Loskutov2017-02-07 14:23:02 +0000
committerAndrey Loskutov2017-02-07 18:43:13 +0000
commitb0e749f8616d5e3880299764c9a7cda6ee410667 (patch)
tree5c3cba0e85b1ceee62ee6b5ca8a816f16521f353
parentdf9d7a0966886435aed8a133eb7da48c072b21e5 (diff)
downloadeclipse.platform.runtime-b0e749f8616d5e3880299764c9a7cda6ee410667.tar.gz
eclipse.platform.runtime-b0e749f8616d5e3880299764c9a7cda6ee410667.tar.xz
eclipse.platform.runtime-b0e749f8616d5e3880299764c9a7cda6ee410667.zip
Bug 511841 - AdapterManager.getAdapter can return wrong type
Change-Id: I8c48d1a06a5c6f153cadda3209c19d6ff9707fef Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
-rw-r--r--tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/IAdapterManagerTest.java35
1 files changed, 35 insertions, 0 deletions
diff --git a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/IAdapterManagerTest.java b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/IAdapterManagerTest.java
index 86ec85baa..88be609a3 100644
--- a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/IAdapterManagerTest.java
+++ b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/IAdapterManagerTest.java
@@ -252,4 +252,39 @@ public class IAdapterManagerTest extends TestCase {
assertEquals("1.1." + i, expected[i], actual[i]);
}
}
+
+ public void testFactoryViolatingContract() {
+ class Private {
+ }
+
+ IAdapterFactory fac = new IAdapterFactory() {
+ @SuppressWarnings("unchecked")
+ @Override
+ public <T> T getAdapter(Object adaptableObject, Class<T> adapterType) {
+ if (adapterType == Private.class) {
+ // Cast below violates the contract of the factory
+ return (T) Boolean.FALSE;
+ }
+ return null;
+ }
+
+ @Override
+ public Class<?>[] getAdapterList() {
+ return new Class[] { Private.class };
+ }
+ };
+ try {
+ manager.registerAdapters(fac, Private.class);
+ try {
+ manager.getAdapter(new Private(), Private.class);
+ fail("Should throw AssertionFailedException!");
+ } catch (AssertionFailedException e) {
+ assertTrue(e.getMessage().contains(fac.getClass().getName()));
+ assertTrue(e.getMessage().contains(Boolean.class.getName()));
+ assertTrue(e.getMessage().contains(Private.class.getName()));
+ }
+ } finally {
+ manager.unregisterAdapters(fac, Private.class);
+ }
+ }
}

Back to the top