/*******************************************************************************
* Copyright (c) 2014, 2016 itemis AG and others.
*
* 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:
* Alexander Nyßen (itemis AG) - initial API and implementation
*
*******************************************************************************/
package org.eclipse.gef.fx.tests;
import static org.junit.Assert.assertEquals;
import java.util.Arrays;
import java.util.List;
import org.eclipse.gef.fx.anchors.IAnchor;
import org.eclipse.gef.fx.anchors.StaticAnchor;
import org.eclipse.gef.fx.nodes.Connection;
import org.eclipse.gef.fx.nodes.GeometryNode;
import org.eclipse.gef.geometry.planar.ICurve;
import org.eclipse.gef.geometry.planar.Point;
import org.junit.Test;
public class ConnectionTests {
@Test
public void controlPoints() throws IllegalArgumentException, IllegalAccessException {
Connection connection = new Connection();
Point startPoint = new Point(123, 456);
Point endPoint = new Point(456, 789);
connection.setStartPoint(startPoint);
connection.setEndPoint(endPoint);
connection.addControlPoint(0, new Point(50, 50));
assertEquals(new Point(123, 456), connection.getStartPoint());
assertEquals(new Point(456, 789), connection.getEndPoint());
assertEquals(new Point(50, 50), connection.getControlPoint(0));
connection.addControlPoint(0, new Point(100, 100));
assertEquals(new Point(123, 456), connection.getStartPoint());
assertEquals(new Point(456, 789), connection.getEndPoint());
assertEquals(new Point(100, 100), connection.getControlPoint(0));
assertEquals(new Point(50, 50), connection.getControlPoint(1));
connection.addControlPoint(1, new Point(150, 150));
assertEquals(new Point(123, 456), connection.getStartPoint());
assertEquals(new Point(456, 789), connection.getEndPoint());
assertEquals(new Point(100, 100), connection.getControlPoint(0));
assertEquals(new Point(150, 150), connection.getControlPoint(1));
assertEquals(new Point(50, 50), connection.getControlPoint(2));
connection.addControlPoint(1, new Point(200, 200));
assertEquals(new Point(123, 456), connection.getStartPoint());
assertEquals(new Point(456, 789), connection.getEndPoint());
assertEquals(new Point(100, 100), connection.getControlPoint(0));
assertEquals(new Point(200, 200), connection.getControlPoint(1));
assertEquals(new Point(150, 150), connection.getControlPoint(2));
assertEquals(new Point(50, 50), connection.getControlPoint(3));
connection.removeControlPoint(1);
assertEquals(new Point(123, 456), connection.getStartPoint());
assertEquals(new Point(456, 789), connection.getEndPoint());
assertEquals(new Point(100, 100), connection.getControlPoint(0));
assertEquals(new Point(150, 150), connection.getControlPoint(1));
assertEquals(new Point(50, 50), connection.getControlPoint(2));
connection.setStartPoint(new Point(654, 321));
connection.setEndPoint(new Point(987, 654));
assertEquals(new Point(654, 321), connection.getStartPoint());
assertEquals(new Point(987, 654), connection.getEndPoint());
assertEquals(new Point(100, 100), connection.getControlPoint(0));
assertEquals(new Point(150, 150), connection.getControlPoint(1));
assertEquals(new Point(50, 50), connection.getControlPoint(2));
connection.setControlPoint(1, new Point(47, 11));
assertEquals(new Point(654, 321), connection.getStartPoint());
assertEquals(new Point(987, 654), connection.getEndPoint());
assertEquals(new Point(100, 100), connection.getControlPoint(0));
assertEquals(new Point(47, 11), connection.getControlPoint(1));
assertEquals(new Point(50, 50), connection.getControlPoint(2));
connection.setControlPoints(Arrays.asList(new Point(1, 1), new Point(2, 2)));
assertEquals(2, connection.getControlPoints().size());
assertEquals(new Point(1, 1), connection.getControlPoint(0));
assertEquals(new Point(2, 2), connection.getControlPoint(1));
connection.setEndAnchor(new StaticAnchor(connection, new Point(50, 50)));
assertEquals(new Point(50, 50), connection.getEndPoint());
connection.setControlAnchor(0, new StaticAnchor(connection, new Point(22, 22)));
assertEquals(new Point(22, 22), connection.getControlPoint(0));
assertEquals(2, connection.getControlAnchors().size());
assertEquals(2, connection.getControlPoints().size());
}
@Test
public void exchangeCurve() {
// setup connection with start, control, end points
Connection connection = new Connection();
Point startPoint = new Point(123, 456);
Point endPoint = new Point(456, 789);
connection.setStartPoint(startPoint);
connection.setEndPoint(endPoint);
Point controlPoint = new Point(50, 50);
connection.addControlPoint(0, controlPoint);
// exchange curve
connection.setCurve(new GeometryNode<ICurve>());
assertEquals(startPoint, connection.getStartPoint());
assertEquals(endPoint, connection.getEndPoint());
assertEquals(controlPoint, connection.getControlPoint(0));
// change control point
Point newControlPoint = new Point(10, 20);
connection.setControlPoint(0, newControlPoint);
assertEquals(newControlPoint, connection.getControlPoint(0));
// change start and end points
Point newStartPoint = new Point(12, 34);
connection.setStartPoint(newStartPoint);
assertEquals(newStartPoint, connection.getStartPoint());
Point newEndPoint = new Point(56, 78);
connection.setEndPoint(newEndPoint);
assertEquals(newEndPoint, connection.getEndPoint());
}
@Test
public void pointConversions() {
Point startPoint = new Point(123, 456);
Point wayPoint = new Point(789, 123);
Point endPoint = new Point(456, 789);
Connection connection = new Connection();
// ensure the local coordinate system of the curve node differs from
// that of the connection
connection.getCurve().setTranslateX(5);
connection.getCurve().setTranslateY(5);
connection.setStartPoint(startPoint);
connection.addControlPoint(0, wayPoint);
connection.setEndPoint(endPoint);
List<Point> points = connection.getPointsUnmodifiable();
List<IAnchor> anchors = connection.getAnchorsUnmodifiable();
assertEquals(3, points.size());
assertEquals(3, anchors.size());
assertEquals(startPoint, connection.getStartPoint());
assertEquals(wayPoint, connection.getControlPoint(0));
assertEquals(endPoint, connection.getEndPoint());
assertEquals(startPoint, points.get(0));
assertEquals(wayPoint, points.get(1));
assertEquals(endPoint, points.get(2));
// check positions are still valid after changing translation
connection.getCurve().setTranslateX(50);
connection.getCurve().setTranslateY(50);
assertEquals(3, points.size());
assertEquals(3, anchors.size());
assertEquals(startPoint, connection.getStartPoint());
assertEquals(wayPoint, connection.getControlPoint(0));
assertEquals(endPoint, connection.getEndPoint());
assertEquals(startPoint, points.get(0));
assertEquals(wayPoint, points.get(1));
assertEquals(endPoint, points.get(2));
}
}