/*******************************************************************************
* Copyright (c) 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 org.eclipse.gef.fx.nodes.GeometryNode;
import org.eclipse.gef.geometry.planar.Polyline;
import org.eclipse.gef.geometry.planar.RoundedRectangle;
import org.junit.Test;
import javafx.scene.paint.Color;
import javafx.scene.shape.StrokeType;
public class GeometryNodeTests {
/**
* Ensures setting/resizing the geometry will resize the visuals
*/
@Test
public void resizeOnGeometryChange() {
GeometryNode<RoundedRectangle> n = new GeometryNode<>();
n.setFill(Color.RED);
n.setStrokeWidth(5);
n.setStrokeType(StrokeType.OUTSIDE);
n.setGeometry(new RoundedRectangle(30, 40, 30, 40, 20, 20));
assertEquals(n.getGeometry().getBounds().getWidth(), 30, 0);
assertEquals(n.getGeometry().getBounds().getHeight(), 40, 0);
assertEquals(40.0, n.getWidth(), 0);
assertEquals(50.0, n.getHeight(), 0);
assertEquals(25, n.getLayoutX(), 0);
assertEquals(35, n.getLayoutY(), 0);
assertEquals(30, n.getGeometry().getBounds().getX(), 0);
assertEquals(40, n.getGeometry().getBounds().getY(), 0);
n.resizeGeometry(50, 60);
assertEquals(n.getGeometry().getBounds().getWidth(), 50, 0);
assertEquals(n.getGeometry().getBounds().getHeight(), 60, 0);
assertEquals(60.0, n.getWidth(), 0);
assertEquals(70.0, n.getHeight(), 0);
assertEquals(25, n.getLayoutX(), 0);
assertEquals(35, n.getLayoutY(), 0);
assertEquals(30, n.getGeometry().getBounds().getX(), 0);
assertEquals(40, n.getGeometry().getBounds().getY(), 0);
}
/**
* Ensures setting/resizing the geometry will resize the visuals
*/
@Test
public void resizeGeometryOnResize() {
GeometryNode<RoundedRectangle> n = new GeometryNode<>();
n.setFill(Color.RED);
n.setStrokeWidth(5);
n.setStrokeType(StrokeType.OUTSIDE);
n.setGeometry(new RoundedRectangle(30, 40, 30, 40, 20, 20));
n.resize(30, 40);
assertEquals(n.getGeometry().getBounds().getWidth(), 20, 0);
assertEquals(n.getGeometry().getBounds().getHeight(), 30, 0);
assertEquals(30.0, n.getWidth(), 0);
assertEquals(40.0, n.getHeight(), 0);
assertEquals(25, n.getLayoutX(), 0);
assertEquals(35, n.getLayoutY(), 0);
assertEquals(30, n.getGeometry().getBounds().getX(), 0);
assertEquals(40, n.getGeometry().getBounds().getY(), 0);
}
@Test
public void resizePolylineNode(){
GeometryNode<Polyline> n = new GeometryNode<>();
//Polyline: (19.02538299560547, 30.438175201416016) -> (19.02538299560547, 108.58389282226562)
n.setGeometry(new Polyline(19.02538299560547, 30.438175201416016, 19.02538299560547, 108.58389282226562));
n.setStrokeWidth(3.5);
n.setStrokeType(StrokeType.CENTERED);
}
@Test
public void resizeRelocateOnStrokeWidthAndTypeChange() {
GeometryNode<RoundedRectangle> n = new GeometryNode<>();
n.setGeometry(new RoundedRectangle(30, 40, 30, 40, 20, 20));
assertEquals(29.5, n.getLayoutX(), 0);
assertEquals(39.5, n.getLayoutY(), 0);
assertEquals(30, n.getGeometry().getBounds().getX(), 0);
assertEquals(40, n.getGeometry().getBounds().getY(), 0);
n.setFill(Color.RED);
n.setStrokeWidth(5);
n.setStrokeType(StrokeType.OUTSIDE);
assertEquals(n.getGeometry().getBounds().getWidth(), 30, 0);
assertEquals(n.getGeometry().getBounds().getHeight(), 40, 0);
assertEquals(40.0, n.getWidth(), 0);
assertEquals(50.0, n.getHeight(), 0);
assertEquals(25, n.getLayoutX(), 0);
assertEquals(35, n.getLayoutY(), 0);
assertEquals(30, n.getGeometry().getBounds().getX(), 0);
assertEquals(40, n.getGeometry().getBounds().getY(), 0);
}
@Test
public void relocateOnGeometryChange(){
GeometryNode<RoundedRectangle> n = new GeometryNode<>();
n.setFill(Color.RED);
n.setStrokeWidth(5);
n.setStrokeType(StrokeType.OUTSIDE);
n.setGeometry(new RoundedRectangle(30, 40, 30, 40, 20, 20));
assertEquals(n.getGeometry().getBounds().getX(), 30, 0);
assertEquals(n.getGeometry().getBounds().getY(), 40, 0);
assertEquals(25.0, n.getLayoutX(), 0);
assertEquals(35.0, n.getLayoutY(), 0);
assertEquals(n.getGeometry().getBounds().getWidth(), 30, 0);
assertEquals(n.getGeometry().getBounds().getHeight(), 40, 0);
assertEquals(40.0, n.getWidth(), 0);
assertEquals(50.0, n.getHeight(), 0);
n.relocateGeometry(50, 60);
assertEquals(n.getGeometry().getBounds().getX(), 50, 0);
assertEquals(n.getGeometry().getBounds().getY(), 60, 0);
assertEquals(45.0, n.getLayoutX(), 0);
assertEquals(55.0, n.getLayoutY(), 0);
assertEquals(n.getGeometry().getBounds().getWidth(), 30, 0);
assertEquals(n.getGeometry().getBounds().getHeight(), 40, 0);
assertEquals(40.0, n.getWidth(), 0);
assertEquals(50.0, n.getHeight(), 0);
}
@Test
public void relocateGeometryOnRelocate(){
GeometryNode<RoundedRectangle> n = new GeometryNode<>();
n.setFill(Color.RED);
n.setStrokeWidth(5);
n.setStrokeType(StrokeType.OUTSIDE);
n.setGeometry(new RoundedRectangle(30, 40, 30, 40, 20, 20));
n.relocate(30, 40);
assertEquals(n.getGeometry().getBounds().getX(), 35, 0);
assertEquals(n.getGeometry().getBounds().getY(), 45, 0);
assertEquals(30.0, n.getLayoutX(), 0);
assertEquals(40.0, n.getLayoutY(), 0);
assertEquals(n.getGeometry().getBounds().getWidth(), 30, 0);
assertEquals(n.getGeometry().getBounds().getHeight(), 40, 0);
assertEquals(40.0, n.getWidth(), 0);
assertEquals(50.0, n.getHeight(), 0);
}
}