From 351f2b81a721efc9a055bb58909062dffd3bdfd7 Mon Sep 17 00:00:00 2001
From: "VKMTHD\\franzjosefkober" <franz.josef.kober@ivt.tugraz.at>
Date: Thu, 16 Sep 2021 15:16:01 +0200
Subject: [PATCH] added additional test, to test vehicle data of the different
 vehicle types

---
 .../XMLDeclarationVehicleDataProvider.cs      | 83 ++++++++++++-------
 .../Conventional_heavyLorry_AMT_n_opt.xml     |  2 +
 VectoCore/VectoCoreTest/VectoCoreTest.csproj  |  1 +
 .../XMLDeclarationInputv210VehicleDataTest.cs | 56 +++++++++++++
 4 files changed, 113 insertions(+), 29 deletions(-)
 create mode 100644 VectoCore/VectoCoreTest/XML/XMLDeclarationInputv210VehicleDataTest.cs

diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs
index ae7a18e116..0ce478497a 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs
@@ -576,8 +576,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 		public override IList<ITorqueLimitInputData> TorqueLimits =>
 			ElementExists(XMLNames.Vehicle_TorqueLimits) ? base.TorqueLimits : null;
 
-		public override VehicleCategory VehicleCategory => VehicleCategoryHelper.Parse(GetString("ChassisConfiguration"));
-
+		public override VehicleCategory VehicleCategory => VehicleCategoryHelper.Parse(GetString(XMLNames.ChassisConfiguration));
+		
 		public override LegislativeClass? LegislativeClass => GetString(XMLNames.Vehicle_LegislativeCategory)?.ParseEnum<LegislativeClass>();
 
 		public override bool SleeperCab => false;
@@ -1124,45 +1124,40 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 		#endregion
 	}
 
-
 	// ---------------------------------------------------------------------------------------
 
-	public class XMLDeclarationHeavyLorryDataProviderV210 : XMLDeclarationVehicleDataProviderV20
+	public abstract class XMLVehicleDataProviderHelperV201 : XMLDeclarationVehicleDataProviderV20
 	{
-		public new static readonly XNamespace NAMESPACE_URI = XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V210_JOBS;
-		public new const string XSD_TYPE = "Vehicle_Conventional_HeavyLorryDeclarationType";
-		public new static readonly string QUALIFIED_XSD_TYPE =
-			XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE);
-		
-		public XMLDeclarationHeavyLorryDataProviderV210(
-			IXMLDeclarationJobInputData jobData, XmlNode xmlNode, string sourceFile) 
+		public virtual string PowertrainPositionPrefix => "P";
+
+		protected XMLVehicleDataProviderHelperV201(IXMLDeclarationJobInputData jobData, XmlNode xmlNode, string sourceFile) 
 			: base(jobData, xmlNode, sourceFile) { }
+
 		
 		#region Overrides of XMLDeclarationVehicleDataProviderV10
 		
-		public override IAdvancedDriverAssistantSystemDeclarationInputData ADAS => ADASReader.ADASInputData;
-
-		public override IList<ITorqueLimitInputData> TorqueLimits =>
-			ElementExists(XMLNames.Vehicle_TorqueLimits) ? base.TorqueLimits : null;
-
-		public override TankSystem? TankSystem =>
-			ElementExists(XMLNames.Vehicle_NgTankSystem)
-				? EnumHelper.ParseEnum<TankSystem>(GetString(XMLNames.Vehicle_NgTankSystem))
-				: (TankSystem?)null;
+		public override VehicleCategory VehicleCategory
+		{
+			get
+			{
+				var val = GetString(XMLNames.ChassisConfiguration);
+				return "Rigid Lorry".Equals(val, StringComparison.InvariantCultureIgnoreCase) 
+					? VehicleCategory.RigidTruck : val.ParseEnum<VehicleCategory>();
+			}
+		}
+		
+		public override Kilogram CurbMassChassis => GetDouble(XMLNames.CorrectedActualMass).SI<Kilogram>();
 
+		public override Kilogram GrossVehicleMassRating => GetDouble(XMLNames.TPMLM).SI<Kilogram>();
+		
 		#endregion
-	}
-
-	// ---------------------------------------------------------------------------------------
+		
+		#region Overrides of XMLDeclarationVehicleDataProviderV20
 
-	public abstract class XMLVehicleDataProviderHelperV201 : XMLDeclarationVehicleDataProviderV20
-	{
-		public virtual string PowertrainPositionPrefix => "P";
+		public override bool SleeperCab => GetBool(XMLNames.Vehicle_SleeperCab);
 
-		protected XMLVehicleDataProviderHelperV201(IXMLDeclarationJobInputData jobData, XmlNode xmlNode, string sourceFile) 
-			: base(jobData, xmlNode, sourceFile) { }
+		#endregion
 
-		
 		public override Dictionary<PowertrainPosition, List<Tuple<int, TableData>>> ElectricMotorTorqueLimits
 			=> ElementExists(XMLNames.ElectricMotorTorqueLimits) ? ReadElectricMotorTorqueLimits() : null;
 		
@@ -1211,6 +1206,36 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 		}
 	}
 
+	// ---------------------------------------------------------------------------------------
+
+	public class XMLDeclarationHeavyLorryDataProviderV210 : XMLVehicleDataProviderHelperV201
+	{
+		public new static readonly XNamespace NAMESPACE_URI = XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V210_JOBS;
+		public new const string XSD_TYPE = "Vehicle_Conventional_HeavyLorryDeclarationType";
+		public new static readonly string QUALIFIED_XSD_TYPE =
+			XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE);
+
+		public XMLDeclarationHeavyLorryDataProviderV210(
+			IXMLDeclarationJobInputData jobData, XmlNode xmlNode, string sourceFile)
+			: base(jobData, xmlNode, sourceFile) { }
+
+		#region Overrides of XMLDeclarationVehicleDataProviderV10
+
+		public override IAdvancedDriverAssistantSystemDeclarationInputData ADAS => ADASReader.ADASInputData;
+
+		public override IList<ITorqueLimitInputData> TorqueLimits =>
+			ElementExists(XMLNames.Vehicle_TorqueLimits) ? base.TorqueLimits : null;
+
+		public override TankSystem? TankSystem =>
+			ElementExists(XMLNames.Vehicle_NgTankSystem)
+				? EnumHelper.ParseEnum<TankSystem>(GetString(XMLNames.Vehicle_NgTankSystem))
+				: (TankSystem?)null;
+
+		#endregion
+	}
+
+
+
 
 	// ---------------------------------------------------------------------------------------
 
diff --git a/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.10/WithoutOptionalEntries/Conventional_heavyLorry_AMT_n_opt.xml b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.10/WithoutOptionalEntries/Conventional_heavyLorry_AMT_n_opt.xml
index efb56b1778..50f6b8c0ea 100644
--- a/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.10/WithoutOptionalEntries/Conventional_heavyLorry_AMT_n_opt.xml
+++ b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.10/WithoutOptionalEntries/Conventional_heavyLorry_AMT_n_opt.xml
@@ -13,6 +13,7 @@
 		<TechnicalPermissibleMaximumLadenMass>12000</TechnicalPermissibleMaximumLadenMass>
 		<IdlingSpeed>650</IdlingSpeed>
 		<RetarderType>None</RetarderType>
+		<RetarderRatio>2.000</RetarderRatio>
 		<AngledriveType>None</AngledriveType>
 		<PTO xmlns:v2.0="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0" xsi:type="v2.0:PTOType">
 			<v2.0:PTOShaftsGearWheels>none</v2.0:PTOShaftsGearWheels>
@@ -20,6 +21,7 @@
 		</PTO>
 		<ZeroEmissionVehicle>false</ZeroEmissionVehicle>
 		<VocationalVehicle>false</VocationalVehicle>
+		<NgTankSystem>Compressed</NgTankSystem>
 		<SleeperCab>false</SleeperCab>
 		<VehicleTypeApprovalNumber>ASDF</VehicleTypeApprovalNumber>
 		<ADAS xsi:type="ADAS_Conventional_Type">
diff --git a/VectoCore/VectoCoreTest/VectoCoreTest.csproj b/VectoCore/VectoCoreTest/VectoCoreTest.csproj
index ad2ff63748..ad95b7fb0f 100644
--- a/VectoCore/VectoCoreTest/VectoCoreTest.csproj
+++ b/VectoCore/VectoCoreTest/VectoCoreTest.csproj
@@ -237,6 +237,7 @@
     <Compile Include="XML\XMLCompleteBusReaderTest.cs" />
     <Compile Include="XML\XMLDeclarationInputTest.cs" />
     <Compile Include="XML\XMLDeclarationInputv210.cs" />
+    <Compile Include="XML\XMLDeclarationInputv210VehicleDataTest.cs" />
     <Compile Include="XML\XMLDeclarationReaderVersionsTest.cs" />
     <Compile Include="XML\XMLEngineeringInputRefTest.cs" />
     <Compile Include="XML\XMLEngineeringInputSingleTest.cs" />
diff --git a/VectoCore/VectoCoreTest/XML/XMLDeclarationInputv210VehicleDataTest.cs b/VectoCore/VectoCoreTest/XML/XMLDeclarationInputv210VehicleDataTest.cs
new file mode 100644
index 0000000000..4c054b6298
--- /dev/null
+++ b/VectoCore/VectoCoreTest/XML/XMLDeclarationInputv210VehicleDataTest.cs
@@ -0,0 +1,56 @@
+using System.IO;
+using System.Xml;
+using Ninject;
+using NUnit.Framework;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.InputData.FileIO.XML;
+using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Interfaces;
+
+namespace TUGraz.VectoCore.Tests.XML
+{
+	[TestFixture]
+	public class XMLDeclarationInputv210VehicleDataTest
+    {
+		protected IXMLInputDataReader xmlInputReader;
+		private IKernel _kernel;
+
+
+		private const string Optional_TESTS_DIR = @"TestData\XML\XMLReaderDeclaration\SchemaVersion2.10\WithoutOptionalEntries";
+
+		[OneTimeSetUp]
+		public void RunBeforeAnyTests()
+		{
+			Directory.SetCurrentDirectory(TestContext.CurrentContext.TestDirectory);
+
+			_kernel = new StandardKernel(new VectoNinjectModule());
+			xmlInputReader = _kernel.Get<IXMLInputDataReader>();
+		}
+
+		[TestCase(@"Conventional_heavyLorry_AMT_n_opt.xml", Optional_TESTS_DIR)]
+		public void TestConventionalHeavyLorryVehicleData(string jobfile, string testDir) 
+		{
+			var filename = Path.Combine(testDir, jobfile);
+			var dataProvider = xmlInputReader.CreateDeclaration(XmlReader.Create(filename));
+			
+			var vehicle = (IXMLDeclarationVehicleData) dataProvider.JobInputData.Vehicle;
+			Assert.NotNull(vehicle);
+			Assert.AreEqual(LegislativeClass.N3, vehicle.LegislativeClass);
+			Assert.AreEqual(VehicleCategory.RigidTruck, vehicle.VehicleCategory);
+			Assert.AreEqual(AxleConfiguration.AxleConfig_4x2, vehicle.AxleConfiguration);
+			Assert.AreEqual(6000.SI<Kilogram>(), vehicle.CurbMassChassis);
+			Assert.AreEqual(12000.SI<Kilogram>(), vehicle.GrossVehicleMassRating);
+			Assert.AreEqual(650.00.RPMtoRad(), vehicle.EngineIdleSpeed);
+			Assert.AreEqual(RetarderType.None, vehicle.RetarderType);
+			Assert.AreEqual(2.000, vehicle.RetarderRatio);
+			Assert.AreEqual(AngledriveType.None, vehicle.AngledriveType);
+			Assert.IsNotNull(vehicle.PTOTransmissionInputData);
+			Assert.AreEqual(false, vehicle.ZeroEmissionVehicle);
+			Assert.AreEqual(false, vehicle.VocationalVehicle);
+			Assert.AreEqual(TankSystem.Compressed, vehicle.TankSystem);
+			Assert.AreEqual(false, vehicle.SleeperCab);
+			Assert.AreEqual("ASDF", vehicle.VehicleTypeApprovalNumber);
+		}
+	}
+}
-- 
GitLab