diff --git a/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.5/TyreSample.xml b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.5/TyreSample.xml new file mode 100644 index 0000000000000000000000000000000000000000..45737f347421972d68a961b346431d3583b8eae8 --- /dev/null +++ b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.5/TyreSample.xml @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="UTF-8"?> +<tns:VectoInputDeclaration + xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.5" + xmlns:v2.0="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0" + xmlns:tns="urn:tugraz:ivt:VectoAPI:DeclarationComponent:v2.0" + xmlns:di="http://www.w3.org/2000/09/xmldsig#" schemaVersion="2.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:DeclarationComponent E:\QUAM\Workspace\VECTO_quam\VectoCore\VectoCore\Resources\XSD/VectoDeclarationComponent.xsd"> + <tns:Tyre> + <v2.0:Data id="TYR-gooZah3D" xsi:type="TyreDataDeclarationType"> + <Manufacturer>Generic Tyre Manufacturer</Manufacturer> + <Model>Generic Tyre Model</Model> + <CertificationNumber>e12*0815/8051*2017/05T0000*00</CertificationNumber> + <Date>2017-02-15T11:00:00Z</Date> + <AppVersion>DemoTyreApp 1.0</AppVersion> + <Dimension>315/45 R22.5</Dimension> + <TyreClass>C1</TyreClass> + <FuelEfficiencyClass>A</FuelEfficiencyClass> + <RRCDeclared>0.0055</RRCDeclared> + <FzISO>33500</FzISO> + </v2.0:Data> + <v2.0:Signature> + <di:Reference URI="#TYR-gooZah3D"> + <di:Transforms> + <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization" /> + <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /> + </di:Transforms> + <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> + <di:DigestValue>JWEwzKSP0lXvwRgQZTiWJm9dpdtQ72FOX0CC5Vy6f2Y=</di:DigestValue> + </di:Reference> + </v2.0:Signature> + </tns:Tyre> +</tns:VectoInputDeclaration> \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/XML/XMLDeclarationInputTest.cs b/VectoCore/VectoCoreTest/XML/XMLDeclarationInputTest.cs index 2bbb611ebd9468ba3e53bcb90db23813c14a014e..cc5eae9425e45d0843c4a420fcc80ee06650380f 100644 --- a/VectoCore/VectoCoreTest/XML/XMLDeclarationInputTest.cs +++ b/VectoCore/VectoCoreTest/XML/XMLDeclarationInputTest.cs @@ -33,6 +33,7 @@ using System; using System.Collections.Generic; using System.IO; using System.Linq; +using System.Reflection.Emit; using System.Xml; using System.Xml.XPath; using Ninject; @@ -51,8 +52,10 @@ using TUGraz.VectoCore.Utils; using NUnit.Framework; using TUGraz.VectoCommon.InputData; using TUGraz.VectoCore.InputData.FileIO.XML; +using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl; using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter; using TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory; +using XmlDocumentType = TUGraz.VectoCore.Utils.XmlDocumentType; namespace TUGraz.VectoCore.Tests.XML { @@ -709,6 +712,62 @@ namespace TUGraz.VectoCore.Tests.XML } } + public const string SampleTyreXML = @"TestData\XML\XMLReaderDeclaration\SchemaVersion2.5\TyreSample.xml"; + + [TestCase()] + public void TestWheelsSupportedInXML() + { + var tyreDimensions = DeclarationData.Wheels.GetWheelsDimensions(); + foreach (var tyreDimension in tyreDimensions) { + var reader = XmlReader.Create(SampleTyreXML); + 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); + var tyredimensionNode = nav.SelectSingleNode(XMLHelper.QueryLocalName(XMLNames.AxleWheels_Axles_Axle_Dimension)); + tyredimensionNode.SetValue(tyreDimension); + + var modified = XmlReader.Create(new StringReader(nav.OuterXml)); + var validator = new XMLValidator(modified, null, XMLValidator.CallBackExceptionOnError); + var valid = validator.ValidateXML(XmlDocumentType.DeclarationComponentData); + Assert.IsTrue(valid, $"error validating XML with dimension {tyreDimension}"); + } + } + + [ + TestCase("285/55R16C"), // invalid space + //TestCase("285/55 R16C"), // allowed, as xs:token already combines multiple whitespaces + TestCase("85/55 R16C"), // invalid section width + TestCase("285/1231 R16C"), // invalid aspect ratio width + TestCase("285/55 X16C"), // invalid construction type + TestCase("85/55 R16112C"), // invalid rim diameter + TestCase("85/55 R16x"), // invalid suffix + TestCase("1.0001 R12"), // + TestCase("9 R12111"), // invalid rim diameter + TestCase("9 R12x"), // invalid suffix + TestCase("9R12"), // invalid space + //TestCase("9 R12"), // allowed, as xs:token already combines multiple whitespaces + ] + public void TestInvalidWheelsDimensionString(string dim) + { + var reader = XmlReader.Create(SampleTyreXML); + 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); + var tyredimensionNode = nav.SelectSingleNode(XMLHelper.QueryLocalName(XMLNames.AxleWheels_Axles_Axle_Dimension)); + tyredimensionNode.SetValue(dim); + + var modified = XmlReader.Create(new StringReader(nav.OuterXml)); + var validator = new XMLValidator(modified, null, XMLValidator.CallBackExceptionOnError); + AssertHelper.Exception<VectoException>(() => validator.ValidateXML(XmlDocumentType.DeclarationComponentData), messageContains: "Validation error:"); + } + + [TestCase] public void TestPTOTypeTypes() {