Code development platform for open source projects from the European Union institutions

Skip to content
Snippets Groups Projects
Commit e86cc60c authored by Markus Quaritsch's avatar Markus Quaritsch
Browse files

adding testcase for invalid exempted vehicle combinations and exempted he-hdv

parent 9bbcccb3
No related branches found
No related tags found
No related merge requests found
...@@ -2,13 +2,19 @@ ...@@ -2,13 +2,19 @@
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Xml; using System.Xml;
using System.Xml.XPath;
using NUnit.Framework; using NUnit.Framework;
using NUnit.Framework.Internal; using NUnit.Framework.Internal;
using TUGraz.VectoCommon.Exceptions;
using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Models;
using TUGraz.VectoCommon.Resources;
using TUGraz.VectoCommon.Utils;
using TUGraz.VectoCore.Configuration;
using TUGraz.VectoCore.InputData.FileIO.XML.Declaration; using TUGraz.VectoCore.InputData.FileIO.XML.Declaration;
using TUGraz.VectoCore.Models.Simulation.Impl; using TUGraz.VectoCore.Models.Simulation.Impl;
using TUGraz.VectoCore.OutputData.FileIO; using TUGraz.VectoCore.OutputData.FileIO;
using TUGraz.VectoCore.Tests.Models.Simulation; using TUGraz.VectoCore.Tests.Models.Simulation;
using TUGraz.VectoCore.Tests.Utils;
using TUGraz.VectoCore.Utils; using TUGraz.VectoCore.Utils;
namespace TUGraz.VectoCore.Tests.Integration namespace TUGraz.VectoCore.Tests.Integration
...@@ -31,12 +37,16 @@ namespace TUGraz.VectoCore.Tests.Integration ...@@ -31,12 +37,16 @@ namespace TUGraz.VectoCore.Tests.Integration
var customerFile = writer.XMLCustomerReportName; var customerFile = writer.XMLCustomerReportName;
var manufactuerFile = writer.XMLFullReportName; var manufactuerFile = writer.XMLFullReportName;
var monitoringFile = writer.XMLMonitoringReportName;
if (File.Exists(customerFile)) { if (File.Exists(customerFile)) {
File.Delete(customerFile); File.Delete(customerFile);
} }
if (File.Exists(manufactuerFile)) { if (File.Exists(manufactuerFile)) {
File.Delete(manufactuerFile); File.Delete(manufactuerFile);
} }
if (File.Exists(monitoringFile)) {
File.Delete(monitoringFile);
}
var inputData = new XMLDeclarationInputDataProvider(filename, true); //.ReadJsonJob(relativeJobPath); var inputData = new XMLDeclarationInputDataProvider(filename, true); //.ReadJsonJob(relativeJobPath);
var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, writer) { var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, writer) {
...@@ -65,6 +75,175 @@ namespace TUGraz.VectoCore.Tests.Integration ...@@ -65,6 +75,175 @@ namespace TUGraz.VectoCore.Tests.Integration
var val2 = new XMLValidator(XmlReader.Create(customerFile)); var val2 = new XMLValidator(XmlReader.Create(customerFile));
Assert.IsTrue(val2.ValidateXML(XMLValidator.XmlDocumentType.CustomerReport)); Assert.IsTrue(val2.ValidateXML(XMLValidator.XmlDocumentType.CustomerReport));
var val3 = new XMLValidator(XmlReader.Create(customerFile));
Assert.IsTrue(val3.ValidateXML(XMLValidator.XmlDocumentType.MonitoringReport));
}
[TestCase(ExemptedVehicle, true, true, true, "Invalid input: ZE-HDV and DualFuelVehicle are mutually exclusive!"),
TestCase(ExemptedVehicle, true, false, true, "Invalid input: ZE-HDV and DualFuelVehicle are mutually exclusive!"),
TestCase(ExemptedVehicle, false, false, false, "Invalid input: at least one option of ZE-HDV, He-HDV, and DualFuelVehicle has to be set for an exempted vehicle!")]
public void TestInvalidExemptedCombination(string filename, bool zeroEmission, bool hybrid, bool dualFuel, string exMsg)
{
var writer = new FileOutputWriter(filename);
var customerFile = writer.XMLCustomerReportName;
var manufactuerFile = writer.XMLFullReportName;
var monitoringFile = writer.XMLMonitoringReportName;
if (File.Exists(customerFile)) {
File.Delete(customerFile);
}
if (File.Exists(manufactuerFile)) {
File.Delete(manufactuerFile);
}
if (File.Exists(monitoringFile)) {
File.Delete(monitoringFile);
}
var reader = XmlReader.Create(filename);
var doc = new XmlDocument();
doc.Load(reader);
var nav = doc.CreateNavigator();
SetExemptedParameters(nav, zeroEmission, hybrid, dualFuel);
var modified = XmlReader.Create(new StringReader(nav.OuterXml));
var inputData = new XMLDeclarationInputDataProvider(modified, true);
var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, writer) {
WriteModalResults = true,
ActualModalData = true
};
var jobContainer = new JobContainer(new MockSumWriter());
jobContainer.AddRuns(factory);
AssertHelper.Exception<VectoException>(
() => {
jobContainer.Runs[0].Run.Run();
},
messageContains: exMsg);
Assert.IsFalse(File.Exists(customerFile));
Assert.IsFalse(File.Exists(manufactuerFile));
Assert.IsFalse(File.Exists(monitoringFile));
}
[TestCase(ExemptedVehicle, null, 10000),
TestCase(ExemptedVehicle, 100000, null),
TestCase(ExemptedVehicle, null, null)]
public void TestHybridExemptedRequiresMaxNetPower(string filename, double? maxNetPower1, double? maxNetPower2)
{
var writer = new FileOutputWriter(filename);
var customerFile = writer.XMLCustomerReportName;
var manufactuerFile = writer.XMLFullReportName;
var monitoringFile = writer.XMLMonitoringReportName;
if (File.Exists(customerFile)) {
File.Delete(customerFile);
}
if (File.Exists(manufactuerFile)) {
File.Delete(manufactuerFile);
}
if (File.Exists(monitoringFile)) {
File.Delete(monitoringFile);
}
var reader = XmlReader.Create(filename);
var doc = new XmlDocument();
doc.Load(reader);
var nav = doc.CreateNavigator();
var manager = new XmlNamespaceManager(nav.NameTable);
var helper = new XPathHelper(ExecutionMode.Declaration);
helper.AddNamespaces(manager);
SetExemptedParameters(nav, false, true, false);
var maxPower1 = nav.SelectSingleNode(helper.QueryAbs(
helper.NSPrefix(XMLNames.VectoInputDeclaration,
Constants.XML.RootNSPrefix),
XMLNames.Component_Vehicle,
XMLNames.Vehicle_MaxNetPower1),
manager);
if (maxNetPower1.HasValue) {
maxPower1.SetValue(maxNetPower1.Value.ToXMLFormat(0));
} else {
maxPower1.DeleteSelf();
}
var maxPower2 = nav.SelectSingleNode(helper.QueryAbs(
helper.NSPrefix(XMLNames.VectoInputDeclaration,
Constants.XML.RootNSPrefix),
XMLNames.Component_Vehicle,
XMLNames.Vehicle_MaxNetPower2),
manager);
if (maxNetPower2.HasValue) {
maxPower2.SetValue(maxNetPower2.Value.ToXMLFormat(0));
} else {
maxPower2.DeleteSelf();
}
var modified = XmlReader.Create(new StringReader(nav.OuterXml));
var inputData = new XMLDeclarationInputDataProvider(modified, true);
var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, writer) {
WriteModalResults = true,
ActualModalData = true
};
var jobContainer = new JobContainer(new MockSumWriter());
jobContainer.AddRuns(factory);
AssertHelper.Exception<VectoException>(
() => {
jobContainer.Runs[0].Run.Run();
},
messageContains: "For He-HDV both MaxNetPower1 and MaxNetPower2 have to be provided!");
Assert.IsFalse(File.Exists(customerFile));
Assert.IsFalse(File.Exists(manufactuerFile));
Assert.IsFalse(File.Exists(monitoringFile));
}
private static void SetExemptedParameters(XPathNavigator nav, bool zeroEmission, bool hybrid, bool dualFuel)
{
var manager = new XmlNamespaceManager(nav.NameTable);
var helper = new XPathHelper(ExecutionMode.Declaration);
helper.AddNamespaces(manager);
var zeNode = nav.SelectSingleNode(
helper.QueryAbs(
helper.NSPrefix(
XMLNames.VectoInputDeclaration,
Constants.XML.RootNSPrefix),
XMLNames.Component_Vehicle,
XMLNames.Vehicle_ZeroEmissionVehicle),
manager);
zeNode.SetValue(zeroEmission.ToString().ToLowerInvariant());
var dualfuelNode = nav.SelectSingleNode(
helper.QueryAbs(
helper.NSPrefix(
XMLNames.VectoInputDeclaration,
Constants.XML.RootNSPrefix),
XMLNames.Component_Vehicle,
XMLNames.Vehicle_DualFuelVehicle),
manager);
dualfuelNode.SetValue(dualFuel.ToString().ToLowerInvariant());
var hybridNode = nav.SelectSingleNode(
helper.QueryAbs(
helper.NSPrefix(
XMLNames.VectoInputDeclaration,
Constants.XML.RootNSPrefix),
XMLNames.Component_Vehicle,
XMLNames.Vehicle_HybridElectricHDV),
manager);
hybridNode.SetValue(hybrid.ToString().ToLowerInvariant());
} }
} }
} }
...@@ -49,7 +49,7 @@ namespace TUGraz.VectoCore.Tests.Utils ...@@ -49,7 +49,7 @@ namespace TUGraz.VectoCore.Tests.Utils
/// Assert an expected Exception. /// Assert an expected Exception.
/// </summary> /// </summary>
[DebuggerHidden] [DebuggerHidden]
public static void Exception<T>(this Action func, string message = null) where T : Exception public static void Exception<T>(this Action func, string message = null, string messageContains = null) where T : Exception
{ {
try { try {
func(); func();
...@@ -58,6 +58,9 @@ namespace TUGraz.VectoCore.Tests.Utils ...@@ -58,6 +58,9 @@ namespace TUGraz.VectoCore.Tests.Utils
if (message != null) { if (message != null) {
Assert.AreEqual(message, ex.Message); Assert.AreEqual(message, ex.Message);
} }
if (messageContains != null) {
Assert.IsTrue(ex.Message.Contains(messageContains));
}
} }
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment