diff options
| author | Andrey Loskutov | 2017-02-07 14:23:02 +0000 |
|---|---|---|
| committer | Andrey Loskutov | 2017-02-07 18:43:13 +0000 |
| commit | b0e749f8616d5e3880299764c9a7cda6ee410667 (patch) | |
| tree | 5c3cba0e85b1ceee62ee6b5ca8a816f16521f353 | |
| parent | df9d7a0966886435aed8a133eb7da48c072b21e5 (diff) | |
| download | eclipse.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.java | 35 |
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); + } + } } |
