/*
* 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.jtslab.clean;
import junit.framework.TestCase;
import org.locationtech.jts.geom.Geometry;
import org.locationtech.jts.io.ParseException;
import org.locationtech.jts.io.WKTReader;
public class InvalidHoleRemoverTest extends TestCase {
private WKTReader reader = new WKTReader();
public InvalidHoleRemoverTest(String name) {
super(name);
}
public static void main(String[] args) {
junit.textui.TestRunner.run(InvalidHoleRemoverTest.class);
}
public void testNoHole() {
checkHolesRemoved("POLYGON ((1 9, 9 9, 9 1, 1 1, 1 9))",
"POLYGON ((1 9, 9 9, 9 1, 1 1, 1 9))");
}
public void testOneValid() {
checkHolesRemoved("POLYGON ((1 9, 9 9, 9 1, 1 1, 1 9), (5 5, 5 2, 8 2, 5 5))",
"POLYGON ((1 9, 9 9, 9 1, 1 1, 1 9), (5 5, 5 2, 8 2, 5 5))");
}
public void testOneOutside() {
checkHolesRemoved("POLYGON ((1 9, 9 9, 9 1, 1 1, 1 9), (11 5, 11 2, 14 2, 11 5))",
"POLYGON ((1 9, 9 9, 9 1, 1 1, 1 9))");
}
public void testOneValidOneOutside() {
checkHolesRemoved("POLYGON ((1 9, 9 9, 9 1, 1 1, 1 9), (11 5, 11 2, 14 2, 11 5), (2 5, 2 2, 5 2, 2 5))",
"POLYGON ((1 1, 1 9, 9 9, 9 1, 1 1), (2 2, 5 2, 2 5, 2 2))");
}
public void testOneOverlapping() {
checkHolesRemoved("POLYGON ((1 9, 9 9, 9 1, 1 1, 1 9), (2 5, 2 2, 12 2, 2 5))",
"POLYGON ((1 9, 9 9, 9 1, 1 1, 1 9))");
}
public void testOneOverlappingMP() {
checkHolesRemoved("MULTIPOLYGON (((1 9, 9 9, 9 1, 1 1, 1 9), (2 5, 2 2, 12 2, 2 5)), ((21 9, 25 9, 25 5, 21 5, 21 9)))",
"MULTIPOLYGON (((1 9, 9 9, 9 1, 1 1, 1 9)), ((21 9, 25 9, 25 5, 21 5, 21 9)))");
}
public void testOneOverlappingGC() {
checkHolesRemoved("GEOMETRYCOLLECTION (POLYGON ((1 9, 9 9, 9 1, 1 1, 1 9), (2 5, 2 2, 12 2, 2 5)), LINESTRING (15 9, 19 5))",
"GEOMETRYCOLLECTION (POLYGON ((1 9, 9 9, 9 1, 1 1, 1 9)), LINESTRING (15 9, 19 5))");
}
private void checkHolesRemoved(String inputWKT, String expectedWKT) {
Geometry input = read(inputWKT);
Geometry expected = read(expectedWKT);
Geometry actual = InvalidHoleRemover.clean(input);
checkEqual(expected, actual);
}
private void checkEqual(Geometry expected, Geometry actual) {
Geometry actualNorm = actual.norm();
boolean equal = actualNorm.equalsExact(expected.norm());
if (! equal) {
System.out.println("FAIL - Expected = " + expected
+ " actual = " + actual.norm());
}
assertTrue(equal);
}
private Geometry read(String wkt) {
try {
return reader.read(wkt);
} catch (ParseException e) {
throw new RuntimeException(e.getMessage());
}
}
}