/*- * Copyright 2020 Beuth Hochschule für Technik Berlin, Hochschule für Technik Stuttgart * * This file is part of CityDoctor2. * * CityDoctor2 is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * CityDoctor2 is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with CityDoctor2. If not, see . */ package de.hft.stuttgart.citydoctor2.datastructure; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.util.ArrayList; import java.util.List; import org.citygml4j.core.model.deprecated.core.DeprecatedPropertiesOfAbstractThematicSurface; import org.citygml4j.core.model.deprecated.transportation.DeprecatedPropertiesOfAbstractTransportationSpace; import org.citygml4j.core.model.deprecated.transportation.TransportationComplex; import org.citygml4j.core.model.transportation.AuxiliaryTrafficArea; import org.citygml4j.core.model.transportation.AuxiliaryTrafficSpace; import org.citygml4j.core.model.transportation.AuxiliaryTrafficSpaceProperty; import org.citygml4j.core.model.transportation.Road; import org.citygml4j.core.model.transportation.TrafficArea; import org.citygml4j.core.util.geometry.GeometryFactory; import org.junit.Test; import org.xmlobjects.gml.model.geometry.aggregates.MultiSurfaceProperty; import de.hft.stuttgart.citydoctor2.check.CheckError; import de.hft.stuttgart.citydoctor2.check.CheckId; import de.hft.stuttgart.citydoctor2.check.CheckResult; import de.hft.stuttgart.citydoctor2.check.ResultStatus; import de.hft.stuttgart.citydoctor2.datastructure.TransportationObject.TransportationType; import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; public class TransportationObjectTest { @Test public void testGetFeatureType() { TransportationObject to = new TransportationObject(TransportationType.ROAD); assertEquals(FeatureType.TRANSPORTATION, to.getFeatureType()); } @Test(expected = IllegalStateException.class) public void testReCreateGeometriesSolid() { TransportationObject to = new TransportationObject(TransportationType.ROAD); to.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.SOLID, Lod.LOD1)); GeometryFactory factory = GeometryFactory.newInstance(); to.reCreateGeometries(factory, mock(ParserConfiguration.class)); } @Test public void testReCreateGeometriesWithComposedOf() { TransportationObject to = new TransportationObject(TransportationType.ROAD); TransportationComplex tcMock = new TransportationComplex(); to.setGmlObject(tcMock); TransportationObject ataTo = new TransportationObject(TransportationType.AUXILLIARY_TRAFFIC_SPACE); AuxiliaryTrafficSpace ataMock = mock(AuxiliaryTrafficSpace.class); ataTo.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD2)); ataTo.setGmlObject(ataMock); tcMock.getAuxiliaryTrafficSpaces().add(new AuxiliaryTrafficSpaceProperty(ataMock)); to.addChild(ataTo); GeometryFactory factory = GeometryFactory.newInstance(); to.reCreateGeometries(factory, mock(ParserConfiguration.class)); verify(ataMock).setLod2MultiSurface(any()); } @Test public void testReCreateGeometriesMultiSurfaceLod1() { TransportationObject to = new TransportationObject(TransportationType.ROAD); Road roadMock = mock(Road.class); DeprecatedPropertiesOfAbstractTransportationSpace dSpace = mock(DeprecatedPropertiesOfAbstractTransportationSpace.class); when(roadMock.getDeprecatedProperties()).thenReturn(dSpace); to.setGmlObject(roadMock); to.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD1)); GeometryFactory factory = GeometryFactory.newInstance(); to.reCreateGeometries(factory, mock(ParserConfiguration.class)); verify(dSpace).setLod1MultiSurface(any()); } @Test public void testReCreateGeometriesMultiSurfaceLod2() { TransportationObject to = new TransportationObject(TransportationType.ROAD); Road roadMock = mock(Road.class); to.setGmlObject(roadMock); to.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD2)); GeometryFactory factory = GeometryFactory.newInstance(); to.reCreateGeometries(factory, mock(ParserConfiguration.class)); verify(roadMock).setLod2MultiSurface(any()); } @Test public void testReCreateGeometriesMultiSurfaceLod3() { TransportationObject to = new TransportationObject(TransportationType.ROAD); Road roadMock = mock(Road.class); to.setGmlObject(roadMock); to.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD3)); GeometryFactory factory = GeometryFactory.newInstance(); to.reCreateGeometries(factory, mock(ParserConfiguration.class)); verify(roadMock).setLod3MultiSurface(any()); } @Test public void testReCreateGeometriesMultiSurfaceLod4() { TransportationObject to = new TransportationObject(TransportationType.ROAD); Road roadMock = mock(Road.class); DeprecatedPropertiesOfAbstractTransportationSpace dSpace = mock(DeprecatedPropertiesOfAbstractTransportationSpace.class); when(roadMock.getDeprecatedProperties()).thenReturn(dSpace); to.setGmlObject(roadMock); to.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD4)); GeometryFactory factory = GeometryFactory.newInstance(); to.reCreateGeometries(factory, mock(ParserConfiguration.class)); verify(dSpace).setLod4MultiSurface(any()); } @Test(expected = IllegalStateException.class) public void testReCreateGeometriesMultiSurfaceLod0() { TransportationObject to = new TransportationObject(TransportationType.ROAD); Road roadMock = mock(Road.class); to.setGmlObject(roadMock); to.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD0)); GeometryFactory factory = GeometryFactory.newInstance(); to.reCreateGeometries(factory, mock(ParserConfiguration.class)); } @Test(expected = IllegalStateException.class) public void testReCreateGeometriesTrafficAreaMultiSurfaceLod1() { TransportationObject to = new TransportationObject(TransportationType.TRAFFIC_AREA); TrafficArea roadMock = mock(TrafficArea.class); to.setGmlObject(roadMock); to.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD1)); GeometryFactory factory = GeometryFactory.newInstance(); to.reCreateGeometries(factory, mock(ParserConfiguration.class)); } @Test public void testReCreateGeometriesTrafficAreaMultiSurfaceLod2() { TransportationObject to = new TransportationObject(TransportationType.TRAFFIC_AREA); TrafficArea roadMock = mock(TrafficArea.class); to.setGmlObject(roadMock); to.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD2)); GeometryFactory factory = GeometryFactory.newInstance(); to.reCreateGeometries(factory, mock(ParserConfiguration.class)); verify(roadMock).setLod2MultiSurface(any()); } @Test public void testReCreateGeometriesTrafficAreaMultiSurfaceLod3() { TransportationObject to = new TransportationObject(TransportationType.TRAFFIC_AREA); TrafficArea roadMock = mock(TrafficArea.class); to.setGmlObject(roadMock); to.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD3)); GeometryFactory factory = GeometryFactory.newInstance(); to.reCreateGeometries(factory, mock(ParserConfiguration.class)); verify(roadMock).setLod3MultiSurface(any()); } @Test public void testReCreateGeometriesTrafficAreaMultiSurfaceLod4() { TransportationObject to = new TransportationObject(TransportationType.TRAFFIC_AREA); TrafficArea roadMock = mock(TrafficArea.class); DeprecatedPropertiesOfAbstractThematicSurface dSpace = mock(DeprecatedPropertiesOfAbstractThematicSurface.class); when(roadMock.getDeprecatedProperties()).thenReturn(dSpace); to.setGmlObject(roadMock); to.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD4)); GeometryFactory factory = GeometryFactory.newInstance(); to.reCreateGeometries(factory, mock(ParserConfiguration.class)); verify(dSpace).setLod4MultiSurface(any()); } @Test public void testContainsError() { TransportationObject to = new TransportationObject(TransportationType.TRAFFIC_AREA); to.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); assertTrue(to.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); assertFalse(to.containsError(CheckId.C_GE_P_INNER_RINGS_NESTED)); } @Test public void testContainsErrorInComposesOf() { TransportationObject to = new TransportationObject(TransportationType.TRAFFIC_AREA); TransportationObject to2 = new TransportationObject(TransportationType.TRACK); to.addChild(to2); to2.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); assertTrue(to.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); assertFalse(to.containsError(CheckId.C_GE_P_INNER_RINGS_NESTED)); } @Test public void testClearAllContainedCheckResults() { TransportationObject to = new TransportationObject(TransportationType.TRAFFIC_AREA); TransportationObject to2 = mock(TransportationObject.class); to.addChild(to2); assertFalse(to.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); to.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); assertTrue(to.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); to.clearAllContainedCheckResults(); assertFalse(to.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); verify(to2).clearAllContainedCheckResults(); } @Test public void testCollectContainedErrors() { TransportationObject to = new TransportationObject(TransportationType.TRAFFIC_AREA); TransportationObject to2 = mock(TransportationObject.class); to.addChild(to2); to.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); List errors = new ArrayList<>(); to.collectContainedErrors(errors); assertEquals(1, errors.size()); verify(to2).collectContainedErrors(errors); } @Test public void testUnsetGmlGeometriesRoad() { TransportationObject to = new TransportationObject(TransportationType.ROAD); Road r = mock(Road.class); to.setGmlObject(r); DeprecatedPropertiesOfAbstractTransportationSpace dSpace = mock(DeprecatedPropertiesOfAbstractTransportationSpace.class); when(r.getDeprecatedProperties()).thenReturn(dSpace); dSpace.setLod1MultiSurface(mock(MultiSurfaceProperty.class)); r.setLod2MultiSurface(mock(MultiSurfaceProperty.class)); r.setLod3MultiSurface(mock(MultiSurfaceProperty.class)); dSpace.setLod4MultiSurface(mock(MultiSurfaceProperty.class)); to.unsetGmlGeometries(); assertNull(dSpace.getLod1MultiSurface()); assertNull(r.getLod2MultiSurface()); assertNull(r.getLod3MultiSurface()); assertNull(dSpace.getLod4MultiSurface()); } @Test public void testUnsetGmlGeometriesTrafficArea() { TransportationObject to = new TransportationObject(TransportationType.TRAFFIC_AREA); TrafficArea r = mock(TrafficArea.class); to.setGmlObject(r); DeprecatedPropertiesOfAbstractThematicSurface dSpace = mock(DeprecatedPropertiesOfAbstractThematicSurface.class); when(r.getDeprecatedProperties()).thenReturn(dSpace); r.setLod2MultiSurface(mock(MultiSurfaceProperty.class)); r.setLod3MultiSurface(mock(MultiSurfaceProperty.class)); dSpace.setLod4MultiSurface(mock(MultiSurfaceProperty.class)); to.unsetGmlGeometries(); assertNull(r.getLod2MultiSurface()); assertNull(r.getLod3MultiSurface()); assertNull(dSpace.getLod4MultiSurface()); } @Test public void testUnsetGmlGeometriesAuxilliaryTrafficArea() { TransportationObject to = new TransportationObject(TransportationType.AUXILLIARY_TRAFFIC_AREA); AuxiliaryTrafficArea r = mock(AuxiliaryTrafficArea.class); to.setGmlObject(r); DeprecatedPropertiesOfAbstractThematicSurface dSpace = mock(DeprecatedPropertiesOfAbstractThematicSurface.class); when(r.getDeprecatedProperties()).thenReturn(dSpace); r.setLod2MultiSurface(mock(MultiSurfaceProperty.class)); r.setLod3MultiSurface(mock(MultiSurfaceProperty.class)); dSpace.setLod4MultiSurface(mock(MultiSurfaceProperty.class)); to.unsetGmlGeometries(); assertNull(r.getLod2MultiSurface()); assertNull(r.getLod3MultiSurface()); assertNull(dSpace.getLod4MultiSurface()); } }