CitygmlParserTests.java 3.65 KB
Newer Older
1
package eu.simstadt.regionchooser.fast_xml_parser;
2

Eric Duminil's avatar
Eric Duminil committed
3
4
5
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
6
7
import java.nio.file.Path;
import java.nio.file.Paths;
Eric Duminil's avatar
Eric Duminil committed
8
import org.junit.jupiter.api.Test;
9
import com.ximpleware.XPathParseException;
10
11
import eu.simstadt.regionchooser.fast_xml_parser.BuildingXmlNode;
import eu.simstadt.regionchooser.fast_xml_parser.CityGmlIterator;
12
13
14
15


public class CitygmlParserTests
{
Matthias Betz's avatar
Matthias Betz committed
16
	private static final String REGION_CHOOSER_TESTDATA = "src/test/resources/testdata";
17
18
19
20
	private static final String COORDINATES_SHOULD_BE_PLAUSIBLE = "Min/Max Coordinates should be plausible";
	private static final String COORDINATE_SHOULD_BE_A_DOUBLE = "Coordinate should be a double";

	private void testNoNanInCoordinates(Path citygmlPath) throws XPathParseException {
21
22
		CityGmlIterator buildingXmlNodes = new CityGmlIterator(citygmlPath);
		for (BuildingXmlNode buildingXmlNode : buildingXmlNodes) {
Eric Duminil's avatar
Eric Duminil committed
23
24
25
26
27
28
29
30
31
32
33
			assertTrue(buildingXmlNode.hasCoordinates(), "Buildings should have coordinates");
			assertFalse(Double.isNaN(buildingXmlNode.x), COORDINATE_SHOULD_BE_A_DOUBLE);
			assertFalse(Double.isNaN(buildingXmlNode.y), COORDINATE_SHOULD_BE_A_DOUBLE);
			assertFalse(Double.isNaN(buildingXmlNode.xMax), COORDINATE_SHOULD_BE_A_DOUBLE);
			assertFalse(Double.isNaN(buildingXmlNode.yMax), COORDINATE_SHOULD_BE_A_DOUBLE);
			assertFalse(Double.isNaN(buildingXmlNode.xMin), COORDINATE_SHOULD_BE_A_DOUBLE);
			assertFalse(Double.isNaN(buildingXmlNode.yMin), COORDINATE_SHOULD_BE_A_DOUBLE);
			assertTrue(buildingXmlNode.xMax > buildingXmlNode.x, COORDINATES_SHOULD_BE_PLAUSIBLE);
			assertTrue(buildingXmlNode.yMax > buildingXmlNode.y, COORDINATES_SHOULD_BE_PLAUSIBLE);
			assertTrue(buildingXmlNode.xMin < buildingXmlNode.x, COORDINATES_SHOULD_BE_PLAUSIBLE);
			assertTrue(buildingXmlNode.yMin < buildingXmlNode.y, COORDINATES_SHOULD_BE_PLAUSIBLE);
34
35
36
37
		}
	}

	@Test
38
39
	public void testExtractCoordsFromStuttgart() throws XPathParseException {
		Path repo = Paths.get(REGION_CHOOSER_TESTDATA, "Stuttgart.proj");
40
		Path citygmlPath = repo.resolve("Stuttgart_LOD0_LOD1_buildings_and_trees.gml");
41
42
43
44
		testNoNanInCoordinates(citygmlPath);
	}

	@Test
45
46
	public void testExtractCoordsFromGruenbuehl() throws XPathParseException {
		Path repo = Paths.get(REGION_CHOOSER_TESTDATA, "Gruenbuehl.proj");
47
		Path citygmlPath = repo.resolve("20140218_Gruenbuehl_LOD2_1building.gml");
48
49
50
51
		testNoNanInCoordinates(citygmlPath);
	}

	@Test
52
53
	public void testExtractCoordsFromMunich() throws XPathParseException {
		Path repo = Paths.get(REGION_CHOOSER_TESTDATA, "Muenchen.proj");
54
		Path citygmlPath = repo.resolve("Munich_v_1_0_0.gml");
55
56
57
58
		testNoNanInCoordinates(citygmlPath);
	}

	@Test
59
60
	public void testExtractCoordsFromNYC() throws XPathParseException {
		Path repo = Paths.get(REGION_CHOOSER_TESTDATA, "NewYork.proj");
61
		Path citygmlPath = repo.resolve("ManhattanSmall.gml");
62
63
64
65
		testNoNanInCoordinates(citygmlPath);
	}

	@Test
66
67
	public void testExtractNoCoordsFromEmptyBuilding() throws XPathParseException {
		Path repo = Paths.get(REGION_CHOOSER_TESTDATA, "Stuttgart.proj");
68
		Path citygmlPath = repo.resolve("Stöckach_empty_buildings.gml");
69
70
71
		CityGmlIterator buildingXmlNodes = new CityGmlIterator(citygmlPath);
		int counter = 0;
		for (BuildingXmlNode buildingXmlNode : buildingXmlNodes) {
Eric Duminil's avatar
Eric Duminil committed
72
73
74
			assertFalse(buildingXmlNode.hasCoordinates(), "Empty Buildings shouldn't have coordinates");
			assertTrue(Double.isNaN(buildingXmlNode.x), "Coordinate should be a Nan");
			assertTrue(Double.isNaN(buildingXmlNode.y), "Coordinate should be a Nan");
75
76
			counter++;
		}
Eric Duminil's avatar
Eric Duminil committed
77
		assertEquals(3, counter, "3 buildings should have been analyzed");
78
79
	}
}