/* * Copyright (c) 2016 Vivid Solutions. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompanies this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.locationtech.jts.simplify; import org.locationtech.jts.geom.Geometry; import org.locationtech.jts.io.WKTReader; import junit.framework.Assert; /** * Runs various validation tests on a the results of a geometry operation */ public class GeometryOperationValidator { private static WKTReader rdr = new WKTReader(); private Geometry[] ioGeometry; private boolean expectedSameStructure = false; private String wktExpected = null; public GeometryOperationValidator(Geometry[] ioGeometry) { this.ioGeometry = ioGeometry; } public GeometryOperationValidator setExpectedResult(String wktExpected) { this.wktExpected = wktExpected; return this; } public GeometryOperationValidator setExpectedSameStructure() { this.expectedSameStructure = true; return this; } public boolean isAllTestsPassed() { try { test(); } catch (Throwable e) { return false; } return true; } /** * Tests if the result is valid. * Throws an exception if result is not valid. * This allows chaining multiple tests together. * * @throws Exception if the result is not valid. */ public void test() throws Exception { testSameStructure(); testValid(); testExpectedResult(); } public GeometryOperationValidator testSameStructure() throws Exception { if (!expectedSameStructure) return this; Assert.assertTrue("simplified geometry has different structure than input", SameStructureTester.isSameStructure(ioGeometry[0], ioGeometry[1])); return this; } public GeometryOperationValidator testValid() throws Exception { Assert.assertTrue("simplified geometry is not valid", ioGeometry[1] .isValid()); return this; } public GeometryOperationValidator testEmpty(boolean isEmpty) throws Exception { String failureCondition = isEmpty ? "not empty" : "empty"; Assert.assertTrue("simplified geometry is " + failureCondition, ioGeometry[1].isEmpty() == isEmpty); return this; } private void testExpectedResult() throws Exception { if (wktExpected == null) return; Geometry expectedGeom = rdr.read(wktExpected); boolean isEqual = expectedGeom.equalsExact(ioGeometry[1]); if (! isEqual) { System.out.println("Result not expected: " + ioGeometry[1]); } Assert.assertTrue("Expected result not found",isEqual); } }