blob: 740c71f6919416a6d4892c7ca119501b106cacc3 [file] [log] [blame]
/******************************************************************************
* Copyright (c) 2005 IBM Corporation 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:
* IBM Corporation - initial API and implementation
****************************************************************************/
package org.eclipse.gmf.tests.runtime.draw2d.ui.internal.routers;
import java.util.ArrayList;
import java.util.List;
import junit.framework.TestCase;
import org.eclipse.draw2d.ChopboxAnchor;
import org.eclipse.draw2d.ConnectionAnchor;
import org.eclipse.draw2d.RectangleFigure;
import org.eclipse.draw2d.RelativeBendpoint;
import org.eclipse.draw2d.XYAnchor;
import org.eclipse.draw2d.geometry.Dimension;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.draw2d.geometry.PointList;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.gmf.runtime.draw2d.ui.internal.routers.ITreeConnection;
import org.eclipse.gmf.runtime.draw2d.ui.internal.routers.TreeRouter;
import org.eclipse.gmf.tests.runtime.draw2d.ui.internal.routers.AbstractForestRouterTest.TreeConnection;
/**
* @author sshaw
*
* Abstract BranchRouter test class.
*/
public class TreeRouterTest extends TestCase {
public TreeRouterTest(String name) {
super(name);
}
private TreeRouter treeRouter;
private TreeConnection conn1;
private TreeConnection conn2;
protected TreeConnection getConnection1() {
return conn1;
}
protected TreeConnection getConnection2() {
return conn2;
}
protected TreeRouter getTreeRouter() {
return treeRouter;
}
protected void setUp() {
try {
treeRouter = new TreeRouter();
RectangleFigure node1 = new RectangleFigure(), node2 = new RectangleFigure(),
node3 = new RectangleFigure();
ConnectionAnchor anchor = new ChopboxAnchor(node2);
conn1 = new TreeConnection();
conn1.setSourceAnchor(new ChopboxAnchor(node1));
conn1.setTargetAnchor(anchor);
conn1.setHint("tree1"); //$NON-NLS-1$
conn1.setConnectionRouter(treeRouter);
conn2 = new TreeConnection();
conn2.setSourceAnchor(new ChopboxAnchor(node3));
conn2.setTargetAnchor(anchor);
conn2.setHint("tree1"); //$NON-NLS-1$
conn2.setConnectionRouter(treeRouter);
getConnection1().setOrientation(ITreeConnection.Orientation.VERTICAL);
getConnection2().setOrientation(ITreeConnection.Orientation.VERTICAL);
} catch (Exception e) {
fail("The ForestRouterTest.setUp method caught an exception - " + e); //$NON-NLS-1$
}
}
Rectangle test1Other = new Rectangle(3900, 4906, 2200, 1300);
Rectangle test1Start = new Rectangle(9986, 5250, 2200, 1300);
Rectangle test1End = new Rectangle(6440, 831, 2200, 1300);
Dimension[] test1 = { new Dimension(-265, -635), new Dimension(3281, 3784),
new Dimension(-265, -2196), new Dimension(3281, 2223),
new Dimension(-3440, -2196), new Dimension(106, 2223),
new Dimension(-3440, -3784), new Dimension(106, 635)
};
Rectangle test2Start = new Rectangle(3995, 4974, 2593, 1246);
Rectangle test2End = new Rectangle(6535, 899, 2169, 1246);
Rectangle test2Other = new Rectangle(9986, 5250, 2200, 1300);
Dimension[] test2 = { new Dimension(-238, -635), new Dimension(-2778, 3440),
new Dimension(-238, -1852), new Dimension(-2778, 2223),
new Dimension(2434, -1852), new Dimension(-106, 2223),
new Dimension(2434, -3440), new Dimension(-106, 635)
};
public void testOrthogonalConstraint() {
List newConstraint = initializeConstraint(test1, test1Start, test1End, test1Other);
validateConstraint(newConstraint);
}
public void testRATLC00531806() {
List newConstraint = initializeConstraint(test2, test2Start, test2End, test2Other);
validateConstraint(newConstraint);
}
// test reorient of source
public void testRATLC00534189() {
List newConstraint = initializeConstraint(test1, test1Start, test1End, test1Other);
getConnection1().setSourceAnchor(new XYAnchor(new Point(100, 100)));
getTreeRouter().setConstraint(getConnection1(), newConstraint);
getTreeRouter().route(getConnection2());
getTreeRouter().route(getConnection1());
getTreeRouter().invalidate(getConnection1());
getTreeRouter().invalidate(getConnection2());
}
public void testMoveShape() {
List newConstraint = initializeConstraint(test1, test1Start, test1End, test1Other);
getTreeRouter().setConstraint(getConnection1(), newConstraint);
getTreeRouter().route(getConnection2());
getTreeRouter().route(getConnection1());
Rectangle newBounds = new Rectangle(test1Start);
newBounds.translate(4000, 4000);
getConnection1().getSourceAnchor().getOwner().setBounds(newBounds);
getTreeRouter().route(getConnection1());
getConnection2().validate();
PointList c1Pts = getConnection1().getPoints();
PointList c2Pts = getConnection2().getPoints();
assertTrue("Trunk values don't match after tree routing", //$NON-NLS-1$
c1Pts.getPoint(2).equals(c2Pts.getPoint(2)));
}
/**
* @param newConstraint
*/
private void validateConstraint(List newConstraint) {
getTreeRouter().setConstraint(getConnection1(), newConstraint);
PointList ptl1 = getTreeRouter().getPointsFromConstraint(getConnection1());
getTreeRouter().route(getConnection2());
getTreeRouter().route(getConnection1());
assertTrue("Connection1 points aren't orthogonal", //$NON-NLS-1$
getTreeRouter().isOrthogonalTreeBranch(getConnection1(), ptl1));
PointList c1Pts = getConnection1().getPoints();
PointList c2Pts = getConnection2().getPoints();
assertTrue("Connection2 points aren't orthogonal", //$NON-NLS-1$
getTreeRouter().isOrthogonalTreeBranch(getConnection2(), c2Pts));
assertTrue("Trunk values don't match after tree routing", //$NON-NLS-1$
c1Pts.getPoint(2).equals(c2Pts.getPoint(2)));
}
/**
* @param newConstraint
* @param dim
* @param pt1
* @param pt2
* @param pt3
*/
private List initializeConstraint(Dimension[] testData, Rectangle start, Rectangle end, Rectangle other) {
List newConstraint = new ArrayList(getConnection1().getPoints().size());
getConnection1().getSourceAnchor().getOwner().setBounds(start);
getConnection1().getTargetAnchor().getOwner().setBounds(end);
getConnection2().getSourceAnchor().getOwner().setBounds(other);
RelativeBendpoint rbp1 =
new RelativeBendpoint(getConnection1());
rbp1.setRelativeDimensions(
testData[0], testData[1]);
rbp1.setWeight(1 / ((float) 5));
newConstraint.add(rbp1);
RelativeBendpoint rbp2 =
new RelativeBendpoint(getConnection1());
rbp2.setRelativeDimensions(
testData[2], testData[3]);
rbp2.setWeight(2 / ((float) 5));
newConstraint.add(rbp2);
RelativeBendpoint rbp3 =
new RelativeBendpoint(getConnection1());
rbp3.setRelativeDimensions(
testData[4], testData[5]);
rbp3.setWeight(3 / ((float) 5));
newConstraint.add(rbp3);
RelativeBendpoint rbp4 =
new RelativeBendpoint(getConnection1());
rbp4.setRelativeDimensions(
testData[6], testData[7]);
rbp4.setWeight(4 / ((float) 5));
newConstraint.add(rbp4);
return newConstraint;
}
}