From 390603c8ba6ace66df9c9cd6a24d881852651400 Mon Sep 17 00:00:00 2001
From: Markus Quaritsch <quaritsch@ivt.tugraz.at>
Date: Fri, 12 May 2023 20:47:50 +0200
Subject: [PATCH] finalizing test for mod data comparison factor method xEV

---
 .../PrimaryBus/PrimaryBusSimulation.cs        | 56 +++++++++++++++----
 1 file changed, 46 insertions(+), 10 deletions(-)

diff --git a/VectoCore/VectoCoreTest/Integration/Declaration/PrimaryBus/PrimaryBusSimulation.cs b/VectoCore/VectoCoreTest/Integration/Declaration/PrimaryBus/PrimaryBusSimulation.cs
index 346de10e08..2e057c0403 100644
--- a/VectoCore/VectoCoreTest/Integration/Declaration/PrimaryBus/PrimaryBusSimulation.cs
+++ b/VectoCore/VectoCoreTest/Integration/Declaration/PrimaryBus/PrimaryBusSimulation.cs
@@ -15,6 +15,7 @@ using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Utils;
 using TUGraz.VectoCore.InputData.FileIO.JSON;
 using TUGraz.VectoCore.InputData.FileIO.XML;
+using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider;
 using TUGraz.VectoCore.Models.Declaration;
 using TUGraz.VectoCore.Models.Simulation;
 using TUGraz.VectoCore.Models.Simulation.Data;
@@ -154,13 +155,13 @@ public class PrimaryBusSimulation
 	private const LoadingType RefL = LoadingType.ReferenceLoad;
 	private const MissionType CycleCO = MissionType.Coach;
 
-	[TestCase(@"PrimaryBus/Conventional/primary_heavyBus group41_nonSmart.xml", @"Conventional_completedBus_2.xml", CycleCO, RefL, TestName = "2nd Amendment FactorMethodRunData Conventional"),
+	[TestCase(@"PrimaryBus/Conventional/primary_heavyBus group41_nonSmart.xml", @"Conventional_completedBus_2.xml", @"primary_heavyBus group41_nonSmart.RSLT_VIF.xml", CycleCO, RefL, TestName = "2nd Amendment FactorMethodRunData Conventional CO RL"),
 	]
-	public void TestFactorMethodRunData(string primary, string completed, MissionType mission, LoadingType loading)
+	public void TestFactorMethodRunData(string primary, string completed, string vifFile, MissionType mission, LoadingType loading)
 	{
 		_kernel.Rebind<IMissionFilter>().To<TestMissionFilter>().InSingletonScope();
 		var missionFilter = _kernel.Get<IMissionFilter>() as TestMissionFilter;
-		missionFilter!.SetMissions((MissionType.Interurban, LoadingType.ReferenceLoad));
+		missionFilter!.SetMissions((mission, loading));
 
 		var outputPath = Path.Combine("FactorMethod_xEV", TestContext.CurrentContext.Test.Name.Split(' ').Skip(3).Join("_"));
 		if (!Directory.Exists(outputPath)) {
@@ -170,9 +171,46 @@ public class PrimaryBusSimulation
 		var singleJob = GenerateJsonJobSingleBus(Path.Combine(BASE_DIR, primary), Path.Combine(BASE_DIR_COMPLETED, completed));
 		var dataProviderSingle = JSONInputDataFactory.ReadJsonJob(singleJob);
 		var fileWriterSingle = new FileOutputWriter(singleJob);
-		var simFactory = _kernel.Get<ISimulatorFactoryFactory>();
-		var runsFactorySingle = simFactory.Factory(ExecutionMode.Declaration, dataProviderSingle, fileWriterSingle, null, null);
+		var simFactorySingle = _kernel.Get<ISimulatorFactoryFactory>();
+		var runsFactorySingle = simFactorySingle.Factory(ExecutionMode.Declaration, dataProviderSingle, fileWriterSingle, null, null);
+
+		SerializeRunData(runsFactorySingle, outputPath);
+
+
+		var filePathPrim = Path.Combine(BASE_DIR, primary);
+		var dataProviderPrim = _xmlReader.CreateDeclaration(filePathPrim);
+		var fileWriterPrim = new FileOutputWriter(filePathPrim);
+		var simFactoryPrim = _kernel.Get<ISimulatorFactoryFactory>();
+		var runsFactoryPrim = simFactoryPrim.Factory(ExecutionMode.Declaration, dataProviderPrim, fileWriterPrim, null, null);
 
+		SerializeRunData(runsFactoryPrim, outputPath);
+
+
+		var completedJob = GenerateJsonJobCompletedBus(Path.Combine(BASE_DIR_VIF, vifFile), Path.Combine(BASE_DIR_COMPLETED, completed), false);
+
+		var dataProviderComleted = JSONInputDataFactory.ReadJsonJob(completedJob);
+		var fileWriterCompleted = new FileOutputWriter(singleJob);
+		var simFactoryCompleted = _kernel.Get<ISimulatorFactoryFactory>();
+		var runsFactoryCompleted = simFactoryCompleted.Factory(ExecutionMode.Declaration, dataProviderComleted, fileWriterCompleted, null, null);
+		var jobContainer = new JobContainer(new SummaryDataContainer(fileWriterCompleted)) { };
+		jobContainer.AddRuns(runsFactoryCompleted);
+		jobContainer.Execute();
+		jobContainer.WaitFinished();
+
+		var vif = fileWriterCompleted.GetWrittenFiles().FirstOrDefault(x => x.Key == ReportType.DeclarationReportMultistageVehicleXML);
+		Assert.NotNull(vif);
+
+		var dataProviderVif = _xmlReader.CreateDeclaration(vif.Value) as IMultistepBusInputDataProvider;
+		var dataProviderFinal = new XMLDeclarationVIFInputData(dataProviderVif, null, true);
+        var fileWriterFinal = new FileOutputWriter(filePathPrim);
+		var simFactoryFinal = _kernel.Get<ISimulatorFactoryFactory>();
+		var runsFactoryFinal = simFactoryFinal.Factory(ExecutionMode.Declaration, dataProviderFinal, fileWriterFinal, null, null);
+
+		SerializeRunData(runsFactoryFinal, outputPath);
+    }
+
+    private static void SerializeRunData(ISimulatorFactory runsFactorySingle, string outputPath)
+	{
 		var jsonSerializerSettings = new JsonSerializerSettings();
 		jsonSerializerSettings.Converters.Add(new Newtonsoft.Json.Converters.StringEnumConverter());
 		foreach (var run in runsFactorySingle.SimulationRuns()) {
@@ -183,11 +221,9 @@ public class PrimaryBusSimulation
 					$"{data.JobName}_{data.Cycle.Name}{data.ModFileSuffix}.json"),
 				JsonConvert.SerializeObject(data, Formatting.Indented, jsonSerializerSettings));
 		}
-
-
 	}
 
-    private void RunSimulationSingle(string jobFile, string completed, int runIdx)
+	private void RunSimulationSingle(string jobFile, string completed, int runIdx)
 	{
 		var singleJob = GenerateJsonJobSingleBus(Path.Combine(BASE_DIR, jobFile), Path.Combine(BASE_DIR_COMPLETED, completed));
 		var dataProvider = JSONInputDataFactory.ReadJsonJob(singleJob);
@@ -369,7 +405,7 @@ public class PrimaryBusSimulation
 	}
 
 
-	private string GenerateJsonJobCompletedBus(string vif, string completeBusInput)
+	private string GenerateJsonJobCompletedBus(string vif, string completeBusInput, bool? runSimulation = null)
 	{
 		var subDirectory = Path.GetDirectoryName(completeBusInput);
 
@@ -379,7 +415,7 @@ public class PrimaryBusSimulation
 		var body = new Dictionary<string, object>() {
 			{ "PrimaryVehicleResults", Path.GetRelativePath(subDirectory, Path.GetFullPath(vif)) },
 			{ "CompletedVehicle", Path.GetRelativePath(subDirectory, Path.GetFullPath(completeBusInput)) },
-			{ "RunSimulation", true}
+			{ "RunSimulation", runSimulation ?? true }
 		};
 		var json = new Dictionary<string, object>() {
 			{"Header", header},
-- 
GitLab