diff --git a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageJobViewModel_v0_1.cs b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageJobViewModel_v0_1.cs index fd52d6a0e4d319a4b3d2003fcb54c712a0fa42d5..750fd2ed2d71511a79c3ff8c68e359e72c94d38b 100644 --- a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageJobViewModel_v0_1.cs +++ b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageJobViewModel_v0_1.cs @@ -76,14 +76,9 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation public static void SaveVif(IMultistageVIFInputData vifData, string outputFile) { - Debug.Assert(outputFile != null); - - var numberOfManufacturingStages = vifData.MultistageJobInputData.JobInputData.ManufacturingStages?.Count ?? 1; - - var writer = new FileOutputVIFWriter(outputFile, numberOfManufacturingStages); var inputData = new XMLDeclarationVIFInputData(vifData.MultistageJobInputData, vifData.VehicleInputData); diff --git a/Vecto3GUI2020Test/ViewModelTests/VIFTests.cs b/Vecto3GUI2020Test/ViewModelTests/VIFTests.cs index 9aa719036dd7d5fe4078f4a0495782a59582c10c..e7b5bd992be644363900f88a794b8eaf9a893180 100644 --- a/Vecto3GUI2020Test/ViewModelTests/VIFTests.cs +++ b/Vecto3GUI2020Test/ViewModelTests/VIFTests.cs @@ -1,25 +1,26 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using System.IO; +using System.Xml; +using Moq; +using Ninject; using NUnit.Framework; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCore.OutputData.FileIO; +using TUGraz.VectoCore.Utils; using VECTO3GUI2020.Helper; + using VECTO3GUI2020.ViewModel.MultiStage.Implementation; namespace Vecto3GUI2020Test.ViewModelTests { - public class VIFTests : ViewModelTestBase - { - + public class VIFTests : ViewModelTestBase + { - [Test] + [Test] public void loadPrimaryVehicleOnlyAndCreateNewVIF() { var multistagevm = loadFile(primary_vehicle_only).MultiStageJobViewModel; - var stage = multistagevm.ManufacturingStageViewModel.StageCount; + Assert.AreEqual(1, stage); //Set Necessary Fields @@ -29,45 +30,85 @@ namespace Vecto3GUI2020Test.ViewModelTests vehicle.Manufacturer = "Manufacturer"; vehicle.VIN = "VIN12345678"; - var outputFile = primary_vehicle_only.Replace(".xml", "_vif_output_mandatory_fields.xml"); - deleteFile(outputFile); - getMockDialogHelper(null, fileToSave: outputFile); - _kernel.Rebind<IDialogHelper>().ToConstant(getMockDialogHelper(null, outputFile).Object); + var outputFileName = primary_vehicle_only.Replace(".xml", "_vif_output_mandatory_fields.xml"); + var outputFilePath = Path.Combine(DirPath, outputFileName); + + var nextStageNumber = multistagevm.ManufacturingStageViewModel?.StageCount + 2 ?? 2; + var expectedOutputFilePath = outputFilePath.Replace(".xml", $".{FileOutputVIFWriter.REPORT_ENDING_PREFIX}{nextStageNumber}.xml"); + deleteFile(expectedOutputFilePath); + + + getMockDialogHelper(null, outputFilePath); + _kernel.Rebind<IDialogHelper>().ToConstant(getMockDialogHelper(null, outputFilePath).Object); - var multistageConcrete = multistagevm as MultiStageJobViewModel_v0_1; + MultiStageJobViewModel_v0_1.SaveVif(multistagevm, outputFilePath); - multistageConcrete.SaveVIFCommand.Execute(null); + Assert.IsTrue(File.Exists(expectedOutputFilePath)); - Assert.IsTrue(checkFileExists(outputFile)); + var validator = new XMLValidator(XmlReader.Create(expectedOutputFilePath)); + Assert.True(validator.ValidateXML(TUGraz.VectoCore.Utils.XmlDocumentType.MultistageOutputData)); } [Test] - public void LoadPrimaryVehicleAndStageInputThenCreateVif() + public void TestAirdragLoad() { - var multistagevm = loadFile(primary_vehicle_only).MultiStageJobViewModel; + var multiplestages = Path.GetFullPath(DirPath + "vecto_multistage_consolidated_multiple_stages.xml"); - loadVehicleData(multistagevm as MultiStageJobViewModel_v0_1, stageInputFullSample); + var dialogMockConsolidatedMultipleStage = new Mock<IDialogHelper>(); + dialogMockConsolidatedMultipleStage.Setup(dialogHelper => dialogHelper.OpenXMLFileDialog(It.IsAny<string>())).Returns(multiplestages); + dialogMockConsolidatedMultipleStage.Setup(dialogHelper => dialogHelper.OpenXMLFileDialog()).Returns(multiplestages); + _kernel.Rebind<IDialogHelper>().ToConstant(dialogMockConsolidatedMultipleStage.Object); + + var newMultistageJobViewModel = _kernel.Get<NewMultiStageJobViewModel>(); + newMultistageJobViewModel.AddVifFile.Execute(null); + Assert.NotNull(newMultistageJobViewModel.MultiStageJobViewModel); - var outputFile = "/output/loadPrimaryAndAddStageInput.xml"; + var manstageVehicleViewModel = newMultistageJobViewModel.MultiStageJobViewModel.ManufacturingStageViewModel.Vehicle as IMultistageVehicleViewModel; + Assert.NotNull(manstageVehicleViewModel); - //deleteFile(outputFile); - var mockDialogHelper = getMockDialogHelper(null, fileToSave: outputFile); - Debug.WriteLine($"Write to {mockDialogHelper.Object.SaveToXMLDialog()}"); - var multistageVMConc = multistagevm as MultiStageJobViewModel_v0_1; + var auxiliariesViewModel = manstageVehicleViewModel.MultistageAuxiliariesViewModel; + Assert.NotNull(auxiliariesViewModel); - MultiStageJobViewModel_v0_1.SaveVif(multistageVMConc, mockDialogHelper.Object.SaveToXMLDialog()); + var multiStageViewModel = newMultistageJobViewModel.MultiStageJobViewModel as MultiStageJobViewModel_v0_1; + Assert.NotNull(multiStageViewModel); - //multistageVMConc.SaveVIFCommand.Execute(null); + var vehicleInputData = Path.GetFullPath(DirPath + "vecto_vehicle-stage_input_full-sample.xml"); + Assert.IsTrue(File.Exists(vehicleInputData)); + var vehicleInputDataFiledialogMock = new Mock<IDialogHelper>(); + vehicleInputDataFiledialogMock.Setup(dialogHelper => dialogHelper.OpenXMLFileDialog(It.IsAny<string>())).Returns(vehicleInputData); + vehicleInputDataFiledialogMock.Setup(dialogHelper => dialogHelper.OpenXMLFileDialog()).Returns(vehicleInputData); + _kernel.Rebind<IDialogHelper>().ToConstant(vehicleInputDataFiledialogMock.Object); - //Assert.IsTrue(checkFileExists(outputFile)); + multiStageViewModel.LoadVehicleDataCommand.Execute(null); + + var vehicle = + multiStageViewModel.ManufacturingStageViewModel.Vehicle as DeclarationInterimStageBusVehicleViewModel_v2_8; + vehicle.ManufacturerAddress = "Address"; + vehicle.Manufacturer = "Manufacturer"; + vehicle.VIN = "VIN12345678"; + vehicle.AirdragModifiedMultistage = true; + vehicle.VehicleDeclarationType = VehicleDeclarationType.interim; + + var outputFileName = primary_vehicle_only.Replace(".xml", "_vif_output_mandatory_fields.xml"); + var outputFilePath = Path.Combine(DirPath, outputFileName); + + var nextStageNumber = multiStageViewModel.ManufacturingStages?.Count + 2 ?? 2; + var expectedOutputFilePath = outputFilePath.Replace(".xml", $".{FileOutputVIFWriter.REPORT_ENDING_PREFIX}{nextStageNumber}.xml"); + deleteFile(expectedOutputFilePath); + + getMockDialogHelper(null, outputFilePath); + _kernel.Rebind<IDialogHelper>().ToConstant(getMockDialogHelper(null, outputFilePath).Object); + + MultiStageJobViewModel_v0_1.SaveVif(multiStageViewModel, outputFilePath); + + var validator = new XMLValidator(XmlReader.Create(expectedOutputFilePath)); + Assert.True(validator.ValidateXML(TUGraz.VectoCore.Utils.XmlDocumentType.MultistageOutputData)); } - - - } + } } diff --git a/VectoCore/VectoCore/OutputData/FileIO/FileOutputVIFWriter.cs b/VectoCore/VectoCore/OutputData/FileIO/FileOutputVIFWriter.cs index 71ea074303bb07d60a28c2c936aaf915805ba868..bf397d5ef0299c4595347ebb76ea533c9f8065e5 100644 --- a/VectoCore/VectoCore/OutputData/FileIO/FileOutputVIFWriter.cs +++ b/VectoCore/VectoCore/OutputData/FileIO/FileOutputVIFWriter.cs @@ -9,13 +9,14 @@ namespace TUGraz.VectoCore.OutputData.FileIO { public class FileOutputVIFWriter : FileOutputWriter { + public const string REPORT_ENDING_PREFIX = "VIF_Report_"; + private string _jobFile; private readonly int _numberOfManufacturingStages; - private string _reportEndingPrefix = "VIF_Report_"; public string XMLMultistageReportFileName { - get { return Path.ChangeExtension(_jobFile, $"{_reportEndingPrefix}{_numberOfManufacturingStages + 2}.xml"); } + get { return Path.ChangeExtension(_jobFile, $"{REPORT_ENDING_PREFIX}{_numberOfManufacturingStages + 2}.xml"); } } public FileOutputVIFWriter(string jobFile, int numberOfManufacturingStages) : base(jobFile) @@ -27,11 +28,11 @@ namespace TUGraz.VectoCore.OutputData.FileIO private void RemoveExistingEndingPrefix() { - var vifReportIndex = _jobFile.IndexOf(_reportEndingPrefix, StringComparison.Ordinal); + var vifReportIndex = _jobFile.IndexOf(REPORT_ENDING_PREFIX, StringComparison.Ordinal); if (vifReportIndex == -1) return; - if (!_jobFile.Contains(_reportEndingPrefix)) + if (!_jobFile.Contains(REPORT_ENDING_PREFIX)) return; _jobFile = $"{_jobFile.Substring(0, vifReportIndex - 1)}.xml"; diff --git a/VectoCore/VectoCore/OutputData/XML/XMLMultistageBusReport.cs b/VectoCore/VectoCore/OutputData/XML/XMLMultistageBusReport.cs index d5815fd60cc9f29a2ec671875f395c8ad171a2c5..6ff8cd221653bdd7e1e828e4acc20a86db8275a4 100644 --- a/VectoCore/VectoCore/OutputData/XML/XMLMultistageBusReport.cs +++ b/VectoCore/VectoCore/OutputData/XML/XMLMultistageBusReport.cs @@ -16,6 +16,7 @@ using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider; using TUGraz.VectoCore.Models.Simulation.Data; using TUGraz.VectoCore.Utils; + namespace TUGraz.VectoCore.OutputData.XML { public interface IXMLMultistageReport @@ -240,6 +241,9 @@ namespace TUGraz.VectoCore.OutputData.XML private XElement GetADAS(IAdvancedDriverAssistantSystemDeclarationInputData adasData) { + if (adasData == null) + return null; + return new XElement( v28 + XMLNames.Vehicle_ADAS, new XElement(v23 + XMLNames.Vehicle_ADAS_EngineStopStart, adasData.EngineStopStart), @@ -254,6 +258,9 @@ namespace TUGraz.VectoCore.OutputData.XML private XElement GetBusVehicleComponents(IVehicleComponentsDeclaration vehicleComponents) { + if (vehicleComponents == null) + return null; + var busAirdrag = GetBusAirdrag(vehicleComponents.AirdragInputData); var busAux = GetBusAuxiliaries(vehicleComponents.BusAuxiliaries); @@ -286,12 +293,24 @@ namespace TUGraz.VectoCore.OutputData.XML private XElement GetAirdragElement(IAirdragDeclarationInputData airdrag) { - var component = airdrag as AbstractCommonComponentType; - if (component == null) + if (airdrag == null) + return null; + + XmlNode airdragNode = null; + if (airdrag is AbstractCommonComponentType) + airdragNode = (airdrag as AbstractCommonComponentType).XMLSource; + else { + var type = airdrag.GetType(); + var property = type.GetProperty(nameof(AbstractCommonComponentType.XMLSource)); + if (property != null) + airdragNode = (XmlNode)property.GetValue(airdrag, null); + } + + if (airdragNode == null) return null; - var dataElement = XElement.Parse(component.XMLSource.FirstChild.OuterXml); - var signatureElement = XElement.Parse(component.XMLSource.LastChild.OuterXml); + var dataElement = XElement.Parse(airdragNode.FirstChild.OuterXml); + var signatureElement = XElement.Parse(airdragNode.LastChild.OuterXml); dataElement.Attribute(XNamespace.Xmlns + "xsi")?.Remove(); return new XElement(v28 + XMLNames.Component_AirDrag,