package test.models.interfaces;
import net.sf.latexdraw.models.ShapeFactory;
import net.sf.latexdraw.models.interfaces.shape.IModifiablePointsShape;
import net.sf.latexdraw.models.interfaces.shape.IPoint;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
public abstract class TestIModifiablePointsShape<T extends IModifiablePointsShape> extends TestIShape<T> {
@Override
@Test
public void testMirrorHorizontal() {
IPoint pt1 = ShapeFactory.INST.createPoint(1, 1);
IPoint pt2 = ShapeFactory.INST.createPoint(3, 1);
IPoint pt3 = ShapeFactory.INST.createPoint(3, 3);
IPoint pt4 = ShapeFactory.INST.createPoint(1, 3);
shape.addPoint(pt1);
shape.addPoint(pt2);
shape.addPoint(pt3);
shape.addPoint(pt4);
shape.mirrorHorizontal(shape.getGravityCentre());
assertEqualsDouble(3., pt1.getX());
assertEqualsDouble(1., pt2.getX());
assertEqualsDouble(1., pt3.getX());
assertEqualsDouble(3., pt4.getX());
assertEqualsDouble(1., pt1.getY());
assertEqualsDouble(1., pt2.getY());
assertEqualsDouble(3., pt3.getY());
assertEqualsDouble(3., pt4.getY());
}
@Override
@Test
public void testMirrorVertical() {
IPoint pt1 = ShapeFactory.INST.createPoint(1, 1);
IPoint pt2 = ShapeFactory.INST.createPoint(3, 1);
IPoint pt3 = ShapeFactory.INST.createPoint(3, 3);
IPoint pt4 = ShapeFactory.INST.createPoint(1, 3);
shape.addPoint(pt1);
shape.addPoint(pt2);
shape.addPoint(pt3);
shape.addPoint(pt4);
shape.mirrorVertical(shape.getGravityCentre());
assertEqualsDouble(1., pt1.getX());
assertEqualsDouble(3., pt2.getX());
assertEqualsDouble(3., pt3.getX());
assertEqualsDouble(1., pt4.getX());
assertEqualsDouble(3., pt1.getY());
assertEqualsDouble(3., pt2.getY());
assertEqualsDouble(1., pt3.getY());
assertEqualsDouble(1., pt4.getY());
}
@Override
@Test
public void testTranslate() {
IPoint pt1 = ShapeFactory.INST.createPoint(1, 1);
IPoint pt2 = ShapeFactory.INST.createPoint(3, 1);
IPoint pt3 = ShapeFactory.INST.createPoint(3, 3);
IPoint pt4 = ShapeFactory.INST.createPoint(1, 3);
shape.addPoint(pt1);
shape.addPoint(pt2);
shape.addPoint(pt3);
shape.addPoint(pt4);
shape.translate(10, 0);
assertEqualsDouble(11., pt1.getX());
assertEqualsDouble(13., pt2.getX());
assertEqualsDouble(13., pt3.getX());
assertEqualsDouble(11., pt4.getX());
assertEqualsDouble(1., pt1.getY());
assertEqualsDouble(1., pt2.getY());
assertEqualsDouble(3., pt3.getY());
assertEqualsDouble(3., pt4.getY());
shape.translate(5, 5);
assertEqualsDouble(16., pt1.getX());
assertEqualsDouble(18., pt2.getX());
assertEqualsDouble(18., pt3.getX());
assertEqualsDouble(16., pt4.getX());
assertEqualsDouble(6., pt1.getY());
assertEqualsDouble(6., pt2.getY());
assertEqualsDouble(8., pt3.getY());
assertEqualsDouble(8., pt4.getY());
shape.translate(-5, -5);
assertEqualsDouble(11., pt1.getX());
assertEqualsDouble(13., pt2.getX());
assertEqualsDouble(13., pt3.getX());
assertEqualsDouble(11., pt4.getX());
assertEqualsDouble(1., pt1.getY());
assertEqualsDouble(1., pt2.getY());
assertEqualsDouble(3., pt3.getY());
assertEqualsDouble(3., pt4.getY());
shape.translate(-10, 0);
assertEqualsDouble(1., pt1.getX());
assertEqualsDouble(3., pt2.getX());
assertEqualsDouble(3., pt3.getX());
assertEqualsDouble(1., pt4.getX());
assertEqualsDouble(1., pt1.getY());
assertEqualsDouble(1., pt2.getY());
assertEqualsDouble(3., pt3.getY());
assertEqualsDouble(3., pt4.getY());
shape.translate(Double.NaN, -5);
assertEqualsDouble(1., pt1.getX());
assertEqualsDouble(3., pt2.getX());
assertEqualsDouble(3., pt3.getX());
assertEqualsDouble(1., pt4.getX());
assertEqualsDouble(1., pt1.getY());
assertEqualsDouble(1., pt2.getY());
assertEqualsDouble(3., pt3.getY());
assertEqualsDouble(3., pt4.getY());
shape.translate(1, Double.NaN);
assertEqualsDouble(1., pt1.getX());
assertEqualsDouble(3., pt2.getX());
assertEqualsDouble(3., pt3.getX());
assertEqualsDouble(1., pt4.getX());
assertEqualsDouble(1., pt1.getY());
assertEqualsDouble(1., pt2.getY());
assertEqualsDouble(3., pt3.getY());
assertEqualsDouble(3., pt4.getY());
shape.translate(Double.NEGATIVE_INFINITY, -5);
assertEqualsDouble(1., pt1.getX());
assertEqualsDouble(3., pt2.getX());
assertEqualsDouble(3., pt3.getX());
assertEqualsDouble(1., pt4.getX());
assertEqualsDouble(1., pt1.getY());
assertEqualsDouble(1., pt2.getY());
assertEqualsDouble(3., pt3.getY());
assertEqualsDouble(3., pt4.getY());
shape.translate(1, Double.NEGATIVE_INFINITY);
assertEqualsDouble(1., pt1.getX());
assertEqualsDouble(3., pt2.getX());
assertEqualsDouble(3., pt3.getX());
assertEqualsDouble(1., pt4.getX());
assertEqualsDouble(1., pt1.getY());
assertEqualsDouble(1., pt2.getY());
assertEqualsDouble(3., pt3.getY());
assertEqualsDouble(3., pt4.getY());
shape.translate(Double.POSITIVE_INFINITY, -5);
assertEqualsDouble(1., pt1.getX());
assertEqualsDouble(3., pt2.getX());
assertEqualsDouble(3., pt3.getX());
assertEqualsDouble(1., pt4.getX());
assertEqualsDouble(1., pt1.getY());
assertEqualsDouble(1., pt2.getY());
assertEqualsDouble(3., pt3.getY());
assertEqualsDouble(3., pt4.getY());
shape.translate(1, Double.POSITIVE_INFINITY);
assertEqualsDouble(1., pt1.getX());
assertEqualsDouble(3., pt2.getX());
assertEqualsDouble(3., pt3.getX());
assertEqualsDouble(1., pt4.getX());
assertEqualsDouble(1., pt1.getY());
assertEqualsDouble(1., pt2.getY());
assertEqualsDouble(3., pt3.getY());
assertEqualsDouble(3., pt4.getY());
shape.translate(0, 0);
assertEqualsDouble(1., pt1.getX());
assertEqualsDouble(3., pt2.getX());
assertEqualsDouble(3., pt3.getX());
assertEqualsDouble(1., pt4.getX());
assertEqualsDouble(1., pt1.getY());
assertEqualsDouble(1., pt2.getY());
assertEqualsDouble(3., pt3.getY());
assertEqualsDouble(3., pt4.getY());
}
@Override
@Test
public void testGetGravityCentre() {
super.testGetGravityCentre();
IPoint pt1 = ShapeFactory.INST.createPoint(0, 0);
IPoint pt2 = ShapeFactory.INST.createPoint(2, 0);
IPoint pt3 = ShapeFactory.INST.createPoint(2, 2);
IPoint pt4 = ShapeFactory.INST.createPoint(0, 2);
assertNotNull(shape.getGravityCentre());
shape.getPoints().clear();
shape.addPoint(pt1);
shape.addPoint(pt2);
shape.addPoint(pt3);
shape.addPoint(pt4);
assertTrue(shape.getGravityCentre().equals(ShapeFactory.INST.createPoint(1, 1)));
}
@Test
public void testAddPoint() {
IPoint pt = ShapeFactory.INST.createPoint();
int size = shape.getNbPoints();
shape.addPoint(null);
assertEquals(size, shape.getPoints().size());
shape.addPoint(pt);
assertEquals(pt, shape.getPoints().get(shape.getPoints().size() - 1));
assertEquals(size + 1, shape.getPoints().size());
pt = ShapeFactory.INST.createPoint(1, 1);
shape.addPoint(pt);
assertEquals(pt, shape.getPoints().get(shape.getPoints().size() - 1));
assertEquals(size + 2, shape.getPoints().size());
shape.getPoints().remove(shape.getPoints().size() - 1);
shape.getPoints().remove(shape.getPoints().size() - 1);
}
@Test
public void testAddPointAt() {
IPoint pt = ShapeFactory.INST.createPoint();
int size = shape.getNbPoints();
shape.addPoint(null, 0);
assertEquals(size, shape.getPoints().size());
shape.addPoint(null, -1);
assertEquals(size, shape.getPoints().size());
shape.addPoint(null, 7863);
assertEquals(size, shape.getPoints().size());
shape.addPoint(pt, Integer.MAX_VALUE);
assertEquals(size, shape.getPoints().size());
shape.addPoint(pt, -2);
assertEquals(size, shape.getPoints().size());
shape.addPoint(pt, shape.getPoints().size() + 1);
assertEquals(size, shape.getPoints().size());
shape.addPoint(pt, 0);
assertEquals(pt, shape.getPoints().get(0));
assertEquals(size + 1, shape.getPoints().size());
shape.removePoint(0);
shape.addPoint(pt, -1);
assertEquals(pt, shape.getPoints().get(shape.getPoints().size() - 1));
assertEquals(size + 1, shape.getPoints().size());
shape.removePoint(pt);
shape.addPoint(pt, shape.getPoints().size());
assertEquals(pt, shape.getPoints().get(shape.getPoints().size() - 1));
assertEquals(size + 1, shape.getPoints().size());
shape.removePoint(pt);
}
@Test
public void testRemovePoint() {
int size = shape.getPoints().size();
IPoint pt = ShapeFactory.INST.createPoint();
shape.addPoint(pt);
assertFalse(shape.removePoint(null));
assertEquals(size + 1, shape.getPoints().size());
assertTrue(shape.removePoint(pt));
assertEquals(size, shape.getPoints().size());
}
@Test
public void testRemovePoint2() {
int size = shape.getPoints().size();
IPoint pt = ShapeFactory.INST.createPoint();
shape.addPoint(pt);
assertNull(shape.removePoint(Integer.MAX_VALUE));
assertEquals(size + 1, shape.getPoints().size());
assertNull(shape.removePoint(Integer.MIN_VALUE));
assertEquals(size + 1, shape.getPoints().size());
assertEquals(shape.removePoint(-1), pt);
assertEquals(size, shape.getPoints().size());
shape.addPoint(pt);
assertEquals(shape.removePoint(shape.getPoints().size() - 1), pt);
assertEquals(size, shape.getPoints().size());
shape.addPoint(pt, 0);
assertEquals(shape.removePoint(0), pt);
assertEquals(size, shape.getPoints().size());
}
@Test
public void testSetPoint() {
IPoint pt = ShapeFactory.INST.createPoint(1, 0);
shape.getPoints().clear();
shape.addPoint(pt);
assertFalse(shape.setPoint(ShapeFactory.INST.createPoint(), -2));
assertFalse(shape.setPoint(ShapeFactory.INST.createPoint(), Integer.MIN_VALUE));
assertFalse(shape.setPoint(ShapeFactory.INST.createPoint(), Integer.MAX_VALUE));
assertFalse(shape.setPoint(ShapeFactory.INST.createPoint(0, Double.NaN), 0));
assertFalse(shape.setPoint(ShapeFactory.INST.createPoint(Double.NaN, 0), 0));
assertFalse(shape.setPoint(ShapeFactory.INST.createPoint(Double.POSITIVE_INFINITY, 0), 0));
assertFalse(shape.setPoint(ShapeFactory.INST.createPoint(0, Double.POSITIVE_INFINITY), 0));
assertFalse(shape.setPoint(ShapeFactory.INST.createPoint(Double.POSITIVE_INFINITY, 0), 0));
assertFalse(shape.setPoint(ShapeFactory.INST.createPoint(0, Double.POSITIVE_INFINITY), 0));
assertTrue(shape.setPoint(ShapeFactory.INST.createPoint(10, 12), 0));
assertEqualsDouble(10., pt.getX());
assertEqualsDouble(12., pt.getY());
}
@Test
public void testSetPoint2() {
IPoint pt = ShapeFactory.INST.createPoint(1, 0);
shape.getPoints().clear();
shape.addPoint(pt);
assertFalse(shape.setPoint(0, 0, -2));
assertFalse(shape.setPoint(0, 0, Integer.MIN_VALUE));
assertFalse(shape.setPoint(0, 0, Integer.MAX_VALUE));
assertFalse(shape.setPoint(0, Double.NaN, 0));
assertFalse(shape.setPoint(Double.NaN, 0, 0));
assertFalse(shape.setPoint(Double.NEGATIVE_INFINITY, 0, 0));
assertFalse(shape.setPoint(0, Double.NEGATIVE_INFINITY, 0));
assertFalse(shape.setPoint(Double.POSITIVE_INFINITY, 0, 0));
assertFalse(shape.setPoint(0, Double.POSITIVE_INFINITY, 0));
assertTrue(shape.setPoint(10, 12, 0));
assertEqualsDouble(10., pt.getX());
assertEqualsDouble(12., pt.getY());
}
@Test
public void testReplacePoint() {
IPoint pt1 = ShapeFactory.INST.createPoint(2, 0);
IPoint pt2 = ShapeFactory.INST.createPoint(2, 1);
IPoint pt3 = ShapeFactory.INST.createPoint(2, 2);
IPoint pt4 = ShapeFactory.INST.createPoint(2, 3);
shape.getPoints().clear();
shape.addPoint(pt1);
shape.addPoint(pt2);
shape.addPoint(pt3);
assertNull(shape.replacePoint(null, 0));
assertNull(shape.replacePoint(pt2, 0));
assertEquals(pt1, shape.replacePoint(pt4, 0));
assertEquals(0, shape.getPoints().indexOf(pt4));
assertEquals(pt3, shape.replacePoint(pt1, -1));
assertEquals(shape.getPoints().size() - 1, shape.getPoints().indexOf(pt1));
assertEquals(pt1, shape.replacePoint(pt3, shape.getPoints().size() - 1));
assertEquals(shape.getPoints().size() - 1, shape.getPoints().indexOf(pt3));
}
@Override
@Test
public void testGetTopLeftPoint() {
IPoint pt1 = ShapeFactory.INST.createPoint(0, 0);
IPoint pt2 = ShapeFactory.INST.createPoint(2, 0);
IPoint pt3 = ShapeFactory.INST.createPoint(2, 2);
IPoint pt4 = ShapeFactory.INST.createPoint(0, 2);
assertNotNull(shape.getTopLeftPoint());
shape.getPoints().clear();
assertNotNull(shape.getTopLeftPoint());
shape.addPoint(pt1);
shape.addPoint(pt2);
shape.addPoint(pt3);
shape.addPoint(pt4);
assertTrue(shape.getTopLeftPoint().equals(pt1));
}
@Override
@Test
public void testGetTopRightPoint() {
IPoint pt1 = ShapeFactory.INST.createPoint(0, 0);
IPoint pt2 = ShapeFactory.INST.createPoint(2, 0);
IPoint pt3 = ShapeFactory.INST.createPoint(2, 2);
IPoint pt4 = ShapeFactory.INST.createPoint(0, 2);
assertNotNull(shape.getTopRightPoint());
shape.getPoints().clear();
assertNotNull(shape.getTopRightPoint());
shape.addPoint(pt1);
shape.addPoint(pt2);
shape.addPoint(pt3);
shape.addPoint(pt4);
assertTrue(shape.getTopRightPoint().equals(pt2));
}
@Override
@Test
public void testGetBottomRightPoint() {
IPoint pt1 = ShapeFactory.INST.createPoint(0, 0);
IPoint pt2 = ShapeFactory.INST.createPoint(2, 0);
IPoint pt3 = ShapeFactory.INST.createPoint(2, 2);
IPoint pt4 = ShapeFactory.INST.createPoint(0, 2);
assertNotNull(shape.getBottomRightPoint());
shape.getPoints().clear();
assertNotNull(shape.getBottomRightPoint());
shape.addPoint(pt1);
shape.addPoint(pt2);
shape.addPoint(pt3);
shape.addPoint(pt4);
assertTrue(shape.getBottomRightPoint().equals(pt3));
}
@Override
@Test
public void testGetBottomLeftPoint() {
IPoint pt1 = ShapeFactory.INST.createPoint(0, 0);
IPoint pt2 = ShapeFactory.INST.createPoint(2, 0);
IPoint pt3 = ShapeFactory.INST.createPoint(2, 2);
IPoint pt4 = ShapeFactory.INST.createPoint(0, 2);
assertNotNull(shape.getBottomLeftPoint());
shape.getPoints().clear();
assertNotNull(shape.getBottomLeftPoint());
shape.addPoint(pt1);
shape.addPoint(pt2);
shape.addPoint(pt3);
shape.addPoint(pt4);
assertTrue(shape.getBottomLeftPoint().equals(pt4));
}
}