Something went wrong on our end
Forked from
VECTO / VECTO Sim
2060 commits behind the upstream repository.
-
Harald MARTINI authoredHarald MARTINI authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
MockUpVectoTest.cs 55.70 KiB
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Xml;
using System.Xml.Linq;
using Newtonsoft.Json;
using Ninject;
using NUnit.Framework;
using TUGraz.VectoCommon.Exceptions;
using TUGraz.VectoCommon.InputData;
using TUGraz.VectoCommon.Models;
using TUGraz.VectoCommon.Utils;
using TUGraz.VectoCore;
using TUGraz.VectoCore.InputData.FileIO.JSON;
using TUGraz.VectoCore.InputData.FileIO.XML;
using TUGraz.VectoCore.Models.Simulation;
using TUGraz.VectoCore.Models.Simulation.Impl;
using TUGraz.VectoCore.OutputData;
using TUGraz.VectoCore.OutputData.FileIO;
using TUGraz.VectoCore.Tests.XML.Reports;
using TUGraz.VectoCore.Utils;
using XmlDocumentType = TUGraz.VectoCore.Utils.XmlDocumentType;
namespace VectoMockupTest
{
[TestFixture]
public class MockUpVectoTest
{
private const string BasePath = @"TestData\XML\XMLReaderDeclaration\SchemaVersion2.4\Distributed\";
private const string BasePathMockup = @"TestData\XML\XMLReaderDeclaration\SchemaVersion2.4\MockupBusTest\";
private const string XsdPath = @".. /../../../../VectoCore/VectoCore/Resources/XSD";
private IKernel _vectoKernel;
private ISimulatorFactoryFactory _simFactoryFactory;
//private ISimulatorFactory _simulatorFactory;
private IXMLInputDataReader _inputDataReader;
#region Heavy Lorry Testfiles
protected const string ConventionalHeavyLorry = BasePath + @"HeavyLorry\Conventional_heavyLorry_AMT.xml";
protected const string ConventionalHeavyLorry_DifferentTyres = BasePathMockup + @"HeavyLorry\Conventional_heavyLorry_AMT_DifferentTyres.xml";
protected const string ConventionalHeavyLorry_AT_Angledrive = BasePathMockup + @"HeavyLorry\Conventional_heavyLorry_AT_Angledrive.xml";
protected const string HEV_Px_HeavyLorry = BasePath + @"HeavyLorry\HEV_heavyLorry_AMT_Px_IHPC.xml";
protected const string HEV_S2_HeavyLorry = BasePath + @"HeavyLorry\HEV-S_heavyLorry_AMT_S2.xml";
protected const string HEV_S3_HeavyLorry = BasePath + @"HeavyLorry\HEV-S_heavyLorry_S3.xml";
protected const string HEV_S3_HeavyLorry_ovc = BasePath + @"HeavyLorry\HEV-S_heavyLorry_S3_ovc.xml";
protected const string HEV_S4_HeavyLorry = BasePath + @"HeavyLorry\HEV-S_heavyLorry_S4.xml";
protected const string HEV_IEPC_S_HeavyLorry = BasePath + @"HeavyLorry\HEV-S_heavyLorry_IEPC-S.xml";
protected const string PEV_E2_HeavyLorry = BasePath + @"HeavyLorry\PEV_heavyLorry_AMT_E2.xml";
protected const string PEV_E3_HeavyLorry = BasePath + @"HeavyLorry\PEV_heavyLorry_E3.xml";
protected const string PEV_E4_HeavyLorry = BasePath + @"HeavyLorry\PEV_heavyLorry_E4.xml";
protected const string PEV_IEPC_HeavyLorry = BasePath + @"HeavyLorry\IEPC_heavyLorry.xml";
protected const string HEV_IHPC_HeavyLorry = BasePathMockup + @"HeavyLorry\HEV_heavyLorry_IHPC.xml";
protected const string HEV_Px_HeavyLorry_ADC = BasePathMockup + @"HeavyLorry\HEV_heavyLorry_Px_ADC.xml";
protected const string HEV_S3_HeavyLorry_ADC = BasePathMockup + @"HeavyLorry\HEV-S_heavyLorry_S3_ADC_GenSetADC.xml";
protected const string HEV_Px_HeavyLorry_SuperCap = BasePathMockup + @"HeavyLorry\HEV_heavyLorry_Px_SuperCap.xml";
#endregion
#region Medium Lorry Testfiles
protected const string Conventional_mediumLorry_AMT = BasePath + @"MediumLorry/Conventional_mediumLorry_AMT.xml";
protected const string HEV_S_mediumLorry_AMT_S2 = BasePath + @"MediumLorry/HEV-S_mediumLorry_AMT_S2.xml";
protected const string HEV_S_mediumLorry_IEPC_S = BasePath + @"MediumLorry/HEV-S_mediumLorry_IEPC-S.xml";
protected const string HEV_S_mediumLorry_S3 = BasePath + @"MediumLorry/HEV-S_mediumLorry_S3.xml";
protected const string HEV_S_mediumLorry_S4 = BasePath + @"MediumLorry/HEV-S_mediumLorry_S4.xml";
protected const string HEV_mediumLorry_AMT_Px = BasePath + @"MediumLorry/HEV_mediumLorry_AMT_Px.xml";
protected const string IEPC_mediumLorry = BasePath + @"MediumLorry/IEPC_mediumLorry.xml";
protected const string PEV_mediumLorry_AMT_E2 = BasePath + @"MediumLorry/PEV_mediumLorry_AMT_E2.xml";
protected const string PEV_mediumLorry_AMT_E2_EM_Std = BasePath + @"MediumLorry/PEV_mediumLorry_AMT_E2_EM_Std.xml";
protected const string PEV_mediumLorry_APT_N_E2 = BasePath + @"MediumLorry/PEV_mediumLorry_APT-N_E2.xml";
protected const string PEV_mediumLorry_E3 = BasePath + @"MediumLorry/PEV_mediumLorry_E3.xml";
protected const string PEV_mediumLorry_E4 = BasePath + @"MediumLorry/PEV_mediumLorry_E4.xml";
protected const string HEV_mediumLorry_IHPC = BasePathMockup + @"MediumLorry/HEV_mediumLorry_IHPC.xml";
protected const string HEV_mediumLorry_Px_SuperCap = BasePathMockup + @"MediumLorry/HEV_mediumLorry_Px_SuperCap.xml";
protected const string PEV_mediumLorry_AMT_E2_BatStd = BasePathMockup + @"MediumLorry/PEV_mediumLorry_AMT_E2_BatteryStd.xml";
//protected const string HEV_mediumLorry_Px_ADC = BasePathMockup + @"MediumLorry/HEV_heavyLorry_IHPC.xml";
//protected const string HEV_mediumLorry_S3_ADC_GenSetADC = BasePathMockup + @"MediumLorry/HEV_heavyLorry_IHPC.xml";
#endregion
#region PrimaryBus
protected const string Conventional_PrimaryBus = BasePath + @"PrimaryBus\Conventional_primaryBus_AMT.xml";
protected const string Conventional_PrimaryBus_AT_Angledrive = BasePathMockup + @"PrimaryBus\Conventional_primaryBus_AT_Angledrive.xml";
protected const string Conventional_PrimaryBus_Tyres = BasePath + @"PrimaryBus\Conventional_primaryBus_AMT_DifferentTyres.xml";
protected const string HEV_Px_PrimaryBus = BasePath + @"PrimaryBus\HEV_primaryBus_AMT_Px.xml";
protected const string HEV_IHPC_PrimaryBus = BasePathMockup + @"PrimaryBus\HEV_primaryBus_AMT_IHPC.xml";
protected const string HEV_Px_PrimaryBus_SuperCap = BasePathMockup + @"PrimaryBus\HEV_primaryBus_AMT_Px_SuperCap.xml";
protected const string HEV_S2_PrimaryBus = BasePath + @"PrimaryBus\HEV-S_primaryBus_AMT_S2.xml";
protected const string HEV_S2_PrimaryBus_GenSetADC = BasePathMockup + @"PrimaryBus\HEV-S_primaryBus_AMT_S2_GenSetADC.xml";
protected const string HEV_S2_PrimaryBus_ADC = BasePathMockup + @"PrimaryBus\HEV-S_primaryBus_AMT_S2_ADC.xml";
protected const string HEV_S3_PrimaryBus = BasePath + @"PrimaryBus\HEV-S_primaryBus_S3.xml";
protected const string HEV_S4_PrimaryBus = BasePath + @"PrimaryBus\HEV-S_primaryBus_S4.xml";
protected const string HEV_IEPC_S_PrimaryBus = BasePath + @"PrimaryBus\HEV-S_primaryBus_IEPC-S.xml";
protected const string PEV_E2_PrimaryBus = BasePath + @"PrimaryBus\PEV_primaryBus_AMT_E2.xml";
protected const string PEV_E3_PrimaryBus = BasePath + @"PrimaryBus\PEV_primaryBus_E3.xml";
protected const string PEV_E4_PrimaryBus = BasePath + @"PrimaryBus\PEV_primaryBus_E4.xml";
protected const string PEV_IEPC_PrimaryBus = BasePath + @"PrimaryBus\IEPC_primaryBus.xml";
protected const string PEV_IEPC_std_PrimaryBus = BasePathMockup + @"PrimaryBus\IEPC_primaryBus_StdValues.xml";
protected const string PEV_E2_PrimaryBus_StdEM = BasePathMockup + @"PrimaryBus\PEV_primaryBus_AMT_E2_EMStd.xml";
protected const string PEV_E2_PrimaryBus_StdBat = BasePathMockup + @"PrimaryBus\PEV_primaryBus_AMT_E2_BatteryStd.xml";
protected const string Conventional_PrimaryBus_DF = BasePathMockup + @"PrimaryBus\Conventional_primaryBus_AMT_DF.xml";
#endregion
#region Complete(d) Bus Input
protected const string Conventional_CompletedBusInput = BasePath + @"CompletedBus\Conventional_completedBus_2.xml";
protected const string Conventional_CompletedBusInput_TypeApproval = BasePath + @"CompletedBus\Conventional_completedBus_2_TypeApprovalNumber.xml";
protected const string Conventional_CompletedBusInput_AirdragV10 = BasePathMockup + @"CompletedBus\Conventional_completedBus_AirdragV10.xml";
protected const string Conventional_CompletedBusInput_AirdragV20 = BasePathMockup + @"CompletedBus\Conventional_completedBus_AirdragV20.xml";
protected const string HEV_CompletedBusInput = BasePath + @"CompletedBus\HEV_completedBus_2.xml";
protected const string PEV_CompletedBusInput = BasePath + @"CompletedBus\PEV_completedBus_2.xml";
protected const string PEV_IEPC_CompletedBusInput = BasePath + @"CompletedBus\IEPC_completedBus_2.xml";
#endregion
#region Interim Bus Input
protected const string Conventional_InterimBusInput = BasePathMockup + @"CompletedBus\Conventional_InterimBus_Min.xml";
protected const string Conventional_InterimBusInput_AirdragV10 = BasePathMockup + @"CompletedBus\Conventional_interimBus_AirdragV10.xml";
protected const string Conventional_InterimBusInput_AirdragV20 = BasePathMockup + @"CompletedBus\Conventional_interimBus_AirdragV20.xml";
protected const string HEV_InterimBusInput = BasePathMockup + @"CompletedBus\HEV_InterimBus_Min.xml";
protected const string PEV_InterimBusInput = BasePathMockup + @"CompletedBus\PEV_InterimBus_Min.xml";
protected const string PEV_IEPC_InterimBusInput = BasePathMockup + @"CompletedBus\IEPC_InterimBus_Min.xml";
#endregion
#region interim bus
protected const string Conventional_InterimBus =
@"TestData\XML\XMLReaderDeclaration\SchemaVersionMultistage.0.1\vecto_multistage_consolidated_multiple_stages.xml";
protected const string Conventional_StageInput =
@"TestData\XML\XMLReaderDeclaration\SchemaVersion2.4\vecto_vehicle-stage_input_full-sample.xml";
#endregion
#region completed bus
protected const string Conventional_CompletedBus = @"TestData\XML\XMLReaderDeclaration\SchemaVersionMultistage.0.1\vecto_multistage_conventional_final_vif.VIF_Report_1.xml";
#endregion
#region special cases multistage
private const string TestDataDir = "TestData\\";
private const string CompleteDiesel = TestDataDir + "Integration\\Multistage\\newVifCompletedConventional.vecto";
private const string CompleteExempted = TestDataDir + "Integration\\Multistage\\newVifExempted.vecto";
private const string CompleteExemptedWithoutTPMLM = TestDataDir + "Integration\\Multistage\\newVifExempted-noTPMLM.vecto";
private string CompletedWithoutADAS = TestDataDir + "Integration\\Multistage\\newVifCompletedConventional-noADAS.vecto";
private const string InterimExempted = TestDataDir + "Integration\\Multistage\\newVifExemptedIncomplete.vecto";
private const string InterimDiesel = TestDataDir + "Integration\\Multistage\\newVifInterimDiesel.vecto";
#endregion
#region GroupTest
private const string GroupTestDir = @"TestData\XML\XMLReaderDeclaration\GroupTest\";
#endregion
[OneTimeSetUp]
public void OneTimeSetup()
{
_vectoKernel = new StandardKernel(
new VectoNinjectModule()
);
_simFactoryFactory = _vectoKernel.Get<ISimulatorFactoryFactory>();
Assert.NotNull(_simFactoryFactory);
_inputDataReader = _vectoKernel.Get<IXMLInputDataReader>();
Assert.NotNull(_inputDataReader);
}
[SetUp]
public void Setup()
{
//SimulatorFactory.MockUpRun = true;
}
private void Clearfiles(FileOutputWriter fileWriter)
{
IList<string> filesToBeCleared = new List<string>() {
fileWriter.XMLPrimaryVehicleReportName,
fileWriter.XMLFullReportName,
fileWriter.XMLCustomerReportName
};
foreach (var fileName in filesToBeCleared) {
if (File.Exists(fileName)) {
File.Delete(fileName);
}
}
}
private string[] CopyInputFile(params string[] fileNames)
{
var subDirectory = Path.Combine( "MockupReports", TestContext.CurrentContext.Test.Name, "Input");
Directory.CreateDirectory(Path.GetFullPath(subDirectory));
var retVal = new List<string>();
foreach (var file in fileNames) {
var output = Path.Combine(subDirectory, Path.GetFileName(file));
File.Copy(file, output, true);
retVal.Add(output);
}
return retVal.ToArray();
}
public FileOutputWriter GetOutputFileWriter(string subDirectory, string originalFilePath)
{
subDirectory = Path.Combine("MockupReports",subDirectory);
Directory.CreateDirectory(Path.GetFullPath(subDirectory));
var path = Path.Combine(Path.Combine(Path.GetFullPath(subDirectory)), Path.GetFileName(originalFilePath));
return new FileOutputWriter(path);
}
[TestCase(ConventionalHeavyLorry, TestName = "ConventionalHeavyLorry")]
[TestCase(ConventionalHeavyLorry_DifferentTyres, TestName = "ConventionalHeavyLorry_DifferentTyres")]
[TestCase(ConventionalHeavyLorry_AT_Angledrive, TestName = "ConventionalHeavyLorry_AT_Angledrive")]
//[TestCase(ConventionalHeavyLorry, false, TestName = "ConventionalHeavyLorryNoMockup")]
[TestCase(HEV_S2_HeavyLorry, TestName = "HEV_S2_HeavyLorry")]
[TestCase(HEV_S3_HeavyLorry, TestName = "HEV_S3_HeavyLorry")]
[TestCase(HEV_S3_HeavyLorry_ovc, TestName = "HEV_S3_HeavyLorry_ovc")]
[TestCase(HEV_S4_HeavyLorry, TestName = "HEV_S4_HeavyLorry")]
[TestCase(HEV_Px_HeavyLorry, TestName = "HEV_Px_HeavyLorry")]
[TestCase(PEV_E2_HeavyLorry, TestName = "PEV_E2_HeavyLorry")]
//[TestCase(PEV_E2_HeavyLorry, false, TestName = "PEV_E2_HeavyLorryNoMockup")]
[TestCase(PEV_E3_HeavyLorry, TestName = "PEV_E3_HeavyLorry")]
[TestCase(PEV_E4_HeavyLorry, TestName = "PEV_E4_HeavyLorry")]
[TestCase(PEV_IEPC_HeavyLorry, TestName = "PEV_IEPC_HeavyLorry")]
[TestCase(HEV_IEPC_S_HeavyLorry, TestName = "HEV_IEPC_S_HeavyLorry")]
[TestCase(HEV_IHPC_HeavyLorry, TestName = "HEV_IHPC_HeavyLorry")]
[TestCase(HEV_Px_HeavyLorry_ADC, TestName = "HEV_Px_HeavyLorry_ADC")]
[TestCase(HEV_S3_HeavyLorry_ADC, TestName = "HEV_S3_HeavyLorry_ADC")]
[TestCase(HEV_Px_HeavyLorry_SuperCap, TestName = "HEV_Px_HeavyLorry_SuperCap")]
//[NonParallelizable]
[TestCase(Conventional_mediumLorry_AMT, TestName = "Conventional_Medium_Lorry")]
[TestCase(HEV_S_mediumLorry_AMT_S2, TestName = "HEV_S2_Medium_Lorry")]
[TestCase(HEV_S_mediumLorry_IEPC_S, TestName = "HEV_IEPC_Medium_Lorry")]
[TestCase(HEV_S_mediumLorry_S3, TestName = "HEV_S3_Medium_Lorry")]
[TestCase(HEV_S_mediumLorry_S4, TestName = "HEV_S4_Medium_Lorry")]
[TestCase(HEV_mediumLorry_AMT_Px, TestName = "HEV_Px_Medium_Lorry")]
[TestCase(IEPC_mediumLorry, TestName = "PEV_IEPC_Medium_Lorry")]
[TestCase(PEV_mediumLorry_AMT_E2, TestName = "PEV_E2_Medium_Lorry")]
[TestCase(PEV_mediumLorry_AMT_E2_EM_Std, TestName = "PEV_E2_std_Medium_Lorry")]
[TestCase(PEV_mediumLorry_APT_N_E2, TestName = "PEV_E2_Medium_Lorry_2")]
[TestCase(PEV_mediumLorry_E3, TestName = "PEV_E3_Medium_Lorry")]
[TestCase(PEV_mediumLorry_E4, TestName = "PEV_E4_Medium_Lorry")]
[TestCase(HEV_mediumLorry_IHPC, TestName = "HEV_IHPC_MediumLorry")]
[TestCase(HEV_mediumLorry_Px_SuperCap, TestName = "HEV_Px_Medium_Lorry_SuperCap")]
[TestCase(PEV_mediumLorry_AMT_E2_BatStd, TestName = "PEV_E2_Medium_Lorry_BatteryStd")]
public void LorryMockupTest(string fileName, bool mockup = true)
{
CopyInputFile(fileName);
var inputProvider = _inputDataReader.Create(fileName);
var fileWriter = GetOutputFileWriter(TestContext.CurrentContext.Test.Name, fileName);
var sumWriter = new SummaryDataContainer(null);
var jobContainer = new JobContainer(sumWriter);
var _simulatorFactory =
_simFactoryFactory.Factory(ExecutionMode.Declaration, inputProvider, fileWriter, null, null, true);
Clearfiles(fileWriter);
jobContainer.AddRuns(_simulatorFactory);
jobContainer.Execute(false);
jobContainer.WaitFinished();
CheckFileExists(fileWriter);
Assert.IsTrue(MRF_CIF_WriterTestBase.ValidateAndPrint(XDocument.Load(fileWriter.XMLFullReportName), XmlDocumentType.ManufacturerReport), "MRF invalid");
Assert.IsTrue(MRF_CIF_WriterTestBase.ValidateAndPrint(XDocument.Load(fileWriter.XMLCustomerReportName), XmlDocumentType.CustomerReport), "CIF invalid");
}
[TestCase(Conventional_PrimaryBus, TestName = "ConventionalPrimaryBus")]
[TestCase(Conventional_PrimaryBus_AT_Angledrive, TestName = "ConventionalPrimaryBus_AT_Angledrive")]
[TestCase(Conventional_PrimaryBus_Tyres, TestName = "ConventionalPrimaryBus Tyres")]
[TestCase(HEV_IEPC_S_PrimaryBus, TestName="HEV_IEPC_S_PrimaryBus")]
[TestCase(HEV_Px_PrimaryBus, TestName="HEV_Px_PrimaryBus")]
[TestCase(HEV_IHPC_PrimaryBus, TestName = "HEV_IHPC_PrimaryBus")]
[TestCase(HEV_Px_PrimaryBus_SuperCap, TestName = "HEV_Px_PrimaryBus_SuperCap")]
[TestCase(HEV_S2_PrimaryBus, TestName="HEV_S2_PrimaryBus")]
[TestCase(HEV_S2_PrimaryBus_GenSetADC, TestName = "HEV_S2_PrimaryBus_GenSetADC")]
[TestCase(HEV_S2_PrimaryBus_ADC, TestName = "HEV_S2_PrimaryBus_ADC")]
[TestCase(HEV_S3_PrimaryBus, TestName = "HEV_S3_PrimaryBus")]
[TestCase(HEV_S4_PrimaryBus, TestName = "HEV_S4_PrimaryBus")]
[TestCase(PEV_E2_PrimaryBus, TestName="PEV_E2_PrimaryBus")]
[TestCase(PEV_E3_PrimaryBus, TestName = "PEV_E3_PrimaryBus")]
[TestCase(PEV_E4_PrimaryBus, TestName = "PEV_E4_PrimaryBus")]
[TestCase(PEV_IEPC_PrimaryBus, TestName="PEV_IEPC_PrimaryBus")]
[TestCase(PEV_IEPC_std_PrimaryBus, TestName = "PEV_IEPC-std_PrimaryBus")]
[TestCase(PEV_E2_PrimaryBus_StdEM, TestName = "PEV_E2_PrimaryBus_EM-Std")]
[TestCase(PEV_E2_PrimaryBus_StdBat, TestName = "PEV_E2_PrimaryBus_Battery-Std")]
[TestCase(Conventional_PrimaryBus_DF, TestName = "ConventionalPrimaryBus_DualFuel")]
public void PrimaryBusMockupTest(string fileName, bool mockup = true)
{
CopyInputFile(fileName);
var inputProvider = _inputDataReader.Create(fileName);
var fileWriter = GetOutputFileWriter(TestContext.CurrentContext.Test.Name, fileName);
var sumWriter = new SummaryDataContainer(null);
var jobContainer = new JobContainer(sumWriter);
var _simulatorFactory =
_simFactoryFactory.Factory(ExecutionMode.Declaration, inputProvider, fileWriter, null, null, true);
Clearfiles(fileWriter); //remove files from previous test runs
jobContainer.AddRuns(_simulatorFactory);
jobContainer.Execute(false);
jobContainer.WaitFinished();
CheckFileExists(fileWriter, CifShouldExist:false, PrimaryReportShouldExist:true);
Assert.IsTrue(MRF_CIF_WriterTestBase.ValidateAndPrint(XDocument.Load(fileWriter.XMLPrimaryVehicleReportName), XmlDocumentType.MultistepOutputData), "VIF invalid" );
Assert.IsTrue(MRF_CIF_WriterTestBase.ValidateAndPrint(XDocument.Load(fileWriter.XMLFullReportName), XmlDocumentType.ManufacturerReport), "MRF invalid");
}
//[TestCase(Conventional_InterimBus, Conventional_StageInput, TestName = "ConventionalInterimBus")]
//public void InterimBusMockupTest(string vifInput, string stageInputFile)
//{
// CopyInputFile(vifInput);
// //SimulatorFactory.MockUpRun = mockup;
// var multistageBusInput = _inputDataReader.Create(vifInput) as IMultistepBusInputDataProvider;
// Assert.NotNull(multistageBusInput);
// var stageInput = _inputDataReader.CreateDeclaration(stageInputFile);
// var fileWriter = GetOutputFileWriter(TestContext.CurrentContext.Test.Name, vifInput);
// var sumWriter = new SummaryDataContainer(null);
// var jobContainer = new JobContainer(sumWriter);
// var inputData = new XMLDeclarationVIFInputData(multistageBusInput, stageInput.JobInputData.Vehicle);
// var _simulatorFactory =
// _simFactoryFactory.Factory(ExecutionMode.Declaration, inputData, fileWriter, null, null, true);
// Clearfiles(fileWriter);
// jobContainer.AddRuns(_simulatorFactory);
// jobContainer.Execute(false);
// jobContainer.WaitFinished();
// CheckFileExists(fileWriter, checkMrf:false, checkCif: false, checkVif: true);
//}
//[TestCase(Conventional_CompletedBus, TestName = "ConventionalCompletedBus")]
//public void CompletedBusMockupTest(string fileName)
//{
// CopyInputFile(fileName);
// //SimulatorFactory.MockUpRun = mockup;
// XMLDeclarationVIFInputData input = null!;
// var fileWriter = GetOutputFileWriter(TestContext.CurrentContext.Test.Name, fileName);
// using (var reader = XmlReader.Create(fileName))
// {
// input = new XMLDeclarationVIFInputData(_inputDataReader.Create(fileName) as IMultistepBusInputDataProvider, null);
// fileWriter = new FileOutputVIFWriter(fileName, input.MultistageJobInputData.JobInputData.ManufacturingStages.Count);
// }
// var sumWriter = new SummaryDataContainer(null);
// var jobContainer = new JobContainer(sumWriter);
// var _simulatorFactory =
// _simFactoryFactory.Factory(ExecutionMode.Declaration, input, fileWriter, null, null, true);
// Clearfiles(fileWriter);
// jobContainer.AddRuns(_simulatorFactory);
// jobContainer.Execute(false);
// jobContainer.WaitFinished();
// CheckFileExists(fileWriter, checkCif: true, checkVif: false);
//}
//[TestCase(CompleteDiesel, TestName="CompleteDiesel")]
// [TestCase(CompleteExempted, TestName = "CompleteExempted Bus")]
// [TestCase(CompleteExemptedWithoutTPMLM, TestName = "CompleteExempted No TPMLM")]
//public void PrimaryAndCompletedTest(string fileName)
//{
// var fileWriter = GetOutputFileWriter(TestContext.CurrentContext.Test.Name, fileName);
// var sumWriter = new SummaryDataContainer(null);
// var jobContainer = new JobContainer(sumWriter);
// var input = JSONInputDataFactory.ReadJsonJob(fileName);
// var _simulatorFactory =
// _simFactoryFactory.Factory(ExecutionMode.Declaration, input, fileWriter, null, null, true);
// Clearfiles(fileWriter);
// jobContainer.AddRuns(_simulatorFactory);
// jobContainer.Execute(false);
// jobContainer.WaitFinished();
// CheckFileExists(fileWriter, checkCif: true, checkVif: true, checkMrf: true, checkPrimaryMrf: true);
//}
//[TestCase(InterimDiesel, TestName = "PrimaryAndInterim")]
//public void PrimaryAndInterim(string fileName)
//{
// var fileWriter = GetOutputFileWriter(TestContext.CurrentContext.Test.Name, fileName);
// var sumWriter = new SummaryDataContainer(null);
// var jobContainer = new JobContainer(sumWriter);
// var input = JSONInputDataFactory.ReadJsonJob(fileName);
// var _simulatorFactory =
// _simFactoryFactory.Factory(ExecutionMode.Declaration, input, fileWriter, null, null, true);
// Clearfiles(fileWriter);
// jobContainer.AddRuns(_simulatorFactory);
// jobContainer.Execute(false);
// jobContainer.WaitFinished();
// CheckFileExists(fileWriter, checkCif: false, checkVif: true, checkMrf:false, checkPrimaryMrf:true);
//}
[TestCase(Conventional_PrimaryBus_Tyres, Conventional_InterimBusInput, "Conventional", TestName = "Interim_Conventional_Bus_DifferentTyres")]
[TestCase(Conventional_PrimaryBus_AT_Angledrive, Conventional_InterimBusInput, "Conventional", TestName = "Interim_Conventional_Bus_AT_Angledrive")]
[TestCase(Conventional_PrimaryBus, Conventional_InterimBusInput_AirdragV10, "Conventional", TestName = "InterimConventionalBusAirdrag_v1_0")]
[TestCase(Conventional_PrimaryBus, Conventional_InterimBusInput_AirdragV20, "Conventional", TestName = "InterimConventionalBusAirdrag_v2_0")]
[TestCase(Conventional_PrimaryBus_DF, Conventional_InterimBusInput, "Conventional", TestName = "Interim_ConventionalPrimaryBus_DualFuel")]
[TestCase(HEV_IEPC_S_PrimaryBus, HEV_InterimBusInput, "IEPC-S", "HEV", TestName = "Interim HEV_IEPC_S_Bus")]
[TestCase(HEV_Px_PrimaryBus, HEV_InterimBusInput, "Px", "HEV", TestName = "Interim HEV_Px_Bus")]
[TestCase(HEV_IHPC_PrimaryBus, HEV_InterimBusInput, "Px", "HEV", TestName = "Interim HEV_IHPC_Bus")]
[TestCase(HEV_S2_PrimaryBus, HEV_InterimBusInput, "Sx", "HEV", TestName = "Interim HEV_S2_Bus")]
[TestCase(HEV_S3_PrimaryBus, HEV_InterimBusInput, "Sx", "HEV", TestName = "Interim HEV_S3_Bus")]
[TestCase(HEV_S4_PrimaryBus, HEV_InterimBusInput, "Sx", "HEV", TestName = "Interim HEV_S4_Bus")]
[TestCase(PEV_E2_PrimaryBus, PEV_InterimBusInput, "Ex", "PEV", TestName = "Interim PEV_E2_Bus")]
[TestCase(PEV_E3_PrimaryBus, PEV_InterimBusInput, "Ex", "PEV", TestName = "Interim PEV_E3_Bus")]
[TestCase(PEV_E4_PrimaryBus, PEV_InterimBusInput, "Ex", "PEV", TestName = "Interim PEV_E4_Bus")]
[TestCase(PEV_IEPC_PrimaryBus, PEV_IEPC_InterimBusInput, "IEPC", TestName = "Interim PEV_IEPC_Bus")]
[TestCase(PEV_IEPC_std_PrimaryBus, PEV_IEPC_InterimBusInput, "IEPC", TestName = "Interim PEV_IEPC-std_Bus")]
[TestCase(PEV_E2_PrimaryBus_StdEM, PEV_InterimBusInput, "Ex", "PEV", TestName = "Interim PEV_E2_Bus_EM-Std")]
public void InterimTest(string primaryBusInput, string interimBusInput, params string[] expectedType)
{
CopyInputFile(interimBusInput);
// VIF + interim input => VIF
// (approach: first simulate primary on its own to have an up-to-date VIF
// (no need to maintain this in the testfiles)
// setting up testcase
// run primary simulation
var inputProvider = _inputDataReader.Create(primaryBusInput);
var fileWriter = GetOutputFileWriter(TestContext.CurrentContext.Test.Name, primaryBusInput);
var sumWriter = new SummaryDataContainer(null);
var jobContainer = new JobContainer(sumWriter);
var _simulatorFactory =
_simFactoryFactory.Factory(ExecutionMode.Declaration, inputProvider, fileWriter, null, null, true);
Clearfiles(fileWriter); //remove files from previous test runs
jobContainer.AddRuns(_simulatorFactory);
jobContainer.Execute(false);
jobContainer.WaitFinished();
CheckFileExists(fileWriter, CifShouldExist: false, PrimaryReportShouldExist: true, MrfShouldExist: true);
File.Delete(fileWriter.XMLFullReportName);
CopyInputFile(fileWriter.XMLPrimaryVehicleReportName);
// done preparing testcase...
// this is the actual test: run completed simulation
var interimJob = GenerateJsonJobCompletedBus(fileWriter.XMLPrimaryVehicleReportName, interimBusInput, TestContext.CurrentContext.Test.Name);
var interimInputData = JSONInputDataFactory.ReadJsonJob(interimJob);
var interimFileWriter = GetOutputFileWriter(TestContext.CurrentContext.Test.Name, interimBusInput);
var interimSumWriter = new SummaryDataContainer(null);
var interimJobContainer = new JobContainer(interimSumWriter);
var completedSimulatorFactory =
_simFactoryFactory.Factory(ExecutionMode.Declaration, interimInputData, interimFileWriter, null, null, true);
Clearfiles(interimFileWriter); //remove files from previous test runs
interimJobContainer.AddRuns(completedSimulatorFactory);
interimJobContainer.Execute(false);
interimJobContainer.WaitFinished();
// assertions
File.Delete(fileWriter.XMLPrimaryVehicleReportName);
CheckFileExists(interimFileWriter, VifShouldExist: true, MrfShouldExist: false, CifShouldExist: false);
CheckElementTypeNameContains(interimFileWriter.XMLMultistageReportFileName, "Vehicle", expectedType);
}
[TestCase(Conventional_PrimaryBus_Tyres, Conventional_InterimBusInput, "Conventional", TestName = "PrimaryAndInterim Conventional Bus Different Tyres")]
[TestCase(Conventional_PrimaryBus_DF, Conventional_InterimBusInput, "Conventional", TestName = "PrimaryAndInterim ConventionalPrimaryBus_DualFuel")]
[TestCase(Conventional_PrimaryBus_AT_Angledrive, Conventional_InterimBusInput, "Conventional", TestName = "PrimaryAndInterim ConventionalPrimaryBus_AT_Angledrive")]
[TestCase(HEV_IEPC_S_PrimaryBus, HEV_InterimBusInput, "IEPC-S", "HEV", TestName = "PrimaryAndInterim HEV_IEPC_S_PrimaryBus")]
[TestCase(HEV_Px_PrimaryBus, HEV_InterimBusInput, "Px", "HEV", TestName = "PrimaryAndInterim HEV_Px_PrimaryBus")]
[TestCase(HEV_IHPC_PrimaryBus, HEV_InterimBusInput, "Px", "HEV", TestName = "PrimaryAndInterim HEV_IHPC_PrimaryBus")]
[TestCase(HEV_S2_PrimaryBus, HEV_InterimBusInput, "Sx", "HEV", TestName = "PrimaryAndInterim HEV_S2_PrimaryBus")]
[TestCase(HEV_S3_PrimaryBus, HEV_InterimBusInput, "Sx", "HEV", TestName = "PrimaryAndInterim HEV_S3_PrimaryBus")]
[TestCase(HEV_S4_PrimaryBus, HEV_InterimBusInput, "Sx", "HEV", TestName = "PrimaryAndInterim HEV_S4_PrimaryBus")]
[TestCase(PEV_E2_PrimaryBus, PEV_InterimBusInput, "Ex", "PEV", TestName = "PrimaryAndInterim PEV_E2_PrimaryBus")]
[TestCase(PEV_E3_PrimaryBus, PEV_InterimBusInput, "Ex", "PEV", TestName = "PrimaryAndInterim PEV_E3_PrimaryBus")]
[TestCase(PEV_E4_PrimaryBus, PEV_InterimBusInput, "Ex", "PEV", TestName = "PrimaryAndInterim PEV_E4_PrimaryBus")]
[TestCase(PEV_IEPC_PrimaryBus, PEV_IEPC_InterimBusInput, "IEPC", TestName = "PrimaryAndInterim PEV_IEPC_PrimaryBus")]
[TestCase(PEV_IEPC_std_PrimaryBus, PEV_IEPC_InterimBusInput, "IEPC", TestName = "PrimaryAndInterim PEV_IEPC-std_PrimaryBus")]
[TestCase(PEV_E2_PrimaryBus_StdEM, PEV_InterimBusInput, "Ex", "PEV", TestName = "PrimaryAndInterim PEV_E2_PrimaryBus_EM-Std")]
public void PrimaryWithInterimTest(string primaryBusInput, string interimInput, params string[] expectedType)
{
var copied = CopyInputFile(primaryBusInput, interimInput);
// complete: primary input + complete input (full) => MRF Primary, VIF (step 1), MRF Complete, CIF Complete
// (approach: first simulate primary on its own to have an up-to-date VIF
// (no need to maintain this in the testfiles)
var job = GenerateJsonJobCompleteBus(copied[0], copied[1], TestContext.CurrentContext.Test.Name);
var input = JSONInputDataFactory.ReadJsonJob(job);
var fileWriter = GetOutputFileWriter(TestContext.CurrentContext.Test.Name, interimInput);
var sumWriter = new SummaryDataContainer(null);
var jobContainer = new JobContainer(sumWriter);
var completedSimulatorFactory =
_simFactoryFactory.Factory(ExecutionMode.Declaration, input, fileWriter, null, null, true);
Clearfiles(fileWriter); //remove files from previous test runs
jobContainer.AddRuns(completedSimulatorFactory);
jobContainer.Execute(false);
jobContainer.WaitFinished();
// assertions
CheckFileExists(fileWriter, PrimaryMrfShouldExist: true, VifShouldExist: true, CifShouldExist: false, MrfShouldExist: false);
CheckElementTypeNameContains(fileWriter.XMLMultistageReportFileName, "Vehicle", expectedType);
}
[TestCase(Conventional_PrimaryBus_Tyres, Conventional_CompletedBusInput, "Conventional", TestName = "Complete Conventional Bus Different Tyres")]
[TestCase(Conventional_PrimaryBus_DF, Conventional_CompletedBusInput, "Conventional", TestName = "Complete ConventionalPrimaryBus_DualFuel")]
[TestCase(Conventional_PrimaryBus_AT_Angledrive, Conventional_CompletedBusInput, "Conventional", TestName = "Complete ConventionalPrimaryBus_AT_Angledrive")]
[TestCase(Conventional_PrimaryBus, Conventional_CompletedBusInput_TypeApproval, "Conventional", TestName = "Complete Conventional Bus Type Approval")]
[TestCase(HEV_IEPC_S_PrimaryBus, HEV_CompletedBusInput, "IEPC-S", "HEV", TestName = "Complete HEV_IEPC_S_PrimaryBus")]
[TestCase(HEV_Px_PrimaryBus, HEV_CompletedBusInput, "Px", "HEV", TestName = "Complete HEV_Px_PrimaryBus")]
[TestCase(HEV_IHPC_PrimaryBus, HEV_CompletedBusInput, "Px", "HEV", TestName = "Complete HEV_IHPC_PrimaryBus")]
[TestCase(HEV_S2_PrimaryBus, HEV_CompletedBusInput, "S2", "HEV", TestName = "Complete HEV_S2_PrimaryBus")]
[TestCase(HEV_S3_PrimaryBus, HEV_CompletedBusInput, "S3", "HEV", TestName = "Complete HEV_S3_PrimaryBus")]
[TestCase(HEV_S4_PrimaryBus, HEV_CompletedBusInput, "S4", "HEV", TestName = "Complete HEV_S4_PrimaryBus")]
[TestCase(PEV_E2_PrimaryBus, PEV_CompletedBusInput, "E2", "PEV", TestName = "Complete PEV_E2_PrimaryBus")]
[TestCase(PEV_E3_PrimaryBus, PEV_CompletedBusInput, "E3", "PEV", TestName = "Complete PEV_E3_PrimaryBus")]
[TestCase(PEV_E4_PrimaryBus, PEV_CompletedBusInput, "E4", "PEV", TestName = "Complete PEV_E4_PrimaryBus")]
[TestCase(PEV_IEPC_PrimaryBus, PEV_IEPC_CompletedBusInput, "IEPC", TestName = "Complete PEV_IEPC_PrimaryBus")]
[TestCase(PEV_IEPC_std_PrimaryBus, PEV_IEPC_CompletedBusInput, "IEPC", TestName = "Complete PEV_IEPC-std_PrimaryBus")]
[TestCase(PEV_E2_PrimaryBus_StdEM, PEV_CompletedBusInput, "E2", "PEV", TestName = "Complete PEV_E2_PrimaryBus_EM-Std")]
public void CompleteTest(string primaryBusInput, string completeBusInput, params string[] expectedType)
{
CopyInputFile(primaryBusInput, completeBusInput);
// complete: primary input + complete input (full) => MRF Primary, VIF (step 1), MRF Complete, CIF Complete
// (approach: first simulate primary on its own to have an up-to-date VIF
// (no need to maintain this in the testfiles)
var completeJob = GenerateJsonJobCompleteBus(primaryBusInput, completeBusInput, TestContext.CurrentContext.Test.Name);
var completeBusinput = JSONInputDataFactory.ReadJsonJob(completeJob);
var completeFileWriter = GetOutputFileWriter(TestContext.CurrentContext.Test.Name, completeBusInput);
var completeSumWriter = new SummaryDataContainer(null);
var completeJobContainer = new JobContainer(completeSumWriter);
var completedSimulatorFactory =
_simFactoryFactory.Factory(ExecutionMode.Declaration, completeBusinput, completeFileWriter, null, null, true);
Clearfiles(completeFileWriter); //remove files from previous test runs
completeJobContainer.AddRuns(completedSimulatorFactory);
completeJobContainer.Execute(false);
completeJobContainer.WaitFinished();
// assertions
CheckFileExists(completeFileWriter, PrimaryMrfShouldExist: true, VifShouldExist: true, CifShouldExist: true, MrfShouldExist: true);
CheckElementTypeNameContains(completeFileWriter.XMLMultistageReportFileName, "Vehicle", expectedType);
//var xmlComparer = new XMLElementComparer();
//xmlComparer.AddDocument(primaryBusInput, XmlDocumentType.DeclarationJobData);
//xmlComparer.AddDocument(completeFileWriter.XMLFullReportName, XmlDocumentType.ManufacturerReport);
//Assert.IsTrue(xmlComparer.AreEqual(primaryBusInput, "/tns:VectoInputDeclaration/v2.0:Vehicle/ZeroEmissionVehicle",
// completeFileWriter.XMLFullReportName, "/mrf:VectoOutput/mrf:Data/Vehicle/ZeroEmissionHDV"));
}
[TestCase(Conventional_PrimaryBus_Tyres, Conventional_CompletedBusInput, "Conventional", TestName = "Completed Conventional Bus Different Tyres")]
[TestCase(Conventional_PrimaryBus_DF, Conventional_CompletedBusInput, "Conventional", TestName = "Completed ConventionalPrimaryBus_DualFuel")]
[TestCase(Conventional_PrimaryBus_AT_Angledrive, Conventional_CompletedBusInput, "Conventional", TestName = "Completed Conventional Bus_AT_Angledrive")]
[TestCase(HEV_IEPC_S_PrimaryBus, HEV_CompletedBusInput, "IEPC-S", "HEV", TestName = "Completed HEV_IEPC_S_PrimaryBus")]
[TestCase(HEV_Px_PrimaryBus, HEV_CompletedBusInput, "Px", "HEV", TestName = "Completed HEV_Px_PrimaryBus")]
[TestCase(HEV_IHPC_PrimaryBus, HEV_CompletedBusInput, "Px", "HEV", TestName = "Completed HEV_IHPC_PrimaryBus")]
[TestCase(HEV_S2_PrimaryBus, HEV_CompletedBusInput, "Sx", "HEV", TestName = "Completed HEV_S2_PrimaryBus")]
[TestCase(HEV_S3_PrimaryBus, HEV_CompletedBusInput, "Sx", "HEV", TestName = "Completed HEV_S3_PrimaryBus")]
[TestCase(HEV_S4_PrimaryBus, HEV_CompletedBusInput, "Sx", "HEV", TestName = "Completed HEV_S4_PrimaryBus")]
[TestCase(PEV_E2_PrimaryBus, PEV_CompletedBusInput, "Ex", "PEV", TestName = "Completed PEV_E2_PrimaryBus")]
[TestCase(PEV_E3_PrimaryBus, PEV_CompletedBusInput, "Ex", "PEV", TestName = "Completed PEV_E3_PrimaryBus")]
[TestCase(PEV_E4_PrimaryBus, PEV_CompletedBusInput, "Ex", "PEV", TestName = "Completed PEV_E4_PrimaryBus")]
[TestCase(PEV_IEPC_PrimaryBus, PEV_IEPC_CompletedBusInput, "IEPC", TestName = "Completed PEV_IEPC_PrimaryBus")]
[TestCase(PEV_IEPC_std_PrimaryBus, PEV_IEPC_CompletedBusInput, "IEPC", TestName = "Completed PEV_IEPC-std_PrimaryBus")]
[TestCase(PEV_E2_PrimaryBus_StdEM, PEV_CompletedBusInput, "Ex", "PEV", TestName = "Completed PEV_E2_PrimaryBus_EM-Std")]
public void CompletedTest(string primaryBusInput, string completeBusInput, params string[] expectedType)
{
CopyInputFile(completeBusInput);
CopyInputFile(primaryBusInput);
// completed: VIF + complete input (full) => VIF , MRF Completed, CIF Completed
// (approach: first simulate primary on its own to have an up-to-date VIF
// (no need to maintain this in the testfiles)
// setting up testcase
// run primary simulation
var inputProvider = _inputDataReader.Create(primaryBusInput);
var fileWriter = GetOutputFileWriter(TestContext.CurrentContext.Test.Name, primaryBusInput);
var sumWriter = new SummaryDataContainer(null);
var jobContainer = new JobContainer(sumWriter);
var _simulatorFactory =
_simFactoryFactory.Factory(ExecutionMode.Declaration, inputProvider, fileWriter, null, null, true);
Clearfiles(fileWriter); //remove files from previous test runs
jobContainer.AddRuns(_simulatorFactory);
jobContainer.Execute(false);
jobContainer.WaitFinished();
CheckFileExists(fileWriter, CifShouldExist: false, PrimaryReportShouldExist: true, MrfShouldExist: true);
//File.Delete(fileWriter.XMLFullReportName);
CopyInputFile(fileWriter.XMLPrimaryVehicleReportName);
// done preparing testcase...
// this is the actual test: run completed simulation
var completedJob = GenerateJsonJobCompletedBus(fileWriter.XMLPrimaryVehicleReportName, completeBusInput, TestContext.CurrentContext.Test.Name);
var completedInputData = JSONInputDataFactory.ReadJsonJob(completedJob);
var completedFileWriter = GetOutputFileWriter(TestContext.CurrentContext.Test.Name, completeBusInput);
var completedSumWriter = new SummaryDataContainer(null);
var completedJobContainer = new JobContainer(completedSumWriter);
var completedSimulatorFactory =
_simFactoryFactory.Factory(ExecutionMode.Declaration, completedInputData, completedFileWriter, null, null, true);
Clearfiles(completedFileWriter); //remove files from previous test runs
completedJobContainer.AddRuns(completedSimulatorFactory);
completedJobContainer.Execute(false);
completedJobContainer.WaitFinished();
// assertions
//File.Delete(fileWriter.XMLPrimaryVehicleReportName);
CheckFileExists(completedFileWriter, CifShouldExist: true, MrfShouldExist: true, VifShouldExist:true);
CheckElementTypeNameContains(completedFileWriter.XMLMultistageReportFileName, "Vehicle", expectedType);
}
private static void CheckElementTypeNameContains(string fileName, string elementName, params string[] expectedType)
{
var xmlDoc = new XmlDocument();
xmlDoc.Load(XmlReader.Create(fileName));
var validator = new XMLValidator(xmlDoc);
validator.ValidateXML(XmlDocumentType.MultistepOutputData);
var vehicleNodes = xmlDoc.SelectNodes($"//*[local-name()='{elementName}']");
foreach (XmlNode vehicleNode in vehicleNodes) {
var typeName = vehicleNode?.SchemaInfo?.SchemaType?.Name ?? "";
var contains = expectedType.Select(x => typeName.Contains(x, StringComparison.InvariantCultureIgnoreCase));
Assert.IsTrue(contains.Any(x => x), $"{typeName} -- {expectedType.Join()}");
}
}
private string GenerateJsonJobCompletedBus(string vif, string completeBusInput, string subDirectory)
{
subDirectory = Path.Combine("MockupReports", subDirectory, "Input");
var header = new Dictionary<string, object>() {
{ "FileVersion", 7 }
};
var body = new Dictionary<string, object>() {
{ "PrimaryVehicleResults", Path.GetRelativePath(subDirectory, Path.GetFullPath(vif)) },
{ "CompletedVehicle", Path.GetRelativePath(subDirectory, Path.GetFullPath(completeBusInput)) },
{ "RunSimulation", true}
};
var json = new Dictionary<string, object>() {
{"Header", header},
{"Body", body}
};
Directory.CreateDirectory(Path.GetFullPath(subDirectory));
var path = Path.Combine(Path.Combine(Path.GetFullPath(subDirectory)), "completedJob.vecto");
var str = JsonConvert.SerializeObject(json, Newtonsoft.Json.Formatting.Indented);
File.WriteAllText(path, str);
return path;
}
private string GenerateJsonJobCompleteBus(string primaryBusInput, string completeBusInput, string subDirectory)
{
subDirectory = Path.Combine("MockupReports", subDirectory, "Input");
var header = new Dictionary<string, object>() {
{ "FileVersion", 10 }
};
var body = new Dictionary<string, object>() {
{ "PrimaryVehicle", Path.GetRelativePath(subDirectory, Path.GetFullPath(primaryBusInput)) },
{ "InterimStep", Path.GetRelativePath(subDirectory, Path.GetFullPath(completeBusInput)) },
{ "RunSimulation", true}
};
var json = new Dictionary<string, object>() {
{"Header", header},
{"Body", body}
};
Directory.CreateDirectory(Path.GetFullPath(subDirectory));
var path = Path.Combine(Path.Combine(Path.GetFullPath(subDirectory)), "completeJob.vecto");
var str = JsonConvert.SerializeObject(json, Newtonsoft.Json.Formatting.Indented);
File.WriteAllText(path, str);
return path;
}
private static void CheckFileExists(FileOutputWriter fileWriter,
bool MrfShouldExist = true,
bool CifShouldExist = true,
bool VifShouldExist = false,
bool PrimaryMrfShouldExist = false,
bool PrimaryReportShouldExist = false)
{
var fail = false;
if (CifShouldExist) {
if (File.Exists(fileWriter.XMLCustomerReportName)) {
MRF_CIF_WriterTestBase.Validate(XDocument.Load(fileWriter.XMLCustomerReportName),
XmlDocumentType.CustomerReport);
} else {
TestContext.WriteLine(fileWriter.XMLCustomerReportName + " Missing\n");
fail = true;
}
} else {
var fileName = fileWriter.XMLCustomerReportName;
if (File.Exists(fileName)) {
fail = true;
TestContext.WriteLine($"{fileName} should not exist");
}
}
if (MrfShouldExist) {
if (File.Exists(fileWriter.XMLFullReportName)) {
MRF_CIF_WriterTestBase.Validate(XDocument.Load(fileWriter.XMLFullReportName),
XmlDocumentType.ManufacturerReport);
} else {
TestContext.WriteLine(fileWriter.XMLFullReportName + " Missing\n");
fail = true;
}
} else {
var fileName = fileWriter.XMLFullReportName;
if (File.Exists(fileName))
{
fail = true;
TestContext.WriteLine($"{fileName} should not exist");
}
}
var primaryMrfPath = fileWriter.XMLFullReportName.Replace("RSLT_MANUFACTURER", "RSLT_MANUFACTURER_PRIMARY");
if (PrimaryMrfShouldExist) {
if (File.Exists(primaryMrfPath)) {
MRF_CIF_WriterTestBase.Validate(XDocument.Load(primaryMrfPath), XmlDocumentType.ManufacturerReport);
} else {
TestContext.WriteLine(primaryMrfPath + " Missing\n");
fail = true;
}
} else {
var fileName = primaryMrfPath;
if (File.Exists(fileName))
{
fail = true;
TestContext.WriteLine($"{fileName} should not exist");
}
}
if (PrimaryReportShouldExist) {
if (File.Exists(fileWriter.XMLPrimaryVehicleReportName)) {
MRF_CIF_WriterTestBase.Validate(XDocument.Load(fileWriter.XMLPrimaryVehicleReportName),
XmlDocumentType.MultistepOutputData);
} else {
TestContext.WriteLine(fileWriter.XMLPrimaryVehicleReportName + " Missing\n");
fail = true;
}
} else {
var fileName = fileWriter.XMLPrimaryVehicleReportName;
if (File.Exists(fileName))
{
fail = true;
TestContext.WriteLine($"{fileName} should not exist");
}
}
if (VifShouldExist) {
if (File.Exists(fileWriter.XMLMultistageReportFileName)) {
MRF_CIF_WriterTestBase.Validate(XDocument.Load(fileWriter.XMLMultistageReportFileName),
XmlDocumentType.MultistepOutputData);
} else {
TestContext.WriteLine(fileWriter.XMLMultistageReportFileName + " Missing\n");
fail = true;
}
} else {
var fileName = fileWriter.XMLMultistageReportFileName;
if (File.Exists(fileName))
{
fail = true;
TestContext.WriteLine($"{fileName} should not exist");
}
}
if (fail) {
Assert.Fail();
}
}
[TestCase(@"TestData\XML\XMLReaderDeclaration\GroupTest\Rigid Truck_4x2_vehicle-class-1_EURO6_2018.xml", TestName="GroupClass1")]
[TestCase(@"TestData\XML\XMLReaderDeclaration\GroupTest\Rigid Truck_6x2_vehicle-class-9_EURO6_2018.xml",TestName="GroupClass9")]
[TestCase(@"TestData\XML\XMLReaderDeclaration\GroupTest\Tractor_4x2_vehicle-class-5_EURO6_2018.xml", TestName="GroupClass5")]
[TestCase(@"TestData/XML/XMLReaderDeclaration/GroupTest/Rigid Truck_8x4_vehicle-class-16_EURO6_2018.xml", TestName="GroupClass16")]
public void GroupTestFail(string fileName, bool mockup = true)
{
IInputDataProvider inputProvider = null;
Assert.Throws(typeof(VectoException), () => _inputDataReader.Create(fileName));
if (inputProvider == null) {
Assert.Pass("Test cancelled! Inputprovider == null, this is expected on unsupported Schema versions");
}
var fileWriter = GetOutputFileWriter(TestContext.CurrentContext.Test.Name, fileName);
var sumWriter = new SummaryDataContainer(fileWriter);
var jobContainer = new JobContainer(sumWriter);
var _simulatorFactory =
_simFactoryFactory.Factory(ExecutionMode.Declaration, inputProvider, fileWriter, null, null, true);
Clearfiles(fileWriter);
jobContainer.AddRuns(_simulatorFactory);
jobContainer.Execute(false);
jobContainer.WaitFinished();
CheckFileExists(fileWriter);
Assert.IsTrue(MRF_CIF_WriterTestBase.ValidateAndPrint(XDocument.Load(fileWriter.XMLFullReportName), XmlDocumentType.ManufacturerReport), "MRF invalid");
Assert.IsTrue(MRF_CIF_WriterTestBase.ValidateAndPrint(XDocument.Load(fileWriter.XMLCustomerReportName), XmlDocumentType.CustomerReport), "CIF invalid");
}
[TestCase(@"TestData/XML/XMLReaderDeclaration/SchemaVersion1.0/Tractor_4x2_vehicle-class-5_5_t_0.xml", TestName="Schema10Test1")]
[TestCase(@"TestData/XML/XMLReaderDeclaration/SchemaVersion1.0/vecto_vehicle-new_parameters-sample.xml",TestName="Schema10_new_parameters", Ignore = "Invalid combination for ecoroll")]
[TestCase(@"TestData/XML/XMLReaderDeclaration/SchemaVersion1.0/vecto_vehicle-sample_LNG.xml", TestName="Schema10_vehicle_sample_lng")]
public void Schema1_0_Test(string fileName, bool mockup = true)
{
IInputDataProvider inputProvider = null!;
Assert.Throws(typeof(VectoException), () => _inputDataReader.Create(fileName));
if (inputProvider == null)
{
Assert.Pass("Test cancelled! Inputprovider == null, this is expected on unsupported Schema versions");
}
var fileWriter = GetOutputFileWriter(TestContext.CurrentContext.Test.Name, fileName);
var sumWriter = new SummaryDataContainer(fileWriter);
var jobContainer = new JobContainer(sumWriter);
var _simulatorFactory =
_simFactoryFactory.Factory(ExecutionMode.Declaration, inputProvider, fileWriter, null, null, true);
Clearfiles(fileWriter);
jobContainer.AddRuns(_simulatorFactory);
jobContainer.Execute(false);
jobContainer.WaitFinished();
CheckFileExists(fileWriter);
Assert.IsTrue(MRF_CIF_WriterTestBase.ValidateAndPrint(XDocument.Load(fileWriter.XMLFullReportName), XmlDocumentType.ManufacturerReport), "MRF invalid");
Assert.IsTrue(MRF_CIF_WriterTestBase.ValidateAndPrint(XDocument.Load(fileWriter.XMLCustomerReportName), XmlDocumentType.CustomerReport), "CIF invalid");
}
[Ignore("Schema 2_0 not supported in MockupVecto")]
[TestCase(@"TestData/XML/XMLReaderDeclaration/SchemaVersion2.0/Tractor_4x2_vehicle-class-5_5_t_0.xml", TestName="Schema20Test1")]
public void Schema2_0_Test(string fileName, bool mockup = true)
{
IInputDataProvider inputProvider = null!;
Assert.Throws(typeof(VectoException), () => _inputDataReader.Create(fileName));
// ReSharper disable once ConditionIsAlwaysTrueOrFalseAccordingToNullableAPIContract
if (inputProvider == null)
{
Assert.Pass("Test cancelled! Inputprovider == null, this is expected on unsupported Schema versions");
}
var fileWriter = GetOutputFileWriter(TestContext.CurrentContext.Test.Name, fileName);
var sumWriter = new SummaryDataContainer(fileWriter);
var jobContainer = new JobContainer(sumWriter);
var _simulatorFactory =
_simFactoryFactory.Factory(ExecutionMode.Declaration, inputProvider, fileWriter, null, null, true);
Clearfiles(fileWriter);
jobContainer.AddRuns(_simulatorFactory);
jobContainer.Execute(false);
jobContainer.WaitFinished();
CheckFileExists(fileWriter);
Assert.IsTrue(MRF_CIF_WriterTestBase.ValidateAndPrint(XDocument.Load(fileWriter.XMLFullReportName), XmlDocumentType.ManufacturerReport), "MRF invalid");
Assert.IsTrue(MRF_CIF_WriterTestBase.ValidateAndPrint(XDocument.Load(fileWriter.XMLCustomerReportName), XmlDocumentType.CustomerReport), "CIF invalid");
}
[Ignore("Json not supported in Mockup vecto")]
[TestCase("TestData/Generic Vehicles/Declaration Mode/40t Long Haul Truck/40t_Long_Haul_Truck.vecto", TestName="JSON_40TLonghaul")]
[TestCase("TestData/Generic Vehicles/Declaration Mode/Class9_RigidTruck_6x2/Class9_RigidTruck_DECL.vecto", TestName="JSON_RigidTruckClass9")]
[NonParallelizable]
public void JSONTest(string fileName, bool mockup = true)
{
var inputProvider = JSONInputDataFactory.ReadJsonJob(fileName);
var fileWriter = GetOutputFileWriter(TestContext.CurrentContext.Test.Name, fileName);
var sumWriter = new SummaryDataContainer(fileWriter);
var jobContainer = new JobContainer(sumWriter);
ISimulatorFactory _simulatorFactory = null!;
Assert.Throws(typeof(VectoException), () => {
_simulatorFactory =
_simFactoryFactory.Factory(ExecutionMode.Declaration, inputProvider, fileWriter, null, null, true);
});
// ReSharper disable once ConditionIsAlwaysTrueOrFalseAccordingToNullableAPIContract
if (_simulatorFactory == null) {
Assert.Pass("Test cancelled! SimulatorFactory could not be created, this is expected on JSON jobs");
}
Clearfiles(fileWriter);
jobContainer.AddRuns(_simulatorFactory);
jobContainer.Execute(false);
jobContainer.WaitFinished();
CheckFileExists(fileWriter);
Assert.IsTrue(MRF_CIF_WriterTestBase.ValidateAndPrint(XDocument.Load(fileWriter.XMLFullReportName), XmlDocumentType.ManufacturerReport), "MRF invalid");
Assert.IsTrue(MRF_CIF_WriterTestBase.ValidateAndPrint(XDocument.Load(fileWriter.XMLCustomerReportName), XmlDocumentType.CustomerReport), "CIF invalid");
}
private const string BasePathExempted = "TestData/XML/XMLReaderDeclaration/SchemaVersion2.4/Distributed/ExemptedVehicles/";
// [TestCase(BasePathExempted + "exempted_completedBus_input_full.xml",
// true,
// true,
// false,
// false,
// true,
// TestName = "ExemptedCompletedBus1")]
// [TestCase(BasePathExempted + "exempted_completedBus_input_only_mandatory_entries.xml",
//true,
//true,
//false,
//false,
//false,
//TestName="ExemptedCompletedBus2")]
[TestCase(BasePathExempted + "exempted_heavyLorry.xml",
false,
true,
true,
false,
false,
TestName="ExemptedHeavyLorry")]
[TestCase(BasePathExempted + "exempted_mediumLorry.xml",
false,
true,
true,
false,
false,
TestName="ExemptedMediumLorry")]
[TestCase(BasePathExempted + "exempted_primaryBus.xml",
false,
false,
true,
false,
true,
TestName="ExemptedPrimaryBus")]
public void ExemptedTest(string fileName, bool checkVif, bool checkCif, bool checkMrf, bool checkPrimaryMrf,
bool checkPrimaryReport)
{
CopyInputFile(fileName);
var inputProvider = _inputDataReader.Create(fileName);
var fileWriter = GetOutputFileWriter(TestContext.CurrentContext.Test.Name, fileName);
var sumWriter = new SummaryDataContainer(fileWriter);
var jobContainer = new JobContainer(sumWriter);
var _simulatorFactory =
_simFactoryFactory.Factory(ExecutionMode.Declaration, inputProvider, fileWriter, null, null, true);
Clearfiles(fileWriter);
jobContainer.AddRuns(_simulatorFactory);
jobContainer.Execute(false);
jobContainer.WaitFinished();
CheckFileExists(fileWriter,
VifShouldExist:checkVif,
CifShouldExist:checkCif,
MrfShouldExist:checkMrf,
PrimaryMrfShouldExist:checkPrimaryMrf,
PrimaryReportShouldExist:checkPrimaryReport);
if (checkMrf) Assert.IsTrue(MRF_CIF_WriterTestBase.ValidateAndPrint(XDocument.Load(fileWriter.XMLFullReportName), XmlDocumentType.ManufacturerReport), "MRF invalid");
if (checkPrimaryReport) Assert.IsTrue(MRF_CIF_WriterTestBase.ValidateAndPrint(XDocument.Load(fileWriter.XMLPrimaryVehicleReportName), XmlDocumentType.MultistepOutputData), "VIF invalid");
if (checkCif) Assert.IsTrue(MRF_CIF_WriterTestBase.ValidateAndPrint(XDocument.Load(fileWriter.XMLCustomerReportName), XmlDocumentType.CustomerReport), "CIF invalid");
}
[TestCase(BasePathExempted + "exempted_primaryBus.xml",
BasePathExempted + "exempted_completedBus_input_full.xml",
"Exempted",
TestName="ExemptedCompleteBus")]
public void ExemptedCompleteBusTest(string primaryInput, string completeInput, params string[] expectedType)
{
CopyInputFile(primaryInput, completeInput);
var completeBus = GenerateJsonJobCompleteBus(primaryBusInput: primaryInput,
completeBusInput: completeInput, TestContext.CurrentContext.Test.Name);
// complete: primary input + complete input (full) => MRF Primary, VIF (step 1), MRF Complete, CIF Complete
// (approach: first simulate primary on its own to have an up-to-date VIF
// (no need to maintain this in the testfiles)
var completeJob = GenerateJsonJobCompleteBus(primaryInput, completeInput, TestContext.CurrentContext.Test.Name);
var completeBusinput = JSONInputDataFactory.ReadJsonJob(completeJob);
var completeFileWriter = GetOutputFileWriter(TestContext.CurrentContext.Test.Name, completeInput);
var completeSumWriter = new SummaryDataContainer(null);
var completeJobContainer = new JobContainer(completeSumWriter);
var completedSimulatorFactory =
_simFactoryFactory.Factory(ExecutionMode.Declaration, completeBusinput, completeFileWriter, null, null, true);
Clearfiles(completeFileWriter); //remove files from previous test runs
completeJobContainer.AddRuns(completedSimulatorFactory);
completeJobContainer.Execute(false);
completeJobContainer.WaitFinished();
// assertions
CheckFileExists(completeFileWriter, PrimaryMrfShouldExist: true, VifShouldExist: true, CifShouldExist: true, MrfShouldExist: true);
//CheckElementTypeNameContains(completeFileWriter.XMLMultistageReportFileName, "Vehicle", expectedType);
}
[TestCase(BasePathExempted + "exempted_primaryBus.xml",
BasePathExempted + "exempted_completedBus_input_full.xml",
"Exempted",
TestName = "ExemptedCompletedBus")]
public void ExemptedCompletedTest(string primaryBusInput, string completeBusInput, params string[] expectedType)
{
CopyInputFile(completeBusInput, completeBusInput);
// completed: VIF + complete input (full) => VIF , MRF Completed, CIF Completed
// (approach: first simulate primary on its own to have an up-to-date VIF
// (no need to maintain this in the testfiles)
// setting up testcase
// run primary simulation
var inputProvider = _inputDataReader.Create(primaryBusInput);
var fileWriter = GetOutputFileWriter(TestContext.CurrentContext.Test.Name, primaryBusInput);
var sumWriter = new SummaryDataContainer(null);
var jobContainer = new JobContainer(sumWriter);
var _simulatorFactory =
_simFactoryFactory.Factory(ExecutionMode.Declaration, inputProvider, fileWriter, null, null, true);
Clearfiles(fileWriter); //remove files from previous test runs
jobContainer.AddRuns(_simulatorFactory);
jobContainer.Execute(false);
jobContainer.WaitFinished();
CheckFileExists(fileWriter, CifShouldExist: false, PrimaryReportShouldExist: true, MrfShouldExist: true);
//File.Delete(fileWriter.XMLFullReportName);
CopyInputFile(fileWriter.XMLPrimaryVehicleReportName);
// done preparing testcase...
// this is the actual test: run completed simulation
var completedJob = GenerateJsonJobCompletedBus(fileWriter.XMLPrimaryVehicleReportName, completeBusInput, TestContext.CurrentContext.Test.Name);
var completedInputData = JSONInputDataFactory.ReadJsonJob(completedJob);
var completedFileWriter = GetOutputFileWriter(TestContext.CurrentContext.Test.Name, completeBusInput);
var completedSumWriter = new SummaryDataContainer(null);
var completedJobContainer = new JobContainer(completedSumWriter);
var completedSimulatorFactory =
_simFactoryFactory.Factory(ExecutionMode.Declaration, completedInputData, completedFileWriter, null, null, true);
Clearfiles(completedFileWriter); //remove files from previous test runs
completedJobContainer.AddRuns(completedSimulatorFactory);
completedJobContainer.Execute(false);
completedJobContainer.WaitFinished();
// assertions
//File.Delete(fileWriter.XMLPrimaryVehicleReportName);
CheckFileExists(completedFileWriter, CifShouldExist: true, MrfShouldExist: true, VifShouldExist: true);
CheckElementTypeNameContains(completedFileWriter.XMLMultistageReportFileName, "Vehicle", expectedType);
}
}
}