package test.gui; import com.google.inject.AbstractModule; import java.util.concurrent.TimeoutException; import javafx.application.Platform; import javafx.scene.Group; import javafx.scene.input.KeyCode; import net.sf.latexdraw.instruments.Hand; import net.sf.latexdraw.instruments.Pencil; import net.sf.latexdraw.models.ShapeFactory; import net.sf.latexdraw.models.interfaces.shape.IRectangle; import net.sf.latexdraw.view.MagneticGrid; import net.sf.latexdraw.view.jfx.Canvas; import net.sf.latexdraw.view.jfx.PageView; import net.sf.latexdraw.view.jfx.ViewRectangle; import net.sf.latexdraw.view.latex.DviPsColors; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.malai.action.ActionsRegistry; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotSame; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; public class TestCanvas extends TestLatexdrawGUI { Pencil pencil; Hand hand; Canvas canvas; IRectangle addedRec; final GUIVoidCommand addRec = () -> Platform.runLater(() -> { addedRec = ShapeFactory.INST.createRectangle(ShapeFactory.INST.createPoint(-Canvas.ORIGIN.getX()+50, -Canvas.ORIGIN.getY()+50), 200, 100); addedRec.setFilled(true); addedRec.setFillingCol(DviPsColors.APRICOT); canvas.getDrawing().addShape(addedRec); }); final GUIVoidCommand addRec2 = () -> Platform.runLater(() -> { IRectangle rec = ShapeFactory.INST.createRectangle(ShapeFactory.INST.createPoint(-Canvas.ORIGIN.getX()+300, -Canvas.ORIGIN.getY()+300), 100, 100); rec.setFilled(true); rec.setFillingCol(DviPsColors.APRICOT); canvas.getDrawing().addShape(rec); }); final GUIVoidCommand clickOnAddedRec = () -> rightClickOn(getPane().getChildren().get(0)); final GUIVoidCommand ctrlClickOnAddedRec2 = () -> press(KeyCode.CONTROL).rightClickOn(getPane().getChildren().get(1)).release(KeyCode.CONTROL); final GUIVoidCommand shiftClickOnAddedRec = () -> press(KeyCode.SHIFT).rightClickOn(getPane().getChildren().get(0)).release(KeyCode.SHIFT); @Override public String getFXMLPathFromLatexdraw() { return "/fxml/Canvas.fxml"; } @Override protected AbstractModule createModule() { return new ShapePropModule() { @Override protected void configure() { super.configure(); pencil = mock(Pencil.class); bind(Hand.class).asEagerSingleton(); bind(Pencil.class).toInstance(pencil); } }; } @Override @Before public void setUp() { super.setUp(); pencil = (Pencil) guiceFactory.call(Pencil.class); hand = (Hand) guiceFactory.call(Hand.class); canvas = (Canvas) guiceFactory.call(Canvas.class); hand.setActivated(true); when(pencil.isActivated()).thenReturn(false); Platform.runLater(() -> { final int width = 800; final int height = 600; stage.minHeightProperty().unbind(); stage.minWidthProperty().unbind(); canvas.setMaxWidth(width); canvas.setMaxHeight(height); canvas.getScene().getWindow().setWidth(width); canvas.getScene().getWindow().setHeight(height); stage.setMaxWidth(width); stage.setMaxHeight(height); stage.setMinWidth(width); stage.setMinHeight(height); stage.centerOnScreen(); stage.toFront(); }); } @Override @After public void tearDown() throws TimeoutException { super.tearDown(); ActionsRegistry.INSTANCE.removeHandler(canvas); } Group getPane() { return (Group) canvas.getChildren().get(2); } @Test public void testPageViewExits() { assertTrue(canvas.getChildren().get(0) instanceof PageView); } @Test public void testMagneticGridExists() { assertTrue(canvas.getChildren().get(1) instanceof MagneticGrid); } @Test public void testViewsPaneExists() { assertTrue(canvas.getChildren().get(2) instanceof Group); } @Test public void testViewsPanePositionORIGIN() { Group group = getPane(); assertEquals(Canvas.ORIGIN.getX(), group.getLayoutX(), 0.000001); assertEquals(Canvas.ORIGIN.getY(), group.getLayoutY(), 0.000001); } @Test public void testShapeAddedViewCreated() { new CompositeGUIVoidCommand(addRec, waitFXEvents).execute(); assertEquals(1, getPane().getChildren().size()); } @Test public void testShapeAddedViewRecCreated() { new CompositeGUIVoidCommand(addRec, waitFXEvents).execute(); assertTrue(getPane().getChildren().get(0) instanceof ViewRectangle); } @Test public void testOneClickOnShapeSelectsIt() { new CompositeGUIVoidCommand(addRec, waitFXEvents, clickOnAddedRec, waitFXEvents).execute(); assertEquals(1, canvas.getDrawing().getSelection().size()); assertSame(addedRec, canvas.getDrawing().getSelection().getShapeAt(0)); } @Test public void testTwoClicksOnShapeSelectsItOneTime() { new CompositeGUIVoidCommand(addRec, waitFXEvents, clickOnAddedRec, waitFXEvents, clickOnAddedRec, waitFXEvents).execute(); assertEquals(1, canvas.getDrawing().getSelection().size()); } @Test public void testShiftClickOnShapeDeselectsIt() { new CompositeGUIVoidCommand(addRec, waitFXEvents, clickOnAddedRec, waitFXEvents, shiftClickOnAddedRec, waitFXEvents).execute(); assertTrue(canvas.getDrawing().getSelection().isEmpty()); } @Test public void testCtrlClickOnShapeAddsSelection() { new CompositeGUIVoidCommand(addRec, addRec2, waitFXEvents, clickOnAddedRec, waitFXEvents, ctrlClickOnAddedRec2, waitFXEvents).execute(); assertEquals(2, canvas.getDrawing().getSelection().size()); assertNotSame(canvas.getDrawing().getSelection().getShapeAt(0), canvas.getDrawing().getSelection().getShapeAt(1)); } @Test public void testTwoAddsAndShiftClickSelectsOneShape() { new CompositeGUIVoidCommand(addRec, addRec2, waitFXEvents, clickOnAddedRec, waitFXEvents, ctrlClickOnAddedRec2, waitFXEvents, shiftClickOnAddedRec, waitFXEvents).execute(); assertEquals(1, canvas.getDrawing().getSelection().size()); assertNotSame(addedRec, canvas.getDrawing().getSelection().getShapeAt(0)); } }