From 742f9555eca752bc348ce9b97ee21fa774f10ceb Mon Sep 17 00:00:00 2001
From: Riegel <alexander.riegel@hft-stuttgart.de>
Date: Tue, 11 Mar 2025 16:58:03 +0100
Subject: [PATCH] Test:Rework TransportationObject tests

---
 .../TransportationObjectTest.java             | 505 ++++++++++++------
 1 file changed, 336 insertions(+), 169 deletions(-)

diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TransportationObjectTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TransportationObjectTest.java
index d5ea6f0..8027327 100644
--- a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TransportationObjectTest.java
+++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TransportationObjectTest.java
@@ -31,13 +31,9 @@ import static org.mockito.Mockito.when;
 import java.util.ArrayList;
 import java.util.List;
 
+import org.citygml4j.core.model.deprecated.core.DeprecatedPropertiesOfAbstractCityObject;
 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.AbstractTransportationSpace;
-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.Intersection;
 import org.citygml4j.core.model.transportation.Railway;
 import org.citygml4j.core.model.transportation.Road;
@@ -49,7 +45,6 @@ import org.citygml4j.core.model.transportation.TrafficSpace;
 import org.citygml4j.core.model.transportation.Waterway;
 import org.citygml4j.core.util.geometry.GeometryFactory;
 import org.junit.Test;
-import org.mockito.Mock;
 import org.mockito.Mockito;
 import org.xmlobjects.gml.model.geometry.aggregates.MultiSurfaceProperty;
 
@@ -95,280 +90,452 @@ public class TransportationObjectTest {
 
 
 	@Test
-	public void testReCreateGeometriesWithComposedOf() {
-		TopLevelTransportFeature to = TopLevelTransportFeature.from(Mockito.mock(Road.class));
-		Road roadMock = new Road();
-		to.setGmlObject(roadMock);
-		TrafficSpaceObject ataTo = new TrafficSpaceObject(TrafficSpaceObject.TrafficSpaceType.AUXILIARY_TRAFFIC_SPACE);
-		AuxiliaryTrafficSpace ataMock = mock(AuxiliaryTrafficSpace.class);
-		ataTo.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD2));
-		ataTo.setGmlObject(ataMock);
-		roadMock.getAuxiliaryTrafficSpaces().add(new AuxiliaryTrafficSpaceProperty(ataMock));
-
-		to.addAuxTrafficSpace(ataTo);
+	public void testReCreateGeometriesTransportationSpace() {
+		Road roadMock = mock(Road.class);
+		TopLevelTransportFeature top = TopLevelTransportFeature.from(roadMock);
+		top.setGmlObject(roadMock);
+		TransportSection sectionMock = Mockito.mock(TransportSection.class);
+		TransportSection intersectionMock = Mockito.mock(TransportSection.class);
+		TrafficSpaceObject tsMock = Mockito.mock(TrafficSpaceObject.class);
+		TrafficSpaceObject auxTsMock = Mockito.mock(TrafficSpaceObject.class);
+
+		top.addSection(sectionMock);
+		top.addIntersection(intersectionMock);
+		top.addTrafficSpace(tsMock);
+		top.addAuxTrafficSpace(auxTsMock);
+
+		top.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD2));
 		GeometryFactory factory = GeometryFactory.newInstance();
-		to.reCreateGeometries(factory, mock(ParserConfiguration.class));
-		verify(ataMock).setLod2MultiSurface(any());
+		top.reCreateGeometries(factory, mock(ParserConfiguration.class));
 
+		verify(roadMock).setLod2MultiSurface(any());
+		verify(sectionMock).reCreateGeometries(any(), any());
+		verify(intersectionMock).reCreateGeometries(any(), any());
+		verify(tsMock).reCreateGeometries(any(), any());
+		verify(auxTsMock).reCreateGeometries(any(), any());
+	}
+
+	@Test
+	public void testReCreateGeometriesTrafficSpace() {
+		TrafficSpaceObject tso = new TrafficSpaceObject(TrafficSpaceObject.TrafficSpaceType.TRAFFIC_SPACE);
+		TrafficSpace tsMock = mock(TrafficSpace.class);
+		tso.setGmlObject(tsMock);
+		TrafficAreaObject taoMock = Mockito.mock(TrafficAreaObject.class);
 
+		tso.addTrafficArea(taoMock);
+
+		tso.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD2));
+		GeometryFactory factory = GeometryFactory.newInstance();
+		tso.reCreateGeometries(factory, mock(ParserConfiguration.class));
+
+		verify(tsMock).setLod2MultiSurface(any());
+		verify(taoMock).reCreateGeometries(any(), any());
 	}
 
+	@Test
+	public void testReCreateGeometriesTrafficArea() {
+		TrafficAreaObject tao = new TrafficAreaObject(TrafficAreaObject.TrafficAreaType.TRAFFIC_AREA);
+		TrafficArea taMock = mock(TrafficArea.class);
+		tao.setGmlObject(taMock);
+
+		tao.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD2));
+		GeometryFactory factory = GeometryFactory.newInstance();
+		tao.reCreateGeometries(factory, mock(ParserConfiguration.class));
+
+		verify(taMock).setLod2MultiSurface(any());
+	}
 
 	@Test
 	public void testReCreateGeometriesMultiSurfaceLod0() {
-		TopLevelTransportFeature top = TopLevelTransportFeature.from(Mockito.mock(Road.class));
 		Road roadMock = mock(Road.class);
+		TopLevelTransportFeature top = TopLevelTransportFeature.from(roadMock);
 		top.setGmlObject(roadMock);
-		TrafficSpaceObject tsMock = new TrafficSpaceObject(TrafficSpaceObject.TrafficSpaceType.TRAFFIC_SPACE);
+
+		TrafficSpaceObject ts = new TrafficSpaceObject(TrafficSpaceObject.TrafficSpaceType.TRAFFIC_SPACE);
 		TrafficSpace trafficSpaceMock = mock(TrafficSpace.class);
-		tsMock.setGmlObject(trafficSpaceMock);
-		TrafficAreaObject taMock = new TrafficAreaObject(TrafficAreaObject.TrafficAreaType.TRAFFIC_AREA);
-		TrafficArea trafficAreaMock = mock(TrafficArea.class);
-		taMock.setGmlObject(trafficAreaMock);
-		TrafficAreaObject ataMock = new TrafficAreaObject(TrafficAreaObject.TrafficAreaType.AUXILIARY_TRAFFIC_AREA);
-		AuxiliaryTrafficArea auxTrafficAreaMock = mock(AuxiliaryTrafficArea.class);
-		ataMock.setGmlObject(auxTrafficAreaMock);
+		ts.setGmlObject(trafficSpaceMock);
 
-		top.addTrafficSpace(tsMock);
-		tsMock.addTrafficArea(taMock);
-		tsMock.addTrafficArea(ataMock);
+		TrafficAreaObject ta = new TrafficAreaObject(TrafficAreaObject.TrafficAreaType.TRAFFIC_AREA);
+		TrafficArea trafficAreaMock = mock(TrafficArea.class);
+		ta.setGmlObject(trafficAreaMock);
 
-		taMock.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD0));
-		ataMock.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD0));
-		tsMock.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD0));
 		top.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD0));
+		ts.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD0));
+		ta.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD0));
 
 		GeometryFactory factory = GeometryFactory.newInstance();
 		top.reCreateGeometries(factory, mock(ParserConfiguration.class));
-		verify(trafficAreaMock).setLod0MultiSurface(any());
-		verify(auxTrafficAreaMock).setLod0MultiSurface(any());
-		verify(trafficSpaceMock).setLod0MultiSurface(any());
+		ts.reCreateGeometries(factory, mock(ParserConfiguration.class));
+		ta.reCreateGeometries(factory, mock(ParserConfiguration.class));
+
 		verify(roadMock).setLod0MultiSurface(any());
+		verify(trafficSpaceMock).setLod0MultiSurface(any());
+		verify(trafficAreaMock).setLod0MultiSurface(any());
 	}
-
-
 	
 	@Test
 	public void testReCreateGeometriesMultiSurfaceLod1() {
-		TopLevelTransportFeature top = TopLevelTransportFeature.from(Mockito.mock(Road.class));
 		Road roadMock = mock(Road.class);
+		TopLevelTransportFeature top = TopLevelTransportFeature.from(roadMock);
 		top.setGmlObject(roadMock);
-		TrafficSpaceObject tsMock = new TrafficSpaceObject(TrafficSpaceObject.TrafficSpaceType.TRAFFIC_SPACE);
-		TrafficSpace trafficSpaceMock = mock(TrafficSpace.class);
-		tsMock.setGmlObject(trafficSpaceMock);
-		TrafficAreaObject taMock = new TrafficAreaObject(TrafficAreaObject.TrafficAreaType.TRAFFIC_AREA);
+
+		TrafficAreaObject ta = new TrafficAreaObject(TrafficAreaObject.TrafficAreaType.TRAFFIC_AREA);
 		TrafficArea trafficAreaMock = mock(TrafficArea.class);
-		taMock.setGmlObject(trafficAreaMock);
-		TrafficAreaObject ataMock = new TrafficAreaObject(TrafficAreaObject.TrafficAreaType.AUXILIARY_TRAFFIC_AREA);
-		AuxiliaryTrafficArea auxTrafficAreaMock = mock(AuxiliaryTrafficArea.class);
-		ataMock.setGmlObject(auxTrafficAreaMock);
+		ta.setGmlObject(trafficAreaMock);
 
-		top.addTrafficSpace(tsMock);
-		tsMock.addTrafficArea(taMock);
-		tsMock.addTrafficArea(ataMock);
+		DeprecatedPropertiesOfAbstractTransportationSpace dSpace = mock(DeprecatedPropertiesOfAbstractTransportationSpace.class);
+		when(roadMock.getDeprecatedProperties()).thenReturn(dSpace);
 
-		taMock.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD1));
-		ataMock.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD1));
+		try {
+			top.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD1));
+		} catch (IllegalArgumentException e) {
+			fail("Casting of original GML object to AbstractTransportationSpace should work");
+		}
 
+		ta.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD1));
 		GeometryFactory factory = GeometryFactory.newInstance();
 		top.reCreateGeometries(factory, mock(ParserConfiguration.class));
+		ta.reCreateGeometries(factory, mock(ParserConfiguration.class));
+
+		verify(dSpace).setLod1MultiSurface(any());
 		verify(trafficAreaMock).setLod1MultiSurface(any());
-		verify(auxTrafficAreaMock).setLod1MultiSurface(any());
 	}
 
 	
 	@Test
 	public void testReCreateGeometriesMultiSurfaceLod2() {
-		TopLevelTransportFeature top = TopLevelTransportFeature.from(Mockito.mock(Road.class));
 		Road roadMock = mock(Road.class);
+		TopLevelTransportFeature top = TopLevelTransportFeature.from(roadMock);
 		top.setGmlObject(roadMock);
-		TrafficSpaceObject tsMock = new TrafficSpaceObject(TrafficSpaceObject.TrafficSpaceType.TRAFFIC_SPACE);
+
+		TrafficSpaceObject ts = new TrafficSpaceObject(TrafficSpaceObject.TrafficSpaceType.TRAFFIC_SPACE);
 		TrafficSpace trafficSpaceMock = mock(TrafficSpace.class);
-		tsMock.setGmlObject(trafficSpaceMock);
-		TrafficAreaObject taMock = new TrafficAreaObject(TrafficAreaObject.TrafficAreaType.TRAFFIC_AREA);
-		TrafficArea trafficAreaMock = mock(TrafficArea.class);
-		taMock.setGmlObject(trafficAreaMock);
-		TrafficAreaObject ataMock = new TrafficAreaObject(TrafficAreaObject.TrafficAreaType.AUXILIARY_TRAFFIC_AREA);
-		AuxiliaryTrafficArea auxTrafficAreaMock = mock(AuxiliaryTrafficArea.class);
-		ataMock.setGmlObject(auxTrafficAreaMock);
+		ts.setGmlObject(trafficSpaceMock);
 
-		top.addTrafficSpace(tsMock);
-		tsMock.addTrafficArea(taMock);
-		tsMock.addTrafficArea(ataMock);
+		TrafficAreaObject ta = new TrafficAreaObject(TrafficAreaObject.TrafficAreaType.TRAFFIC_AREA);
+		TrafficArea trafficAreaMock = mock(TrafficArea.class);
+		ta.setGmlObject(trafficAreaMock);
 
-		taMock.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD2));
-		ataMock.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD2));
-		tsMock.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD2));
 		top.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD2));
+		ts.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD2));
+		ta.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD2));
 
 		GeometryFactory factory = GeometryFactory.newInstance();
 		top.reCreateGeometries(factory, mock(ParserConfiguration.class));
-		verify(trafficAreaMock).setLod2MultiSurface(any());
-		verify(auxTrafficAreaMock).setLod2MultiSurface(any());
-		verify(trafficSpaceMock).setLod2MultiSurface(any());
+		ts.reCreateGeometries(factory, mock(ParserConfiguration.class));
+		ta.reCreateGeometries(factory, mock(ParserConfiguration.class));
+
 		verify(roadMock).setLod2MultiSurface(any());
+		verify(trafficSpaceMock).setLod2MultiSurface(any());
+		verify(trafficAreaMock).setLod2MultiSurface(any());
 	}
 	
 	@Test
 	public void testReCreateGeometriesMultiSurfaceLod3() {
-		TopLevelTransportFeature top = TopLevelTransportFeature.from(Mockito.mock(Road.class));
 		Road roadMock = mock(Road.class);
+		TopLevelTransportFeature top = TopLevelTransportFeature.from(roadMock);
 		top.setGmlObject(roadMock);
-		TrafficSpaceObject tsMock = new TrafficSpaceObject(TrafficSpaceObject.TrafficSpaceType.TRAFFIC_SPACE);
+
+		TrafficSpaceObject ts = new TrafficSpaceObject(TrafficSpaceObject.TrafficSpaceType.TRAFFIC_SPACE);
 		TrafficSpace trafficSpaceMock = mock(TrafficSpace.class);
-		tsMock.setGmlObject(trafficSpaceMock);
-		TrafficAreaObject taMock = new TrafficAreaObject(TrafficAreaObject.TrafficAreaType.TRAFFIC_AREA);
-		TrafficArea trafficAreaMock = mock(TrafficArea.class);
-		taMock.setGmlObject(trafficAreaMock);
-		TrafficAreaObject ataMock = new TrafficAreaObject(TrafficAreaObject.TrafficAreaType.AUXILIARY_TRAFFIC_AREA);
-		AuxiliaryTrafficArea auxTrafficAreaMock = mock(AuxiliaryTrafficArea.class);
-		ataMock.setGmlObject(auxTrafficAreaMock);
+		ts.setGmlObject(trafficSpaceMock);
 
-		top.addTrafficSpace(tsMock);
-		tsMock.addTrafficArea(taMock);
-		tsMock.addTrafficArea(ataMock);
+		TrafficAreaObject ta = new TrafficAreaObject(TrafficAreaObject.TrafficAreaType.TRAFFIC_AREA);
+		TrafficArea trafficAreaMock = mock(TrafficArea.class);
+		ta.setGmlObject(trafficAreaMock);
 
-		taMock.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD3));
-		ataMock.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD3));
-		tsMock.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD3));
 		top.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD3));
+		ts.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD3));
+		ta.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD3));
 
 		GeometryFactory factory = GeometryFactory.newInstance();
 		top.reCreateGeometries(factory, mock(ParserConfiguration.class));
-		verify(trafficAreaMock).setLod3MultiSurface(any());
-		verify(auxTrafficAreaMock).setLod3MultiSurface(any());
-		verify(trafficSpaceMock).setLod3MultiSurface(any());
+		ts.reCreateGeometries(factory, mock(ParserConfiguration.class));
+		ta.reCreateGeometries(factory, mock(ParserConfiguration.class));
+
 		verify(roadMock).setLod3MultiSurface(any());
+		verify(trafficSpaceMock).setLod3MultiSurface(any());
+		verify(trafficAreaMock).setLod3MultiSurface(any());
 	}
 	
 	@Test
 	public void testReCreateGeometriesMultiSurfaceLod4() {
-		TopLevelTransportFeature top = TopLevelTransportFeature.from(Mockito.mock(Road.class));
 		Road roadMock = mock(Road.class);
+		TopLevelTransportFeature top = TopLevelTransportFeature.from(roadMock);
 		top.setGmlObject(roadMock);
-		TrafficSpaceObject tsMock = new TrafficSpaceObject(TrafficSpaceObject.TrafficSpaceType.TRAFFIC_SPACE);
-		TrafficSpace trafficSpaceMock = mock(TrafficSpace.class);
-		tsMock.setGmlObject(trafficSpaceMock);
-		TrafficAreaObject taMock = new TrafficAreaObject(TrafficAreaObject.TrafficAreaType.TRAFFIC_AREA);
-		TrafficArea trafficAreaMock = mock(TrafficArea.class);
-		taMock.setGmlObject(trafficAreaMock);
-		TrafficAreaObject ataMock = new TrafficAreaObject(TrafficAreaObject.TrafficAreaType.AUXILIARY_TRAFFIC_AREA);
-		AuxiliaryTrafficArea auxTrafficAreaMock = mock(AuxiliaryTrafficArea.class);
-		ataMock.setGmlObject(auxTrafficAreaMock);
 
-		top.addTrafficSpace(tsMock);
-		tsMock.addTrafficArea(taMock);
-		tsMock.addTrafficArea(ataMock);
+		TrafficAreaObject ta = new TrafficAreaObject(TrafficAreaObject.TrafficAreaType.TRAFFIC_AREA);
+		TrafficArea trafficAreaMock = mock(TrafficArea.class);
+		ta.setGmlObject(trafficAreaMock);
 
-		DeprecatedPropertiesOfAbstractThematicSurface dSpace = mock(DeprecatedPropertiesOfAbstractThematicSurface.class);
-		when(trafficAreaMock.getDeprecatedProperties()).thenReturn(dSpace);
-		DeprecatedPropertiesOfAbstractThematicSurface adSpace = mock(DeprecatedPropertiesOfAbstractThematicSurface.class);
-		when(auxTrafficAreaMock.getDeprecatedProperties()).thenReturn(adSpace);
+		DeprecatedPropertiesOfAbstractTransportationSpace dSpace = mock(DeprecatedPropertiesOfAbstractTransportationSpace.class);
+		when(roadMock.getDeprecatedProperties()).thenReturn(dSpace);
+		DeprecatedPropertiesOfAbstractThematicSurface dArea = mock(DeprecatedPropertiesOfAbstractThematicSurface.class);
+		when(trafficAreaMock.getDeprecatedProperties()).thenReturn(dArea);
 
-		taMock.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD4));
-		ataMock.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD4));
+		ta.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD4));
+		try {
+			top.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD4));
+		} catch (IllegalArgumentException e) {
+			fail("Casting of original GML object to AbstractTransportationSpace should work");
+		}
 
 		GeometryFactory factory = GeometryFactory.newInstance();
 		top.reCreateGeometries(factory, mock(ParserConfiguration.class));
+		ta.reCreateGeometries(factory, mock(ParserConfiguration.class));
+
 		verify(dSpace).setLod4MultiSurface(any());
-		verify(adSpace).setLod4MultiSurface(any());
+		verify(dArea).setLod4MultiSurface(any());
+	}
+
+
+	@Test
+	public void testContainsErrorTransportationSpace() {
+		Road roadMock = mock(Road.class);
+		TopLevelTransportFeature top = TopLevelTransportFeature.from(roadMock);
+		top.setGmlObject(roadMock);
+		TransportSection sectionMock = Mockito.mock(TransportSection.class);
+		TransportSection intersectionMock = Mockito.mock(TransportSection.class);
+		TrafficSpaceObject tsMock = Mockito.mock(TrafficSpaceObject.class);
+		TrafficSpaceObject auxTsMock = Mockito.mock(TrafficSpaceObject.class);
+
+		top.addSection(sectionMock);
+		top.addIntersection(intersectionMock);
+		top.addTrafficSpace(tsMock);
+		top.addAuxTrafficSpace(auxTsMock);
+
+		top.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class)));
+		assertTrue(top.containsError(CheckId.C_GE_P_HOLE_OUTSIDE));
+		assertFalse(top.containsError(CheckId.C_GE_P_INNER_RINGS_NESTED));
 
+		verify(sectionMock).containsError(any());
+		verify(intersectionMock).containsError(any());
+		verify(tsMock).containsError(any());
+		verify(auxTsMock).containsError(any());
 	}
 
+	@Test
+	public void testContainsErrorTrafficSpace() {
+		TrafficSpaceObject tso = new TrafficSpaceObject(TrafficSpaceObject.TrafficSpaceType.TRAFFIC_SPACE);
+		TrafficSpace tsMock = mock(TrafficSpace.class);
+		tso.setGmlObject(tsMock);
+		TrafficAreaObject taMock = mock(TrafficAreaObject.class);
+
+		tso.addTrafficArea(taMock);
+
+		tso.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class)));
+		assertTrue(tso.containsError(CheckId.C_GE_P_HOLE_OUTSIDE));
+		assertFalse(tso.containsError(CheckId.C_GE_P_INNER_RINGS_NESTED));
+
+		verify(taMock).containsError(any());
+	}
 
-	
 	@Test
-	public void testContainsError() {
-		TrafficAreaObject ta = new TrafficAreaObject(TrafficAreaObject.TrafficAreaType.TRAFFIC_AREA);
-		ta.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class)));
-		assertTrue(ta.containsError(CheckId.C_GE_P_HOLE_OUTSIDE));
-		assertFalse(ta.containsError(CheckId.C_GE_P_INNER_RINGS_NESTED));
+	public void testContainsErrorTrafficArea() {
+		TrafficAreaObject tao = new TrafficAreaObject(TrafficAreaObject.TrafficAreaType.TRAFFIC_AREA);
+		TrafficArea taMock = mock(TrafficArea.class);
+		tao.setGmlObject(taMock);
+
+		tao.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class)));
+		assertTrue(tao.containsError(CheckId.C_GE_P_HOLE_OUTSIDE));
+		assertFalse(tao.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));
+	public void testClearAllContainedCheckResultsTransportationSpace() {
+		Road roadMock = mock(Road.class);
+		TopLevelTransportFeature top = TopLevelTransportFeature.from(roadMock);
+		top.setGmlObject(roadMock);
+		TransportSection sectionMock = Mockito.mock(TransportSection.class);
+		TransportSection intersectionMock = Mockito.mock(TransportSection.class);
+		TrafficSpaceObject tsMock = Mockito.mock(TrafficSpaceObject.class);
+		TrafficSpaceObject auxTsMock = Mockito.mock(TrafficSpaceObject.class);
+
+		top.addSection(sectionMock);
+		top.addIntersection(intersectionMock);
+		top.addTrafficSpace(tsMock);
+		top.addAuxTrafficSpace(auxTsMock);
+
+		assertFalse(top.containsError(CheckId.C_GE_P_HOLE_OUTSIDE));
+		top.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class)));
+		assertTrue(top.containsError(CheckId.C_GE_P_HOLE_OUTSIDE));
+		top.clearAllContainedCheckResults();
+		assertFalse(top.containsError(CheckId.C_GE_P_HOLE_OUTSIDE));
+
+		verify(sectionMock).clearAllContainedCheckResults();
+		verify(intersectionMock).clearAllContainedCheckResults();
+		verify(tsMock).clearAllContainedCheckResults();
+		verify(auxTsMock).clearAllContainedCheckResults();
 	}
-	
+
 	@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();
+	public void testClearAllContainedCheckResultsTrafficSpace() {
+		TrafficSpaceObject tso = new TrafficSpaceObject(TrafficSpaceObject.TrafficSpaceType.TRAFFIC_SPACE);
+		TrafficSpace tsMock = mock(TrafficSpace.class);
+		tso.setGmlObject(tsMock);
+		TrafficAreaObject taMock = mock(TrafficAreaObject.class);
+
+		tso.addTrafficArea(taMock);
+
+		assertFalse(tso.containsError(CheckId.C_GE_P_HOLE_OUTSIDE));
+		tso.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class)));
+		assertTrue(tso.containsError(CheckId.C_GE_P_HOLE_OUTSIDE));
+		tso.clearAllContainedCheckResults();
+		assertFalse(tso.containsError(CheckId.C_GE_P_HOLE_OUTSIDE));
+
+		verify(taMock).clearAllContainedCheckResults();
 	}
-	
+
+	@Test
+	public void testClearAllContainedCheckResultsTrafficArea() {
+		TrafficAreaObject tao = new TrafficAreaObject(TrafficAreaObject.TrafficAreaType.TRAFFIC_AREA);
+		TrafficArea taMock = mock(TrafficArea.class);
+		tao.setGmlObject(taMock);
+
+		assertFalse(tao.containsError(CheckId.C_GE_P_HOLE_OUTSIDE));
+		tao.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class)));
+		assertTrue(tao.containsError(CheckId.C_GE_P_HOLE_OUTSIDE));
+		tao.clearAllContainedCheckResults();
+		assertFalse(tao.containsError(CheckId.C_GE_P_HOLE_OUTSIDE));
+
+	}
+
 	@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)));
+	public void testCollectContainedErrorsTransportationSpace() {
+		Road roadMock = mock(Road.class);
+		TopLevelTransportFeature top = TopLevelTransportFeature.from(roadMock);
+		top.setGmlObject(roadMock);
+		TransportSection sectionMock = Mockito.mock(TransportSection.class);
+		TransportSection intersectionMock = Mockito.mock(TransportSection.class);
+		TrafficSpaceObject tsMock = Mockito.mock(TrafficSpaceObject.class);
+		TrafficSpaceObject auxTsMock = Mockito.mock(TrafficSpaceObject.class);
+
+		top.addSection(sectionMock);
+		top.addIntersection(intersectionMock);
+		top.addTrafficSpace(tsMock);
+		top.addAuxTrafficSpace(auxTsMock);
+
+		top.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class)));
 		List<CheckError> errors = new ArrayList<>();
-		to.collectContainedErrors(errors);
+		top.collectContainedErrors(errors);
 		assertEquals(1, errors.size());
-		verify(to2).collectContainedErrors(errors);
+
+		verify(sectionMock).collectContainedErrors(errors);
+		verify(intersectionMock).collectContainedErrors(errors);
+		verify(tsMock).collectContainedErrors(errors);
+		verify(auxTsMock).collectContainedErrors(errors);
 	}
-	
+
+	@Test
+	public void testCollectContainedErrorsTrafficSpace() {
+		TrafficSpaceObject tso = new TrafficSpaceObject(TrafficSpaceObject.TrafficSpaceType.TRAFFIC_SPACE);
+		TrafficSpace tsMock = mock(TrafficSpace.class);
+		tso.setGmlObject(tsMock);
+		TrafficAreaObject taMock = mock(TrafficAreaObject.class);
+
+		tso.addTrafficArea(taMock);
+
+		tso.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class)));
+		List<CheckError> errors = new ArrayList<>();
+		tso.collectContainedErrors(errors);
+		assertEquals(1, errors.size());
+
+		verify(taMock).collectContainedErrors(errors);
+	}
+
+	@Test
+	public void testCollectContainedErrorsTrafficArea() {
+		TrafficAreaObject tao = new TrafficAreaObject(TrafficAreaObject.TrafficAreaType.TRAFFIC_AREA);
+		TrafficArea taMock = mock(TrafficArea.class);
+		tao.setGmlObject(taMock);
+
+		tao.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class)));
+		List<CheckError> errors = new ArrayList<>();
+		tao.collectContainedErrors(errors);
+		assertEquals(1, errors.size());
+	}
+
 	@Test
-	public void testUnsetGmlGeometriesRoad() {
-		TransportationObject to = new TransportationObject(TransportationType.ROAD);
+	public void testUnsetGmlGeometriesTransportationSpace() {
 		Road r = mock(Road.class);
-		to.setGmlObject(r);
+		TopLevelTransportFeature top = TopLevelTransportFeature.from(r);
+		top.setGmlObject(r);
+		TransportSection mockSection = mock(TransportSection.class);
+		TransportSection mockInterestSection = mock(TransportSection.class);
+		TrafficSpaceObject mockSpace = mock(TrafficSpaceObject.class);
+		TrafficSpaceObject auxMockSpace = mock(TrafficSpaceObject.class);
+
+		top.addSection(mockSection);
+		top.addIntersection(mockInterestSection);
+		top.addTrafficSpace(mockSpace);
+		top.addAuxTrafficSpace(auxMockSpace);
+
 		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();
+
+		top.unsetGmlGeometries();
 		assertNull(dSpace.getLod1MultiSurface());
 		assertNull(r.getLod2MultiSurface());
 		assertNull(r.getLod3MultiSurface());
 		assertNull(dSpace.getLod4MultiSurface());
+
+		verify(mockSection).unsetGmlGeometries();
+		verify(mockInterestSection).unsetGmlGeometries();
+		verify(mockSpace).unsetGmlGeometries();
+		verify(auxMockSpace).unsetGmlGeometries();
+
 	}
-	
+
 	@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());
+	public void testUnsetGmlGeometriesTrafficSpace() {
+		TrafficSpaceObject tso = new TrafficSpaceObject(TrafficSpaceObject.TrafficSpaceType.TRAFFIC_SPACE);
+		TrafficSpace t = mock(TrafficSpace.class);
+		tso.setGmlObject(t);
+		TrafficAreaObject mockArea = mock(TrafficAreaObject.class);
+
+		tso.addTrafficArea(mockArea);
+
+		DeprecatedPropertiesOfAbstractCityObject dSpace = mock(DeprecatedPropertiesOfAbstractCityObject.class);
+		when(t.getDeprecatedProperties()).thenReturn(dSpace);
+
+		t.setLod0MultiSurface(mock(MultiSurfaceProperty.class));
+		t.setLod2MultiSurface(mock(MultiSurfaceProperty.class));
+		t.setLod3MultiSurface(mock(MultiSurfaceProperty.class));
+
+		tso.unsetGmlGeometries();
+		assertNull(t.getLod0MultiSurface());
+		assertNull(t.getLod2MultiSurface());
+		assertNull(t.getLod3MultiSurface());
+
+		verify(mockArea).unsetGmlGeometries();
+
 	}
-	
+
 	@Test
-	public void testUnsetGmlGeometriesAuxilliaryTrafficArea() {
-		TransportationObject to = new TransportationObject(TransportationType.AUXILLIARY_TRAFFIC_AREA);
-		AuxiliaryTrafficArea r = mock(AuxiliaryTrafficArea.class);
-		to.setGmlObject(r);
+	public void testUnsetGmlGeometriesTrafficArea() {
+		TrafficAreaObject ta = new TrafficAreaObject(TrafficAreaObject.TrafficAreaType.TRAFFIC_AREA);
+		TrafficArea r = mock(TrafficArea.class);
+		ta.setGmlObject(r);
 		DeprecatedPropertiesOfAbstractThematicSurface dSpace = mock(DeprecatedPropertiesOfAbstractThematicSurface.class);
 		when(r.getDeprecatedProperties()).thenReturn(dSpace);
+
+		r.setLod0MultiSurface(mock(MultiSurfaceProperty.class));
+		r.setLod1MultiSurface(mock(MultiSurfaceProperty.class));
 		r.setLod2MultiSurface(mock(MultiSurfaceProperty.class));
 		r.setLod3MultiSurface(mock(MultiSurfaceProperty.class));
 		dSpace.setLod4MultiSurface(mock(MultiSurfaceProperty.class));
-		to.unsetGmlGeometries();
+
+		ta.unsetGmlGeometries();
+		assertNull(r.getLod0MultiSurface());
+		assertNull(r.getLod1MultiSurface());
 		assertNull(r.getLod2MultiSurface());
 		assertNull(r.getLod3MultiSurface());
 		assertNull(dSpace.getLod4MultiSurface());
 	}
-	*/
+
 }
-- 
GitLab