/* * Copyright (c) 2006 Borland Software Corporation * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Michael Golubev (Borland) - initial API and implementation */ package org.eclipse.gmf.tests.gen; import java.lang.reflect.Method; import junit.framework.TestCase; import org.eclipse.core.runtime.Platform; import org.eclipse.draw2d.IFigure; import org.eclipse.draw2d.geometry.Dimension; import org.eclipse.gmf.gmfgraph.RealFigure; import org.eclipse.gmf.gmfgraph.GMFGraphFactory; import org.eclipse.gmf.gmfgraph.Rectangle; import org.eclipse.gmf.graphdef.codegen.StandaloneGenerator; import org.eclipse.gmf.graphdef.codegen.StandaloneGenerator.Config; import org.eclipse.gmf.runtime.draw2d.ui.mapmode.IMapMode; import org.eclipse.gmf.runtime.draw2d.ui.mapmode.MapModeTypes; import org.eclipse.gmf.tests.setup.figures.FigureCheck; import org.eclipse.gmf.tests.setup.figures.FigureGeneratorUtil; import org.eclipse.gmf.tests.setup.figures.FigureGeneratorUtil.GeneratedClassData; import org.osgi.framework.Bundle; /** * @see MapModeStrategyTest */ public class StandaloneMapModeTest extends TestCase { public StandaloneMapModeTest(String name) { super(name); } public void testStaticIdentityMapMode(){ Config config = FigureGeneratorUtil.createStandaloneGeneratorConfig(FigureGeneratorUtil.DEFAULT_FIGURE_PACKAGE, false); GeneratedClassData[] theOnly = FigureGeneratorUtil.generateAndCompile(config, createTestFigure()); assertEquals(1, theOnly.length); new FigureSizeCheck(123, 456).go(theOnly[0].getLoadedClass()); } public void testRuntimeIdentityAndHiMetricMapMode(){ Config config = FigureGeneratorUtil.createStandaloneGeneratorConfig(FigureGeneratorUtil.DEFAULT_FIGURE_PACKAGE, true); GeneratedClassData[] theOnly = FigureGeneratorUtil.generateAndCompile(config, createTestFigure()); assertNotNull(theOnly); assertEquals(1, theOnly.length); Class<?> figureClass = theOnly[0].getLoadedClass(); new InstantiateFigureHook(123, 456, MapModeTypes.IDENTITY_MM, config).go(figureClass); new InstantiateFigureHook(123, 456, MapModeTypes.HIMETRIC_MM, config).go(figureClass); } private RealFigure createTestFigure(){ Rectangle result = GMFGraphFactory.eINSTANCE.createRectangle(); result.setName("TestFigure"); result.setSize(FigureGeneratorUtil.createPoint(123, 456)); return result; } private static class FigureSizeCheck extends FigureCheck { private final Dimension mySize; public FigureSizeCheck(int width, int height){ mySize = new Dimension(width, height); } protected void checkFigure(IFigure figure) { assertEquals(mySize, figure.getSize()); } } private static class InstantiateFigureHook extends FigureSizeCheck { private final IMapMode myMapMode; private final StandaloneGenerator.Config myConfig; public InstantiateFigureHook(int width, int height, IMapMode mapMode, StandaloneGenerator.Config config){ super(mapMode.DPtoLP(width), mapMode.DPtoLP(height)); myMapMode = mapMode; myConfig = config; } protected IFigure instantiateFigure(Class<?> figureClass) { try { hookMapMode(); } catch (Exception e) { fail(e.getMessage()); } return super.instantiateFigure(figureClass); } private void hookMapMode() throws Exception { Bundle bundle = Platform.getBundle(myConfig.getPluginID()); assertNotNull(bundle); Class<?> activatorClass = bundle.loadClass(myConfig.getPluginActivatorPackageName() + "." + myConfig.getPluginActivatorClassName()); assertNotNull(activatorClass); Method getDefault = activatorClass.getMethod("getDefault", new Class[0]); assertNotNull(getDefault); Object activator = getDefault.invoke(null, new Object[0]); assertNotNull(activator); Method setMapMode = activatorClass.getMethod("setMapMode", new Class[] {IMapMode.class}); assertNotNull(setMapMode); setMapMode.invoke(activator, new Object[] {myMapMode}); Method getMapMode = activatorClass.getMethod("getMapMode", new Class[0]); assertNotNull(getMapMode); assertEquals(myMapMode, getMapMode.invoke(activator, new Object[0])); } } }