package org.eclipse.gef.mvc.tests.fx;
import static org.junit.Assert.assertEquals;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.eclipse.gef.common.collections.CollectionUtils;
import org.eclipse.gef.fx.nodes.Connection;
import org.eclipse.gef.geometry.planar.Dimension;
import org.eclipse.gef.geometry.planar.Point;
import org.eclipse.gef.geometry.planar.Rectangle;
import org.eclipse.gef.mvc.fx.parts.AbstractContentPart;
import org.eclipse.gef.mvc.fx.parts.IBendableContentPart;
import org.eclipse.gef.mvc.fx.parts.IBendableContentPart.BendPoint;
import org.junit.Test;
import com.google.common.collect.SetMultimap;
import javafx.scene.transform.Affine;
import javafx.scene.transform.Translate;
public class BendableTests {
private static class Bendable extends AbstractContentPart<Connection> implements IBendableContentPart<Connection> {
private List<BendPoint> contentBendPoints = new ArrayList<>();
public Bendable(Point... points) {
for (Point p : points) {
contentBendPoints.add(new BendPoint(p));
}
}
@Override
protected Connection doCreateVisual() {
return new Connection();
}
@Override
protected SetMultimap<? extends Object, String> doGetContentAnchorages() {
return CollectionUtils.emptySetMultimap();
}
@Override
protected List<? extends Object> doGetContentChildren() {
return Collections.emptyList();
}
@Override
protected void doRefreshVisual(Connection visual) {
}
@Override
public List<org.eclipse.gef.mvc.fx.parts.IBendableContentPart.BendPoint> getContentBendPoints() {
return contentBendPoints;
}
@Override
public void setContentBendPoints(List<org.eclipse.gef.mvc.fx.parts.IBendableContentPart.BendPoint> bendPoints) {
contentBendPoints = bendPoints;
}
}
@Test
public void test_resize() {
Point start = new Point(0, 0);
Point end = new Point(100, 50);
Bendable bendable = new Bendable(start, end);
// check content bend points
List<BendPoint> contentBendPoints = bendable.getContentBendPoints();
assertEquals(start, contentBendPoints.get(0).getPosition());
assertEquals(end, contentBendPoints.get(1).getPosition());
// check size
Dimension contentSize = bendable.getContentSize();
assertEquals(new Rectangle(start, end).getSize(), contentSize);
// check transform (should equal translation to offset)
Point contentOffset = new Point(bendable.getContentTransform().getTx(), bendable.getContentTransform().getTy());
assertEquals(start, contentOffset);
// check resize
Point newEnd = end.getTranslated(0, 50);
Rectangle newBounds = new Rectangle(start, newEnd);
bendable.setContentSize(newBounds.getSize());
assertEquals(newBounds.getSize(), bendable.getContentSize());
// check content offset did not change
contentOffset = new Point(bendable.getContentTransform().getTx(), bendable.getContentTransform().getTy());
assertEquals(start, contentOffset);
}
@Test
public void test_translate() {
Point start = new Point(0, 0);
Point end = new Point(100, 50);
Bendable bendable = new Bendable(start, end);
// check content bend points
List<BendPoint> contentBendPoints = bendable.getContentBendPoints();
assertEquals(start, contentBendPoints.get(0).getPosition());
assertEquals(end, contentBendPoints.get(1).getPosition());
// check size
Dimension contentSize = bendable.getContentSize();
assertEquals(new Rectangle(start, end).getSize(), contentSize);
// check transform (should equal translation to offset)
Point contentOffset = new Point(bendable.getContentTransform().getTx(), bendable.getContentTransform().getTy());
assertEquals(start, contentOffset);
// apply translation
Point newStart = start.getTranslated(20, 50);
Point newEnd = end.getTranslated(20, 50);
Rectangle newBounds = new Rectangle(newStart, newEnd);
bendable.setContentTransform(new Affine(new Translate(newStart.x, newStart.y)));
assertEquals(newBounds.getSize(), bendable.getContentSize());
contentOffset = new Point(bendable.getContentTransform().getTx(), bendable.getContentTransform().getTy());
assertEquals(newStart, contentOffset);
}
}