From 299858180fe1069e19a7d7e70e0356ab06353c31 Mon Sep 17 00:00:00 2001
From: Markus Quaritsch <markus.quaritsch@tugraz.at>
Date: Fri, 23 Jul 2021 10:57:43 +0200
Subject: [PATCH] testcase for single bus simulation - check passenger count
 calculation

---
 .../CompletedBusFactorMethodTest.cs           | 93 ++++++++++++++++++-
 1 file changed, 88 insertions(+), 5 deletions(-)

diff --git a/VectoCore/VectoCoreTest/Integration/CompletedBus/CompletedBusFactorMethodTest.cs b/VectoCore/VectoCoreTest/Integration/CompletedBus/CompletedBusFactorMethodTest.cs
index d5619adb0b..26720ddfea 100644
--- a/VectoCore/VectoCoreTest/Integration/CompletedBus/CompletedBusFactorMethodTest.cs
+++ b/VectoCore/VectoCoreTest/Integration/CompletedBus/CompletedBusFactorMethodTest.cs
@@ -5,6 +5,7 @@ using System.Linq;
 using System.Reflection;
 using System.Runtime.InteropServices.WindowsRuntime;
 using System.Xml;
+using System.Xml.Linq;
 using Newtonsoft.Json;
 using Newtonsoft.Json.Linq;
 using Ninject;
@@ -1147,12 +1148,13 @@ namespace TUGraz.VectoCore.Tests.Integration.CompletedBus
 				xmlInputReader);
 
 			var modified = GetModifiedXML(inputData, pSeatsLower, pStdLower, pSeatsUpper, pStdUpper);
-
+			var completedVif = xmlInputReader.CreateDeclaration(XmlReader.Create(new StringReader(modified)));
+			
 			var writer = new FileOutputWriter("SanityCheckTest");
 			//var inputData = new MockCompletedBusInputData(XmlReader.Create(PifFile_33_34), modified);
 			//var inputData = new MockCompletedBusInputData(modified);
 
-			var factory = new SimulatorFactory(ExecutionMode.Declaration, new XMLDeclarationVIFInputData(modified, null), writer) {
+			var factory = new SimulatorFactory(ExecutionMode.Declaration, new XMLDeclarationVIFInputData(completedVif as IMultistageBusInputDataProvider, null), writer) {
 				WriteModalResults = true,
 				Validate = false
 			};
@@ -1168,7 +1170,81 @@ namespace TUGraz.VectoCore.Tests.Integration.CompletedBus
 			Assert.AreEqual(expectedPassengers + 1, ssmInputs.NumberOfPassengers, 1e-3); // adding driver for SSM
 		}
 
-		private IMultistageBusInputDataProvider GetModifiedXML(string vifXML, int pSeatsLower, int pStdLower, int pSeatsUpper, int pStdUpper)
+		private const string PrimaryGrp41 = @"TestData\Integration\Buses\FactorMethod\primary_heavyBus group41_nonSmart.xml";
+		private const string CompletedGrp41_32b = @"TestData\Integration\Buses\FactorMethod\vecto_vehicle-completed_heavyBus_41.xml";
+
+		[
+			TestCase(PrimaryGrp41, CompletedGrp41_32b, 1, 20, 5, 17, 9, 51, TestName = "SingleBus PassengerCount IU RL"),
+			TestCase(PrimaryGrp41, CompletedGrp41_32b, 3, 20, 5, 17, 9, 37, TestName = "SingleBus PassengerCount CO RL"),
+		]
+		public void TestPassengerCountAllocationSingleBus(string primaryFile, string completedFile, int runIdx, int pSeatsLower, int pStdLower, int pSeatsUpper, int pStdUpper, double expectedPassengers)
+		{
+			var primary = xmlInputReader.CreateDeclaration(primaryFile);
+
+			var completedXml = new XmlDocument();
+			completedXml.Load(completedFile);
+			var modified = GetModifiedXML(completedXml.OuterXml, pSeatsLower, pStdLower, pSeatsUpper, pStdUpper, VehicleCode.CB);
+			var modifiedCompleted = xmlInputReader.CreateDeclaration(XmlReader.Create(new StringReader(modified)));
+
+			var inputData = new MockSingleBusInputDataProvider(primary.JobInputData.Vehicle, modifiedCompleted.JobInputData.Vehicle);
+			var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, null) {
+				WriteModalResults = true,
+				//ActualModalData = true,
+				Validate = false
+			};
+			var runs = factory.DataReader.NextRun().ToList();
+			var run = runs[runIdx];
+
+			Assert.NotNull(run.VehicleData.PassengerCount);
+			Assert.AreEqual(expectedPassengers, run.VehicleData.PassengerCount.Value, 1e-3);
+
+			var ssmInputs = run.BusAuxiliaries.SSMInputs as ISSMDeclarationInputs;
+			Assert.NotNull(ssmInputs);
+			Assert.AreEqual(expectedPassengers + 1, ssmInputs.NumberOfPassengers, 1e-3); // adding driver for SSM
+		}
+
+		public class MockSingleBusInputDataProvider : ISingleBusInputDataProvider, IDeclarationJobInputData
+		{
+			public MockSingleBusInputDataProvider(IVehicleDeclarationInputData primary, IVehicleDeclarationInputData completed)
+			{
+				PrimaryVehicle = primary;
+				CompletedVehicle = completed;
+			}
+
+			#region Implementation of IInputDataProvider
+
+			public DataSource DataSource { get; }
+
+			#endregion
+
+			#region Implementation of IDeclarationInputDataProvider
+
+			public IDeclarationJobInputData JobInputData => this;
+			public IPrimaryVehicleInformationInputDataProvider PrimaryVehicleData { get; }
+			public XElement XMLHash { get; }
+
+			#endregion
+
+			#region Implementation of ISingleBusInputDataProvider
+
+			public IVehicleDeclarationInputData PrimaryVehicle { get; set; }
+			public IVehicleDeclarationInputData CompletedVehicle { get; set; }
+
+			#endregion
+
+			#region Implementation of IDeclarationJobInputData
+
+			public bool SavedInDeclarationMode => true;
+			public IVehicleDeclarationInputData Vehicle => PrimaryVehicle;
+			public string JobName { get; }
+			public string ShiftStrategy => "";
+			public VectoSimulationJobType JobType => VectoSimulationJobType.ConventionalVehicle;
+
+			#endregion
+		}
+
+		private string GetModifiedXML(string vifXML, int pSeatsLower, int pStdLower, int pSeatsUpper, int pStdUpper,
+			VehicleCode? vehicleCode = null)
 		{
 			var vif = new XmlDocument();
 			vif.LoadXml(vifXML);
@@ -1185,8 +1261,15 @@ namespace TUGraz.VectoCore.Tests.Integration.CompletedBus
 			var pStdUpperNode = vif.SelectSingleNode("//*[local-name()='NumberPassengersStandingUpperDeck']");
 			pStdUpperNode.InnerText = pStdUpper.ToString();
 
-			var completedVif = xmlInputReader.CreateDeclaration(XmlReader.Create(new StringReader(vif.OuterXml)));
-			return completedVif  as IMultistageBusInputDataProvider;
+			if (vehicleCode != null) {
+				var bodyWorkNode = vif.SelectSingleNode("//*[local-name()='BodyworkCode']");
+				bodyWorkNode.InnerText = vehicleCode.ToXMLFormat();
+
+			}
+
+			return vif.OuterXml;
+
+			
 		}
 
 
-- 
GitLab