package test.gui;
import com.google.inject.AbstractModule;
import java.util.List;
import java.util.stream.Collectors;
import javafx.scene.control.Button;
import javafx.scene.layout.VBox;
import net.sf.latexdraw.instruments.Hand;
import net.sf.latexdraw.instruments.Pencil;
import net.sf.latexdraw.instruments.ShapeTransformer;
import net.sf.latexdraw.models.interfaces.shape.IShape;
import org.junit.Before;
import org.junit.Test;
import static junit.framework.TestCase.assertTrue;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotEquals;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class TestShapeTransformer extends SelectionBasedTesting<ShapeTransformer> {
Button mirrorH;
Button mirrorV;
Button alignBot;
Button alignLeft;
Button alignRight;
Button alignTop;
Button alignMidHoriz;
Button alignMidVert;
Button distribVertBot;
Button distribVertEq;
Button distribVertMid;
Button distribVertTop;
Button distribHorizEq;
Button distribHorizLeft;
Button distribHorizMid;
Button distribHorizRight;
VBox mainPane;
final GUIVoidCommand clickAlignBot = () -> clickOn(alignBot);
final GUIVoidCommand clickAlignTop = () -> clickOn(alignTop);
final GUIVoidCommand clickAlignLeft = () -> clickOn(alignLeft);
final GUIVoidCommand clickAlignRight = () -> clickOn(alignRight);
final GUIVoidCommand clickAlignMidHoriz = () -> clickOn(alignMidHoriz);
final GUIVoidCommand clickAlignMidVert = () -> clickOn(alignMidVert);
final GUIVoidCommand clickMirrorH = () -> clickOn(mirrorH);
final GUIVoidCommand clickMirrorV = () -> clickOn(mirrorV);
final GUIVoidCommand clickDistribVertBot = () -> clickOn(distribVertBot);
final GUIVoidCommand clickDistribVertEq = () -> clickOn(distribVertEq);
final GUIVoidCommand clickDistribVertMid = () -> clickOn(distribVertMid);
final GUIVoidCommand clickDistribVertTop = () -> clickOn(distribVertTop);
final GUIVoidCommand clickDistribHorizEq = () -> clickOn(distribHorizEq);
final GUIVoidCommand clickDistribHorizLeft = () -> clickOn(distribHorizLeft);
final GUIVoidCommand clickDistribHorizMid = () -> clickOn(distribHorizMid);
final GUIVoidCommand clickDistribHorizRight = () -> clickOn(distribHorizRight);
@Override
protected String getFXMLPathFromLatexdraw() {
return "/fxml/Transformation.fxml";
}
@Override
@Before
public void setUp() {
super.setUp();
mirrorH = find("#mirrorH");
mirrorV = find("#mirrorV");
alignBot = find("#alignBot");
alignLeft = find("#alignLeft");
alignRight = find("#alignRight");
alignTop = find("#alignTop");
alignMidHoriz = find("#alignMidHoriz");
alignMidVert = find("#alignMidVert");
distribVertBot = find("#distribVertBot");
distribVertEq = find("#distribVertEq");
distribVertMid = find("#distribVertMid");
distribVertTop = find("#distribVertTop");
distribHorizEq = find("#distribHorizEq");
distribHorizMid = find("#distribHorizMid");
distribHorizRight = find("#distribHorizRight");
distribHorizLeft = find("#distribHorizLeft");
mainPane = find("#mainPane");
ins = (ShapeTransformer) guiceFactory.call(ShapeTransformer.class);
ins.setActivated(true);
ins.update();
}
@Override
protected AbstractModule createModule() {
return new ShapePropModule() {
@Override
protected void configure() {
super.configure();
pencil = mock(Pencil.class);
hand = mock(Hand.class);
bind(ShapeTransformer.class).asEagerSingleton();
bind(Hand.class).toInstance(hand);
bind(Pencil.class).toInstance(pencil);
}
};
}
@Test
public void testDeactivatedEmpty() throws Exception {
assertFalse(ins.isActivated());
}
@Test
public void testNotVisibleEmpty() throws Exception {
assertFalse(mainPane.isVisible());
}
@Test
public void testActivateOnTwoShapesSelected() throws Exception {
selectTwoShapes.execute();
assertTrue(ins.isActivated());
}
@Test
public void testNotActivateOnOneShapeSelected() throws Exception {
selectOneShape.execute();
assertTrue(ins.isActivated());
}
@Test
public void testNotVisibleOnOneShapeSelected() throws Exception {
selectOneShape.execute();
assertTrue(mainPane.isVisible());
}
@Test
public void testNotVisiblePencil() throws Exception {
when(pencil.isActivated()).thenReturn(true);
when(hand.isActivated()).thenReturn(false);
selectTwoShapes.execute();
assertFalse(mainPane.isVisible());
}
@Test
public void testNotActivatedPencil() throws Exception {
when(pencil.isActivated()).thenReturn(true);
when(hand.isActivated()).thenReturn(false);
selectTwoShapes.execute();
assertFalse(ins.isActivated());
}
@Test
public void testAlignBot() {
selectTwoShapes.execute();
List<IShape> dups = drawing.getShapes().stream().map(sh -> (IShape)sh.duplicate()).collect(Collectors.toList());
clickAlignBot.execute();
assertNotEquals(dups.get(0).getPoints(), drawing.getShapes().get(0).getPoints());
}
@Test
public void testAlignTop() {
selectTwoShapes.execute();
List<IShape> dups = drawing.getShapes().stream().map(sh -> (IShape)sh.duplicate()).collect(Collectors.toList());
clickAlignTop.execute();
assertNotEquals(dups.get(1).getPoints(), drawing.getShapes().get(1).getPoints());
}
@Test
public void testAlignLeft() {
selectTwoShapes.execute();
List<IShape> dups = drawing.getShapes().stream().map(sh -> (IShape)sh.duplicate()).collect(Collectors.toList());
clickAlignLeft.execute();
assertNotEquals(dups.get(1).getPoints(), drawing.getShapes().get(1).getPoints());
}
@Test
public void testAlignRight() {
selectTwoShapes.execute();
List<IShape> dups = drawing.getShapes().stream().map(sh -> (IShape)sh.duplicate()).collect(Collectors.toList());
clickAlignRight.execute();
assertNotEquals(dups.get(0).getPoints(), drawing.getShapes().get(0).getPoints());
}
@Test
public void testAlignMidHoriz() {
selectTwoShapes.execute();
List<IShape> dups = drawing.getShapes().stream().map(sh -> (IShape)sh.duplicate()).collect(Collectors.toList());
clickAlignMidHoriz.execute();
assertNotEquals(dups.get(0).getPoints(), drawing.getShapes().get(0).getPoints());
}
@Test
public void testAlignMidVert() {
selectTwoShapes.execute();
List<IShape> dups = drawing.getShapes().stream().map(sh -> (IShape)sh.duplicate()).collect(Collectors.toList());
clickAlignMidVert.execute();
assertNotEquals(dups.get(0).getPoints(), drawing.getShapes().get(0).getPoints());
}
@Test
public void testMirrorH() {
selectTwoShapes.execute();
List<IShape> dups = drawing.getShapes().stream().map(sh -> (IShape)sh.duplicate()).collect(Collectors.toList());
clickMirrorH.execute();
assertNotEquals(dups.get(0).getPoints(), drawing.getShapes().get(0).getPoints());
assertNotEquals(dups.get(1).getPoints(), drawing.getShapes().get(1).getPoints());
}
@Test
public void testMirrorV() {
selectTwoShapes.execute();
List<IShape> dups = drawing.getShapes().stream().map(sh -> (IShape)sh.duplicate()).collect(Collectors.toList());
clickMirrorV.execute();
assertNotEquals(dups.get(0).getPoints(), drawing.getShapes().get(0).getPoints());
assertNotEquals(dups.get(1).getPoints(), drawing.getShapes().get(1).getPoints());
}
@Test
public void testdistribVertBot() {
selectThreeShapes.execute();
List<IShape> dups = drawing.getShapes().stream().map(sh -> (IShape)sh.duplicate()).collect(Collectors.toList());
clickDistribVertBot.execute();
assertNotEquals(dups.get(1).getPoints(), drawing.getShapes().get(1).getPoints());
}
@Test
public void testdistribVertEq() {
selectThreeShapes.execute();
List<IShape> dups = drawing.getShapes().stream().map(sh -> (IShape)sh.duplicate()).collect(Collectors.toList());
clickDistribVertEq.execute();
assertNotEquals(dups.get(1).getPoints(), drawing.getShapes().get(1).getPoints());
}
@Test
public void testdistribVertMid() {
selectThreeShapes.execute();
List<IShape> dups = drawing.getShapes().stream().map(sh -> (IShape)sh.duplicate()).collect(Collectors.toList());
clickDistribVertMid.execute();
assertNotEquals(dups.get(1).getPoints(), drawing.getShapes().get(1).getPoints());
}
@Test
public void testdistribVertTop() {
selectThreeShapes.execute();
List<IShape> dups = drawing.getShapes().stream().map(sh -> (IShape)sh.duplicate()).collect(Collectors.toList());
clickDistribVertTop.execute();
assertNotEquals(dups.get(1).getPoints(), drawing.getShapes().get(1).getPoints());
}
@Test
public void testdistribHorizEq() {
selectThreeShapes.execute();
List<IShape> dups = drawing.getShapes().stream().map(sh -> (IShape)sh.duplicate()).collect(Collectors.toList());
clickDistribHorizEq.execute();
assertNotEquals(dups.get(1).getPoints(), drawing.getShapes().get(1).getPoints());
}
@Test
public void testdistribHorizLeft() {
selectThreeShapes.execute();
List<IShape> dups = drawing.getShapes().stream().map(sh -> (IShape)sh.duplicate()).collect(Collectors.toList());
clickDistribHorizLeft.execute();
assertNotEquals(dups.get(1).getPoints(), drawing.getShapes().get(1).getPoints());
}
@Test
public void testdistribHorizMid() {
selectThreeShapes.execute();
List<IShape> dups = drawing.getShapes().stream().map(sh -> (IShape)sh.duplicate()).collect(Collectors.toList());
clickDistribHorizMid.execute();
assertNotEquals(dups.get(1).getPoints(), drawing.getShapes().get(1).getPoints());
}
@Test
public void testdistribHorizRight() {
selectThreeShapes.execute();
List<IShape> dups = drawing.getShapes().stream().map(sh -> (IShape)sh.duplicate()).collect(Collectors.toList());
clickDistribHorizRight.execute();
assertNotEquals(dups.get(1).getPoints(), drawing.getShapes().get(1).getPoints());
}
}