From 814ff3e2b0787367236fd677a8840914b76b268f Mon Sep 17 00:00:00 2001
From: "harald.martini@student.tugraz.at" <harald.martini@student.tugraz.at>
Date: Wed, 4 Aug 2021 14:53:38 +0200
Subject: [PATCH] Implemented GetWrittenFiles in TempFileOutputWriter, updated
 Testfiles

---
 VECTO.sln                                     |  45 ++++++
 .../Simulation/Impl/SimulatorFactory.cs       |   3 +-
 .../OutputData/FileIO/FileOutputWriter.cs     |   2 +-
 .../OutputData/FileIO/TempFileOutputWriter.cs |  11 +-
 .../Multistage/MultistageMultipleRunsTest.cs  | 129 ++++++++++++++----
 .../Multistage/newVifCompletedDiesel.json     |   4 +-
 .../Multistage/newVifExemptedIncomplete.json  |  13 ++
 .../Multistage/newVifInterimDiesel.json       |  13 ++
 ...ecto_vehicle-exempted_input_incomplete.xml |  25 ++++
 ...e-stage_input_full-sample_interim_noNG.xml |  89 ++++++++++++
 VectoCore/VectoCoreTest/VectoCoreTest.csproj  |  12 ++
 11 files changed, 310 insertions(+), 36 deletions(-)
 create mode 100644 VectoCore/VectoCoreTest/TestData/Integration/Multistage/newVifExemptedIncomplete.json
 create mode 100644 VectoCore/VectoCoreTest/TestData/Integration/Multistage/newVifInterimDiesel.json
 create mode 100644 VectoCore/VectoCoreTest/TestData/Integration/Multistage/vecto_vehicle-exempted_input_incomplete.xml
 create mode 100644 VectoCore/VectoCoreTest/TestData/Integration/Multistage/vecto_vehicle-stage_input_full-sample_interim_noNG.xml

diff --git a/VECTO.sln b/VECTO.sln
index 8b72b482c4..fb0a7c6567 100644
--- a/VECTO.sln
+++ b/VECTO.sln
@@ -72,6 +72,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VECTO3GUI2020", "VECTO3GUI2
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Vecto3GUI2020Test", "Vecto3GUI2020Test\Vecto3GUI2020Test.csproj", "{7F4FF473-96B3-461E-9CE6-76D3B75F87CB}"
 EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ParameterDocumentation", "..\vecto-SchemaDocumentation\ParameterDocumentation\ParameterDocumentation.csproj", "{E672322E-44DC-41C8-A3A4-603233C72F92}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug PerformanceStats|Any CPU = Debug PerformanceStats|Any CPU
@@ -861,6 +863,48 @@ Global
 		{7F4FF473-96B3-461E-9CE6-76D3B75F87CB}.ReleaseTUG|x64.Build.0 = Release|Any CPU
 		{7F4FF473-96B3-461E-9CE6-76D3B75F87CB}.ReleaseTUG|x86.ActiveCfg = Release|Any CPU
 		{7F4FF473-96B3-461E-9CE6-76D3B75F87CB}.ReleaseTUG|x86.Build.0 = Release|Any CPU
+		{E672322E-44DC-41C8-A3A4-603233C72F92}.Debug PerformanceStats|Any CPU.ActiveCfg = Debug|Any CPU
+		{E672322E-44DC-41C8-A3A4-603233C72F92}.Debug PerformanceStats|Any CPU.Build.0 = Debug|Any CPU
+		{E672322E-44DC-41C8-A3A4-603233C72F92}.Debug PerformanceStats|x64.ActiveCfg = Debug|Any CPU
+		{E672322E-44DC-41C8-A3A4-603233C72F92}.Debug PerformanceStats|x64.Build.0 = Debug|Any CPU
+		{E672322E-44DC-41C8-A3A4-603233C72F92}.Debug PerformanceStats|x86.ActiveCfg = Debug|Any CPU
+		{E672322E-44DC-41C8-A3A4-603233C72F92}.Debug PerformanceStats|x86.Build.0 = Debug|Any CPU
+		{E672322E-44DC-41C8-A3A4-603233C72F92}.Debug PerformanceTrace|Any CPU.ActiveCfg = Debug|Any CPU
+		{E672322E-44DC-41C8-A3A4-603233C72F92}.Debug PerformanceTrace|Any CPU.Build.0 = Debug|Any CPU
+		{E672322E-44DC-41C8-A3A4-603233C72F92}.Debug PerformanceTrace|x64.ActiveCfg = Debug|Any CPU
+		{E672322E-44DC-41C8-A3A4-603233C72F92}.Debug PerformanceTrace|x64.Build.0 = Debug|Any CPU
+		{E672322E-44DC-41C8-A3A4-603233C72F92}.Debug PerformanceTrace|x86.ActiveCfg = Debug|Any CPU
+		{E672322E-44DC-41C8-A3A4-603233C72F92}.Debug PerformanceTrace|x86.Build.0 = Debug|Any CPU
+		{E672322E-44DC-41C8-A3A4-603233C72F92}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{E672322E-44DC-41C8-A3A4-603233C72F92}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{E672322E-44DC-41C8-A3A4-603233C72F92}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{E672322E-44DC-41C8-A3A4-603233C72F92}.Debug|x64.Build.0 = Debug|Any CPU
+		{E672322E-44DC-41C8-A3A4-603233C72F92}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{E672322E-44DC-41C8-A3A4-603233C72F92}.Debug|x86.Build.0 = Debug|Any CPU
+		{E672322E-44DC-41C8-A3A4-603233C72F92}.DebugTUG|Any CPU.ActiveCfg = Debug|Any CPU
+		{E672322E-44DC-41C8-A3A4-603233C72F92}.DebugTUG|Any CPU.Build.0 = Debug|Any CPU
+		{E672322E-44DC-41C8-A3A4-603233C72F92}.DebugTUG|x64.ActiveCfg = Debug|Any CPU
+		{E672322E-44DC-41C8-A3A4-603233C72F92}.DebugTUG|x64.Build.0 = Debug|Any CPU
+		{E672322E-44DC-41C8-A3A4-603233C72F92}.DebugTUG|x86.ActiveCfg = Debug|Any CPU
+		{E672322E-44DC-41C8-A3A4-603233C72F92}.DebugTUG|x86.Build.0 = Debug|Any CPU
+		{E672322E-44DC-41C8-A3A4-603233C72F92}.Deploy|Any CPU.ActiveCfg = Debug|Any CPU
+		{E672322E-44DC-41C8-A3A4-603233C72F92}.Deploy|Any CPU.Build.0 = Debug|Any CPU
+		{E672322E-44DC-41C8-A3A4-603233C72F92}.Deploy|x64.ActiveCfg = Debug|Any CPU
+		{E672322E-44DC-41C8-A3A4-603233C72F92}.Deploy|x64.Build.0 = Debug|Any CPU
+		{E672322E-44DC-41C8-A3A4-603233C72F92}.Deploy|x86.ActiveCfg = Debug|Any CPU
+		{E672322E-44DC-41C8-A3A4-603233C72F92}.Deploy|x86.Build.0 = Debug|Any CPU
+		{E672322E-44DC-41C8-A3A4-603233C72F92}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{E672322E-44DC-41C8-A3A4-603233C72F92}.Release|Any CPU.Build.0 = Release|Any CPU
+		{E672322E-44DC-41C8-A3A4-603233C72F92}.Release|x64.ActiveCfg = Release|Any CPU
+		{E672322E-44DC-41C8-A3A4-603233C72F92}.Release|x64.Build.0 = Release|Any CPU
+		{E672322E-44DC-41C8-A3A4-603233C72F92}.Release|x86.ActiveCfg = Release|Any CPU
+		{E672322E-44DC-41C8-A3A4-603233C72F92}.Release|x86.Build.0 = Release|Any CPU
+		{E672322E-44DC-41C8-A3A4-603233C72F92}.ReleaseTUG|Any CPU.ActiveCfg = Release|Any CPU
+		{E672322E-44DC-41C8-A3A4-603233C72F92}.ReleaseTUG|Any CPU.Build.0 = Release|Any CPU
+		{E672322E-44DC-41C8-A3A4-603233C72F92}.ReleaseTUG|x64.ActiveCfg = Release|Any CPU
+		{E672322E-44DC-41C8-A3A4-603233C72F92}.ReleaseTUG|x64.Build.0 = Release|Any CPU
+		{E672322E-44DC-41C8-A3A4-603233C72F92}.ReleaseTUG|x86.ActiveCfg = Release|Any CPU
+		{E672322E-44DC-41C8-A3A4-603233C72F92}.ReleaseTUG|x86.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
@@ -883,6 +927,7 @@ Global
 		{760C1C5B-A767-463E-BA85-F0BCFC23A550} = {73A5BF70-6168-456F-95E5-A1402BFA488C}
 		{C234077C-F81E-42FA-9367-1319753678A6} = {D29E62A2-CF08-469F-B29F-1B25DCB35386}
 		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2} = {C4D97EBF-BA80-4943-9D27-33179405D8D5}
+		{E672322E-44DC-41C8-A3A4-603233C72F92} = {351FF7E8-B56B-445E-8E98-A61E07C990DA}
 	EndGlobalSection
 	GlobalSection(ExtensibilityGlobals) = postSolution
 		SolutionGuid = {B38F3172-132E-43F7-9C4B-5FDC3A28C051}
diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs b/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs
index 256997d983..7c9aa0b33f 100644
--- a/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs
+++ b/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs
@@ -234,8 +234,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 				DataReader = new DeclarationModePrimaryBusVectoRunDataFactory(multiStagePrimaryAndStageInputData.PrimaryVehicle, tempPrimaryReport);
 
 
-				var reportPrimary = declarationReport ??
-									new XMLDeclarationReportPrimaryVehicle(ReportWriter,
+				var reportPrimary = new XMLDeclarationReportPrimaryVehicle(ReportWriter,
 										true);
 				
 
diff --git a/VectoCore/VectoCore/OutputData/FileIO/FileOutputWriter.cs b/VectoCore/VectoCore/OutputData/FileIO/FileOutputWriter.cs
index ece3596e1b..f6b382f1f2 100644
--- a/VectoCore/VectoCore/OutputData/FileIO/FileOutputWriter.cs
+++ b/VectoCore/VectoCore/OutputData/FileIO/FileOutputWriter.cs
@@ -51,7 +51,7 @@ namespace TUGraz.VectoCore.OutputData.FileIO
 		public string JobFile => _jobFile;
 
 		private ConcurrentDictionary<ReportType, string> _writtenReports = new ConcurrentDictionary<ReportType, string>();
-		public IDictionary<ReportType, string> GetWrittenFiles()
+		public virtual IDictionary<ReportType, string> GetWrittenFiles()
 		{
 			return _writtenReports;
 		}
diff --git a/VectoCore/VectoCore/OutputData/FileIO/TempFileOutputWriter.cs b/VectoCore/VectoCore/OutputData/FileIO/TempFileOutputWriter.cs
index 5a280d8c7d..a6c934e957 100644
--- a/VectoCore/VectoCore/OutputData/FileIO/TempFileOutputWriter.cs
+++ b/VectoCore/VectoCore/OutputData/FileIO/TempFileOutputWriter.cs
@@ -7,7 +7,7 @@ using TUGraz.VectoCommon.Models;
 
 namespace TUGraz.VectoCore.OutputData.FileIO
 {
-	public class TempFileOutputWriter : FileOutputWriter, IOutputDataWriter
+	public class TempFileOutputWriter : FileOutputWriter
 	{
 		private Dictionary<ReportType, XDocument> _writtenReports = new Dictionary<ReportType, XDocument>();
 
@@ -16,6 +16,15 @@ namespace TUGraz.VectoCore.OutputData.FileIO
 
 		}
 
+		#region Overrides of FileOutputWriter
+
+		public override IDictionary<ReportType, string> GetWrittenFiles()
+		{
+			return new Dictionary<ReportType, string>();
+		}
+
+		#endregion
+
 		protected TempFileOutputWriter(string jobFile, int numberOfManufacturingStages) : base(jobFile,
 			numberOfManufacturingStages)
 		{
diff --git a/VectoCore/VectoCoreTest/Integration/Multistage/MultistageMultipleRunsTest.cs b/VectoCore/VectoCoreTest/Integration/Multistage/MultistageMultipleRunsTest.cs
index edb1cefccb..c635441bc2 100644
--- a/VectoCore/VectoCoreTest/Integration/Multistage/MultistageMultipleRunsTest.cs
+++ b/VectoCore/VectoCoreTest/Integration/Multistage/MultistageMultipleRunsTest.cs
@@ -19,9 +19,13 @@ namespace TUGraz.VectoCore.Tests.Integration.Multistage
 	public class MultistageMultipleRunsTest
 	{
 		private const string TestDataDir = "TestData\\Integration\\Multistage\\";
+
 		private const string CompletedDiesel = TestDataDir + "newVifCompletedDiesel.json";
 		private const string CompletedExempted = TestDataDir + "newVifExempted.json";
 
+		private const string InterimExempted = TestDataDir + "newVifExemptedIncomplete.json";
+		private const string InterimDiesel = TestDataDir + "newVifInterimDiesel.json";
+
 		private FileOutputWriter _sumFileWriter;
 		private SummaryDataContainer _sumContainer;
 		private JobContainer _jobContainer;
@@ -29,6 +33,8 @@ namespace TUGraz.VectoCore.Tests.Integration.Multistage
 
 		private string _outputDirectory;
 
+		private Stopwatch _stopWatch;
+
 		[OneTimeSetUp]
 		public void OneTimeSetUp()
 		{
@@ -38,33 +44,29 @@ namespace TUGraz.VectoCore.Tests.Integration.Multistage
 		[SetUp]
 		public void SetUp()
 		{
+			_stopWatch = new Stopwatch();
+			_stopWatch.Start();
 			_outputDirectory = TestContext.CurrentContext.TestDirectory + TestContext.CurrentContext.Test.Name;
 			_sumFileWriter = new FileOutputWriter(_outputDirectory);
 			_sumContainer = new SummaryDataContainer(_sumFileWriter);
 			_jobContainer = new JobContainer(_sumContainer);
 		}
 
-		[Test, Timeout(3000)]
+		[TearDown]
+		public void TearDown()
+		{
+			_stopWatch.Stop();
+			TestContext.WriteLine($"Execution time: {_stopWatch.Elapsed}");
+		}
+
+		[Test]//, Timeout(3000)]
 		public void ExemptedPrimaryAndCompletedTest()
 		{
 			var inputFile = Path.GetFullPath(CompletedExempted);
-			var input = JSONInputDataFactory.ReadJsonJob(Path.GetFullPath(CompletedExempted));
-			var fileWriter = new FileOutputWriter(_outputDirectory);
-			var runsFactory = new SimulatorFactory(_mode, input, fileWriter)
-			{
-				WriteModalResults = true,
-				ModalResults1Hz = true,
-				Validate = true,
-				ActualModalData = true,
-				SerializeVectoRunData = true,
-			};
+			var input = JSONInputDataFactory.ReadJsonJob(inputFile);
+			var fileWriter = StartSimulation(input);
 
-			var timeout = 1000;
-			
 
-			
-			_jobContainer.AddRuns(runsFactory);
-			_jobContainer.Execute();
 			while (!_jobContainer.AllCompleted) {
 				//Busy wait
 			}
@@ -78,42 +80,109 @@ namespace TUGraz.VectoCore.Tests.Integration.Multistage
 			
 		}
 
-		private void ShowWrittenFiles(IDictionary<ReportType, string> getWrittenFiles)
+		
+		[Test]//, Timeout(3000)]
+		public void ExemptedPrimaryAndInterimTest()
 		{
-			if (getWrittenFiles.Count == 0) {
-				TestContext.WriteLine("No Files Written");
-			}
-			foreach (var keyValuePair in getWrittenFiles) {
-				TestContext.WriteLine(keyValuePair.Key.ToString());
-				TestContext.WriteLine(keyValuePair.Value.ToString());
+			var inputFile = Path.GetFullPath(InterimExempted);
+			var input = JSONInputDataFactory.ReadJsonJob(inputFile);
+			var fileWriter = StartSimulation(input);
+
+
+			while (!_jobContainer.AllCompleted)
+			{
+				//Busy wait
 			}
-		}
 
-		[TestCase]
-		public void ExemptedPrimaryAndInterimTest()
-		{
+			var writtenFiles = fileWriter.GetWrittenFiles();
+			ShowWrittenFiles(fileWriter.GetWrittenFiles());
 
+			Assert.That(writtenFiles.ContainsKey(ReportType.DeclarationReportManufacturerXML));
+			Assert.That(writtenFiles.ContainsKey(ReportType.DeclarationReportCustomerXML));
+			Assert.That(writtenFiles.ContainsKey(ReportType.DeclarationReportMultistageVehicleXML));
 		}
 
-		[TestCase]
+		//SpecialCase II
+		[Test, Timeout(1000 * 10 * 60)]
 		public void PrimaryAndCompletedTest()
 		{
+			var inputFile = Path.GetFullPath(CompletedDiesel);
+			var input = JSONInputDataFactory.ReadJsonJob(inputFile);
+			var fileWriter = StartSimulation(input);
 
 
+			while (!_jobContainer.AllCompleted)
+			{
+				//Busy wait
+			}
+
+			var writtenFiles = fileWriter.GetWrittenFiles();
+			ShowWrittenFiles(fileWriter.GetWrittenFiles());
+
+			Assert.That(writtenFiles.ContainsKey(ReportType.DeclarationReportManufacturerXML));
+			Assert.That(writtenFiles.ContainsKey(ReportType.DeclarationReportCustomerXML));
+			Assert.That(writtenFiles.ContainsKey(ReportType.DeclarationReportMultistageVehicleXML));
+
 
 		}
 
-		[TestCase]
+		//SpecialCase I
+		[Test, Timeout(1000 * 10 * 60)]
 		public void PrimaryAndInterimTest()
 		{
+			var inputFile = Path.GetFullPath(InterimDiesel);
+			var input = JSONInputDataFactory.ReadJsonJob(inputFile);
+			var fileWriter = StartSimulation(input);
+
+
+			while (!_jobContainer.AllCompleted)
+			{
+				//Busy wait
+			}
+
+			var writtenFiles = fileWriter.GetWrittenFiles();
+			ShowWrittenFiles(fileWriter.GetWrittenFiles());
+
+			Assert.That(writtenFiles.ContainsKey(ReportType.DeclarationReportManufacturerXML));
+			Assert.That(writtenFiles.ContainsKey(ReportType.DeclarationReportCustomerXML));
+			Assert.That(writtenFiles.ContainsKey(ReportType.DeclarationReportMultistageVehicleXML));
+		}
+
+
+		private FileOutputWriter StartSimulation(IInputDataProvider input)
+		{
+			var fileWriter = new FileOutputWriter(_outputDirectory);
+			var runsFactory = new SimulatorFactory(_mode, input, fileWriter)
+			{
+				WriteModalResults = true,
+				ModalResults1Hz = true,
+				Validate = true,
+				ActualModalData = true,
+				SerializeVectoRunData = true,
+			};
 
+			var timeout = 1000;
 
 
+			_jobContainer.AddRuns(runsFactory);
+			_jobContainer.Execute();
+			return fileWriter;
 		}
 
+		private void ShowWrittenFiles(IDictionary<ReportType, string> getWrittenFiles)
+		{
+			if (getWrittenFiles.Count == 0)
+			{
+				TestContext.WriteLine("No Files Written");
+			}
+			foreach (var keyValuePair in getWrittenFiles)
+			{
+				TestContext.WriteLine(keyValuePair.Key.ToString());
+				TestContext.WriteLine(keyValuePair.Value.ToString());
+			}
+		}
 
 
 
-		
 	}
 }
\ No newline at end of file
diff --git a/VectoCore/VectoCoreTest/TestData/Integration/Multistage/newVifCompletedDiesel.json b/VectoCore/VectoCoreTest/TestData/Integration/Multistage/newVifCompletedDiesel.json
index d0005c2097..357fb71856 100644
--- a/VectoCore/VectoCoreTest/TestData/Integration/Multistage/newVifCompletedDiesel.json
+++ b/VectoCore/VectoCoreTest/TestData/Integration/Multistage/newVifCompletedDiesel.json
@@ -6,8 +6,8 @@
     "FileVersion": 10
   },
   "Body": {
-    "PrimaryVehicle": "C:\\Users\\Harry\\source\\repos\\vecto-dev\\VectoCore\\VectoCoreTest\\TestData\\Integration\\Buses\\PrimaryAndStageInput\\vecto_vehicle-primary_heavyBus-sample_Diesel.xml",
-    "InterimStage": "C:\\Users\\Harry\\source\\repos\\vecto-dev\\VectoCore\\VectoCoreTest\\TestData\\Integration\\Buses\\PrimaryAndStageInput\\vecto_vehicle-stage_input_full-sample_final_noNG.xml",
+    "PrimaryVehicle": "vecto_vehicle-primary_heavyBus-sample_Diesel.xml",
+    "InterimStage": "vecto_vehicle-stage_input_full-sample_final_noNG.xml",
     "Completed": false
   }
 }
\ No newline at end of file
diff --git a/VectoCore/VectoCoreTest/TestData/Integration/Multistage/newVifExemptedIncomplete.json b/VectoCore/VectoCoreTest/TestData/Integration/Multistage/newVifExemptedIncomplete.json
new file mode 100644
index 0000000000..510c14d423
--- /dev/null
+++ b/VectoCore/VectoCoreTest/TestData/Integration/Multistage/newVifExemptedIncomplete.json
@@ -0,0 +1,13 @@
+{
+  "Header": {
+    "CreatedBy": "Harry",
+    "Date": "2021-08-04T00:00:00+02:00",
+    "AppVersion": "Vecto3GUI2020",
+    "FileVersion": 10
+  },
+  "Body": {
+    "PrimaryVehicle": "exempted_primary_heavyBus.xml",
+    "InterimStage": "vecto_vehicle-exempted_input_incomplete.xml",
+    "Completed": false
+  }
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCoreTest/TestData/Integration/Multistage/newVifInterimDiesel.json b/VectoCore/VectoCoreTest/TestData/Integration/Multistage/newVifInterimDiesel.json
new file mode 100644
index 0000000000..0621d36c18
--- /dev/null
+++ b/VectoCore/VectoCoreTest/TestData/Integration/Multistage/newVifInterimDiesel.json
@@ -0,0 +1,13 @@
+{
+  "Header": {
+    "CreatedBy": "Harry",
+    "Date": "2021-08-03T00:00:00+02:00",
+    "AppVersion": "Vecto3GUI2020",
+    "FileVersion": 10
+  },
+  "Body": {
+    "PrimaryVehicle": "vecto_vehicle-primary_heavyBus-sample_Diesel.xml",
+    "InterimStage": "vecto_vehicle-stage_input_full-sample_interim_noNG.xml",
+    "Completed": false
+  }
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCoreTest/TestData/Integration/Multistage/vecto_vehicle-exempted_input_incomplete.xml b/VectoCore/VectoCoreTest/TestData/Integration/Multistage/vecto_vehicle-exempted_input_incomplete.xml
new file mode 100644
index 0000000000..678ca0a762
--- /dev/null
+++ b/VectoCore/VectoCoreTest/TestData/Integration/Multistage/vecto_vehicle-exempted_input_incomplete.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tns:VectoInputDeclaration schemaVersion="2.8" xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.8"
+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
+xmlns:tns="urn:tugraz:ivt:VectoAPI:DeclarationInput:v2.0" 
+xmlns:v2.0="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0" 
+xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:DeclarationJob v:\VectoCore\VectoCore\Resources\XSD/VectoDeclarationJob.xsd">
+	<v2.0:Vehicle id="VEH-1234567890" xsi:type="ExemptedInterimStageInputType">
+		<Manufacturer>Some Manufacturer</Manufacturer>
+		<ManufacturerAddress>Infinite Loop</ManufacturerAddress>
+		<VIN>VEH-1234567891</VIN>
+		<Date>2021-01-09T11:00:00Z</Date>
+		<Model>Sample Bus Model 2</Model>
+		<LegislativeCategory>M3</LegislativeCategory>
+		<CorrectedActualMass>7000</CorrectedActualMass>
+		<TechnicalPermissibleMaximumLadenMass>10000</TechnicalPermissibleMaximumLadenMass>
+		<ClassBus>A</ClassBus>
+		<!--NumberPassengerSeatsLowerDeck>10</NumberPassengerSeatsLowerDeck>
+		<NumberPassengersStandingLowerDeck>42</NumberPassengersStandingLowerDeck>
+		<NumberPassengerSeatsUpperDeck>20</NumberPassengerSeatsUpperDeck>
+		<NumberPassengersStandingUpperDeck>13</NumberPassengersStandingUpperDeck-->
+		<BodyworkCode>CE</BodyworkCode>
+		<LowEntry>true</LowEntry>
+		<HeightIntegratedBody>2500</HeightIntegratedBody>		
+	</v2.0:Vehicle>
+</tns:VectoInputDeclaration>
\ No newline at end of file
diff --git a/VectoCore/VectoCoreTest/TestData/Integration/Multistage/vecto_vehicle-stage_input_full-sample_interim_noNG.xml b/VectoCore/VectoCoreTest/TestData/Integration/Multistage/vecto_vehicle-stage_input_full-sample_interim_noNG.xml
new file mode 100644
index 0000000000..3e0e4ace29
--- /dev/null
+++ b/VectoCore/VectoCoreTest/TestData/Integration/Multistage/vecto_vehicle-stage_input_full-sample_interim_noNG.xml
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="utf-8"?>
+<tns:VectoInputDeclaration xmlns:tns="urn:tugraz:ivt:VectoAPI:DeclarationInput:v2.0" xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.8" schemaVersion="2.8" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:v2.0="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0" xmlns:v2.3="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.3" xmlns:di="http://www.w3.org/2000/09/xmldsig#" xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:DeclarationJob V:\VectoCore\VectoCore\Resources\XSD\VectoDeclarationJob.xsd">
+  <v2.0:Vehicle id="VEH-1234567890" xsi:type="InterimStageInputType">
+    <Manufacturer>Some Manufacturer</Manufacturer>
+    <ManufacturerAddress>Some Manufacturer Address</ManufacturerAddress>
+    <VIN>VEH-1234567890</VIN>
+    <Date>2021-07-28T22:00:00Z</Date>
+    <Model>Sample Bus Model</Model>
+    <LegislativeCategory>M3</LegislativeCategory>
+    <CorrectedActualMass>500</CorrectedActualMass>
+    <TechnicalPermissibleMaximumLadenMass>3500</TechnicalPermissibleMaximumLadenMass>
+    <AirdragModifiedMultistage>true</AirdragModifiedMultistage>
+    <ClassBus>II+III</ClassBus>
+    <NumberPassengerSeatsLowerDeck>1</NumberPassengerSeatsLowerDeck>
+    <NumberPassengersStandingLowerDeck>10</NumberPassengersStandingLowerDeck>
+    <NumberPassengerSeatsUpperDeck>11</NumberPassengerSeatsUpperDeck>
+    <NumberPassengersStandingUpperDeck>2</NumberPassengersStandingUpperDeck>
+    <BodyworkCode>CB</BodyworkCode>
+    <LowEntry>false</LowEntry>
+    <HeightIntegratedBody>2500</HeightIntegratedBody>
+    <VehicleLength>9500</VehicleLength>
+    <VehicleWidth>2500</VehicleWidth>
+    <EntranceHeight>2000</EntranceHeight>
+    <DoorDriveTechnology>electric</DoorDriveTechnology>
+    <VehicleDeclarationType>final</VehicleDeclarationType>
+    <ADAS>
+      <v2.3:EngineStopStart>true</v2.3:EngineStopStart>
+      <v2.3:EcoRollWithoutEngineStop>false</v2.3:EcoRollWithoutEngineStop>
+      <v2.3:EcoRollWithEngineStop>false</v2.3:EcoRollWithEngineStop>
+      <v2.3:PredictiveCruiseControl>none</v2.3:PredictiveCruiseControl>
+      <v2.3:APTEcoRollReleaseLockupClutch>true</v2.3:APTEcoRollReleaseLockupClutch>
+    </ADAS>
+    <Components xsi:type="CompletedVehicleComponentsDeclarationType">
+      <AirDrag>
+        <v2.0:Data id="CabinX23h" xsi:type="v2.0:AirDragDataDeclarationType">
+          <v2.0:Manufacturer>Generic Manufacturer</v2.0:Manufacturer>
+          <v2.0:Model>Generic Model</v2.0:Model>
+          <v2.0:CertificationNumber>e12*0815/8051*2017/05E0000*00</v2.0:CertificationNumber>
+          <v2.0:Date>2017-03-24T15:00:00Z</v2.0:Date>
+          <v2.0:AppVersion>Vecto AirDrag x.y</v2.0:AppVersion>
+          <v2.0:CdxA_0>6.31</v2.0:CdxA_0>
+          <v2.0:TransferredCdxA>6.32</v2.0:TransferredCdxA>
+          <v2.0:DeclaredCdxA>6.34</v2.0:DeclaredCdxA>
+        </v2.0:Data>
+        <v2.0:Signature>
+          <di:Reference URI="#CabinX23h">
+            <di:Transforms>
+              <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization" />
+              <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
+            </di:Transforms>
+            <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+            <di:DigestValue>b9SHCfOoVrBxFQ8wwDK32OO+9bd85DuaUdgs6j/29N8=</di:DigestValue>
+          </di:Reference>
+        </v2.0:Signature>
+      </AirDrag>
+      <Auxiliaries>
+        <Data xsi:type="CompletedVehicleAuxiliaryDataDeclarationType">
+          <ElectricSystem>
+            <LEDLights>
+              <Interiorlights>false</Interiorlights>
+              <Dayrunninglights>true</Dayrunninglights>
+              <Positionlights>true</Positionlights>
+              <Brakelights>true</Brakelights>
+              <Headlights>false</Headlights>
+            </LEDLights>
+          </ElectricSystem>
+          <HVAC>
+            <SystemConfiguration>2</SystemConfiguration>
+            <HeatPumpTypeDriverCompartment>R-744</HeatPumpTypeDriverCompartment>
+            <HeatPumpModeDriverCompartment>heating</HeatPumpModeDriverCompartment>
+            <HeatPumpTypePassengerCompartment>non R-744 2-stage</HeatPumpTypePassengerCompartment>
+            <HeatPumpModePassengerCompartment>cooling</HeatPumpModePassengerCompartment>
+            <HeatPumpTypePassengerCompartment>non R-744 3-stage</HeatPumpTypePassengerCompartment>
+            <HeatPumpModePassengerCompartment>heating</HeatPumpModePassengerCompartment>
+            <HeatPumpTypePassengerCompartment>non R-744 2-stage</HeatPumpTypePassengerCompartment>
+            <HeatPumpModePassengerCompartment>cooling</HeatPumpModePassengerCompartment>
+            <AuxiliaryHeaterPower>50</AuxiliaryHeaterPower>
+            <DoubleGlazing>false</DoubleGlazing>
+            <AdjustableAuxiliaryHeater>true</AdjustableAuxiliaryHeater>
+            <SeparateAirDistributionDucts>true</SeparateAirDistributionDucts>
+            <WaterElectricHeater>true</WaterElectricHeater>
+            <AirElectricHeater>false</AirElectricHeater>
+            <OtherHeatingTechnology>false</OtherHeatingTechnology>
+          </HVAC>
+        </Data>
+      </Auxiliaries>
+    </Components>
+  </v2.0:Vehicle>
+</tns:VectoInputDeclaration>
\ No newline at end of file
diff --git a/VectoCore/VectoCoreTest/VectoCoreTest.csproj b/VectoCore/VectoCoreTest/VectoCoreTest.csproj
index a46d747920..2e8fd53e0b 100644
--- a/VectoCore/VectoCoreTest/VectoCoreTest.csproj
+++ b/VectoCore/VectoCoreTest/VectoCoreTest.csproj
@@ -2228,12 +2228,18 @@
     <None Include="TestData\Integration\Buses\SingleBus.vecto">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </None>
+    <None Include="TestData\Integration\Multistage\newVifInterimDiesel.json">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
     <None Include="TestData\Integration\Multistage\newVifCompletedDiesel.json">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </None>
     <None Include="TestData\Integration\Multistage\newVifExempted.json">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </None>
+    <None Include="TestData\Integration\Multistage\newVifExemptedIncomplete.json">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
     <None Include="TestData\Integration\ShiftStrategyV2\CityBus_AT_FCOpt\175kW.vfld">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </None>
@@ -5601,9 +5607,15 @@
     <Content Include="TestData\Integration\Multistage\vecto_vehicle-exempted_input_full-sample.xml">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
+    <Content Include="TestData\Integration\Multistage\vecto_vehicle-exempted_input_incomplete.xml">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
     <Content Include="TestData\Integration\Multistage\vecto_vehicle-primary_heavyBus-sample_Diesel.xml">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
+    <Content Include="TestData\Integration\Multistage\vecto_vehicle-stage_input_full-sample_interim_noNG.xml">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
     <Content Include="TestData\Integration\Multistage\vecto_vehicle-stage_input_full-sample_final_noNG.xml">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-- 
GitLab