package org.eclipse.uml2.diagram.common.tests.palette; import java.lang.reflect.Field; import java.util.List; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.ENamedElement; import org.eclipse.gef.palette.PaletteRoot; import org.eclipse.gef.palette.ToolEntry; import org.eclipse.uml2.uml.UMLPackage; public abstract class EntryMetaclassTest extends PaletteEntriesTestBase { public EntryMetaclassTest(PaletteRoot paletteRoot, int groupIndex, ENamedElement type, int entryIndex) { super(paletteRoot, groupIndex, type, entryIndex); } @Override protected void testEntry() { ToolEntry entry = getToolEntryAt(myPaletteGroup, myEntryIndex); List elementTypes = getElementTypes(entry); assertNotNull("Impossible to get 'elementTypes' field value.", elementTypes); for (Object object : elementTypes) { IAdaptable hint = (IAdaptable) object; ENamedElement element = getElement(hint); assertEquals("Incorrect metaclass in entry " + myEntryIndex + " in " + myPaletteGroup.getId() + " group.", myType, element); } } @Override public String getName() { return "test" + myType.getName() + "MetaclassEntry"; } private boolean isRelationship(ENamedElement type) { return type instanceof EClass && ((EClass) type).getEAllSuperTypes().contains(UMLPackage.eINSTANCE.getRelationship()); } private List getElementTypes(ToolEntry tool) { boolean isRelationship = isRelationship(myType); String field = (isRelationship) ? FIELD_RELATIONSHIP : FIELD_NODE; Field elementTypeField; try { elementTypeField = tool.getClass().getDeclaredField(field); if (!elementTypeField.isAccessible()) { elementTypeField.setAccessible(true); } List elementTypes = (List) elementTypeField.get(tool); return elementTypes; } catch (SecurityException e) { // TODO Auto-generated catch block fail("Cannot get element types: SecurityException"); } catch (NoSuchFieldException e) { fail("Cannot get element types: NoSuchFieldException"); } catch (IllegalArgumentException e) { fail("Cannot get element types: IllegalArgumentException"); } catch (IllegalAccessException e) { fail("Cannot get element types: IllegalAccessException"); } return null; } protected abstract ENamedElement getElement(IAdaptable hint); private static final String FIELD_RELATIONSHIP = "relationshipTypes"; private static final String FIELD_NODE = "elementTypes"; }