From f227d5b36bbf2228898a7a7331b326d212940c29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20L=2E=20Charlier?= Date: Tue, 29 May 2018 21:04:59 +0200 Subject: [PATCH 1/2] Support multiple expressions at the deserialization --- NBi.NUnit/Builder/ResultSetNoRowsBuilder.cs | 4 +- .../Resources/Positive/QueryAllNoRows.nbits | 24 +++++++++- .../Unit/Xml/Constraints/AllRowsXmlTest.cs | 48 ++++++++++++++----- .../Xml/Resources/AllRowsXmlTestSuite.xml | 15 ++++++ NBi.Xml/Constraints/NoRowsXml.cs | 3 +- 5 files changed, 79 insertions(+), 15 deletions(-) diff --git a/NBi.NUnit/Builder/ResultSetNoRowsBuilder.cs b/NBi.NUnit/Builder/ResultSetNoRowsBuilder.cs index 221cc289b..0397678be 100644 --- a/NBi.NUnit/Builder/ResultSetNoRowsBuilder.cs +++ b/NBi.NUnit/Builder/ResultSetNoRowsBuilder.cs @@ -37,8 +37,8 @@ protected virtual NBiConstraint InstantiateConstraint() protected IResultSetFilter InstantiateFilter() { var expressions = new List(); - if (ConstraintXml.Expression != null) - expressions.Add(ConstraintXml.Expression); + if (ConstraintXml.Expressions != null) + expressions.AddRange(ConstraintXml.Expressions); var factory = new ResultSetFilterFactory(); if (ConstraintXml.Predication != null) diff --git a/NBi.Testing/Acceptance/Resources/Positive/QueryAllNoRows.nbits b/NBi.Testing/Acceptance/Resources/Positive/QueryAllNoRows.nbits index b1a346940..5f3fa105c 100644 --- a/NBi.Testing/Acceptance/Resources/Positive/QueryAllNoRows.nbits +++ b/NBi.Testing/Acceptance/Resources/Positive/QueryAllNoRows.nbits @@ -638,7 +638,7 @@ - + + + + + + select 10 as 'A' ,11 as 'B', 12 as 'C' + union all select 5,6,7 + union all select 7,8,9 + + + + + + [A] * [B] + [Partial] * [C] + + 10000 + + + + diff --git a/NBi.Testing/Unit/Xml/Constraints/AllRowsXmlTest.cs b/NBi.Testing/Unit/Xml/Constraints/AllRowsXmlTest.cs index 9d578f2c1..2d147816c 100644 --- a/NBi.Testing/Unit/Xml/Constraints/AllRowsXmlTest.cs +++ b/NBi.Testing/Unit/Xml/Constraints/AllRowsXmlTest.cs @@ -314,11 +314,25 @@ public void Deserialize_SampleFile_ReadCorrectlyAnyOfComparer() Assert.That(cpr.Values, Has.Count.EqualTo(3)); } + [Test] + public void Deserialize_SampleFile_ReadCorrectlyMultipleExpressions() + { + int testNr = 11; + + // Create an instance of the XmlSerializer specifying type and namespace. + TestSuiteXml ts = DeserializeSample(); + var allRows = ts.Tests[testNr].Constraints[0] as AllRowsXml; + var expressions = allRows.Expressions; + + Assert.That(allRows.Expressions, Is.AssignableTo>()); + Assert.That(allRows.Expressions, Has.Count.EqualTo(2)); + } + [Test] public void Serialize_AllRowsXml_OnlyAliasNoVariable() { var allRowsXml = new AllRowsXml - #pragma warning disable 0618 +#pragma warning disable 0618 { InternalAliasesOld = new List() { @@ -327,7 +341,7 @@ public void Serialize_AllRowsXml_OnlyAliasNoVariable() }, Predication = new PredicationXml() }; - #pragma warning restore 0618 +#pragma warning restore 0618 var serializer = new XmlSerializer(typeof(AllRowsXml)); var stream = new MemoryStream(); @@ -346,9 +360,16 @@ public void Serialize_AllRowsXml_OnlyAliasNoVariable() [Test] public void Serialize_AllRowsXml_AnyOfXml() { - var allRowsXml = new AllRowsXml(); - allRowsXml.Predication = new PredicationXml(); - allRowsXml.Predication.Predicate = new AnyOfXml() { Values = new List() { "first", "second" } }; + var allRowsXml = new AllRowsXml + { + Predication = new PredicationXml() + { + Predicate = new AnyOfXml() + { + Values = new List() { "first", "second" } + } + } + }; var serializer = new XmlSerializer(typeof(AllRowsXml)); var stream = new MemoryStream(); @@ -369,12 +390,17 @@ public void Serialize_AllRowsXml_AnyOfXml() [Test] public void Serialize_ExecutionXml_NoColumnIndex() { - var allRowsXml = new AllRowsXml(); - allRowsXml.Expression = new ExpressionXml() + var allRowsXml = new AllRowsXml { - Value = "a + b = c", - Type = ColumnType.Boolean, - Name = "calculate" + Expressions = new List() + { + new ExpressionXml() + { + Value = "a + b = c", + Type = ColumnType.Boolean, + Name = "calculate" + } + } }; var serializer = new XmlSerializer(typeof(AllRowsXml)); @@ -385,7 +411,7 @@ public void Serialize_ExecutionXml_NoColumnIndex() serializer.Serialize(writer, allRowsXml); content = Encoding.UTF8.GetString(stream.ToArray()); } - + Debug.WriteLine(content); Assert.That(content, Is.StringContaining("expression")); diff --git a/NBi.Testing/Unit/Xml/Resources/AllRowsXmlTestSuite.xml b/NBi.Testing/Unit/Xml/Resources/AllRowsXmlTestSuite.xml index ef15d963d..a0828c012 100644 --- a/NBi.Testing/Unit/Xml/Resources/AllRowsXmlTestSuite.xml +++ b/NBi.Testing/Unit/Xml/Resources/AllRowsXmlTestSuite.xml @@ -204,4 +204,19 @@ + + + + + select 10 union select 20 union select 30 + + + + + + [#0] / 2 + [#0] * 2 + + + diff --git a/NBi.Xml/Constraints/NoRowsXml.cs b/NBi.Xml/Constraints/NoRowsXml.cs index b7bca7041..20ca549fd 100644 --- a/NBi.Xml/Constraints/NoRowsXml.cs +++ b/NBi.Xml/Constraints/NoRowsXml.cs @@ -28,7 +28,7 @@ public List Aliases } [XmlElement("expression")] - public ExpressionXml Expression { get; set; } + public List Expressions { get; set; } [XmlElement("alias")] public List InternalAliases @@ -56,6 +56,7 @@ public List InternalAliasesOld public NoRowsXml() { internalAliases = new List(); + Expressions = new List(); } } } From da9fef9f1b6a6df2d9dc2b3fc13355c655cc626d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20L=2E=20Charlier?= Date: Tue, 29 May 2018 21:06:56 +0200 Subject: [PATCH 2/2] Minor coding style fixes --- NBi.Testing/Unit/Xml/TestXmlTest.cs | 12 ++++++---- NBi.Xml/XmlManager.cs | 37 +++++++++++++---------------- 2 files changed, 24 insertions(+), 25 deletions(-) diff --git a/NBi.Testing/Unit/Xml/TestXmlTest.cs b/NBi.Testing/Unit/Xml/TestXmlTest.cs index 2f03c4b9c..2cfedaabf 100644 --- a/NBi.Testing/Unit/Xml/TestXmlTest.cs +++ b/NBi.Testing/Unit/Xml/TestXmlTest.cs @@ -178,12 +178,14 @@ public void Serialize_StructureXml_NoDefaultAndSettings() { new ReferenceXml() { Name = "Bob", ConnectionString = "connStr" } }; - var perspectiveXml = new PerspectiveXml(); - perspectiveXml.Caption = "My Caption"; - perspectiveXml.Default = new DefaultXml() { ApplyTo = SettingsXml.DefaultScope.Assert, ConnectionString = "connStr" }; - perspectiveXml.Settings = new SettingsXml() + var perspectiveXml = new PerspectiveXml { - References = references + Caption = "My Caption", + Default = new DefaultXml() { ApplyTo = SettingsXml.DefaultScope.Assert, ConnectionString = "connStr" }, + Settings = new SettingsXml() + { + References = references + } }; var structureXml = new StructureXml() { diff --git a/NBi.Xml/XmlManager.cs b/NBi.Xml/XmlManager.cs index 1c8b3426a..295e70d05 100644 --- a/NBi.Xml/XmlManager.cs +++ b/NBi.Xml/XmlManager.cs @@ -128,10 +128,8 @@ protected virtual void Read(XmlReader reader) var match = regex.Match(ex.InnerException.Message); if (match.Success) { - int line = 0; - Int32.TryParse(match.Groups[1].Value, out line); - int position = 0; - Int32.TryParse(match.Groups[2].Value, out position); + Int32.TryParse(match.Groups[1].Value, out var line); + Int32.TryParse(match.Groups[2].Value, out var position); xmlSchemaException = new XmlSchemaException(ex.InnerException.Message, ex, line, position); } else @@ -182,10 +180,15 @@ private void ParseCascadingInvalidOperationException(InvalidOperationException e private XmlReaderSettings BuildXmlReaderBaseSettings(bool isDtdProcessing) { // Set the validation settings. - XmlReaderSettings settings = new XmlReaderSettings(); - - //Define the type/level of validation - settings.ValidationType = ValidationType.Schema; + XmlReaderSettings settings = new XmlReaderSettings + { + ValidationType = ValidationType.Schema, + DtdProcessing = isDtdProcessing ? DtdProcessing.Parse : DtdProcessing.Prohibit, + XmlResolver = new LocalXmlUrlResolver(basePath) + { + Credentials = System.Net.CredentialCache.DefaultCredentials + } + }; settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings; settings.ValidationEventHandler += delegate (object sender, ValidationEventArgs args) { @@ -197,14 +200,6 @@ private XmlReaderSettings BuildXmlReaderBaseSettings(bool isDtdProcessing) validationExceptions.Add(args.Exception); }; - //Allow DTD processing - settings.DtdProcessing = isDtdProcessing ? DtdProcessing.Parse : DtdProcessing.Prohibit; - - // Supply the credentials necessary to access the DTD file stored on the network. - var resolver = new LocalXmlUrlResolver(basePath); - resolver.Credentials = System.Net.CredentialCache.DefaultCredentials; - settings.XmlResolver = resolver; - return settings; } @@ -251,10 +246,12 @@ protected virtual SettingsXml LoadSettings(string settingsFilename) //Create an empty XmlRoot. //This is needed because the class settingsXml is not decorated with an attribute "XmlRoot". - XmlRootAttribute xmlRoot = new XmlRootAttribute(); - xmlRoot.ElementName = "settings"; - xmlRoot.Namespace = "http://NBi/TestSuite"; - xmlRoot.IsNullable = true; + XmlRootAttribute xmlRoot = new XmlRootAttribute + { + ElementName = "settings", + Namespace = "http://NBi/TestSuite", + IsNullable = true + }; SettingsXml settings = null; // Create the XmlReader object.