/*
* This is part of Geomajas, a GIS framework, http://www.geomajas.org/.
*
* Copyright 2008-2015 Geosparc nv, http://www.geosparc.com/, Belgium.
*
* The program is available in open source according to the GNU Affero
* General Public License. All contributions in this program are covered
* by the Geomajas Contributors License Agreement. For full licensing
* details, see LICENSE.txt in the project root.
*/
package org.geomajas.gwt.client.spatial;
import junit.framework.Assert;
import org.geomajas.geometry.Coordinate;
import org.junit.Test;
/**
* Tests the Bbox methods.
*
* @author Pieter De Graef
*/
public class BboxTest {
private Bbox empty = new Bbox(0, 0, 0, 0);
private Bbox origin = new Bbox(0, 0, 10, 10);
private Bbox movedEmpty = new Bbox(-10, -10, 0, 0);
private Bbox movedEmpty2 = new Bbox(5, 5, 0, 0);
private Bbox normal = new Bbox(-5, -5, 20, 20);
@Test
public void testGetCenterPoint() {
Coordinate c = empty.getCenterPoint();
Assert.assertEquals(c.getX(), 0.0);
Assert.assertEquals(c.getY(), 0.0);
c = origin.getCenterPoint();
Assert.assertEquals(c.getX(), 5.0);
Assert.assertEquals(c.getY(), 5.0);
c = movedEmpty.getCenterPoint();
Assert.assertEquals(c.getX(), -10.0);
Assert.assertEquals(c.getY(), -10.0);
c = normal.getCenterPoint();
Assert.assertEquals(c.getX(), 5.0);
Assert.assertEquals(c.getY(), 5.0);
}
@Test
public void testUnion() {
// Result should equal empty:
Bbox union = empty.union(empty);
Assert.assertTrue(union.equals(empty, 0.00001));
// Result should equal origin:
union = empty.union(origin);
Assert.assertTrue(union.equals(origin, 0.00001));
// Result should equal origin:
union = origin.union(empty);
Assert.assertTrue(union.equals(origin, 0.00001));
// Result should equal movedEmpty:
union = movedEmpty.union(empty);
Assert.assertTrue(union.equals(movedEmpty, 0.00001));
// Result should equal movedEmpty:
union = empty.union(movedEmpty);
Assert.assertTrue(union.equals(movedEmpty, 0.00001));
union = movedEmpty.union(origin);
Assert.assertEquals(union.getX(), -10.0);
Assert.assertEquals(union.getWidth(), 20.0);
Assert.assertEquals(union.getY(), -10.0);
Assert.assertEquals(union.getHeight(), 20.0);
union = origin.union(movedEmpty);
Assert.assertEquals(union.getX(), -10.0);
Assert.assertEquals(union.getWidth(), 20.0);
Assert.assertEquals(union.getY(), -10.0);
Assert.assertEquals(union.getHeight(), 20.0);
union = movedEmpty.union(movedEmpty2);
Assert.assertEquals(union.getX(), -10.0);
Assert.assertEquals(union.getWidth(), 15.0);
Assert.assertEquals(union.getY(), -10.0);
Assert.assertEquals(union.getHeight(), 15.0);
union = movedEmpty.union(normal);
Assert.assertEquals(union.getX(), -10.0);
Assert.assertEquals(union.getWidth(), 25.0);
Assert.assertEquals(union.getY(), -10.0);
Assert.assertEquals(union.getHeight(), 25.0);
}
@Test
public void testBuffer() {
Bbox buffer = empty.buffer(10);
Assert.assertEquals(buffer.getX(), -10.0);
Assert.assertEquals(buffer.getWidth(), 20.0);
Assert.assertEquals(buffer.getY(), -10.0);
Assert.assertEquals(buffer.getHeight(), 20.0);
}
@Test
public void testIntersection() {
Bbox intersection = empty.intersection(empty);
Assert.assertTrue(intersection.equals(empty, 0.00001));
intersection = empty.intersection(origin);
Assert.assertTrue(intersection.equals(empty, 0.00001));
intersection = origin.intersection(empty);
Assert.assertTrue(intersection.equals(empty, 0.00001));
intersection = empty.intersection(movedEmpty);
Assert.assertNull(intersection);
intersection = movedEmpty.intersection(empty);
Assert.assertNull(intersection);
intersection = normal.intersection(origin);
Assert.assertEquals(intersection.getX(), 0.0);
Assert.assertEquals(intersection.getWidth(), 10.0);
Assert.assertEquals(intersection.getY(), 0.0);
Assert.assertEquals(intersection.getHeight(), 10.0);
}
@Test
public void intersects() {
Assert.assertTrue(empty.intersects(empty));
Assert.assertTrue(empty.intersects(origin));
Assert.assertTrue(origin.intersects(empty));
Assert.assertFalse(empty.intersects(movedEmpty));
Assert.assertFalse(movedEmpty.intersects(empty));
Assert.assertTrue(normal.intersects(origin));
}
@Test
public void contains() {
Assert.assertTrue(normal.intersects(empty));
}
/**
* Test contains method of Bbox for a point (coordinate) parameter.
*/
@Test
public void testContainsPoint() {
testContainsPointWithParams(-5.0, -5.0, 20.0, 10.0, 1E-9);
}
private void testContainsPointWithParams(double minX, double minY,
double width, double height, double minimal) {
Bbox bbox = new Bbox(minX, minY, width, height);
Assert.assertTrue(bbox.contains(new Coordinate(0.0, 0.0)));
Assert.assertTrue(bbox.contains(new Coordinate(minX + minimal, minY + minimal)));
Assert.assertTrue(bbox.contains(new Coordinate(minX, minY)));
Assert.assertTrue(bbox.contains(new Coordinate(minX + width - minimal,
minY + minimal)));
Assert.assertTrue(bbox.contains(new Coordinate(minX + width, minY)));
Assert.assertTrue(bbox.contains(new Coordinate(minX + minimal, minY + height - minimal)));
Assert.assertTrue(bbox.contains(new Coordinate(minX, minY + height)));
Assert.assertTrue(bbox.contains(new Coordinate(minX + width - minimal,
minY + height - minimal)));
Assert.assertTrue(bbox.contains(new Coordinate(minX + width,
minY + height)));
Assert.assertFalse(bbox.contains(new Coordinate(minX - 10.0, minY - 10.0)));
Assert.assertFalse(bbox.contains(new Coordinate(minX + width + 10.0, minY + height + 10.0)));
Assert.assertFalse(bbox.contains(new Coordinate(minX - minimal, 1.0)));
Assert.assertFalse(bbox.contains(new Coordinate(0.0, minY - minimal)));
Assert.assertFalse(bbox.contains(new Coordinate(minX + minimal, minY + height + minimal)));
Assert.assertFalse(bbox.contains(new Coordinate(minX + width - minimal, minY - minimal)));
}
}