package com.windowtester.test.gef.tests.codegen; import static com.windowtester.test.codegen.CodeGenFixture.mockSelect; import static com.windowtester.test.codegen.CodeGenFixture.stream; import org.eclipse.core.runtime.Platform; import org.eclipse.draw2d.FigureCanvas; import org.eclipse.draw2d.IFigure; import org.eclipse.swt.widgets.Button; import com.windowtester.codegen.assembly.unit.MethodUnit; import com.windowtester.internal.runtime.locator.IdentifierAdapter; import com.windowtester.recorder.event.user.SemanticDropEvent; import com.windowtester.recorder.event.user.SemanticWidgetSelectionEvent; import com.windowtester.recorder.event.user.UISemanticEvent; import com.windowtester.runtime.draw2d.matchers.ByClassNameFigureMatcher; import com.windowtester.runtime.gef.locator.FigureCanvasXYLocator; import com.windowtester.runtime.gef.locator.FigureLocator; import com.windowtester.runtime.swt.locator.ButtonLocator; import com.windowtester.test.gef.tests.recorder.BaseGEFCodegenTest; import com.windowtester.ui.internal.corel.model.Event; /** * http://fogbugz.instantiations.com//default.php?34960 * * <p> * Copyright (c) 2008, Instantiations, Inc.<br> * All Rights Reserved * * @author Phil Quitslund * */ public class GEFDNDCodegenTest extends BaseGEFCodegenTest { static class MyFigureLocator extends FigureLocator { private static final long serialVersionUID = 1066569536705381016L; public MyFigureLocator() { super(new ByClassNameFigureMatcher("Foo")); } } private static final String UI_GET = "IUIContext ui = getUI();"; public void testMissingSelectionIsRepaired() throws Exception { SemanticWidgetSelectionEvent source = mockSelect(IFigure.class, new IdentifierAdapter(new MyFigureLocator())); SemanticWidgetSelectionEvent target = mockSelect(FigureCanvas.class, new IdentifierAdapter(new FigureCanvasXYLocator(10,10))); UISemanticEvent drop = new SemanticDropEvent(target).withSource(source); codegenerator().generate(stream(new Event(drop))); assertMainEqualsIgnoringWS(UI_GET + click("GEFDNDCodegenTest$MyFigureLocator()") + dragTo("FigureCanvasXYLocator(10,10)") + ""); } public void testMissingSelectionIsRepairedWithPreviousDifferentSelect() throws Exception { SemanticWidgetSelectionEvent previous = mockSelect(Button.class, new ButtonLocator("OK")); SemanticWidgetSelectionEvent source = mockSelect(IFigure.class, new IdentifierAdapter(new MyFigureLocator())); SemanticWidgetSelectionEvent target = mockSelect(FigureCanvas.class, new IdentifierAdapter(new FigureCanvasXYLocator(10,10))); UISemanticEvent drop = new SemanticDropEvent(target).withSource(source); codegenerator().generate(stream(new Event(previous), new Event(drop))); assertMainEqualsIgnoringWS(UI_GET + click("ButtonLocator(\"OK\")") + click("GEFDNDCodegenTest$MyFigureLocator()") + dragTo("FigureCanvasXYLocator(10,10)") + ""); } public void testExistingSelectionIsNotRepeated() throws Exception { assertTrue("test requires platform to be running", Platform.isRunning()); SemanticWidgetSelectionEvent previous = mockSelect(IFigure.class, new IdentifierAdapter(new MyFigureLocator())); SemanticWidgetSelectionEvent source = mockSelect(IFigure.class, new IdentifierAdapter(new MyFigureLocator())); SemanticWidgetSelectionEvent target = mockSelect(FigureCanvas.class, new IdentifierAdapter(new FigureCanvasXYLocator(10,10))); UISemanticEvent drop = new SemanticDropEvent(target).withSource(source); codegenerator().generate(stream(new Event(previous), new Event(drop))); assertMainEqualsIgnoringWS(UI_GET + click("GEFDNDCodegenTest$MyFigureLocator()") + dragTo("FigureCanvasXYLocator(10,10)") + ""); } private String click(String locator) { return "ui.click( new " + locator + ");"; } private void assertMainEqualsIgnoringWS(String body) { assertEquals(body.replaceAll("\\s", ""), getMainNoWS()); } private String dragTo(String consCall) { return "ui.dragTo( new " + consCall + ");"; } private String getMainNoWS() { MethodUnit main = getMainMethod(); return main.getMethodBodyContents().toString().replaceAll("\\s", ""); } private MethodUnit getMainMethod() { return (MethodUnit) codegenerator().getTestBuilder().getMethods().iterator().next(); } }