/* * Copyright (C) 2015 Orange * * This software is distributed under the terms and conditions of the 'GNU GENERAL PUBLIC LICENSE * Version 2' license which can be found in the file 'LICENSE.txt' in this package distribution or * at 'http://www.gnu.org/licenses/gpl-2.0-standalone.html'. */ package com.orange.cepheus.geo; import com.espertech.esper.client.EPServiceProvider; import com.espertech.esper.client.EPServiceProviderManager; import com.orange.cepheus.cep.Application; import com.vividsolutions.jts.geom.Coordinate; import com.vividsolutions.jts.geom.Point; import com.vividsolutions.jts.geom.Polygon; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.SpringApplicationConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import static org.hamcrest.CoreMatchers.instanceOf; import static org.junit.Assert.*; /** * Test the Geospatial features for esper */ @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = Application.class) public class GeospatialTest { private EPServiceProvider epService; /** * Inject Geospatial features in esper's configuration */ @Before public void setUp() { com.espertech.esper.client.Configuration configuration = new com.espertech.esper.client.Configuration(); Geospatial.registerConfiguration(configuration); epService = EPServiceProviderManager.getDefaultProvider(configuration); } @Test public void testGeometryTypeVariable() { epService.getEPAdministrator().createEPL("create variable Geometry test"); } @Test public void testPointMethod() { epService.getEPAdministrator().createEPL("create variable Geometry pointVar = point(1.1, 2.2)"); Object value = epService.getEPRuntime().getVariableValue("pointVar"); assertNotNull(value); assertThat(value, instanceOf(Point.class)); Point point = (Point)value; assertEquals(1.1, point.getCoordinate().getOrdinate(Coordinate.X), 0.001); assertEquals(2.2, point.getCoordinate().getOrdinate(Coordinate.Y), 0.001); } @Test public void testPolyMethod() { epService.getEPAdministrator().createEPL("create variable Geometry polyVar = polygon({point(0, 0), point(0, 50), point(50, 50), point(50, 0), point(0, 0)})"); Object value = epService.getEPRuntime().getVariableValue("polyVar"); assertNotNull(value); assertThat(value, instanceOf(Polygon.class)); Polygon poly = (Polygon)value; assertEquals(0, poly.getCoordinates()[0].getOrdinate(Coordinate.X), 0.001); assertEquals(0, poly.getCoordinates()[0].getOrdinate(Coordinate.Y), 0.001); assertEquals(0, poly.getCoordinates()[1].getOrdinate(Coordinate.X), 0.001); assertEquals(50, poly.getCoordinates()[1].getOrdinate(Coordinate.Y), 0.001); assertEquals(50, poly.getCoordinates()[2].getOrdinate(Coordinate.X), 0.001); assertEquals(50, poly.getCoordinates()[2].getOrdinate(Coordinate.Y), 0.001); assertEquals(50, poly.getCoordinates()[3].getOrdinate(Coordinate.X), 0.001); assertEquals(0, poly.getCoordinates()[3].getOrdinate(Coordinate.Y), 0.001); } @Test public void testGeometryMethod() { epService.getEPAdministrator().createEPL("create variable Geometry geoVar = geometry(\"POLYGON((20 10, 30 0, 40 10, 30 20, 20 10))\")"); Object value = epService.getEPRuntime().getVariableValue("geoVar"); assertNotNull(value); assertThat(value, instanceOf(Polygon.class)); Polygon poly = (Polygon)value; assertEquals(20, poly.getCoordinates()[0].getOrdinate(Coordinate.X), 0.001); assertEquals(10, poly.getCoordinates()[0].getOrdinate(Coordinate.Y), 0.001); assertEquals(30, poly.getCoordinates()[1].getOrdinate(Coordinate.X), 0.001); assertEquals(0, poly.getCoordinates()[1].getOrdinate(Coordinate.Y), 0.001); assertEquals(40, poly.getCoordinates()[2].getOrdinate(Coordinate.X), 0.001); assertEquals(10, poly.getCoordinates()[2].getOrdinate(Coordinate.Y), 0.001); assertEquals(30, poly.getCoordinates()[3].getOrdinate(Coordinate.X), 0.001); assertEquals(20, poly.getCoordinates()[3].getOrdinate(Coordinate.Y), 0.001); assertEquals(20, poly.getCoordinates()[4].getOrdinate(Coordinate.X), 0.001); assertEquals(10, poly.getCoordinates()[4].getOrdinate(Coordinate.Y), 0.001); } }