From 9d188c7a37b8fc90cbb5f49c970ad375a0e9fc22 Mon Sep 17 00:00:00 2001
From: "VKMTHD\\haraldmartini" <harald.martini@student.tugraz.at>
Date: Thu, 1 Sep 2022 17:33:25 +0200
Subject: [PATCH] added PrimaryBus and Completed Bus RunDataFactories

---
 ...tionModeCompletedBusVectoRunDataFactory.cs |  34 ++
 ...rationModeHeavyLorryVectoRunDataFactory.cs |  29 +-
 ...rationModePrimaryBusVectoRunDataFactory.cs |  91 +++++
 .../Reader/VectoRunDataFactoryFactory.cs      |  33 +-
 .../VectoRunDataFactoryNinjectModule.cs       | 140 +++++++-
 .../RunDataFactoryFactoryTest.cs              | 331 +++++++++++++++++-
 6 files changed, 630 insertions(+), 28 deletions(-)

diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeCompletedBusVectoRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeCompletedBusVectoRunDataFactory.cs
index 0a36841a99..7b28e518da 100644
--- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeCompletedBusVectoRunDataFactory.cs
+++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeCompletedBusVectoRunDataFactory.cs
@@ -291,5 +291,39 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl
 			return simulationRunData;
 		}
 
+
+	}
+
+
+	public abstract class DeclarationModeCompletedBusRunDataFactory
+	{
+		public abstract class CompletedBusBase : IVectoRunDataFactory
+		{
+			#region Implementation of IVectoRunDataFactory
+
+			public IEnumerable<VectoRunData> NextRun()
+			{
+				throw new NotImplementedException();
+			}
+
+			#endregion
+		}
+
+
+		public class Conventional : CompletedBusBase { }
+		public class HEV_S2 : CompletedBusBase { }
+		public class HEV_S3 : CompletedBusBase { }
+		public class HEV_S4 : CompletedBusBase { }
+		public class HEV_S_IEPC : CompletedBusBase { }
+		public class HEV_P1 : CompletedBusBase { }
+		public class HEV_P2 : CompletedBusBase { }
+		public class HEV_P2_5 : CompletedBusBase { }
+		public class HEV_P3 : CompletedBusBase { }
+		public class HEV_P4 : CompletedBusBase { }
+		public class PEV_E1 : CompletedBusBase { }
+		public class PEV_E2 : CompletedBusBase { }
+		public class PEV_E3 : CompletedBusBase { }
+		public class PEV_E4 : CompletedBusBase { }
+		public class PEV_E_IEPC : CompletedBusBase { }
 	}
 }
diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeHeavyLorryVectoRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeHeavyLorryVectoRunDataFactory.cs
index 738351dfe7..8d7d6267cd 100644
--- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeHeavyLorryVectoRunDataFactory.cs
+++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeHeavyLorryVectoRunDataFactory.cs
@@ -233,10 +233,13 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl
 
 
 
-
-	public class DeclarationModeHeavyLorryRunDataFactory
+	/// <summary>
+	/// This class is just used to improve the readability
+	/// </summary>
+	public abstract class DeclarationModeHeavyLorryRunDataFactory
 	{
 		
+		
 		public abstract class LorryBase : IVectoRunDataFactory
 		{
 			#region Implementation of IVectoRunDataFactory
@@ -249,7 +252,6 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl
 			#endregion
 		}
 
-
 		public class Conventional : LorryBase
 		{
 			
@@ -270,6 +272,11 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl
 
 		}
 
+		public class HEV_S_IEPC : LorryBase
+		{
+
+		}
+
 		public class HEV_P1 : LorryBase
 		{
 
@@ -295,8 +302,24 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl
 
 		}
 
+		public class PEV_E2 : LorryBase
+		{
 
+		}
 
+		public class PEV_E3 : LorryBase
+		{
+
+		}
+
+		public class PEV_E4 : LorryBase
+        {
+        }
+
+        public class PEV_E_IEPC : LorryBase
+		{
+
+		}
 	}
 
 
diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModePrimaryBusVectoRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModePrimaryBusVectoRunDataFactory.cs
index 5e162563ef..85dd672223 100644
--- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModePrimaryBusVectoRunDataFactory.cs
+++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModePrimaryBusVectoRunDataFactory.cs
@@ -173,5 +173,96 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl
 				mission, InputDataProvider.JobInputData.Vehicle, simulationRunData);
 			return simulationRunData;
 		}
+
+
+
+	}
+
+
+
+	public abstract class DeclarationModePrimaryBusRunDataFactory
+	{
+		public abstract class PrimaryBusBase : IVectoRunDataFactory
+		{
+			#region Implementation of IVectoRunDataFactory
+
+			public IEnumerable<VectoRunData> NextRun()
+			{
+				throw new NotImplementedException();
+			}
+
+			#endregion
+		}
+
+		public class Conventional : PrimaryBusBase
+		{
+
+		}
+
+		public class HEV_S2 : PrimaryBusBase
+		{
+
+		}
+
+		public class HEV_S3 : PrimaryBusBase
+		{
+
+		}
+
+		public class HEV_S4 : PrimaryBusBase
+		{
+
+		}
+
+		public class HEV_S_IEPC : PrimaryBusBase
+		{
+
+		}
+
+		public class HEV_P1 : PrimaryBusBase
+		{
+
+		}
+
+		public class HEV_P2 : PrimaryBusBase
+		{
+
+		}
+
+		public class HEV_P2_5 : PrimaryBusBase
+		{
+
+		}
+
+		public class HEV_P3 : PrimaryBusBase
+		{
+
+		}
+
+		public class HEV_P4 : PrimaryBusBase
+		{
+
+		}
+
+
+		public class PEV_E2 : PrimaryBusBase
+		{
+
+		}
+
+		public class PEV_E3 : PrimaryBusBase
+		{
+
+		}
+
+		public class PEV_E4 : PrimaryBusBase
+		{
+
+		}
+
+		public class PEV_E_IEPC : PrimaryBusBase
+		{
+
+		}
 	}
 }
diff --git a/VectoCore/VectoCore/InputData/Reader/VectoRunDataFactoryFactory.cs b/VectoCore/VectoCore/InputData/Reader/VectoRunDataFactoryFactory.cs
index b8eb907781..ccab1688dd 100644
--- a/VectoCore/VectoCore/InputData/Reader/VectoRunDataFactoryFactory.cs
+++ b/VectoCore/VectoCore/InputData/Reader/VectoRunDataFactoryFactory.cs
@@ -16,6 +16,8 @@ namespace TUGraz.VectoCore.InputData.Reader
 {
 	public interface IInternalRunDataFactoryFactory
 	{
+		IVectoRunDataFactory CreateDeclarationCompletedBusRunDataFactory(VehicleCategory vehicleType, VectoSimulationJobType jobType,
+			ArchitectureID archId, bool exempted, bool iepc, bool ihpc);
 		IVectoRunDataFactory CreateDeclarationRunDataFactory(VehicleCategory vehicleType, VectoSimulationJobType jobType,
 			ArchitectureID archId, bool exempted, bool iepc, bool ihpc);
 	}
@@ -60,10 +62,19 @@ namespace TUGraz.VectoCore.InputData.Reader
 
 		private IVectoRunDataFactory CreateRunDataReader(IMultistageVIFInputData multistageVifInputData, IDeclarationReport report)
 		{
+			var vehicle = multistageVifInputData.MultistageJobInputData.PrimaryVehicleData.Vehicle;
 			if (multistageVifInputData.VehicleInputData == null) {
-				return new DeclarationModeCompletedMultistageBusVectoRunDataFactory(
-					multistageVifInputData.MultistageJobInputData,
-					report);
+				var ihpc = (vehicle.Components?.ElectricMachines?.Entries)?.Count(electric => electric.ElectricMachine.IHPCType != "None") > 0;
+				var iepc = (vehicle.Components?.IEPC != null);
+				return _internalFactory.CreateDeclarationRunDataFactory(vehicle.VehicleCategory,
+					vehicle.VehicleType,
+					vehicle.ArchitectureID,
+					vehicle.ExemptedVehicle, iepc, ihpc);
+
+
+				//return new DeclarationModeCompletedMultistageBusVectoRunDataFactory(
+				//	multistageVifInputData.MultistageJobInputData,
+				//	report);
 			}
 			else {
 				return new DeclarationModeMultistageBusVectoRunDataFactory(multistageVifInputData, report);
@@ -72,21 +83,7 @@ namespace TUGraz.VectoCore.InputData.Reader
 
 		private IVectoRunDataFactory CreateRunDataReader(IDeclarationInputDataProvider declDataProvider, IDeclarationReport report)
 		{
-			//var vehicleCategory = declDataProvider.JobInputData.Vehicle.VehicleCategory;
-			//if (vehicleCategory.IsLorry()) {
-			//	return new DeclarationModeTruckVectoRunDataFactory(declDataProvider, report);
-			//}
-
-			//if (vehicleCategory.IsBus())
-			//	switch (declDataProvider.JobInputData.Vehicle.VehicleCategory)
-			//	{
-			//		case VehicleCategory.HeavyBusCompletedVehicle:
-			//			return new DeclarationModeCompletedBusVectoRunDataFactory(declDataProvider, report);
-			//		case VehicleCategory.HeavyBusPrimaryVehicle:
-			//			return new DeclarationModePrimaryBusVectoRunDataFactory(declDataProvider, report);
-			//		default:
-			//			break;
-			//	}
+			//TODO: encapsulate arguments into object
 			var vehicle = declDataProvider.JobInputData.Vehicle;
 			try {
 				
diff --git a/VectoCore/VectoCore/InputData/Reader/VectoRunDataFactoryNinjectModule.cs b/VectoCore/VectoCore/InputData/Reader/VectoRunDataFactoryNinjectModule.cs
index 9647492cd2..907c6f7db2 100644
--- a/VectoCore/VectoCore/InputData/Reader/VectoRunDataFactoryNinjectModule.cs
+++ b/VectoCore/VectoCore/InputData/Reader/VectoRunDataFactoryNinjectModule.cs
@@ -24,11 +24,19 @@ namespace TUGraz.VectoCore.InputData.Reader
 			Bind<IVectoRunDataFactoryFactory>().To<VectoRunDataFactoryFactory>().InSingletonScope();
 
 
-			Bind<IInternalRunDataFactoryFactory>().ToFactory(() => new CombineArgumentsToNameInstanceProvider(
-				_vehicleStringHelper.CreateName,
-				6, 6,
-				typeof(IInternalRunDataFactoryFactory).GetMethod(nameof(IInternalRunDataFactoryFactory
-					.CreateDeclarationRunDataFactory)))).InSingletonScope();
+			Bind<IInternalRunDataFactoryFactory>().ToFactory(
+					() => new CombineArgumentsToNameInstanceProvider(
+										_vehicleStringHelper.CreateName,
+										6, 6,
+										typeof(IInternalRunDataFactoryFactory)
+											.GetMethod(nameof(IInternalRunDataFactoryFactory
+											.CreateDeclarationRunDataFactory)), 
+										typeof(IInternalRunDataFactoryFactory)
+											.GetMethod(nameof(IInternalRunDataFactoryFactory
+											.CreateDeclarationCompletedBusRunDataFactory))
+										)
+				)
+				.InSingletonScope();
 
 
 			#region Lorries
@@ -48,6 +56,11 @@ namespace TUGraz.VectoCore.InputData.Reader
 				_vehicleStringHelper.GetName(VehicleCategoryHelper.Lorry, VectoSimulationJobType.SerialHybridVehicle,
 					ArchitectureID.S4));
 
+			Bind<IVectoRunDataFactory>().To<DeclarationModeHeavyLorryRunDataFactory.HEV_S_IEPC>().Named(
+				_vehicleStringHelper.GetName(VehicleCategoryHelper.Lorry, VectoSimulationJobType.SerialHybridVehicle,
+					ArchitectureID.S_IEPC));
+			
+
 			Bind<IVectoRunDataFactory>().To<DeclarationModeHeavyLorryRunDataFactory.HEV_P1>().Named(
 				_vehicleStringHelper.GetName(VehicleCategoryHelper.Lorry, VectoSimulationJobType.ParallelHybridVehicle,
 					ArchitectureID.P1));
@@ -68,8 +81,125 @@ namespace TUGraz.VectoCore.InputData.Reader
 				_vehicleStringHelper.GetName(VehicleCategoryHelper.Lorry, VectoSimulationJobType.ParallelHybridVehicle,
 					ArchitectureID.P4));
 
+			Bind<IVectoRunDataFactory>().To<DeclarationModeHeavyLorryRunDataFactory.PEV_E2>().Named(
+				_vehicleStringHelper.GetName(VehicleCategoryHelper.Lorry, VectoSimulationJobType.BatteryElectricVehicle,
+					ArchitectureID.E2));
+
+			Bind<IVectoRunDataFactory>().To<DeclarationModeHeavyLorryRunDataFactory.PEV_E3>().Named(
+				_vehicleStringHelper.GetName(VehicleCategoryHelper.Lorry, VectoSimulationJobType.BatteryElectricVehicle,
+					ArchitectureID.E3));
+
+			Bind<IVectoRunDataFactory>().To<DeclarationModeHeavyLorryRunDataFactory.PEV_E4>().Named(
+				_vehicleStringHelper.GetName(VehicleCategoryHelper.Lorry, VectoSimulationJobType.BatteryElectricVehicle,
+					ArchitectureID.E4));
+
+			Bind<IVectoRunDataFactory>().To<DeclarationModeHeavyLorryRunDataFactory.PEV_E_IEPC>().Named(
+				_vehicleStringHelper.GetName(VehicleCategoryHelper.Lorry, VectoSimulationJobType.BatteryElectricVehicle,
+					ArchitectureID.E_IEPC));
+
+
 			#endregion
 
+			#region PrimaryBus
+			Bind<IVectoRunDataFactory>().To<DeclarationModePrimaryBusRunDataFactory.Conventional>().Named(
+				_vehicleStringHelper.GetName(VehicleCategoryHelper.PrimaryBus, VectoSimulationJobType.ConventionalVehicle));
+
+			Bind<IVectoRunDataFactory>().To<DeclarationModePrimaryBusRunDataFactory.HEV_S2>().Named(
+				_vehicleStringHelper.GetName(VehicleCategoryHelper.PrimaryBus, VectoSimulationJobType.SerialHybridVehicle,
+					ArchitectureID.S2));
+
+			Bind<IVectoRunDataFactory>().To<DeclarationModePrimaryBusRunDataFactory.HEV_S3>().Named(
+				_vehicleStringHelper.GetName(VehicleCategoryHelper.PrimaryBus, VectoSimulationJobType.SerialHybridVehicle,
+					ArchitectureID.S3));
+
+			Bind<IVectoRunDataFactory>().To<DeclarationModePrimaryBusRunDataFactory.HEV_S4>().Named(
+				_vehicleStringHelper.GetName(VehicleCategoryHelper.PrimaryBus, VectoSimulationJobType.SerialHybridVehicle,
+					ArchitectureID.S4));
+			Bind<IVectoRunDataFactory>().To<DeclarationModePrimaryBusRunDataFactory.HEV_S_IEPC>().Named(
+				_vehicleStringHelper.GetName(VehicleCategoryHelper.PrimaryBus, VectoSimulationJobType.SerialHybridVehicle,
+					ArchitectureID.S_IEPC));
+
+			Bind<IVectoRunDataFactory>().To<DeclarationModePrimaryBusRunDataFactory.HEV_P1>().Named(
+				_vehicleStringHelper.GetName(VehicleCategoryHelper.PrimaryBus, VectoSimulationJobType.ParallelHybridVehicle,
+					ArchitectureID.P1));
+
+			Bind<IVectoRunDataFactory>().To<DeclarationModePrimaryBusRunDataFactory.HEV_P2>().Named(
+				_vehicleStringHelper.GetName(VehicleCategoryHelper.PrimaryBus, VectoSimulationJobType.ParallelHybridVehicle,
+					ArchitectureID.P2));
+
+			Bind<IVectoRunDataFactory>().To<DeclarationModePrimaryBusRunDataFactory.HEV_P2_5>().Named(
+				_vehicleStringHelper.GetName(VehicleCategoryHelper.PrimaryBus, VectoSimulationJobType.ParallelHybridVehicle,
+					ArchitectureID.P2_5));
+
+			Bind<IVectoRunDataFactory>().To<DeclarationModePrimaryBusRunDataFactory.HEV_P3>().Named(
+				_vehicleStringHelper.GetName(VehicleCategoryHelper.PrimaryBus, VectoSimulationJobType.ParallelHybridVehicle,
+					ArchitectureID.P3));
+
+			Bind<IVectoRunDataFactory>().To<DeclarationModePrimaryBusRunDataFactory.HEV_P4>().Named(
+				_vehicleStringHelper.GetName(VehicleCategoryHelper.PrimaryBus, VectoSimulationJobType.ParallelHybridVehicle,
+					ArchitectureID.P4));
+
+			Bind<IVectoRunDataFactory>().To<DeclarationModePrimaryBusRunDataFactory.PEV_E2>().Named(
+				_vehicleStringHelper.GetName(VehicleCategoryHelper.PrimaryBus, VectoSimulationJobType.BatteryElectricVehicle,
+					ArchitectureID.E2));
+			Bind<IVectoRunDataFactory>().To<DeclarationModePrimaryBusRunDataFactory.PEV_E3>().Named(
+				_vehicleStringHelper.GetName(VehicleCategoryHelper.PrimaryBus, VectoSimulationJobType.BatteryElectricVehicle,
+					ArchitectureID.E3));
+			Bind<IVectoRunDataFactory>().To<DeclarationModePrimaryBusRunDataFactory.PEV_E4>().Named(
+				_vehicleStringHelper.GetName(VehicleCategoryHelper.PrimaryBus, VectoSimulationJobType.BatteryElectricVehicle,
+					ArchitectureID.E4));
+
+			Bind<IVectoRunDataFactory>().To<DeclarationModePrimaryBusRunDataFactory.PEV_E_IEPC>().Named(
+				_vehicleStringHelper.GetName(VehicleCategoryHelper.PrimaryBus, VectoSimulationJobType.BatteryElectricVehicle,
+					ArchitectureID.E_IEPC));
+			#endregion
+
+
+			#region CompletedBus
+			Bind<IVectoRunDataFactory>().To<DeclarationModeCompletedBusRunDataFactory.Conventional>().Named(
+				_vehicleStringHelper.GetName(VehicleCategoryHelper.CompletedBus, VectoSimulationJobType.ConventionalVehicle,
+					ArchitectureID.UNKNOWN));
+			Bind<IVectoRunDataFactory>().To<DeclarationModeCompletedBusRunDataFactory.HEV_S2>().Named(
+				_vehicleStringHelper.GetName(VehicleCategoryHelper.CompletedBus, VectoSimulationJobType.SerialHybridVehicle,
+					ArchitectureID.S2));
+			Bind<IVectoRunDataFactory>().To<DeclarationModeCompletedBusRunDataFactory.HEV_S3>().Named(
+				_vehicleStringHelper.GetName(VehicleCategoryHelper.CompletedBus, VectoSimulationJobType.SerialHybridVehicle,
+					ArchitectureID.S3));
+			Bind<IVectoRunDataFactory>().To<DeclarationModeCompletedBusRunDataFactory.HEV_S4>().Named(
+				_vehicleStringHelper.GetName(VehicleCategoryHelper.CompletedBus, VectoSimulationJobType.SerialHybridVehicle,
+					ArchitectureID.S4));
+			Bind<IVectoRunDataFactory>().To<DeclarationModeCompletedBusRunDataFactory.HEV_S_IEPC>().Named(
+				_vehicleStringHelper.GetName(VehicleCategoryHelper.CompletedBus, VectoSimulationJobType.SerialHybridVehicle,
+					ArchitectureID.S_IEPC));
+			Bind<IVectoRunDataFactory>().To<DeclarationModeCompletedBusRunDataFactory.HEV_P1>().Named(
+				_vehicleStringHelper.GetName(VehicleCategoryHelper.CompletedBus, VectoSimulationJobType.ParallelHybridVehicle,
+					ArchitectureID.P1));
+			Bind<IVectoRunDataFactory>().To<DeclarationModeCompletedBusRunDataFactory.HEV_P2>().Named(
+				_vehicleStringHelper.GetName(VehicleCategoryHelper.CompletedBus, VectoSimulationJobType.ParallelHybridVehicle,
+					ArchitectureID.P2));
+			Bind<IVectoRunDataFactory>().To<DeclarationModeCompletedBusRunDataFactory.HEV_P2_5>().Named(
+				_vehicleStringHelper.GetName(VehicleCategoryHelper.CompletedBus, VectoSimulationJobType.ParallelHybridVehicle,
+					ArchitectureID.P2_5));
+			Bind<IVectoRunDataFactory>().To<DeclarationModeCompletedBusRunDataFactory.HEV_P3>().Named(
+				_vehicleStringHelper.GetName(VehicleCategoryHelper.CompletedBus, VectoSimulationJobType.ParallelHybridVehicle,
+					ArchitectureID.P3));
+			Bind<IVectoRunDataFactory>().To<DeclarationModeCompletedBusRunDataFactory.HEV_P4>().Named(
+				_vehicleStringHelper.GetName(VehicleCategoryHelper.CompletedBus, VectoSimulationJobType.ParallelHybridVehicle,
+					ArchitectureID.P4));
+			Bind<IVectoRunDataFactory>().To<DeclarationModeCompletedBusRunDataFactory.PEV_E2>().Named(
+				_vehicleStringHelper.GetName(VehicleCategoryHelper.CompletedBus, VectoSimulationJobType.BatteryElectricVehicle,
+					ArchitectureID.E2));
+			Bind<IVectoRunDataFactory>().To<DeclarationModeCompletedBusRunDataFactory.PEV_E3>().Named(
+				_vehicleStringHelper.GetName(VehicleCategoryHelper.CompletedBus, VectoSimulationJobType.BatteryElectricVehicle,
+					ArchitectureID.E3));
+			Bind<IVectoRunDataFactory>().To<DeclarationModeCompletedBusRunDataFactory.PEV_E4>().Named(
+				_vehicleStringHelper.GetName(VehicleCategoryHelper.CompletedBus, VectoSimulationJobType.BatteryElectricVehicle,
+					ArchitectureID.E4));
+			Bind<IVectoRunDataFactory>().To<DeclarationModeCompletedBusRunDataFactory.PEV_E_IEPC>().Named(
+				_vehicleStringHelper.GetName(VehicleCategoryHelper.CompletedBus, VectoSimulationJobType.BatteryElectricVehicle,
+					ArchitectureID.E_IEPC));
+
+			#endregion
 
 		}
 		#endregion 
diff --git a/VectoCore/VectoCoreTest/InputData/RunDataFactory/RunDataFactoryFactoryTest.cs b/VectoCore/VectoCoreTest/InputData/RunDataFactory/RunDataFactoryFactoryTest.cs
index 2f45df2608..9e1ea3606a 100644
--- a/VectoCore/VectoCoreTest/InputData/RunDataFactory/RunDataFactoryFactoryTest.cs
+++ b/VectoCore/VectoCoreTest/InputData/RunDataFactory/RunDataFactoryFactoryTest.cs
@@ -38,6 +38,7 @@ namespace TUGraz.VectoCore.Tests.InputData.RunDataFactory
 			Assert.IsTrue(result.GetType() == expectedType);
 		}
 
+		#region HeavyLorry
 		[TestCase()]
 		public void ConventionalHeavyLorryTest()
 		{
@@ -75,6 +76,15 @@ namespace TUGraz.VectoCore.Tests.InputData.RunDataFactory
 			CreateRunDataFactory(input, typeof(DeclarationModeHeavyLorryRunDataFactory.HEV_S4));
 		}
 
+		[TestCase()]
+		public void HEV_S_IEPC_HeavyLorryTest()
+		{
+			var input = new Mock<IDeclarationInputDataProvider>()
+				.HEV(ArchitectureID.S_IEPC)
+				.Lorry();
+			CreateRunDataFactory(input, typeof(DeclarationModeHeavyLorryRunDataFactory.HEV_S_IEPC));
+		}
+
 		[TestCase()]
 		public void HEV_P1_HeavyLorryTest()
 		{
@@ -118,6 +128,305 @@ namespace TUGraz.VectoCore.Tests.InputData.RunDataFactory
 			CreateRunDataFactory(input, typeof(DeclarationModeHeavyLorryRunDataFactory.HEV_P4));
 		}
 
+		[TestCase()]
+		public void PEV_E2_HeavyLorryTest()
+		{
+			var input = new Mock<IDeclarationInputDataProvider>()
+				.PEV(ArchitectureID.E2)
+				.Lorry();
+			CreateRunDataFactory(input, typeof(DeclarationModeHeavyLorryRunDataFactory.PEV_E2));
+		}
+		[TestCase()]
+		public void PEV_E3_HeavyLorryTest()
+		{
+			var input = new Mock<IDeclarationInputDataProvider>()
+				.PEV(ArchitectureID.E3)
+				.Lorry();
+			CreateRunDataFactory(input, typeof(DeclarationModeHeavyLorryRunDataFactory.PEV_E3));
+		}
+		[TestCase()]
+		public void PEV_E4_HeavyLorryTest()
+		{
+			var input = new Mock<IDeclarationInputDataProvider>()
+				.PEV(ArchitectureID.E4)
+				.Lorry();
+			CreateRunDataFactory(input, typeof(DeclarationModeHeavyLorryRunDataFactory.PEV_E4));
+		}
+		[TestCase()]
+		public void PEV_E_IEPC_HeavyLorryTest()
+		{
+			var input = new Mock<IDeclarationInputDataProvider>()
+				.PEV(ArchitectureID.E_IEPC)
+				.Lorry();
+			CreateRunDataFactory(input, typeof(DeclarationModeHeavyLorryRunDataFactory.PEV_E_IEPC));
+		}
+
+
+		#endregion HeavyLorry
+		#region PrimaryBus
+		[TestCase()]
+		public void ConventionalPrimaryBus()
+		{
+			var input = new Mock<IDeclarationInputDataProvider>()
+				.Conventional()
+				.PrimaryBus();
+			CreateRunDataFactory(input, typeof(DeclarationModePrimaryBusRunDataFactory.Conventional));
+		}
+
+		[TestCase()]
+		public void HEV_S2_PrimaryBus()
+		{
+			var input = new Mock<IDeclarationInputDataProvider>()
+				.HEV(ArchitectureID.S2)
+				.PrimaryBus();
+			CreateRunDataFactory(input, typeof(DeclarationModePrimaryBusRunDataFactory.HEV_S2));
+		}
+
+		[TestCase()]
+		public void HEV_S3_PrimaryBus()
+		{
+			var input = new Mock<IDeclarationInputDataProvider>()
+				.HEV(ArchitectureID.S3)
+				.PrimaryBus();
+			CreateRunDataFactory(input, typeof(DeclarationModePrimaryBusRunDataFactory.HEV_S3));
+		}
+
+		[TestCase()]
+		public void HEV_S4_PrimaryBus()
+		{
+			var input = new Mock<IDeclarationInputDataProvider>()
+				.HEV(ArchitectureID.S4)
+				.PrimaryBus();
+			CreateRunDataFactory(input, typeof(DeclarationModePrimaryBusRunDataFactory.HEV_S4));
+		}
+
+		[TestCase()]
+		public void HEV_S_IEPC_PrimaryBus()
+		{
+			var input = new Mock<IDeclarationInputDataProvider>()
+				.HEV(ArchitectureID.S_IEPC)
+				.PrimaryBus();
+			CreateRunDataFactory(input, typeof(DeclarationModePrimaryBusRunDataFactory.HEV_S_IEPC));
+		}
+
+		[TestCase()]
+		public void HEV_P1_PrimaryBus()
+		{
+			var input = new Mock<IDeclarationInputDataProvider>()
+				.HEV(ArchitectureID.P1)
+				.PrimaryBus();
+			CreateRunDataFactory(input, typeof(DeclarationModePrimaryBusRunDataFactory.HEV_P1));
+		}
+
+
+		[TestCase()]
+		public void HEV_P2_PrimaryBus()
+		{
+			var input = new Mock<IDeclarationInputDataProvider>()
+				.HEV(ArchitectureID.S2)
+				.PrimaryBus();
+			CreateRunDataFactory(input, typeof(DeclarationModePrimaryBusRunDataFactory.HEV_S2));
+		}
+
+
+		[TestCase()]
+		public void HEV_P3_PrimaryBus()
+		{
+			var input = new Mock<IDeclarationInputDataProvider>()
+				.HEV(ArchitectureID.P3)
+				.PrimaryBus();
+			CreateRunDataFactory(input, typeof(DeclarationModePrimaryBusRunDataFactory.HEV_P3));
+		}
+
+
+		[TestCase()]
+		public void HEV_P2_5_PrimaryBus()
+		{
+			var input = new Mock<IDeclarationInputDataProvider>()
+				.HEV(ArchitectureID.P2_5)
+				.PrimaryBus();
+			CreateRunDataFactory(input, typeof(DeclarationModePrimaryBusRunDataFactory.HEV_P2_5));
+		}
+
+
+		[TestCase()]
+		public void HEV_P4_PrimaryBus()
+		{
+			var input = new Mock<IDeclarationInputDataProvider>()
+				.HEV(ArchitectureID.P4)
+				.PrimaryBus();
+			CreateRunDataFactory(input, typeof(DeclarationModePrimaryBusRunDataFactory.HEV_P4));
+		}
+
+
+		[TestCase()]
+		public void PEV_E2_PrimaryBus()
+		{
+			var input = new Mock<IDeclarationInputDataProvider>()
+				.PEV(ArchitectureID.E2)
+				.PrimaryBus();
+			CreateRunDataFactory(input, typeof(DeclarationModePrimaryBusRunDataFactory.PEV_E2));
+		}
+
+
+		[TestCase()]
+		public void PEV_E3_PrimaryBus()
+		{
+			var input = new Mock<IDeclarationInputDataProvider>()
+				.PEV(ArchitectureID.E3)
+				.PrimaryBus();
+			CreateRunDataFactory(input, typeof(DeclarationModePrimaryBusRunDataFactory.PEV_E3));
+		}
+		[TestCase()]
+		public void PEV_E4_PrimaryBus()
+		{
+			var input = new Mock<IDeclarationInputDataProvider>()
+				.PEV(ArchitectureID.E4)
+				.PrimaryBus();
+			CreateRunDataFactory(input, typeof(DeclarationModePrimaryBusRunDataFactory.PEV_E4));
+		}
+
+		[TestCase()]
+		public void PEV_E_IEPC_PrimaryBus()
+		{
+			var input = new Mock<IDeclarationInputDataProvider>()
+				.PEV(ArchitectureID.E_IEPC)
+				.PrimaryBus();
+			CreateRunDataFactory(input, typeof(DeclarationModePrimaryBusRunDataFactory.PEV_E_IEPC));
+		}
+
+		#endregion PrimaryBus
+
+		[TestCase()]
+		public void ConventionalCompletedBus()
+		{
+			var input = new Mock<IDeclarationInputDataProvider>()
+				.Conventional()
+				.CompletedBus();
+			CreateRunDataFactory(input, typeof(DeclarationModeCompletedBusRunDataFactory.Conventional));
+		}
+
+		[TestCase()]
+		public void HEV_S2_CompletedBus()
+		{
+			var input = new Mock<IDeclarationInputDataProvider>()
+				.HEV(ArchitectureID.S2)
+				.CompletedBus();
+			CreateRunDataFactory(input, typeof(DeclarationModeCompletedBusRunDataFactory.HEV_S2));
+		}
+
+		[TestCase()]
+		public void HEV_S3_CompletedBus()
+		{
+			var input = new Mock<IDeclarationInputDataProvider>()
+				.HEV(ArchitectureID.S3)
+				.CompletedBus();
+			CreateRunDataFactory(input, typeof(DeclarationModeCompletedBusRunDataFactory.HEV_S3));
+		}
+
+		[TestCase()]
+		public void HEV_S4_CompletedBus()
+		{
+			var input = new Mock<IDeclarationInputDataProvider>()
+				.HEV(ArchitectureID.S4)
+				.CompletedBus();
+			CreateRunDataFactory(input, typeof(DeclarationModeCompletedBusRunDataFactory.HEV_S4));
+		}
+
+		[TestCase()]
+		public void HEV_S_IEPC_CompletedBus()
+		{
+			var input = new Mock<IDeclarationInputDataProvider>()
+				.HEV(ArchitectureID.S_IEPC)
+				.CompletedBus();
+			CreateRunDataFactory(input, typeof(DeclarationModeCompletedBusRunDataFactory.HEV_S_IEPC));
+		}
+
+		[TestCase()]
+		public void HEV_P1_CompletedBus()
+		{
+			var input = new Mock<IDeclarationInputDataProvider>()
+				.HEV(ArchitectureID.P1)
+				.CompletedBus();
+			CreateRunDataFactory(input, typeof(DeclarationModeCompletedBusRunDataFactory.HEV_P1));
+		}
+
+
+		[TestCase()]
+		public void HEV_P2_CompletedBus()
+		{
+			var input = new Mock<IDeclarationInputDataProvider>()
+				.HEV(ArchitectureID.S2)
+				.CompletedBus();
+			CreateRunDataFactory(input, typeof(DeclarationModeCompletedBusRunDataFactory.HEV_S2));
+		}
+
+
+		[TestCase()]
+		public void HEV_P3_CompletedBus()
+		{
+			var input = new Mock<IDeclarationInputDataProvider>()
+				.HEV(ArchitectureID.P3)
+				.CompletedBus();
+			CreateRunDataFactory(input, typeof(DeclarationModeCompletedBusRunDataFactory.HEV_P3));
+		}
+
+
+		[TestCase()]
+		public void HEV_P2_5_CompletedBus()
+		{
+			var input = new Mock<IDeclarationInputDataProvider>()
+				.HEV(ArchitectureID.P2_5)
+				.CompletedBus();
+			CreateRunDataFactory(input, typeof(DeclarationModeCompletedBusRunDataFactory.HEV_P2_5));
+		}
+
+
+		[TestCase()]
+		public void HEV_P4_CompletedBus()
+		{
+			var input = new Mock<IDeclarationInputDataProvider>()
+				.HEV(ArchitectureID.P4)
+				.CompletedBus();
+			CreateRunDataFactory(input, typeof(DeclarationModeCompletedBusRunDataFactory.HEV_P4));
+		}
+
+
+		[TestCase()]
+		public void PEV_E2_CompletedBus()
+		{
+			var input = new Mock<IDeclarationInputDataProvider>()
+				.PEV(ArchitectureID.E2)
+				.CompletedBus();
+			CreateRunDataFactory(input, typeof(DeclarationModeCompletedBusRunDataFactory.PEV_E2));
+		}
+
+
+		[TestCase()]
+		public void PEV_E3_CompletedBus()
+		{
+			var input = new Mock<IDeclarationInputDataProvider>()
+				.PEV(ArchitectureID.E3)
+				.CompletedBus();
+			CreateRunDataFactory(input, typeof(DeclarationModeCompletedBusRunDataFactory.PEV_E3));
+		}
+		[TestCase()]
+		public void PEV_E4_CompletedBus()
+		{
+			var input = new Mock<IDeclarationInputDataProvider>()
+				.PEV(ArchitectureID.E4)
+				.CompletedBus();
+			CreateRunDataFactory(input, typeof(DeclarationModeCompletedBusRunDataFactory.PEV_E4));
+		}
+
+		[TestCase()]
+		public void PEV_E_IEPC_CompletedBus()
+		{
+			var input = new Mock<IDeclarationInputDataProvider>()
+				.PEV(ArchitectureID.E_IEPC)
+				.CompletedBus();
+			CreateRunDataFactory(input, typeof(DeclarationModeCompletedBusRunDataFactory.PEV_E_IEPC));
+		}
 	}
 
 	internal static class InputDataProviderMockExtension
@@ -133,14 +442,20 @@ namespace TUGraz.VectoCore.Tests.InputData.RunDataFactory
 
 		internal static Mock<IDeclarationInputDataProvider> HEV(this Mock<IDeclarationInputDataProvider> mock, ArchitectureID arch)
 		{
-
-
 			mock.Setup(p => p.JobInputData.Vehicle.ArchitectureID).Returns(arch);
 			mock.Setup(p => p.JobInputData.JobType).Returns(arch.ToString().StartsWith("P")
 				? VectoSimulationJobType.ParallelHybridVehicle
 				: VectoSimulationJobType.SerialHybridVehicle);
 			return mock;
 		}
+
+		internal static Mock<IDeclarationInputDataProvider> PEV(this Mock<IDeclarationInputDataProvider> mock, ArchitectureID arch)
+		{
+			mock.Setup(p => p.JobInputData.Vehicle.ArchitectureID).Returns(arch);
+			mock.Setup(p => p.JobInputData.JobType).Returns(
+				VectoSimulationJobType.BatteryElectricVehicle);
+			return mock;
+		}
 		internal static Mock<IDeclarationInputDataProvider> Lorry(this Mock<IDeclarationInputDataProvider> mock)
 		{
 			mock.Setup(provider => provider.JobInputData.Vehicle.VehicleCategory)
@@ -148,6 +463,18 @@ namespace TUGraz.VectoCore.Tests.InputData.RunDataFactory
 			return mock;
 		}
 
+		internal static Mock<IDeclarationInputDataProvider> PrimaryBus(this Mock<IDeclarationInputDataProvider> mock)
+		{
+			mock.Setup(p => p.JobInputData.Vehicle.VehicleCategory).Returns(VehicleCategory.HeavyBusPrimaryVehicle);
+			return mock;
+		}
+
+		internal static Mock<IDeclarationInputDataProvider> CompletedBus(this Mock<IDeclarationInputDataProvider> mock)
+		{
+			mock.Setup(p => p.JobInputData.Vehicle.VehicleCategory).Returns(VehicleCategory.HeavyBusCompletedVehicle);
+			return mock;
+		}
+
 	}
 
 }
-- 
GitLab