From b743fa3b01c83775122f8fbeb0092f1e5ac40d63 Mon Sep 17 00:00:00 2001 From: Riegel <alexander.riegel@hft-stuttgart.de> Date: Wed, 4 Dec 2024 13:56:44 +0100 Subject: [PATCH] Test: Add test for XML-validation of CityGmlArchive --- .../citydoctor2/ziploader/ZipTest.java | 15 ++ .../src/test/resources/validate.zip | Bin 0 -> 2683 bytes .../test/resources/validate/valCorrect.gml | 193 ++++++++++++++++++ .../src/test/resources/validate/valFaulty.gml | 192 +++++++++++++++++ 4 files changed, 400 insertions(+) create mode 100644 CityDoctorParent/Extensions/CityDoctorZipLoader/src/test/resources/validate.zip create mode 100644 CityDoctorParent/Extensions/CityDoctorZipLoader/src/test/resources/validate/valCorrect.gml create mode 100644 CityDoctorParent/Extensions/CityDoctorZipLoader/src/test/resources/validate/valFaulty.gml diff --git a/CityDoctorParent/Extensions/CityDoctorZipLoader/src/test/java/de/hft/stuttgart/citydoctor2/ziploader/ZipTest.java b/CityDoctorParent/Extensions/CityDoctorZipLoader/src/test/java/de/hft/stuttgart/citydoctor2/ziploader/ZipTest.java index ac73522..b933add 100644 --- a/CityDoctorParent/Extensions/CityDoctorZipLoader/src/test/java/de/hft/stuttgart/citydoctor2/ziploader/ZipTest.java +++ b/CityDoctorParent/Extensions/CityDoctorZipLoader/src/test/java/de/hft/stuttgart/citydoctor2/ziploader/ZipTest.java @@ -75,4 +75,19 @@ public class ZipTest { assertTrue(epsgs.isEmpty()); } + @Test + public void testValidation(){ + ParserConfiguration valConfig = new ParserConfiguration(8,true); + CityGmlArchive cgmlArch = CityGmlArchive.fromZipFile("src/test/resources/validate.zip", valConfig); + int faultyFiles = 0; + for (CityGmlZipEntry entry : cgmlArch.getEntries()) { + if (entry instanceof ErroneousEntry errEntry) { + assertTrue(entry.getFileName().matches("^valFaulty.gml$")); + assertEquals(ZipEntryErrorType.INVALID_CITY_GML_FILE, errEntry.getErrorType()); + faultyFiles++; + } + } + assertEquals(1, faultyFiles); + } + } diff --git a/CityDoctorParent/Extensions/CityDoctorZipLoader/src/test/resources/validate.zip b/CityDoctorParent/Extensions/CityDoctorZipLoader/src/test/resources/validate.zip new file mode 100644 index 0000000000000000000000000000000000000000..f09e946a9c7420535ab6e08669309d262c726f20 GIT binary patch literal 2683 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 Q=K%LUaTWjo4%%P+2}KlvkpKVy literal 0 HcmV?d00001 diff --git a/CityDoctorParent/Extensions/CityDoctorZipLoader/src/test/resources/validate/valCorrect.gml b/CityDoctorParent/Extensions/CityDoctorZipLoader/src/test/resources/validate/valCorrect.gml new file mode 100644 index 0000000..4671362 --- /dev/null +++ b/CityDoctorParent/Extensions/CityDoctorZipLoader/src/test/resources/validate/valCorrect.gml @@ -0,0 +1,193 @@ +<?xml version="1.0" encoding="utf-8"?> +<core:CityModel xmlns:core="http://www.opengis.net/citygml/2.0" xmlns:gen="http://www.opengis.net/citygml/generics/2.0" xmlns:bldg="http://www.opengis.net/citygml/building/2.0" xmlns:app="http://www.opengis.net/citygml/appearance/2.0" xmlns:dem="http://www.opengis.net/citygml/relief/2.0" xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/citygml/building/2.0 http://schemas.opengis.net/citygml/building/2.0/building.xsd http://www.opengis.net/citygml/appearance/2.0 http://schemas.opengis.net/citygml/appearance/2.0/appearance.xsd http://www.opengis.net/citygml/relief/2.0 http://schemas.opengis.net/citygml/relief/2.0/relief.xsd http://www.opengis.net/citygml/2.0 http://schemas.opengis.net/citygml/2.0/cityGMLBase.xsd http://www.opengis.net/citygml/generics/2.0 http://schemas.opengis.net/citygml/generics/2.0/generics.xsd"> + +<!-- +Einfaches Gebäude mit Grundriss 3m x 5m und Satteldach, Traufhöhe 3m, Firsthöhe 4,5m +Modelliert mit Begrenzungsflächen (eine Dachfläche, 4 Wandflächen, 1 Grundfläche), +die Gebäudegeometrie als Solid, der auf die Polygone der Begrenzungsflächen referenziert + +CityGML 2.0 + +Gebäudevolumen: 56,25 m3 + +10.5.2017 + +Author: V. Coors, HFT Stuttgart +Lizenz: +--> + + <core:cityObjectMember> + <bldg:Building gml:id="_Simple_BD.1"> + <bldg:lod2Solid> + <gml:Solid> + <gml:exterior> + <gml:CompositeSurface> + <gml:surfaceMember xlink:href="#_Simple_BD.1_PG.1"/> + <gml:surfaceMember xlink:href="#_Simple_BD.1_PG.2"/> + <gml:surfaceMember xlink:href="#_Simple_BD.1_PG.3"/> + <gml:surfaceMember xlink:href="#_Simple_BD.1_PG.4"/> + <gml:surfaceMember xlink:href="#_Simple_BD.1_PG.5"/> + <gml:surfaceMember xlink:href="#_Simple_BD.1_PG.6"/> + <gml:surfaceMember xlink:href="#_Simple_BD.1_PG.7"/> + </gml:CompositeSurface> + </gml:exterior> + </gml:Solid> + </bldg:lod2Solid> + <bldg:boundedBy> + <bldg:WallSurface gml:id="_Simple_BD.1_WallSurface_1"> + <bldg:lod2MultiSurface> + <gml:MultiSurface> + <gml:surfaceMember> + <gml:Polygon gml:id="_Simple_BD.1_PG.2"> + <gml:exterior> + <gml:LinearRing gml:id="_Simple_BD.1_PG.2_LR.1"> + <gml:posList srsDimension="3"> + 13.0 15.0 0.0 + 13.0 15.0 3.0 + 13.0 10.0 3.0 + 13.0 10.0 0.0 + 13.0 15.0 0.0 + </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </gml:surfaceMember> + </gml:MultiSurface> + </bldg:lod2MultiSurface> + </bldg:WallSurface> + </bldg:boundedBy> + <bldg:boundedBy> + <bldg:WallSurface gml:id="_Simple_BD.1_WallSurface_2"> + <bldg:lod2MultiSurface> + <gml:MultiSurface> + <gml:surfaceMember> + <gml:Polygon gml:id="_Simple_BD.1_PG.3"> + <gml:exterior> + <gml:LinearRing gml:id="_Simple_BD.1_PG.3_LR.1"> + <gml:posList srsDimension="3"> + 10.0 15.0 0.0 + 10.0 15.0 3.0 + 11.5 15.0 4.5 + 13.0 15.0 3.0 + 13.0 15.0 0.0 + 10.0 15.0 0.0 + </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </gml:surfaceMember> + </gml:MultiSurface> + </bldg:lod2MultiSurface> + </bldg:WallSurface> + </bldg:boundedBy> + <bldg:boundedBy> + <bldg:WallSurface gml:id="_Simple_BD.1_WallSurface_3"> + <bldg:lod2MultiSurface> + <gml:MultiSurface> + <gml:surfaceMember> + <gml:Polygon gml:id="_Simple_BD.1_PG.4"> + <gml:exterior> + <gml:LinearRing gml:id="_Simple_BD.1_PG.4_LR.1"> + <gml:posList srsDimension="3"> + 10.0 10.0 3.0 + 10.0 15.0 3.0 + 10.0 15.0 0.0 + 10.0 10.0 0.0 + 10.0 10.0 3.0 + </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </gml:surfaceMember> + </gml:MultiSurface> + </bldg:lod2MultiSurface> + </bldg:WallSurface> + </bldg:boundedBy> + <bldg:boundedBy> + <bldg:WallSurface gml:id="_Simple_BD.1_WallSurface_4"> + <bldg:lod2MultiSurface> + <gml:MultiSurface> + <gml:surfaceMember> + <gml:Polygon gml:id="_Simple_BD.1_PG.5"> + <gml:exterior> + <gml:LinearRing gml:id="_Simple_BD.1_PG.5_LR.1"> + <gml:posList srsDimension="3"> + 13.0 10.0 0.0 + 13.0 10.0 3.0 + 11.5 10.0 4.5 + 10.0 10.0 3.0 + 10.0 10.0 0.0 + 13.0 10.0 0.0 + </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </gml:surfaceMember> + </gml:MultiSurface> + </bldg:lod2MultiSurface> + </bldg:WallSurface> + </bldg:boundedBy> + <bldg:boundedBy> + <bldg:RoofSurface gml:id="_Simple_BD.1_RoofSurface_1"> + <bldg:lod2MultiSurface> + <gml:MultiSurface> + <gml:surfaceMember> + <gml:Polygon gml:id="_Simple_BD.1_PG.6"> + <gml:exterior> + <gml:LinearRing gml:id="_Simple_BD.1_PG.6_LR.1"> + <gml:posList srsDimension="3"> + 10.0 10.0 3.0 + 11.5 10.0 4.5 + 11.5 15.0 4.5 + 10.0 15.0 3.0 + 10.0 10.0 3.0 + </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </gml:surfaceMember> + <gml:surfaceMember> + <gml:Polygon gml:id="_Simple_BD.1_PG.7"> + <gml:exterior> + <gml:LinearRing gml:id="_Simple_BD.1_PG.7_LR.1"> + <gml:posList srsDimension="3"> + 11.5 10.0 4.5 + 13.0 10.0 3.0 + 13.0 15.0 3.0 + 11.5 15.0 4.5 + 11.5 10.0 4.5 + </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </gml:surfaceMember> + </gml:MultiSurface> + </bldg:lod2MultiSurface> + </bldg:RoofSurface> + </bldg:boundedBy> + <bldg:boundedBy> + <bldg:GroundSurface gml:id="_Simple_BD.1_GroundSurface_1"> + <bldg:lod2MultiSurface> + <gml:MultiSurface> + <gml:surfaceMember> + <gml:Polygon gml:id="_Simple_BD.1_PG.1"> + <gml:exterior> + <gml:LinearRing gml:id="_Simple_BD.1_PG.1_LR.1"> + <gml:posList srsDimension="3"> + 10.0 10.0 0.0 + 10.0 15.0 0.0 + 13.0 15.0 0.0 + 13.0 10.0 0.0 + 10.0 10.0 0.0 + </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </gml:surfaceMember> + </gml:MultiSurface> + </bldg:lod2MultiSurface> + </bldg:GroundSurface> + </bldg:boundedBy> + </bldg:Building> + </core:cityObjectMember> +</core:CityModel> \ No newline at end of file diff --git a/CityDoctorParent/Extensions/CityDoctorZipLoader/src/test/resources/validate/valFaulty.gml b/CityDoctorParent/Extensions/CityDoctorZipLoader/src/test/resources/validate/valFaulty.gml new file mode 100644 index 0000000..c0f068e --- /dev/null +++ b/CityDoctorParent/Extensions/CityDoctorZipLoader/src/test/resources/validate/valFaulty.gml @@ -0,0 +1,192 @@ +<?xml version="1.0" encoding="utf-8"?> +<core:CityModel xmlns:core="http://www.opengis.net/citygml/2.0" xmlns:gen="http://www.opengis.net/citygml/generics/2.0" xmlns:bldg="http://www.opengis.net/citygml/building/2.0" xmlns:app="http://www.opengis.net/citygml/appearance/2.0" xmlns:dem="http://www.opengis.net/citygml/relief/2.0" xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/citygml/building/2.0 http://schemas.opengis.net/citygml/building/2.0/building.xsd http://www.opengis.net/citygml/appearance/2.0 http://schemas.opengis.net/citygml/appearance/2.0/appearance.xsd http://www.opengis.net/citygml/relief/2.0 http://schemas.opengis.net/citygml/relief/2.0/relief.xsd http://www.opengis.net/citygml/2.0 http://schemas.opengis.net/citygml/2.0/cityGMLBase.xsd http://www.opengis.net/citygml/generics/2.0 http://schemas.opengis.net/citygml/generics/2.0/generics.xsd"> + +<!-- +Einfaches Gebäude mit Grundriss 3m x 5m und Satteldach, Traufhöhe 3m, Firsthöhe 4,5m +Modelliert mit Begrenzungsflächen (eine Dachfläche, 4 Wandflächen, 1 Grundfläche), +die Gebäudegeometrie als Solid, der auf die Polygone der Begrenzungsflächen referenziert + +CityGML 2.0 + +Gebäudevolumen: 56,25 m3 + +10.5.2017 + +Author: V. Coors, HFT Stuttgart +Lizenz: +--> + + <core:cityObjectMember> + <bldg:Building gml:id="_Simple_BD.1"> + <bldg:lod2Solid> + <gml:Solid> + <gml:exterior> + <gml:CompositeSurface> + <gml:surfaceMember xlink:href="#_Simple_BD.1_PG.1"/> + <gml:surfaceMember xlink:href="#_Simple_BD.1_PG.2"/> + <gml:surfaceMember xlink:href="#_Simple_BD.1_PG.3"/> + <gml:surfaceMember xlink:href="#_Simple_BD.1_PG.4"/> + <gml:surfaceMember xlink:href="#_Simple_BD.1_PG.5"/> + <gml:surfaceMember xlink:href="#_Simple_BD.1_PG.6"/> + <gml:surfaceMember xlink:href="#_Simple_BD.1_PG.7"/> + </gml:CompositeSurface> + </gml:exterior> + </gml:Solid> + </bldg:lod2Solid> + <bldg:boundedBy> + <bldg:WallSurface gml:id="_Simple_BD.1_WallSurface_1"> + <bldg:lod2MultiSurface> + <gml:MultiSurface> + <gml:surfaceMember> + <gml:Polygon gml:id="_Simple_BD.1_PG.2"> + <gml:exterior> + <gml:LinearRing gml:id="_Simple_BD.1_PG.2_LR.1"> + <gml:posList srsDimension="3"> + 13.0 15.0 0.0 + 13.0 15.0 3.0 + 13.0 10.0 3.0 + 13.0 10.0 0.0 + 13.0 15.0 0.0 + </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </gml:surfaceMember> + </gml:MultiSurface> + </bldg:lod2MultiSurface> + </bldg:WallSurface> + </bldg:boundedBy> + <bldg:boundedBy> + <bldg:WallSurface gml:id="_Simple_BD.1_WallSurface_2"> + <bldg:lod2MultiSurface> + <gml:MultiSurface> + <gml:surfaceMember> + <gml:Polygon gml:id="_Simple_BD.1_PG.3"> + <gml:exterior> + <gml:LinearRing gml:id="_Simple_BD.1_PG.3_LR.1"> + <gml:posList srsDimension="3"> + 10.0 15.0 0.0 + 10.0 15.0 3.0 + 11.5 15.0 4.5 + 13.0 15.0 3.0 + 13.0 15.0 0.0 + 10.0 15.0 0.0 + </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </gml:surfaceMember> + </gml:MultiSurface> + </bldg:lod2MultiSurface> + </bldg:WallSurface> + </bldg:boundedBy> + <bldg:boundedBy> + <bldg:WallSurface gml:id="_Simple_BD.1_WallSurface_3"> + <bldg:lod2MultiSurface> + <gml:MultiSurface> + <gml:surfaceMember> + <gml:Polygon gml:id="_Simple_BD.1_PG.4"> + <gml:exterior> + <gml:LinearRing gml:id="_Simple_BD.1_PG.4_LR.1"> + <gml:posList srsDimension="3"> + 10.0 10.0 3.0 + 10.0 15.0 3.0 + 10.0 15.0 0.0 + 10.0 10.0 0.0 + 10.0 10.0 3.0 + </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </gml:surfaceMember> + </gml:MultiSurface> + </bldg:lod2MultiSurface> + </bldg:WallSurface> + </bldg:boundedBy> + <bldg:boundedBy> + <bldg:WallSurface gml:id="_Simple_BD.1_WallSurface_4"> + <bldg:lod2MultiSurface> + <gml:MultiSurface> + <gml:surfaceMember> + <gml:Polygon gml:id="_Simple_BD.1_PG.5"> + <gml:exterior> + <gml:LinearRing gml:id="_Simple_BD.1_PG.5_LR.1"> + <gml:posList srsDimension="3"> + 13.0 10.0 0.0 + 13.0 10.0 3.0 + 11.5 10.0 4.5 + 10.0 10.0 3.0 + 10.0 10.0 0.0 + 13.0 10.0 0.0 + </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </gml:surfaceMember> + </gml:MultiSurface> + </bldg:lod2MultiSurface> + </bldg:WallSurface> + </bldg:boundedBy> + <bldg:boundedBy> + <bldg:RoofSurface gml:id="_Simple_BD.1_RoofSurface_1"> + <bldg:lod2MultiSurface> + <gml:MultiSurface> + <gml:surfaceMember> + <gml:Polygon gml:id="_Simple_BD.1_PG.6"> + <gml:exterior> + <gml:LinearRing gml:id="_Simple_BD.1_PG.6_LR.1"> + <gml:posList srsDimension="3"> + 10.0 10.0 3.0 + 11.5 10.0 4.5 + 11.5 15.0 4.5 + 10.0 15.0 3.0 + 10.0 10.0 3.0 + </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </gml:surfaceMember> + <gml:surfaceMember> + <gml:Polygon gml:id="_Simple_BD.1_PG.7"> + <gml:exterior> + <gml:LinearRing gml:id="_Simple_BD.1_PG.7_LR.1"> + <gml:posList srsDimension="3"> + 11.5 10.0 4.5 + 13.0 10.0 3.0 + 13.0 15.0 3.0 + 11.5 15.0 4.5 + 11.5 10.0 4.5 + </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </gml:surfaceMember> + </gml:MultiSurface> + </bldg:lod2MultiSurface> + </bldg:RoofSurface> + </bldg:boundedBy> + <bldg:boundedBy> + <bldg:GroundSurface gml:id="_Simple_BD.1_GroundSurface_1"> + <bldg:lod2MultiSurface> + <gml:MultiSurface> + <gml:surfaceMember> + <gml:Polygon gml:id="_Simple_BD.1_PG.1"> + <gml:exterior> + <gml:LinearRing gml:id="_Simple_BD.1_PG.1_LR.1"> + <gml:posList srsDimension="3"> + 10.0 10.0 0.0 + 10.0 15.0 0.0 + 13.0 15.0 0.0 + 13.0 10.0 0.0 + 10.0 10.0 0.0 + </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </gml:surfaceMember> + </gml:MultiSurface> + </bldg:lod2MultiSurface> + </bldg:GroundSurface> + </bldg:boundedBy> + </bldg:Building> + </core:cityObjectMember> -- GitLab