From 87e33cc8d9a9741b66c7cdb069211b0ed3967878 Mon Sep 17 00:00:00 2001 From: vineeth Hanumanthu Date: Thu, 14 Nov 2019 15:41:59 +0530 Subject: [PATCH 1/9] test run parameter added as second class argument --- .../RunSettingsProviderExtensions.cs | 78 +++++++++++++++++++ .../CLIRunSettingsArgumentProcessor.cs | 17 +++- .../CLIRunSettingsArgumentProcessorTests.cs | 12 +++ 3 files changed, 106 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.TestPlatform.Common/Utilities/RunSettingsProviderExtensions.cs b/src/Microsoft.TestPlatform.Common/Utilities/RunSettingsProviderExtensions.cs index d864305a9c..1a5b3609e7 100644 --- a/src/Microsoft.TestPlatform.Common/Utilities/RunSettingsProviderExtensions.cs +++ b/src/Microsoft.TestPlatform.Common/Utilities/RunSettingsProviderExtensions.cs @@ -12,6 +12,7 @@ namespace Microsoft.VisualStudio.TestPlatform.Common.Utilities using Microsoft.VisualStudio.TestPlatform.ObjectModel; using Microsoft.VisualStudio.TestPlatform.ObjectModel.Utilities; using Microsoft.VisualStudio.TestPlatform.Common; + using System.Collections.Generic; /// /// Utilities to get the run settings from the provider and the commandline options specified. @@ -62,6 +63,83 @@ public static void UpdateRunSettingsNode(this IRunSettingsProvider runSettingsPr runSettingsProvider.UpdateRunSettings(xmlDocument.OuterXml); } + public static void UpdateTestRunParmeterSettingsNode(this IRunSettingsProvider runSettingsProvider, string key) + { + ValidateArg.NotNull(runSettingsProvider, nameof(runSettingsProvider)); + ValidateArg.NotNullOrWhiteSpace(key, nameof(key)); + + var xmlDocument = runSettingsProvider.GetRunSettingXmlDocument(); + UpdateTestRunParmeterSettingsXmlDocument(xmlDocument, key); + runSettingsProvider.UpdateRunSettings(xmlDocument.OuterXml); + } + + private static void UpdateTestRunParmeterSettingsXmlDocument(XmlDocument xmlDocument, string key) + { + var path = key.Split('.'); + var parameterNode = path[1]; + XmlNode parent = xmlDocument.DocumentElement; + var start = parameterNode.IndexOf("("); + var end = parameterNode.IndexOf(")"); + var nodeParameter = path[1]; + string parameters = null; + if (start != -1 || end != -1) + { + parameters = parameterNode.Substring(start + 1, end - start - 1); + nodeParameter = parameterNode.Substring(0, start); + } + + const string testRunParameters = "TestRunParameters"; + XmlNode testRunParameterNode = GetXmlNode(xmlDocument, testRunParameters) ?? xmlDocument.CreateElement(testRunParameters); + XmlElement element = xmlDocument.CreateElement(nodeParameter); + var keyValuePairList = GetAttributeKeyValuePairList(parameters); + var xPath = $"TestRunParameters/Parameter"; + var xPathAttributes = ""; + for (var j = 0; j < keyValuePairList.Count; j++) + { + var attributeKey = keyValuePairList[j].Key; + var attributeValue = keyValuePairList[j].Value; + element.SetAttribute(attributeKey, attributeValue); + xPathAttributes += $"[@{attributeKey}=\"{attributeValue}\"]"; + } + + xPath += xPathAttributes; + if (GetXmlNode(xmlDocument, xPath) == null) + { + testRunParameterNode.AppendChild(element); + parent.AppendChild(testRunParameterNode); + } + } + + private static List> GetAttributeKeyValuePairList(string parameter) + { + List> keyValuePairList = new List>(); + if (parameter == null) + return keyValuePairList; + string[] parameters = parameter.Split(','); + var length = parameters.Length; + for (int index = 0; index < length; index++) + { + var keyValuePair = parameters[index]; + var indexOfSeparator = keyValuePair.IndexOf("="); + if (indexOfSeparator <= 0 || indexOfSeparator >= keyValuePair.Length - 1) + { + continue; + } + + var key = keyValuePair.Substring(0, indexOfSeparator).Trim(); + var value = keyValuePair.Substring(indexOfSeparator + 1); + + if (string.IsNullOrWhiteSpace(key)) + { + continue; + } + + keyValuePairList.Add(new KeyValuePair(key, value)); + } + return keyValuePairList; + } + + public static void UpdateRunSettingsNodeInnerXml(this IRunSettingsProvider runSettingsProvider, string key, string xml) { ValidateArg.NotNull(runSettingsProvider, nameof(runSettingsProvider)); diff --git a/src/vstest.console/Processors/CLIRunSettingsArgumentProcessor.cs b/src/vstest.console/Processors/CLIRunSettingsArgumentProcessor.cs index 2dcc983da4..8c0e23e6a1 100644 --- a/src/vstest.console/Processors/CLIRunSettingsArgumentProcessor.cs +++ b/src/vstest.console/Processors/CLIRunSettingsArgumentProcessor.cs @@ -140,6 +140,11 @@ private void CreateOrOverwriteRunSettings(IRunSettingsProvider runSettingsProvid for (int index = 0; index < length; index++) { var keyValuePair = args[index]; + if (IsTestRunParameterUpadated(runSettingsProvider, keyValuePair)) + { + return; + } + var indexOfSeparator = keyValuePair.IndexOf("="); if (indexOfSeparator <= 0 || indexOfSeparator >= keyValuePair.Length - 1) { @@ -152,7 +157,7 @@ private void CreateOrOverwriteRunSettings(IRunSettingsProvider runSettingsProvid { continue; } - + // To determine whether to infer framework and platform. UpdateFrameworkAndPlatform(key, value); @@ -160,6 +165,16 @@ private void CreateOrOverwriteRunSettings(IRunSettingsProvider runSettingsProvid } } + private bool IsTestRunParameterUpadated(IRunSettingsProvider runSettingsProvider, string key) + { + if (key.Contains("TestRunParameters.Parameter")) + { + runSettingsProvider.UpdateTestRunParmeterSettingsNode(key); + return true; + } + return false; + } + private void UpdateFrameworkAndPlatform(string key, string value) { if (key.Equals(FrameworkArgumentExecutor.RunSettingsPath)) diff --git a/test/vstest.console.UnitTests/Processors/CLIRunSettingsArgumentProcessorTests.cs b/test/vstest.console.UnitTests/Processors/CLIRunSettingsArgumentProcessorTests.cs index 51aa3107db..9bd6cca302 100644 --- a/test/vstest.console.UnitTests/Processors/CLIRunSettingsArgumentProcessorTests.cs +++ b/test/vstest.console.UnitTests/Processors/CLIRunSettingsArgumentProcessorTests.cs @@ -24,6 +24,7 @@ public class CLIRunSettingsArgumentProcessorTests private const string DefaultRunSettings = "\r\n\r\n \r\n \r\n \r\n"; private const string RunSettingsWithDeploymentDisabled = "\r\n\r\n \r\n \r\n \r\n \r\n False\r\n \r\n"; private const string RunSettingsWithDeploymentEnabled = "\r\n\r\n \r\n \r\n \r\n \r\n True\r\n \r\n"; + private const string RunSettingsWithTestRunParameters = "\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n"; [TestInitialize] public void Init() @@ -133,6 +134,17 @@ public void InitializeShouldIgnoreWhiteSpaceInBeginningOrEndOfKey() Assert.AreEqual(RunSettingsWithDeploymentDisabled, settingsProvider.ActiveRunSettings.SettingsXml); } + [TestMethod] + public void InitializeShouldValidateTestRunParameter() + { + var args = new string[] { "TestRunParameters.Parameter(name=weburl,value=http://localhost//abc)" }; + + this.executor.Initialize(args); + + Assert.IsNotNull(this.settingsProvider.ActiveRunSettings); + Assert.AreEqual(RunSettingsWithTestRunParameters, settingsProvider.ActiveRunSettings.SettingsXml); + } + [TestMethod] public void InitializeShouldIgnoreThrowExceptionIfKeyHasWhiteSpace() { From b1d894b658f8508ce2f6030f1b7bd2f5c2cc3398 Mon Sep 17 00:00:00 2001 From: vineeth Hanumanthu Date: Fri, 15 Nov 2019 15:14:47 +0530 Subject: [PATCH 2/9] regex is used to match test run paramterer node --- .../RunSettingsProviderExtensions.cs | 131 +++++++++--------- .../CLIRunSettingsArgumentProcessor.cs | 25 ++-- .../RunSettingsProviderExtensionsTests.cs | 35 ++++- .../CLIRunSettingsArgumentProcessorTests.cs | 4 +- 4 files changed, 116 insertions(+), 79 deletions(-) diff --git a/src/Microsoft.TestPlatform.Common/Utilities/RunSettingsProviderExtensions.cs b/src/Microsoft.TestPlatform.Common/Utilities/RunSettingsProviderExtensions.cs index 1a5b3609e7..66f5567e12 100644 --- a/src/Microsoft.TestPlatform.Common/Utilities/RunSettingsProviderExtensions.cs +++ b/src/Microsoft.TestPlatform.Common/Utilities/RunSettingsProviderExtensions.cs @@ -13,6 +13,7 @@ namespace Microsoft.VisualStudio.TestPlatform.Common.Utilities using Microsoft.VisualStudio.TestPlatform.ObjectModel.Utilities; using Microsoft.VisualStudio.TestPlatform.Common; using System.Collections.Generic; + using System.Text.RegularExpressions; /// /// Utilities to get the run settings from the provider and the commandline options specified. @@ -21,6 +22,36 @@ internal static class RunSettingsProviderExtensions { public const string EmptyRunSettings = @""; + /// + /// Pattern used to find test run parameter node. + /// + private const string TestRunParameters = "TestRunParameters"; + + /// + /// Pattern used to find parameter node. + /// + private const string Parameter = "Parameter"; + + /// + /// Pattern that indicates Attribute name. + /// + private const string AttributeName = "AttrName"; + + /// + /// Pattern that indicates Attribute value. + /// + private const string AttributeValue = "AttrValue"; + + /// + /// Attribute name key for test run parameter node + /// + private const string Name = "name"; + + /// + /// Attribute value key for test run parameter node + /// + private const string Value = "value"; + public static void UpdateRunSettings(this IRunSettingsProvider runSettingsProvider, string runsettingsXml) { ValidateArg.NotNull(runSettingsProvider, nameof(runSettingsProvider)); @@ -63,83 +94,59 @@ public static void UpdateRunSettingsNode(this IRunSettingsProvider runSettingsPr runSettingsProvider.UpdateRunSettings(xmlDocument.OuterXml); } - public static void UpdateTestRunParmeterSettingsNode(this IRunSettingsProvider runSettingsProvider, string key) + /// + /// Matches with test run parameter node pattern and returns that match. + /// + /// + /// + /// + public static Match GetTestRunParameterNodeMatch(this IRunSettingsProvider runSettingsProvider, string node) { - ValidateArg.NotNull(runSettingsProvider, nameof(runSettingsProvider)); - ValidateArg.NotNullOrWhiteSpace(key, nameof(key)); - - var xmlDocument = runSettingsProvider.GetRunSettingXmlDocument(); - UpdateTestRunParmeterSettingsXmlDocument(xmlDocument, key); - runSettingsProvider.UpdateRunSettings(xmlDocument.OuterXml); + var attrName = $"(?<{AttributeName}>\\w+)"; + var attrValue = $"(?<{AttributeValue}>.+)"; + Regex regex = new Regex($"{TestRunParameters}.{Parameter}\\(name={attrName},value={attrValue}\\)"); + Match match = regex.Match(node); + return match; } - private static void UpdateTestRunParmeterSettingsXmlDocument(XmlDocument xmlDocument, string key) + /// + /// If test run parameter exists already it will override with new value otherwise this will add new test run parameter. + /// + /// + /// + public static void UpdateTestRunParameterSettingsNode(this IRunSettingsProvider runSettingsProvider, Match match) { - var path = key.Split('.'); - var parameterNode = path[1]; - XmlNode parent = xmlDocument.DocumentElement; - var start = parameterNode.IndexOf("("); - var end = parameterNode.IndexOf(")"); - var nodeParameter = path[1]; - string parameters = null; - if (start != -1 || end != -1) - { - parameters = parameterNode.Substring(start + 1, end - start - 1); - nodeParameter = parameterNode.Substring(0, start); - } - - const string testRunParameters = "TestRunParameters"; - XmlNode testRunParameterNode = GetXmlNode(xmlDocument, testRunParameters) ?? xmlDocument.CreateElement(testRunParameters); - XmlElement element = xmlDocument.CreateElement(nodeParameter); - var keyValuePairList = GetAttributeKeyValuePairList(parameters); - var xPath = $"TestRunParameters/Parameter"; - var xPathAttributes = ""; - for (var j = 0; j < keyValuePairList.Count; j++) - { - var attributeKey = keyValuePairList[j].Key; - var attributeValue = keyValuePairList[j].Value; - element.SetAttribute(attributeKey, attributeValue); - xPathAttributes += $"[@{attributeKey}=\"{attributeValue}\"]"; - } + ValidateArg.NotNull(runSettingsProvider, nameof(runSettingsProvider)); - xPath += xPathAttributes; - if (GetXmlNode(xmlDocument, xPath) == null) + var xmlDocument = runSettingsProvider.GetRunSettingXmlDocument(); + XmlNode testRunParameterNode = GetXmlNode(xmlDocument, TestRunParameters) ?? xmlDocument.CreateElement(TestRunParameters); + var attrName = match.Groups[AttributeName].Value; + var attrValue = match.Groups[AttributeValue].Value; + if (!TryOverRideAttributeName(testRunParameterNode, attrName, attrValue)) { + XmlElement element = xmlDocument.CreateElement(Parameter); + element.SetAttribute(Name, attrName); + element.SetAttribute(Value, attrValue); testRunParameterNode.AppendChild(element); - parent.AppendChild(testRunParameterNode); + xmlDocument.DocumentElement.AppendChild(testRunParameterNode); } + + runSettingsProvider.UpdateRunSettings(xmlDocument.OuterXml); } - - private static List> GetAttributeKeyValuePairList(string parameter) + + private static bool TryOverRideAttributeName(XmlNode xmlNode, string attrName, string attrValue) { - List> keyValuePairList = new List>(); - if (parameter == null) - return keyValuePairList; - string[] parameters = parameter.Split(','); - var length = parameters.Length; - for (int index = 0; index < length; index++) + foreach (XmlNode node in xmlNode.ChildNodes) { - var keyValuePair = parameters[index]; - var indexOfSeparator = keyValuePair.IndexOf("="); - if (indexOfSeparator <= 0 || indexOfSeparator >= keyValuePair.Length - 1) + if (string.Compare(node.Attributes[Name].Value, attrName) == 0) { - continue; + node.Attributes[Value].Value = attrValue; + return true; } - - var key = keyValuePair.Substring(0, indexOfSeparator).Trim(); - var value = keyValuePair.Substring(indexOfSeparator + 1); - - if (string.IsNullOrWhiteSpace(key)) - { - continue; - } - - keyValuePairList.Add(new KeyValuePair(key, value)); } - return keyValuePairList; + return false; } - public static void UpdateRunSettingsNodeInnerXml(this IRunSettingsProvider runSettingsProvider, string key, string xml) { ValidateArg.NotNull(runSettingsProvider, nameof(runSettingsProvider)); @@ -211,7 +218,7 @@ private static XmlNode CreateNode(XmlDocument doc, string xPath) } return node; - } + } private static XmlDocument GetRunSettingXmlDocument(this IRunSettingsProvider runSettingsProvider) { diff --git a/src/vstest.console/Processors/CLIRunSettingsArgumentProcessor.cs b/src/vstest.console/Processors/CLIRunSettingsArgumentProcessor.cs index 8c0e23e6a1..f5a909c62f 100644 --- a/src/vstest.console/Processors/CLIRunSettingsArgumentProcessor.cs +++ b/src/vstest.console/Processors/CLIRunSettingsArgumentProcessor.cs @@ -13,6 +13,7 @@ namespace Microsoft.VisualStudio.TestPlatform.CommandLine.Processors using Microsoft.VisualStudio.TestPlatform.Common.Utilities; using CommandLineResources = Microsoft.VisualStudio.TestPlatform.CommandLine.Resources.Resources; + using System.Text.RegularExpressions; /// /// The argument processor for runsettings passed as argument through cli @@ -139,25 +140,26 @@ private void CreateOrOverwriteRunSettings(IRunSettingsProvider runSettingsProvid for (int index = 0; index < length; index++) { - var keyValuePair = args[index]; - if (IsTestRunParameterUpadated(runSettingsProvider, keyValuePair)) + var arg = args[index]; + + if (TryUpdateTestRunParameterNode(runSettingsProvider, arg)) { - return; + continue; } - var indexOfSeparator = keyValuePair.IndexOf("="); - if (indexOfSeparator <= 0 || indexOfSeparator >= keyValuePair.Length - 1) + var indexOfSeparator = arg.IndexOf("="); + if (indexOfSeparator <= 0 || indexOfSeparator >= arg.Length - 1) { continue; } - var key = keyValuePair.Substring(0, indexOfSeparator).Trim(); - var value = keyValuePair.Substring(indexOfSeparator + 1); + var key = arg.Substring(0, indexOfSeparator).Trim(); + var value = arg.Substring(indexOfSeparator + 1); if (string.IsNullOrWhiteSpace(key)) { continue; } - + // To determine whether to infer framework and platform. UpdateFrameworkAndPlatform(key, value); @@ -165,11 +167,12 @@ private void CreateOrOverwriteRunSettings(IRunSettingsProvider runSettingsProvid } } - private bool IsTestRunParameterUpadated(IRunSettingsProvider runSettingsProvider, string key) + private bool TryUpdateTestRunParameterNode(IRunSettingsProvider runSettingsProvider, string node) { - if (key.Contains("TestRunParameters.Parameter")) + var match = runSettingsProvider.GetTestRunParameterNodeMatch(node); + if (string.Compare(match.Value, node) == 0) { - runSettingsProvider.UpdateTestRunParmeterSettingsNode(key); + runSettingsProvider.UpdateTestRunParameterSettingsNode(match); return true; } return false; diff --git a/test/Microsoft.TestPlatform.Common.UnitTests/ExtensionFramework/Utilities/RunSettingsProviderExtensionsTests.cs b/test/Microsoft.TestPlatform.Common.UnitTests/ExtensionFramework/Utilities/RunSettingsProviderExtensionsTests.cs index 8083c71a57..b9b97b165e 100644 --- a/test/Microsoft.TestPlatform.Common.UnitTests/ExtensionFramework/Utilities/RunSettingsProviderExtensionsTests.cs +++ b/test/Microsoft.TestPlatform.Common.UnitTests/ExtensionFramework/Utilities/RunSettingsProviderExtensionsTests.cs @@ -4,13 +4,14 @@ namespace Microsoft.VisualStudio.TestPlatform.CommandLine.UnitTests.Processors.Utilities { using System; - + using Microsoft.VisualStudio.TestPlatform.Common; using Microsoft.VisualStudio.TestPlatform.Common.Interfaces; using Microsoft.VisualStudio.TestTools.UnitTesting; using Microsoft.VisualStudio.TestPlatform.ObjectModel.Utilities; using Microsoft.VisualStudio.TestPlatform.ObjectModel; using Microsoft.VisualStudio.TestPlatform.Common.Utilities; + using System.Text.RegularExpressions; [TestClass] public class RunSettingsProviderExtensionsTests @@ -24,7 +25,7 @@ public void Init() { runSettingsProvider = new TestableRunSettingsProvider(); } - + [TestMethod] public void UpdateRunSettingsShouldUpdateGivenSettingsXml() { @@ -130,6 +131,33 @@ public void UpdateRunSettingsNodeShouldAddNewKeyIfNotPresent() Assert.AreEqual("data", this.runSettingsProvider.QueryRunSettingsNode("Key.Path")); } + [TestMethod] + public void UpdateTetsRunParameterSettingsNodeShouldAddNewKeyIfNotPresent() + { + var match = this.runSettingsProvider.GetTestRunParameterNodeMatch("TestRunParameters.Parameter(name=weburl,value=http://localhost//abc)"); + var runSettingsWithTestRunParameters = "\r\n\r\n \r\n \r\n \r\n"; + + this.runSettingsProvider.UpdateRunSettings("\r\n "); + this.runSettingsProvider.UpdateTestRunParameterSettingsNode(match); + + Assert.AreEqual(runSettingsWithTestRunParameters, this.runSettingsProvider.ActiveRunSettings.SettingsXml); + + } + + [TestMethod] + public void UpdateTetsRunParameterSettingsNodeShouldOverrideValueIfKeyIsAlreadyPresent() + { + var runSettingsWithTestRunParameters = "\r\n\r\n \r\n \r\n \r\n"; + var runSettingsWithTestRunParametersOverRode = "\r\n\r\n \r\n \r\n \r\n"; + + this.runSettingsProvider.UpdateRunSettings(runSettingsWithTestRunParameters); + var match = this.runSettingsProvider.GetTestRunParameterNodeMatch("TestRunParameters.Parameter(name=weburl,value=http://localhost//def)"); + this.runSettingsProvider.UpdateTestRunParameterSettingsNode(match); + + Assert.AreEqual(runSettingsWithTestRunParametersOverRode, this.runSettingsProvider.ActiveRunSettings.SettingsXml); + + } + [TestMethod] public void UpdateRunSettingsNodeShouldUpdateKeyIfAlreadyPresent() { @@ -203,7 +231,7 @@ public void QueryRunSettingsNodeShouldReturnCorrectValue() this.runSettingsProvider.UpdateRunSettings(" x86 "); Assert.AreEqual("x86", this.runSettingsProvider.QueryRunSettingsNode("RunConfiguration.TargetPlatform")); } - + private class TestableRunSettingsProvider : IRunSettingsProvider { public RunSettings ActiveRunSettings @@ -211,7 +239,6 @@ public RunSettings ActiveRunSettings get; set; } - public void SetActiveRunSettings(RunSettings runSettings) { this.ActiveRunSettings = runSettings; diff --git a/test/vstest.console.UnitTests/Processors/CLIRunSettingsArgumentProcessorTests.cs b/test/vstest.console.UnitTests/Processors/CLIRunSettingsArgumentProcessorTests.cs index 9bd6cca302..37a2dc2ca1 100644 --- a/test/vstest.console.UnitTests/Processors/CLIRunSettingsArgumentProcessorTests.cs +++ b/test/vstest.console.UnitTests/Processors/CLIRunSettingsArgumentProcessorTests.cs @@ -24,7 +24,6 @@ public class CLIRunSettingsArgumentProcessorTests private const string DefaultRunSettings = "\r\n\r\n \r\n \r\n \r\n"; private const string RunSettingsWithDeploymentDisabled = "\r\n\r\n \r\n \r\n \r\n \r\n False\r\n \r\n"; private const string RunSettingsWithDeploymentEnabled = "\r\n\r\n \r\n \r\n \r\n \r\n True\r\n \r\n"; - private const string RunSettingsWithTestRunParameters = "\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n"; [TestInitialize] public void Init() @@ -140,9 +139,10 @@ public void InitializeShouldValidateTestRunParameter() var args = new string[] { "TestRunParameters.Parameter(name=weburl,value=http://localhost//abc)" }; this.executor.Initialize(args); + var runSettingsWithTestRunParameters = "\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n"; Assert.IsNotNull(this.settingsProvider.ActiveRunSettings); - Assert.AreEqual(RunSettingsWithTestRunParameters, settingsProvider.ActiveRunSettings.SettingsXml); + Assert.AreEqual(runSettingsWithTestRunParameters, settingsProvider.ActiveRunSettings.SettingsXml); } [TestMethod] From 6b7bd909132d2aa5dea33c0d03991d323ecf13e4 Mon Sep 17 00:00:00 2001 From: vineeth Hanumanthu Date: Fri, 15 Nov 2019 19:07:02 +0530 Subject: [PATCH 3/9] added exception for invaild test run parameter argument --- .../RunSettingsProviderExtensions.cs | 35 ++++++++++--------- .../CLIRunSettingsArgumentProcessor.cs | 10 +++++- .../Resources/Resources.Designer.cs | 9 +++++ src/vstest.console/Resources/Resources.resx | 3 ++ .../RunSettingsProviderExtensionsTests.cs | 2 +- .../CLIRunSettingsArgumentProcessorTests.cs | 12 +++++++ 6 files changed, 52 insertions(+), 19 deletions(-) diff --git a/src/Microsoft.TestPlatform.Common/Utilities/RunSettingsProviderExtensions.cs b/src/Microsoft.TestPlatform.Common/Utilities/RunSettingsProviderExtensions.cs index 66f5567e12..bc7a8efa2d 100644 --- a/src/Microsoft.TestPlatform.Common/Utilities/RunSettingsProviderExtensions.cs +++ b/src/Microsoft.TestPlatform.Common/Utilities/RunSettingsProviderExtensions.cs @@ -25,32 +25,32 @@ internal static class RunSettingsProviderExtensions /// /// Pattern used to find test run parameter node. /// - private const string TestRunParameters = "TestRunParameters"; + private const string TestRunParametersString = "TestRunParameters"; /// /// Pattern used to find parameter node. /// - private const string Parameter = "Parameter"; + private const string ParameterString = "Parameter"; /// /// Pattern that indicates Attribute name. /// - private const string AttributeName = "AttrName"; + private const string AttributeNameString = "AttrName"; /// /// Pattern that indicates Attribute value. /// - private const string AttributeValue = "AttrValue"; + private const string AttributeValueString = "AttrValue"; /// /// Attribute name key for test run parameter node /// - private const string Name = "name"; + private const string NameString = "name"; /// /// Attribute value key for test run parameter node /// - private const string Value = "value"; + private const string ValueString = "value"; public static void UpdateRunSettings(this IRunSettingsProvider runSettingsProvider, string runsettingsXml) { @@ -102,9 +102,9 @@ public static void UpdateRunSettingsNode(this IRunSettingsProvider runSettingsPr /// public static Match GetTestRunParameterNodeMatch(this IRunSettingsProvider runSettingsProvider, string node) { - var attrName = $"(?<{AttributeName}>\\w+)"; - var attrValue = $"(?<{AttributeValue}>.+)"; - Regex regex = new Regex($"{TestRunParameters}.{Parameter}\\(name={attrName},value={attrValue}\\)"); + var attrName = $"(?<{AttributeNameString}>\\w+)"; + var attrValue = $"(?<{AttributeValueString}>.+)"; + Regex regex = new Regex($"{TestRunParametersString}.{ParameterString}\\(name={attrName},value={attrValue}\\)"); Match match = regex.Match(node); return match; } @@ -119,14 +119,15 @@ public static void UpdateTestRunParameterSettingsNode(this IRunSettingsProvider ValidateArg.NotNull(runSettingsProvider, nameof(runSettingsProvider)); var xmlDocument = runSettingsProvider.GetRunSettingXmlDocument(); - XmlNode testRunParameterNode = GetXmlNode(xmlDocument, TestRunParameters) ?? xmlDocument.CreateElement(TestRunParameters); - var attrName = match.Groups[AttributeName].Value; - var attrValue = match.Groups[AttributeValue].Value; + XmlNode testRunParameterNode = GetXmlNode(xmlDocument, TestRunParametersString) ?? xmlDocument.CreateElement(TestRunParametersString); + var attrName = match.Groups[AttributeNameString].Value; + var attrValue = match.Groups[AttributeValueString].Value; + if (!TryOverRideAttributeName(testRunParameterNode, attrName, attrValue)) { - XmlElement element = xmlDocument.CreateElement(Parameter); - element.SetAttribute(Name, attrName); - element.SetAttribute(Value, attrValue); + XmlElement element = xmlDocument.CreateElement(ParameterString); + element.SetAttribute(NameString, attrName); + element.SetAttribute(ValueString, attrValue); testRunParameterNode.AppendChild(element); xmlDocument.DocumentElement.AppendChild(testRunParameterNode); } @@ -138,9 +139,9 @@ private static bool TryOverRideAttributeName(XmlNode xmlNode, string attrName, s { foreach (XmlNode node in xmlNode.ChildNodes) { - if (string.Compare(node.Attributes[Name].Value, attrName) == 0) + if (string.Compare(node.Attributes[NameString].Value, attrName) == 0) { - node.Attributes[Value].Value = attrValue; + node.Attributes[ValueString].Value = attrValue; return true; } } diff --git a/src/vstest.console/Processors/CLIRunSettingsArgumentProcessor.cs b/src/vstest.console/Processors/CLIRunSettingsArgumentProcessor.cs index f5a909c62f..1cc38137be 100644 --- a/src/vstest.console/Processors/CLIRunSettingsArgumentProcessor.cs +++ b/src/vstest.console/Processors/CLIRunSettingsArgumentProcessor.cs @@ -170,12 +170,20 @@ private void CreateOrOverwriteRunSettings(IRunSettingsProvider runSettingsProvid private bool TryUpdateTestRunParameterNode(IRunSettingsProvider runSettingsProvider, string node) { var match = runSettingsProvider.GetTestRunParameterNodeMatch(node); + + if (!node.Contains("TestRunParameters")) + { + return false; + } + if (string.Compare(match.Value, node) == 0) { runSettingsProvider.UpdateTestRunParameterSettingsNode(match); return true; } - return false; + + var exceptionMessage = string.Format(CommandLineResources.InvalidTestRunParameterArgument, node); + throw new CommandLineException(exceptionMessage); } private void UpdateFrameworkAndPlatform(string key, string value) diff --git a/src/vstest.console/Resources/Resources.Designer.cs b/src/vstest.console/Resources/Resources.Designer.cs index 04393581bc..243095410f 100644 --- a/src/vstest.console/Resources/Resources.Designer.cs +++ b/src/vstest.console/Resources/Resources.Designer.cs @@ -826,6 +826,15 @@ internal static string InvalidTestCaseFilterValueForSpecificTests { } } + /// + /// Looks up a localized string similar to The {0} argument is invalid.. + /// + internal static string InvalidTestRunParameterArgument { + get { + return ResourceManager.GetString("InvalidTestRunParameterArgument", resourceCulture); + } + } + /// /// Looks up a localized string similar to Argument {0} is not expected in the 'UseVsixExtensions' command. Specify the command indicating whether the vsix extensions should be used or skipped (Example: vstest.console.exe myTests.dll /UseVsixExtensions:true) and try again.. /// diff --git a/src/vstest.console/Resources/Resources.resx b/src/vstest.console/Resources/Resources.resx index 33cf76e005..4264fdf274 100644 --- a/src/vstest.console/Resources/Resources.resx +++ b/src/vstest.console/Resources/Resources.resx @@ -734,4 +734,7 @@ A total of {0} test files matched the specified pattern. + + The {0} argument is invalid. + \ No newline at end of file diff --git a/test/Microsoft.TestPlatform.Common.UnitTests/ExtensionFramework/Utilities/RunSettingsProviderExtensionsTests.cs b/test/Microsoft.TestPlatform.Common.UnitTests/ExtensionFramework/Utilities/RunSettingsProviderExtensionsTests.cs index b9b97b165e..715b579212 100644 --- a/test/Microsoft.TestPlatform.Common.UnitTests/ExtensionFramework/Utilities/RunSettingsProviderExtensionsTests.cs +++ b/test/Microsoft.TestPlatform.Common.UnitTests/ExtensionFramework/Utilities/RunSettingsProviderExtensionsTests.cs @@ -132,7 +132,7 @@ public void UpdateRunSettingsNodeShouldAddNewKeyIfNotPresent() } [TestMethod] - public void UpdateTetsRunParameterSettingsNodeShouldAddNewKeyIfNotPresent() + public void UpdateTestRunParameterSettingsNodeShouldAddNewKeyIfNotPresent() { var match = this.runSettingsProvider.GetTestRunParameterNodeMatch("TestRunParameters.Parameter(name=weburl,value=http://localhost//abc)"); var runSettingsWithTestRunParameters = "\r\n\r\n \r\n \r\n \r\n"; diff --git a/test/vstest.console.UnitTests/Processors/CLIRunSettingsArgumentProcessorTests.cs b/test/vstest.console.UnitTests/Processors/CLIRunSettingsArgumentProcessorTests.cs index 37a2dc2ca1..9caedd14eb 100644 --- a/test/vstest.console.UnitTests/Processors/CLIRunSettingsArgumentProcessorTests.cs +++ b/test/vstest.console.UnitTests/Processors/CLIRunSettingsArgumentProcessorTests.cs @@ -14,6 +14,7 @@ namespace vstest.console.UnitTests.Processors using Microsoft.VisualStudio.TestPlatform.Common; using Microsoft.VisualStudio.TestPlatform.ObjectModel; using Microsoft.VisualStudio.TestTools.UnitTesting; + using CommandLineResources = Microsoft.VisualStudio.TestPlatform.CommandLine.Resources.Resources; [TestClass] public class CLIRunSettingsArgumentProcessorTests @@ -145,6 +146,17 @@ public void InitializeShouldValidateTestRunParameter() Assert.AreEqual(runSettingsWithTestRunParameters, settingsProvider.ActiveRunSettings.SettingsXml); } + [TestMethod] + public void InitializeShouldThrowErrorIfTestRunParameterNodeIsInValid() + { + var args = new string[] { "TestRunParameters.Parameter(foo=bar)" }; + var str = string.Format(CommandLineResources.InvalidTestRunParameterArgument, args[0]); + + CommandLineException ex = Assert.ThrowsException(() => this.executor.Initialize(args)); + Assert.AreEqual(str, ex.Message); + + } + [TestMethod] public void InitializeShouldIgnoreThrowExceptionIfKeyHasWhiteSpace() { From 84c8c8f5d951b86de3453e353bccc529f754c3e7 Mon Sep 17 00:00:00 2001 From: vineeth Hanumanthu Date: Wed, 20 Nov 2019 15:02:04 +0530 Subject: [PATCH 4/9] regex constants moved to constants --- .../RunSettingsProviderExtensions.cs | 52 ++++--------------- .../Constants.cs | 30 ++++++++++- .../RunSettings/TestRunParameters.cs | 2 +- .../Utilities/XmlRunSettingsUtilities.cs | 2 +- .../CLIRunSettingsArgumentProcessor.cs | 2 +- .../Resources/Resources.Designer.cs | 4 +- src/vstest.console/Resources/Resources.resx | 3 +- .../Resources/xlf/Resources.cs.xlf | 7 +++ .../Resources/xlf/Resources.de.xlf | 7 +++ .../Resources/xlf/Resources.es.xlf | 7 +++ .../Resources/xlf/Resources.fr.xlf | 7 +++ .../Resources/xlf/Resources.it.xlf | 7 +++ .../Resources/xlf/Resources.ja.xlf | 7 +++ .../Resources/xlf/Resources.ko.xlf | 7 +++ .../Resources/xlf/Resources.pl.xlf | 7 +++ .../Resources/xlf/Resources.pt-BR.xlf | 7 +++ .../Resources/xlf/Resources.ru.xlf | 7 +++ .../Resources/xlf/Resources.tr.xlf | 7 +++ .../Resources/xlf/Resources.xlf | 7 +++ .../Resources/xlf/Resources.zh-Hans.xlf | 7 +++ .../Resources/xlf/Resources.zh-Hant.xlf | 7 +++ .../CLIRunSettingsArgumentProcessorTests.cs | 7 +-- 22 files changed, 149 insertions(+), 51 deletions(-) diff --git a/src/Microsoft.TestPlatform.Common/Utilities/RunSettingsProviderExtensions.cs b/src/Microsoft.TestPlatform.Common/Utilities/RunSettingsProviderExtensions.cs index bc7a8efa2d..ad216f7c63 100644 --- a/src/Microsoft.TestPlatform.Common/Utilities/RunSettingsProviderExtensions.cs +++ b/src/Microsoft.TestPlatform.Common/Utilities/RunSettingsProviderExtensions.cs @@ -22,36 +22,6 @@ internal static class RunSettingsProviderExtensions { public const string EmptyRunSettings = @""; - /// - /// Pattern used to find test run parameter node. - /// - private const string TestRunParametersString = "TestRunParameters"; - - /// - /// Pattern used to find parameter node. - /// - private const string ParameterString = "Parameter"; - - /// - /// Pattern that indicates Attribute name. - /// - private const string AttributeNameString = "AttrName"; - - /// - /// Pattern that indicates Attribute value. - /// - private const string AttributeValueString = "AttrValue"; - - /// - /// Attribute name key for test run parameter node - /// - private const string NameString = "name"; - - /// - /// Attribute value key for test run parameter node - /// - private const string ValueString = "value"; - public static void UpdateRunSettings(this IRunSettingsProvider runSettingsProvider, string runsettingsXml) { ValidateArg.NotNull(runSettingsProvider, nameof(runSettingsProvider)); @@ -102,9 +72,9 @@ public static void UpdateRunSettingsNode(this IRunSettingsProvider runSettingsPr /// public static Match GetTestRunParameterNodeMatch(this IRunSettingsProvider runSettingsProvider, string node) { - var attrName = $"(?<{AttributeNameString}>\\w+)"; - var attrValue = $"(?<{AttributeValueString}>.+)"; - Regex regex = new Regex($"{TestRunParametersString}.{ParameterString}\\(name={attrName},value={attrValue}\\)"); + var attrName = $"(?<{Constants.AttributeNameString}>\\w+)"; + var attrValue = $"(?<{Constants.AttributeValueString}>.+)"; + Regex regex = new Regex($"{Constants.TestRunParametersString}.{Constants.ParameterString}\\(name=\\s*\"{attrName}\"\\s*,value=\\s*\"{attrValue}\"\\s*\\)"); Match match = regex.Match(node); return match; } @@ -119,15 +89,15 @@ public static void UpdateTestRunParameterSettingsNode(this IRunSettingsProvider ValidateArg.NotNull(runSettingsProvider, nameof(runSettingsProvider)); var xmlDocument = runSettingsProvider.GetRunSettingXmlDocument(); - XmlNode testRunParameterNode = GetXmlNode(xmlDocument, TestRunParametersString) ?? xmlDocument.CreateElement(TestRunParametersString); - var attrName = match.Groups[AttributeNameString].Value; - var attrValue = match.Groups[AttributeValueString].Value; + XmlNode testRunParameterNode = GetXmlNode(xmlDocument, Constants.TestRunParametersString) ?? xmlDocument.CreateElement(Constants.TestRunParametersString); + var attrName = match.Groups[Constants.AttributeNameString].Value; + var attrValue = match.Groups[Constants.AttributeValueString].Value; if (!TryOverRideAttributeName(testRunParameterNode, attrName, attrValue)) { - XmlElement element = xmlDocument.CreateElement(ParameterString); - element.SetAttribute(NameString, attrName); - element.SetAttribute(ValueString, attrValue); + XmlElement element = xmlDocument.CreateElement(Constants.ParameterString); + element.SetAttribute(Constants.NameString, attrName); + element.SetAttribute(Constants.ValueString, attrValue); testRunParameterNode.AppendChild(element); xmlDocument.DocumentElement.AppendChild(testRunParameterNode); } @@ -139,9 +109,9 @@ private static bool TryOverRideAttributeName(XmlNode xmlNode, string attrName, s { foreach (XmlNode node in xmlNode.ChildNodes) { - if (string.Compare(node.Attributes[NameString].Value, attrName) == 0) + if (string.Compare(node.Attributes[Constants.NameString].Value, attrName) == 0) { - node.Attributes[ValueString].Value = attrValue; + node.Attributes[Constants.ValueString].Value = attrValue; return true; } } diff --git a/src/Microsoft.TestPlatform.ObjectModel/Constants.cs b/src/Microsoft.TestPlatform.ObjectModel/Constants.cs index 1a06464645..e17f633b44 100644 --- a/src/Microsoft.TestPlatform.ObjectModel/Constants.cs +++ b/src/Microsoft.TestPlatform.ObjectModel/Constants.cs @@ -121,7 +121,35 @@ public static class Constants public const string DataCollectorSettingName = "DataCollector"; - public const string TestRunParametersName = "TestRunParameters"; + /// + /// Pattern used to find test run parameter node. + /// + public const string TestRunParametersString = "TestRunParameters"; + + /// + /// Pattern used to find parameter node. + /// + public const string ParameterString = "Parameter"; + + /// + /// Pattern that indicates Attribute name. + /// + public const string AttributeNameString = "AttrName"; + + /// + /// Pattern that indicates Attribute value. + /// + public const string AttributeValueString = "AttrValue"; + + /// + /// Attribute name key for test run parameter node + /// + public const string NameString = "name"; + + /// + /// Attribute value key for test run parameter node + /// + public const string ValueString = "value"; /// /// Type of the unit test extension. (Extension author will use this name while authoring their Vsix) diff --git a/src/Microsoft.TestPlatform.ObjectModel/RunSettings/TestRunParameters.cs b/src/Microsoft.TestPlatform.ObjectModel/RunSettings/TestRunParameters.cs index b263ee864c..ce3c7a74ac 100644 --- a/src/Microsoft.TestPlatform.ObjectModel/RunSettings/TestRunParameters.cs +++ b/src/Microsoft.TestPlatform.ObjectModel/RunSettings/TestRunParameters.cs @@ -62,7 +62,7 @@ internal static Dictionary FromXml(XmlReader reader) string.Format( CultureInfo.CurrentCulture, Resources.Resources.InvalidSettingsXmlElement, - Constants.TestRunParametersName, + Constants.TestRunParametersString, reader.Name)); } diff --git a/src/Microsoft.TestPlatform.ObjectModel/Utilities/XmlRunSettingsUtilities.cs b/src/Microsoft.TestPlatform.ObjectModel/Utilities/XmlRunSettingsUtilities.cs index 9a81dbb999..0619e45e6f 100644 --- a/src/Microsoft.TestPlatform.ObjectModel/Utilities/XmlRunSettingsUtilities.cs +++ b/src/Microsoft.TestPlatform.ObjectModel/Utilities/XmlRunSettingsUtilities.cs @@ -168,7 +168,7 @@ public static RunConfiguration GetRunConfigurationNode(string settingsXml) /// If there is no test run parameters section defined in the settings xml a blank dictionary is returned. public static Dictionary GetTestRunParameters(string settingsXml) { - var nodeValue = GetNodeValue>(settingsXml, Constants.TestRunParametersName, TestRunParameters.FromXml); + var nodeValue = GetNodeValue>(settingsXml, Constants.TestRunParametersString, TestRunParameters.FromXml); if (nodeValue == default(Dictionary)) { // Return default. diff --git a/src/vstest.console/Processors/CLIRunSettingsArgumentProcessor.cs b/src/vstest.console/Processors/CLIRunSettingsArgumentProcessor.cs index 1cc38137be..2f74f339ca 100644 --- a/src/vstest.console/Processors/CLIRunSettingsArgumentProcessor.cs +++ b/src/vstest.console/Processors/CLIRunSettingsArgumentProcessor.cs @@ -171,7 +171,7 @@ private bool TryUpdateTestRunParameterNode(IRunSettingsProvider runSettingsProvi { var match = runSettingsProvider.GetTestRunParameterNodeMatch(node); - if (!node.Contains("TestRunParameters")) + if (!node.Contains(Constants.TestRunParametersString)) { return false; } diff --git a/src/vstest.console/Resources/Resources.Designer.cs b/src/vstest.console/Resources/Resources.Designer.cs index 243095410f..85615b1dfb 100644 --- a/src/vstest.console/Resources/Resources.Designer.cs +++ b/src/vstest.console/Resources/Resources.Designer.cs @@ -13,7 +13,6 @@ namespace Microsoft.VisualStudio.TestPlatform.CommandLine.Resources using System; using System.Reflection; - /// /// A strongly-typed resource class, for looking up localized strings, etc. /// @@ -827,7 +826,8 @@ internal static string InvalidTestCaseFilterValueForSpecificTests { } /// - /// Looks up a localized string similar to The {0} argument is invalid.. + /// Looks up a localized string similar to The test run parameter argument '{0}' is invalid. Please use the format below. + ///Format : TestRunParameters.Parameter(name="<name>", value="<value>"). /// internal static string InvalidTestRunParameterArgument { get { diff --git a/src/vstest.console/Resources/Resources.resx b/src/vstest.console/Resources/Resources.resx index 4264fdf274..b0be9a5080 100644 --- a/src/vstest.console/Resources/Resources.resx +++ b/src/vstest.console/Resources/Resources.resx @@ -735,6 +735,7 @@ A total of {0} test files matched the specified pattern. - The {0} argument is invalid. + The test run parameter argument '{0}' is invalid. Please use the format below. +Format : TestRunParameters.Parameter(name="<name>", value="<value>") \ No newline at end of file diff --git a/src/vstest.console/Resources/xlf/Resources.cs.xlf b/src/vstest.console/Resources/xlf/Resources.cs.xlf index b1593f23ca..1bdbf9b2dc 100644 --- a/src/vstest.console/Resources/xlf/Resources.cs.xlf +++ b/src/vstest.console/Resources/xlf/Resources.cs.xlf @@ -1656,6 +1656,13 @@ Celkový počet testovacích souborů, které odpovídají zadanému vzoru: {0} + + The test run parameter argument '{0}' is invalid. Please use the format below. +Format : TestRunParameters.Parameter(name="<name>", value="<value>") + The test run parameter argument '{0}' is invalid. Please use the format below. +Format : TestRunParameters.Parameter(name="<name>", value="<value>") + + \ No newline at end of file diff --git a/src/vstest.console/Resources/xlf/Resources.de.xlf b/src/vstest.console/Resources/xlf/Resources.de.xlf index 20ab7d8d2d..68efce13e3 100644 --- a/src/vstest.console/Resources/xlf/Resources.de.xlf +++ b/src/vstest.console/Resources/xlf/Resources.de.xlf @@ -1656,6 +1656,13 @@ Insgesamt {0} Testdateien stimmten mit dem angegebenen Muster überein. + + The test run parameter argument '{0}' is invalid. Please use the format below. +Format : TestRunParameters.Parameter(name="<name>", value="<value>") + The test run parameter argument '{0}' is invalid. Please use the format below. +Format : TestRunParameters.Parameter(name="<name>", value="<value>") + + \ No newline at end of file diff --git a/src/vstest.console/Resources/xlf/Resources.es.xlf b/src/vstest.console/Resources/xlf/Resources.es.xlf index 1aa4e67d8c..779fa10e66 100644 --- a/src/vstest.console/Resources/xlf/Resources.es.xlf +++ b/src/vstest.console/Resources/xlf/Resources.es.xlf @@ -1659,6 +1659,13 @@ {0} archivos de prueba en total coincidieron con el patrón especificado. + + The test run parameter argument '{0}' is invalid. Please use the format below. +Format : TestRunParameters.Parameter(name="<name>", value="<value>") + The test run parameter argument '{0}' is invalid. Please use the format below. +Format : TestRunParameters.Parameter(name="<name>", value="<value>") + + \ No newline at end of file diff --git a/src/vstest.console/Resources/xlf/Resources.fr.xlf b/src/vstest.console/Resources/xlf/Resources.fr.xlf index 0a608c7575..406d282848 100644 --- a/src/vstest.console/Resources/xlf/Resources.fr.xlf +++ b/src/vstest.console/Resources/xlf/Resources.fr.xlf @@ -1656,6 +1656,13 @@ Au total, {0} fichiers de test ont correspondu au modèle spécifié. + + The test run parameter argument '{0}' is invalid. Please use the format below. +Format : TestRunParameters.Parameter(name="<name>", value="<value>") + The test run parameter argument '{0}' is invalid. Please use the format below. +Format : TestRunParameters.Parameter(name="<name>", value="<value>") + + \ No newline at end of file diff --git a/src/vstest.console/Resources/xlf/Resources.it.xlf b/src/vstest.console/Resources/xlf/Resources.it.xlf index 08954c552d..979bbb6866 100644 --- a/src/vstest.console/Resources/xlf/Resources.it.xlf +++ b/src/vstest.console/Resources/xlf/Resources.it.xlf @@ -1656,6 +1656,13 @@ Un totale di {0} file di test corrisponde al criterio specificato. + + The test run parameter argument '{0}' is invalid. Please use the format below. +Format : TestRunParameters.Parameter(name="<name>", value="<value>") + The test run parameter argument '{0}' is invalid. Please use the format below. +Format : TestRunParameters.Parameter(name="<name>", value="<value>") + + \ No newline at end of file diff --git a/src/vstest.console/Resources/xlf/Resources.ja.xlf b/src/vstest.console/Resources/xlf/Resources.ja.xlf index 972403200a..0d995e8b41 100644 --- a/src/vstest.console/Resources/xlf/Resources.ja.xlf +++ b/src/vstest.console/Resources/xlf/Resources.ja.xlf @@ -1656,6 +1656,13 @@ 合計 {0} 個のテスト ファイルが指定されたパターンと一致しました。 + + The test run parameter argument '{0}' is invalid. Please use the format below. +Format : TestRunParameters.Parameter(name="<name>", value="<value>") + The test run parameter argument '{0}' is invalid. Please use the format below. +Format : TestRunParameters.Parameter(name="<name>", value="<value>") + + \ No newline at end of file diff --git a/src/vstest.console/Resources/xlf/Resources.ko.xlf b/src/vstest.console/Resources/xlf/Resources.ko.xlf index 9779563bfe..25d9dc4bd5 100644 --- a/src/vstest.console/Resources/xlf/Resources.ko.xlf +++ b/src/vstest.console/Resources/xlf/Resources.ko.xlf @@ -1656,6 +1656,13 @@ 지정된 패턴과 일치한 총 테스트 파일 수는 {0}개입니다. + + The test run parameter argument '{0}' is invalid. Please use the format below. +Format : TestRunParameters.Parameter(name="<name>", value="<value>") + The test run parameter argument '{0}' is invalid. Please use the format below. +Format : TestRunParameters.Parameter(name="<name>", value="<value>") + + \ No newline at end of file diff --git a/src/vstest.console/Resources/xlf/Resources.pl.xlf b/src/vstest.console/Resources/xlf/Resources.pl.xlf index a59a2094f1..3223203e49 100644 --- a/src/vstest.console/Resources/xlf/Resources.pl.xlf +++ b/src/vstest.console/Resources/xlf/Resources.pl.xlf @@ -1656,6 +1656,13 @@ Łączna liczba plików testowych dopasowanych do określonego wzorca: {0}. + + The test run parameter argument '{0}' is invalid. Please use the format below. +Format : TestRunParameters.Parameter(name="<name>", value="<value>") + The test run parameter argument '{0}' is invalid. Please use the format below. +Format : TestRunParameters.Parameter(name="<name>", value="<value>") + + \ No newline at end of file diff --git a/src/vstest.console/Resources/xlf/Resources.pt-BR.xlf b/src/vstest.console/Resources/xlf/Resources.pt-BR.xlf index 91f44a16f5..182a3b91d4 100644 --- a/src/vstest.console/Resources/xlf/Resources.pt-BR.xlf +++ b/src/vstest.console/Resources/xlf/Resources.pt-BR.xlf @@ -1656,6 +1656,13 @@ Altere o prefixo de nível de diagnóstico do agente de console, como mostrado a {0} arquivos de teste no total corresponderam ao padrão especificado. + + The test run parameter argument '{0}' is invalid. Please use the format below. +Format : TestRunParameters.Parameter(name="<name>", value="<value>") + The test run parameter argument '{0}' is invalid. Please use the format below. +Format : TestRunParameters.Parameter(name="<name>", value="<value>") + + \ No newline at end of file diff --git a/src/vstest.console/Resources/xlf/Resources.ru.xlf b/src/vstest.console/Resources/xlf/Resources.ru.xlf index 9d803eba73..7dfb4ee40c 100644 --- a/src/vstest.console/Resources/xlf/Resources.ru.xlf +++ b/src/vstest.console/Resources/xlf/Resources.ru.xlf @@ -1656,6 +1656,13 @@ Общее количество тестовых файлов ({0}), соответствующих указанному шаблону. + + The test run parameter argument '{0}' is invalid. Please use the format below. +Format : TestRunParameters.Parameter(name="<name>", value="<value>") + The test run parameter argument '{0}' is invalid. Please use the format below. +Format : TestRunParameters.Parameter(name="<name>", value="<value>") + + \ No newline at end of file diff --git a/src/vstest.console/Resources/xlf/Resources.tr.xlf b/src/vstest.console/Resources/xlf/Resources.tr.xlf index 4bdadc4131..75b0f917b0 100644 --- a/src/vstest.console/Resources/xlf/Resources.tr.xlf +++ b/src/vstest.console/Resources/xlf/Resources.tr.xlf @@ -1656,6 +1656,13 @@ Günlükler için izleme düzeyini aşağıda gösterildiği gibi değiştirin Toplam {0} test dosyası belirtilen desenle eşleşti. + + The test run parameter argument '{0}' is invalid. Please use the format below. +Format : TestRunParameters.Parameter(name="<name>", value="<value>") + The test run parameter argument '{0}' is invalid. Please use the format below. +Format : TestRunParameters.Parameter(name="<name>", value="<value>") + + \ No newline at end of file diff --git a/src/vstest.console/Resources/xlf/Resources.xlf b/src/vstest.console/Resources/xlf/Resources.xlf index ba252597b1..ab8c0079b7 100644 --- a/src/vstest.console/Resources/xlf/Resources.xlf +++ b/src/vstest.console/Resources/xlf/Resources.xlf @@ -847,6 +847,13 @@ A total of {0} test source files are discovered. + + The test run parameter argument '{0}' is invalid. Please use the format below. +Format : TestRunParameters.Parameter(name="<name>", value="<value>") + The test run parameter argument '{0}' is invalid. Please use the format below. +Format : TestRunParameters.Parameter(name="<name>", value="<value>") + + \ No newline at end of file diff --git a/src/vstest.console/Resources/xlf/Resources.zh-Hans.xlf b/src/vstest.console/Resources/xlf/Resources.zh-Hans.xlf index 0ea23036ce..50f63177b6 100644 --- a/src/vstest.console/Resources/xlf/Resources.zh-Hans.xlf +++ b/src/vstest.console/Resources/xlf/Resources.zh-Hans.xlf @@ -1655,6 +1655,13 @@ 总共 {0} 个测试文件与指定模式相匹配。 + + The test run parameter argument '{0}' is invalid. Please use the format below. +Format : TestRunParameters.Parameter(name="<name>", value="<value>") + The test run parameter argument '{0}' is invalid. Please use the format below. +Format : TestRunParameters.Parameter(name="<name>", value="<value>") + + \ No newline at end of file diff --git a/src/vstest.console/Resources/xlf/Resources.zh-Hant.xlf b/src/vstest.console/Resources/xlf/Resources.zh-Hant.xlf index abc2105532..9a3fc105af 100644 --- a/src/vstest.console/Resources/xlf/Resources.zh-Hant.xlf +++ b/src/vstest.console/Resources/xlf/Resources.zh-Hant.xlf @@ -1657,6 +1657,13 @@ 總共有 {0} 個測試檔案與指定的模式相符。 + + The test run parameter argument '{0}' is invalid. Please use the format below. +Format : TestRunParameters.Parameter(name="<name>", value="<value>") + The test run parameter argument '{0}' is invalid. Please use the format below. +Format : TestRunParameters.Parameter(name="<name>", value="<value>") + + \ No newline at end of file diff --git a/test/vstest.console.UnitTests/Processors/CLIRunSettingsArgumentProcessorTests.cs b/test/vstest.console.UnitTests/Processors/CLIRunSettingsArgumentProcessorTests.cs index 9caedd14eb..25c3a4dad0 100644 --- a/test/vstest.console.UnitTests/Processors/CLIRunSettingsArgumentProcessorTests.cs +++ b/test/vstest.console.UnitTests/Processors/CLIRunSettingsArgumentProcessorTests.cs @@ -134,10 +134,12 @@ public void InitializeShouldIgnoreWhiteSpaceInBeginningOrEndOfKey() Assert.AreEqual(RunSettingsWithDeploymentDisabled, settingsProvider.ActiveRunSettings.SettingsXml); } + [DataRow("TestRunParameters.Parameter(name= \"weburl\",value= \"http://localhost//abc\")")] + [DataRow("TestRunParameters.Parameter(name= weburl ,value= http://localhost//abc)" )] [TestMethod] - public void InitializeShouldValidateTestRunParameter() + public void InitializeShouldValidateTestRunParameter(string arg) { - var args = new string[] { "TestRunParameters.Parameter(name=weburl,value=http://localhost//abc)" }; + var args = new string[] {arg }; this.executor.Initialize(args); var runSettingsWithTestRunParameters = "\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n"; @@ -154,7 +156,6 @@ public void InitializeShouldThrowErrorIfTestRunParameterNodeIsInValid() CommandLineException ex = Assert.ThrowsException(() => this.executor.Initialize(args)); Assert.AreEqual(str, ex.Message); - } [TestMethod] From 1514575b544a8e6bc3d6819af39bd6d9dd367562 Mon Sep 17 00:00:00 2001 From: vineeth Hanumanthu Date: Thu, 28 Nov 2019 10:24:32 +0530 Subject: [PATCH 5/9] unit tests are added for regex pattern match --- .../RunSettingsProviderExtensions.cs | 2 +- .../RunSettingsProviderExtensionsTests.cs | 4 +- .../CLIRunSettingsArgumentProcessorTests.cs | 81 ++++++++++++++++--- 3 files changed, 75 insertions(+), 12 deletions(-) diff --git a/src/Microsoft.TestPlatform.Common/Utilities/RunSettingsProviderExtensions.cs b/src/Microsoft.TestPlatform.Common/Utilities/RunSettingsProviderExtensions.cs index ad216f7c63..6979c8dcec 100644 --- a/src/Microsoft.TestPlatform.Common/Utilities/RunSettingsProviderExtensions.cs +++ b/src/Microsoft.TestPlatform.Common/Utilities/RunSettingsProviderExtensions.cs @@ -74,7 +74,7 @@ public static Match GetTestRunParameterNodeMatch(this IRunSettingsProvider runSe { var attrName = $"(?<{Constants.AttributeNameString}>\\w+)"; var attrValue = $"(?<{Constants.AttributeValueString}>.+)"; - Regex regex = new Regex($"{Constants.TestRunParametersString}.{Constants.ParameterString}\\(name=\\s*\"{attrName}\"\\s*,value=\\s*\"{attrValue}\"\\s*\\)"); + Regex regex = new Regex($"{Constants.TestRunParametersString}.{Constants.ParameterString}\\(name\\s*=\\s*\"{attrName}\"\\s*,value\\s*=\\s*\"{attrValue}\"\\)"); Match match = regex.Match(node); return match; } diff --git a/test/Microsoft.TestPlatform.Common.UnitTests/ExtensionFramework/Utilities/RunSettingsProviderExtensionsTests.cs b/test/Microsoft.TestPlatform.Common.UnitTests/ExtensionFramework/Utilities/RunSettingsProviderExtensionsTests.cs index 715b579212..6c8648f6a9 100644 --- a/test/Microsoft.TestPlatform.Common.UnitTests/ExtensionFramework/Utilities/RunSettingsProviderExtensionsTests.cs +++ b/test/Microsoft.TestPlatform.Common.UnitTests/ExtensionFramework/Utilities/RunSettingsProviderExtensionsTests.cs @@ -134,7 +134,7 @@ public void UpdateRunSettingsNodeShouldAddNewKeyIfNotPresent() [TestMethod] public void UpdateTestRunParameterSettingsNodeShouldAddNewKeyIfNotPresent() { - var match = this.runSettingsProvider.GetTestRunParameterNodeMatch("TestRunParameters.Parameter(name=weburl,value=http://localhost//abc)"); + var match = this.runSettingsProvider.GetTestRunParameterNodeMatch("TestRunParameters.Parameter(name=\"weburl\",value=\"http://localhost//abc\")"); var runSettingsWithTestRunParameters = "\r\n\r\n \r\n \r\n \r\n"; this.runSettingsProvider.UpdateRunSettings("\r\n "); @@ -151,7 +151,7 @@ public void UpdateTetsRunParameterSettingsNodeShouldOverrideValueIfKeyIsAlreadyP var runSettingsWithTestRunParametersOverRode = "\r\n\r\n \r\n \r\n \r\n"; this.runSettingsProvider.UpdateRunSettings(runSettingsWithTestRunParameters); - var match = this.runSettingsProvider.GetTestRunParameterNodeMatch("TestRunParameters.Parameter(name=weburl,value=http://localhost//def)"); + var match = this.runSettingsProvider.GetTestRunParameterNodeMatch("TestRunParameters.Parameter(name=\"weburl\",value=\"http://localhost//def\")"); this.runSettingsProvider.UpdateTestRunParameterSettingsNode(match); Assert.AreEqual(runSettingsWithTestRunParametersOverRode, this.runSettingsProvider.ActiveRunSettings.SettingsXml); diff --git a/test/vstest.console.UnitTests/Processors/CLIRunSettingsArgumentProcessorTests.cs b/test/vstest.console.UnitTests/Processors/CLIRunSettingsArgumentProcessorTests.cs index 25c3a4dad0..2f0740efd0 100644 --- a/test/vstest.console.UnitTests/Processors/CLIRunSettingsArgumentProcessorTests.cs +++ b/test/vstest.console.UnitTests/Processors/CLIRunSettingsArgumentProcessorTests.cs @@ -134,30 +134,93 @@ public void InitializeShouldIgnoreWhiteSpaceInBeginningOrEndOfKey() Assert.AreEqual(RunSettingsWithDeploymentDisabled, settingsProvider.ActiveRunSettings.SettingsXml); } - [DataRow("TestRunParameters.Parameter(name= \"weburl\",value= \"http://localhost//abc\")")] - [DataRow("TestRunParameters.Parameter(name= weburl ,value= http://localhost//abc)" )] - [TestMethod] - public void InitializeShouldValidateTestRunParameter(string arg) + [DynamicData(nameof(ValidTestCases), DynamicDataSourceType.Method)] + [DataTestMethod] + public void InitializeShouldValidateTestRunParameter(string arg, string runSettingsWithTestRunParameters) { - var args = new string[] {arg }; + var args = new string[] { arg }; this.executor.Initialize(args); - var runSettingsWithTestRunParameters = "\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n"; Assert.IsNotNull(this.settingsProvider.ActiveRunSettings); Assert.AreEqual(runSettingsWithTestRunParameters, settingsProvider.ActiveRunSettings.SettingsXml); } + [DynamicData(nameof(InvalidTestCases), DynamicDataSourceType.Method)] + [DataTestMethod] + public void InitializeShouldThrowErrorIfTestRunParameterNodeIsInValid(string arg) + { + var args = new string[] { arg }; + var str = string.Format(CommandLineResources.InvalidTestRunParameterArgument, arg); + + CommandLineException ex = Assert.ThrowsException(() => this.executor.Initialize(args)); + + Assert.AreEqual(str, ex.Message); + } + + [DataRow("Testameter.Parameter(name=\"asf\",value=\"rgq\")")] + [DataRow("TestRunParameter.Parameter(name=\"asf\",value=\"rgq\")")] [TestMethod] - public void InitializeShouldThrowErrorIfTestRunParameterNodeIsInValid() + public void InitializeShouldThrowErrorIfTestRunParameterNodeNameIsInValid(string arg) { - var args = new string[] { "TestRunParameters.Parameter(foo=bar)" }; - var str = string.Format(CommandLineResources.InvalidTestRunParameterArgument, args[0]); + var args = new string[] { arg }; + var str = string.Format(CommandLineResources.MalformedRunSettingsKey); CommandLineException ex = Assert.ThrowsException(() => this.executor.Initialize(args)); + Assert.AreEqual(str, ex.Message); } + public static IEnumerable InvalidTestCases() + { + return invalidTestCases; + } + + private static readonly List invalidTestCases = new List + { + new object[] { "TestRunParameters.Parameter(name=asf,value=rgq)" }, + new object[] { "TestRunParameters.Parameter(name=\"asf\",value=\"rgq\" )"}, + new object[] { "TestRunParameters.Parameter( name=\"asf\",value=\"rgq\")" }, + new object[] { "TestRunParametersParameter(name=\"asf\",value=\"rgq\")" }, + new object[] { "TestRunParameters.Paramete(name=\"asf\",value=\"rgq\")" }, + new object[] { "TestRunParameters.Parametername=\"asf\",value=\"rgq\")" }, + new object[] { "TestRunParameters.Parameter(ame=\"asf\",value=\"rgq\")" }, + new object[] { "TestRunParameters.Parameter(name\"asf\",value=\"rgq\")" }, + new object[] { "TestRunParameters.Parameter(name=\"asf\" value=\"rgq\")" }, + new object[] { "TestRunParameters.Parameter(name=\"asf\",alue=\"rgq\")" }, + new object[] { "TestRunParameters.Parameter(name=\"asf\",value\"rgq\")" }, + new object[] { "TestRunParameters.Parameter(name=\"asf\",value=\"rgq\"" }, + new object[] { "TestRunParameters.Parameter(name=\"asf\",value=\"rgq\")wfds" }, + new object[] { "TestRunParameters.Parameter(name=\"\",value=\"rgq\")" }, + new object[] { "TestRunParameters.Parameter(name=\"asf\",value=\"\")" }, + new object[] { "TestRunParameters.Parameter(name=asf\",value=\"rgq\")" }, + new object[] { "TestRunParameters.Parameter(name=\"asf,value=\"rgq\")" }, + new object[] { "TestRunParameters.Parameter(name=\"asf\",value=rgq\")" }, + new object[] { "TestRunParameters.Parameter(name=\"asf\",value=\"rgq)" }, + new object[] { "TestRunParameters.Parameter(name=\"asf@#!\",value=\"rgq\")" }, + new object[] { "TestRunParameters.Parameter(name=\"\",value=\"fgf\")" }, + new object[] { "TestRunParameters.Parameter(name=\"gag\",value=\"\")" }, + new object[] { "TestRunParameters.Parameter(name=\"gag\")" } + }; + + public static IEnumerable ValidTestCases() + { + return validTestCases; + } + + private static readonly List validTestCases = new List + { + new object[] { "TestRunParameters.Parameter(name=\"weburl\",value=\"http://localhost//abc\")" , + "\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n" + }, + new object[] { "TestRunParameters.Parameter(name= \"asf123\",value= \"2324346a!@#$%^*()_+-=':;.,/?{}[]|\")" , + "\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n" + }, + new object[] { "TestRunParameters.Parameter(name = \"weburl\",value = \"http://localhost//abc\")" , + "\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n" + }, + }; + [TestMethod] public void InitializeShouldIgnoreThrowExceptionIfKeyHasWhiteSpace() { From d9e90f7828eef00eb50976a996d923d76652eccc Mon Sep 17 00:00:00 2001 From: vineeth Hanumanthu Date: Thu, 28 Nov 2019 16:11:13 +0530 Subject: [PATCH 6/9] added special character test cases --- .../Processors/CLIRunSettingsArgumentProcessor.cs | 2 ++ .../Utilities/RunSettingsProviderExtensionsTests.cs | 2 -- .../Processors/CLIRunSettingsArgumentProcessorTests.cs | 7 +++++-- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/vstest.console/Processors/CLIRunSettingsArgumentProcessor.cs b/src/vstest.console/Processors/CLIRunSettingsArgumentProcessor.cs index 2f74f339ca..47eae8a0ed 100644 --- a/src/vstest.console/Processors/CLIRunSettingsArgumentProcessor.cs +++ b/src/vstest.console/Processors/CLIRunSettingsArgumentProcessor.cs @@ -148,10 +148,12 @@ private void CreateOrOverwriteRunSettings(IRunSettingsProvider runSettingsProvid } var indexOfSeparator = arg.IndexOf("="); + if (indexOfSeparator <= 0 || indexOfSeparator >= arg.Length - 1) { continue; } + var key = arg.Substring(0, indexOfSeparator).Trim(); var value = arg.Substring(indexOfSeparator + 1); diff --git a/test/Microsoft.TestPlatform.Common.UnitTests/ExtensionFramework/Utilities/RunSettingsProviderExtensionsTests.cs b/test/Microsoft.TestPlatform.Common.UnitTests/ExtensionFramework/Utilities/RunSettingsProviderExtensionsTests.cs index 6c8648f6a9..dcb1ea3d1c 100644 --- a/test/Microsoft.TestPlatform.Common.UnitTests/ExtensionFramework/Utilities/RunSettingsProviderExtensionsTests.cs +++ b/test/Microsoft.TestPlatform.Common.UnitTests/ExtensionFramework/Utilities/RunSettingsProviderExtensionsTests.cs @@ -141,7 +141,6 @@ public void UpdateTestRunParameterSettingsNodeShouldAddNewKeyIfNotPresent() this.runSettingsProvider.UpdateTestRunParameterSettingsNode(match); Assert.AreEqual(runSettingsWithTestRunParameters, this.runSettingsProvider.ActiveRunSettings.SettingsXml); - } [TestMethod] @@ -155,7 +154,6 @@ public void UpdateTetsRunParameterSettingsNodeShouldOverrideValueIfKeyIsAlreadyP this.runSettingsProvider.UpdateTestRunParameterSettingsNode(match); Assert.AreEqual(runSettingsWithTestRunParametersOverRode, this.runSettingsProvider.ActiveRunSettings.SettingsXml); - } [TestMethod] diff --git a/test/vstest.console.UnitTests/Processors/CLIRunSettingsArgumentProcessorTests.cs b/test/vstest.console.UnitTests/Processors/CLIRunSettingsArgumentProcessorTests.cs index 2f0740efd0..58d8bcc252 100644 --- a/test/vstest.console.UnitTests/Processors/CLIRunSettingsArgumentProcessorTests.cs +++ b/test/vstest.console.UnitTests/Processors/CLIRunSettingsArgumentProcessorTests.cs @@ -210,11 +210,14 @@ public static IEnumerable ValidTestCases() private static readonly List validTestCases = new List { + new object[] { "TestRunParameters.Parameter(name=\"weburl\",value=\"&><\")" , + "\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n" + }, new object[] { "TestRunParameters.Parameter(name=\"weburl\",value=\"http://localhost//abc\")" , "\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n" }, - new object[] { "TestRunParameters.Parameter(name= \"asf123\",value= \"2324346a!@#$%^*()_+-=':;.,/?{}[]|\")" , - "\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n" + new object[] { "TestRunParameters.Parameter(name= \"a_sf123_12\",value= \"2324346a!@#$%^*()_+-=':;.,/?{}[]|\")" , + "\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n" }, new object[] { "TestRunParameters.Parameter(name = \"weburl\",value = \"http://localhost//abc\")" , "\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n" From 561e297cca4ce45afa05b773fa60ff905e241520 Mon Sep 17 00:00:00 2001 From: vineeth Hanumanthu Date: Fri, 29 Nov 2019 10:13:44 +0530 Subject: [PATCH 7/9] formatted --- .../RunSettingsProviderExtensions.cs | 52 ++++-- .../Constants.cs | 27 +-- .../RunSettings/TestRunParameters.cs | 2 +- .../Utilities/XmlRunSettingsUtilities.cs | 2 +- .../CLIRunSettingsArgumentProcessor.cs | 10 +- .../Resources/Resources.Designer.cs | 2 +- src/vstest.console/Resources/Resources.resx | 2 +- .../Resources/xlf/Resources.cs.xlf | 2 +- .../Resources/xlf/Resources.de.xlf | 2 +- .../Resources/xlf/Resources.es.xlf | 2 +- .../Resources/xlf/Resources.fr.xlf | 2 +- .../Resources/xlf/Resources.it.xlf | 2 +- .../Resources/xlf/Resources.ja.xlf | 2 +- .../Resources/xlf/Resources.ko.xlf | 2 +- .../Resources/xlf/Resources.pl.xlf | 2 +- .../Resources/xlf/Resources.pt-BR.xlf | 2 +- .../Resources/xlf/Resources.ru.xlf | 2 +- .../Resources/xlf/Resources.tr.xlf | 2 +- .../Resources/xlf/Resources.xlf | 2 +- .../Resources/xlf/Resources.zh-Hans.xlf | 2 +- .../Resources/xlf/Resources.zh-Hant.xlf | 2 +- .../CLIRunSettingsArgumentProcessorTests.cs | 167 +++++++++--------- 22 files changed, 146 insertions(+), 146 deletions(-) diff --git a/src/Microsoft.TestPlatform.Common/Utilities/RunSettingsProviderExtensions.cs b/src/Microsoft.TestPlatform.Common/Utilities/RunSettingsProviderExtensions.cs index 6979c8dcec..639ab316c4 100644 --- a/src/Microsoft.TestPlatform.Common/Utilities/RunSettingsProviderExtensions.cs +++ b/src/Microsoft.TestPlatform.Common/Utilities/RunSettingsProviderExtensions.cs @@ -22,6 +22,31 @@ internal static class RunSettingsProviderExtensions { public const string EmptyRunSettings = @""; + /// + /// Pattern used to find parameter node. + /// + private const string ParameterString = "Parameter"; + + /// + /// Pattern that indicates Attribute name. + /// + private const string AttributeNameString = "AttrName"; + + /// + /// Pattern that indicates Attribute value. + /// + private const string AttributeValueString = "AttrValue"; + + /// + /// Attribute name key for test run parameter node + /// + private const string NameString = "name"; + + /// + /// Attribute value key for test run parameter node + /// + private const string ValueString = "value"; + public static void UpdateRunSettings(this IRunSettingsProvider runSettingsProvider, string runsettingsXml) { ValidateArg.NotNull(runSettingsProvider, nameof(runSettingsProvider)); @@ -72,9 +97,9 @@ public static void UpdateRunSettingsNode(this IRunSettingsProvider runSettingsPr /// public static Match GetTestRunParameterNodeMatch(this IRunSettingsProvider runSettingsProvider, string node) { - var attrName = $"(?<{Constants.AttributeNameString}>\\w+)"; - var attrValue = $"(?<{Constants.AttributeValueString}>.+)"; - Regex regex = new Regex($"{Constants.TestRunParametersString}.{Constants.ParameterString}\\(name\\s*=\\s*\"{attrName}\"\\s*,value\\s*=\\s*\"{attrValue}\"\\)"); + var attrName = $"(?<{AttributeNameString}>\\w+)"; + var attrValue = $"(?<{AttributeValueString}>.+)"; + Regex regex = new Regex($"{Constants.TestRunParametersName}.{ParameterString}\\(name\\s*=\\s*\"{attrName}\"\\s*,\\s*value\\s*=\\s*\"{attrValue}\"\\)"); Match match = regex.Match(node); return match; } @@ -89,15 +114,15 @@ public static void UpdateTestRunParameterSettingsNode(this IRunSettingsProvider ValidateArg.NotNull(runSettingsProvider, nameof(runSettingsProvider)); var xmlDocument = runSettingsProvider.GetRunSettingXmlDocument(); - XmlNode testRunParameterNode = GetXmlNode(xmlDocument, Constants.TestRunParametersString) ?? xmlDocument.CreateElement(Constants.TestRunParametersString); - var attrName = match.Groups[Constants.AttributeNameString].Value; - var attrValue = match.Groups[Constants.AttributeValueString].Value; + XmlNode testRunParameterNode = GetXmlNode(xmlDocument, Constants.TestRunParametersName) ?? xmlDocument.CreateElement(Constants.TestRunParametersName); + var attrName = match.Groups[AttributeNameString].Value; + var attrValue = match.Groups[AttributeValueString].Value; - if (!TryOverRideAttributeName(testRunParameterNode, attrName, attrValue)) + if (!TryOverRideAttributeValue(testRunParameterNode, attrName, attrValue)) { - XmlElement element = xmlDocument.CreateElement(Constants.ParameterString); - element.SetAttribute(Constants.NameString, attrName); - element.SetAttribute(Constants.ValueString, attrValue); + XmlElement element = xmlDocument.CreateElement(ParameterString); + element.SetAttribute(NameString, attrName); + element.SetAttribute(ValueString, attrValue); testRunParameterNode.AppendChild(element); xmlDocument.DocumentElement.AppendChild(testRunParameterNode); } @@ -105,16 +130,17 @@ public static void UpdateTestRunParameterSettingsNode(this IRunSettingsProvider runSettingsProvider.UpdateRunSettings(xmlDocument.OuterXml); } - private static bool TryOverRideAttributeName(XmlNode xmlNode, string attrName, string attrValue) + private static bool TryOverRideAttributeValue(XmlNode xmlNode, string attrName, string attrValue) { foreach (XmlNode node in xmlNode.ChildNodes) { - if (string.Compare(node.Attributes[Constants.NameString].Value, attrName) == 0) + if (string.Compare(node.Attributes[NameString].Value, attrName) == 0) { - node.Attributes[Constants.ValueString].Value = attrValue; + node.Attributes[ValueString].Value = attrValue; return true; } } + return false; } diff --git a/src/Microsoft.TestPlatform.ObjectModel/Constants.cs b/src/Microsoft.TestPlatform.ObjectModel/Constants.cs index e17f633b44..0c326c8486 100644 --- a/src/Microsoft.TestPlatform.ObjectModel/Constants.cs +++ b/src/Microsoft.TestPlatform.ObjectModel/Constants.cs @@ -124,32 +124,7 @@ public static class Constants /// /// Pattern used to find test run parameter node. /// - public const string TestRunParametersString = "TestRunParameters"; - - /// - /// Pattern used to find parameter node. - /// - public const string ParameterString = "Parameter"; - - /// - /// Pattern that indicates Attribute name. - /// - public const string AttributeNameString = "AttrName"; - - /// - /// Pattern that indicates Attribute value. - /// - public const string AttributeValueString = "AttrValue"; - - /// - /// Attribute name key for test run parameter node - /// - public const string NameString = "name"; - - /// - /// Attribute value key for test run parameter node - /// - public const string ValueString = "value"; + public const string TestRunParametersName = "TestRunParameters"; /// /// Type of the unit test extension. (Extension author will use this name while authoring their Vsix) diff --git a/src/Microsoft.TestPlatform.ObjectModel/RunSettings/TestRunParameters.cs b/src/Microsoft.TestPlatform.ObjectModel/RunSettings/TestRunParameters.cs index ce3c7a74ac..b263ee864c 100644 --- a/src/Microsoft.TestPlatform.ObjectModel/RunSettings/TestRunParameters.cs +++ b/src/Microsoft.TestPlatform.ObjectModel/RunSettings/TestRunParameters.cs @@ -62,7 +62,7 @@ internal static Dictionary FromXml(XmlReader reader) string.Format( CultureInfo.CurrentCulture, Resources.Resources.InvalidSettingsXmlElement, - Constants.TestRunParametersString, + Constants.TestRunParametersName, reader.Name)); } diff --git a/src/Microsoft.TestPlatform.ObjectModel/Utilities/XmlRunSettingsUtilities.cs b/src/Microsoft.TestPlatform.ObjectModel/Utilities/XmlRunSettingsUtilities.cs index 0619e45e6f..9a81dbb999 100644 --- a/src/Microsoft.TestPlatform.ObjectModel/Utilities/XmlRunSettingsUtilities.cs +++ b/src/Microsoft.TestPlatform.ObjectModel/Utilities/XmlRunSettingsUtilities.cs @@ -168,7 +168,7 @@ public static RunConfiguration GetRunConfigurationNode(string settingsXml) /// If there is no test run parameters section defined in the settings xml a blank dictionary is returned. public static Dictionary GetTestRunParameters(string settingsXml) { - var nodeValue = GetNodeValue>(settingsXml, Constants.TestRunParametersString, TestRunParameters.FromXml); + var nodeValue = GetNodeValue>(settingsXml, Constants.TestRunParametersName, TestRunParameters.FromXml); if (nodeValue == default(Dictionary)) { // Return default. diff --git a/src/vstest.console/Processors/CLIRunSettingsArgumentProcessor.cs b/src/vstest.console/Processors/CLIRunSettingsArgumentProcessor.cs index 47eae8a0ed..c27853c619 100644 --- a/src/vstest.console/Processors/CLIRunSettingsArgumentProcessor.cs +++ b/src/vstest.console/Processors/CLIRunSettingsArgumentProcessor.cs @@ -142,7 +142,7 @@ private void CreateOrOverwriteRunSettings(IRunSettingsProvider runSettingsProvid { var arg = args[index]; - if (TryUpdateTestRunParameterNode(runSettingsProvider, arg)) + if (UpdateTestRunParameterNode(runSettingsProvider, arg)) { continue; } @@ -169,15 +169,15 @@ private void CreateOrOverwriteRunSettings(IRunSettingsProvider runSettingsProvid } } - private bool TryUpdateTestRunParameterNode(IRunSettingsProvider runSettingsProvider, string node) + private bool UpdateTestRunParameterNode(IRunSettingsProvider runSettingsProvider, string node) { - var match = runSettingsProvider.GetTestRunParameterNodeMatch(node); - - if (!node.Contains(Constants.TestRunParametersString)) + if (!node.Contains(Constants.TestRunParametersName)) { return false; } + var match = runSettingsProvider.GetTestRunParameterNodeMatch(node); + if (string.Compare(match.Value, node) == 0) { runSettingsProvider.UpdateTestRunParameterSettingsNode(match); diff --git a/src/vstest.console/Resources/Resources.Designer.cs b/src/vstest.console/Resources/Resources.Designer.cs index 85615b1dfb..2b7706b889 100644 --- a/src/vstest.console/Resources/Resources.Designer.cs +++ b/src/vstest.console/Resources/Resources.Designer.cs @@ -827,7 +827,7 @@ internal static string InvalidTestCaseFilterValueForSpecificTests { /// /// Looks up a localized string similar to The test run parameter argument '{0}' is invalid. Please use the format below. - ///Format : TestRunParameters.Parameter(name="<name>", value="<value>"). + /// Format: TestRunParameters.Parameter(name="<name>", value="<value>"). /// internal static string InvalidTestRunParameterArgument { get { diff --git a/src/vstest.console/Resources/Resources.resx b/src/vstest.console/Resources/Resources.resx index b0be9a5080..c8caa6ff14 100644 --- a/src/vstest.console/Resources/Resources.resx +++ b/src/vstest.console/Resources/Resources.resx @@ -736,6 +736,6 @@ The test run parameter argument '{0}' is invalid. Please use the format below. -Format : TestRunParameters.Parameter(name="<name>", value="<value>") + Format: TestRunParameters.Parameter(name="<name>", value="<value>") \ No newline at end of file diff --git a/src/vstest.console/Resources/xlf/Resources.cs.xlf b/src/vstest.console/Resources/xlf/Resources.cs.xlf index 1bdbf9b2dc..2a5b097f98 100644 --- a/src/vstest.console/Resources/xlf/Resources.cs.xlf +++ b/src/vstest.console/Resources/xlf/Resources.cs.xlf @@ -1658,7 +1658,7 @@ The test run parameter argument '{0}' is invalid. Please use the format below. -Format : TestRunParameters.Parameter(name="<name>", value="<value>") + Format: TestRunParameters.Parameter(name="<name>", value="<value>") The test run parameter argument '{0}' is invalid. Please use the format below. Format : TestRunParameters.Parameter(name="<name>", value="<value>") diff --git a/src/vstest.console/Resources/xlf/Resources.de.xlf b/src/vstest.console/Resources/xlf/Resources.de.xlf index 68efce13e3..fcaa4c32d5 100644 --- a/src/vstest.console/Resources/xlf/Resources.de.xlf +++ b/src/vstest.console/Resources/xlf/Resources.de.xlf @@ -1658,7 +1658,7 @@ The test run parameter argument '{0}' is invalid. Please use the format below. -Format : TestRunParameters.Parameter(name="<name>", value="<value>") + Format: TestRunParameters.Parameter(name="<name>", value="<value>") The test run parameter argument '{0}' is invalid. Please use the format below. Format : TestRunParameters.Parameter(name="<name>", value="<value>") diff --git a/src/vstest.console/Resources/xlf/Resources.es.xlf b/src/vstest.console/Resources/xlf/Resources.es.xlf index 779fa10e66..c5c58b4ec7 100644 --- a/src/vstest.console/Resources/xlf/Resources.es.xlf +++ b/src/vstest.console/Resources/xlf/Resources.es.xlf @@ -1661,7 +1661,7 @@ The test run parameter argument '{0}' is invalid. Please use the format below. -Format : TestRunParameters.Parameter(name="<name>", value="<value>") + Format: TestRunParameters.Parameter(name="<name>", value="<value>") The test run parameter argument '{0}' is invalid. Please use the format below. Format : TestRunParameters.Parameter(name="<name>", value="<value>") diff --git a/src/vstest.console/Resources/xlf/Resources.fr.xlf b/src/vstest.console/Resources/xlf/Resources.fr.xlf index 406d282848..dc9a2b4a86 100644 --- a/src/vstest.console/Resources/xlf/Resources.fr.xlf +++ b/src/vstest.console/Resources/xlf/Resources.fr.xlf @@ -1658,7 +1658,7 @@ The test run parameter argument '{0}' is invalid. Please use the format below. -Format : TestRunParameters.Parameter(name="<name>", value="<value>") + Format: TestRunParameters.Parameter(name="<name>", value="<value>") The test run parameter argument '{0}' is invalid. Please use the format below. Format : TestRunParameters.Parameter(name="<name>", value="<value>") diff --git a/src/vstest.console/Resources/xlf/Resources.it.xlf b/src/vstest.console/Resources/xlf/Resources.it.xlf index 979bbb6866..cb173a37c9 100644 --- a/src/vstest.console/Resources/xlf/Resources.it.xlf +++ b/src/vstest.console/Resources/xlf/Resources.it.xlf @@ -1658,7 +1658,7 @@ The test run parameter argument '{0}' is invalid. Please use the format below. -Format : TestRunParameters.Parameter(name="<name>", value="<value>") + Format: TestRunParameters.Parameter(name="<name>", value="<value>") The test run parameter argument '{0}' is invalid. Please use the format below. Format : TestRunParameters.Parameter(name="<name>", value="<value>") diff --git a/src/vstest.console/Resources/xlf/Resources.ja.xlf b/src/vstest.console/Resources/xlf/Resources.ja.xlf index 0d995e8b41..08f9755d3e 100644 --- a/src/vstest.console/Resources/xlf/Resources.ja.xlf +++ b/src/vstest.console/Resources/xlf/Resources.ja.xlf @@ -1658,7 +1658,7 @@ The test run parameter argument '{0}' is invalid. Please use the format below. -Format : TestRunParameters.Parameter(name="<name>", value="<value>") + Format: TestRunParameters.Parameter(name="<name>", value="<value>") The test run parameter argument '{0}' is invalid. Please use the format below. Format : TestRunParameters.Parameter(name="<name>", value="<value>") diff --git a/src/vstest.console/Resources/xlf/Resources.ko.xlf b/src/vstest.console/Resources/xlf/Resources.ko.xlf index 25d9dc4bd5..d7ecdf8acc 100644 --- a/src/vstest.console/Resources/xlf/Resources.ko.xlf +++ b/src/vstest.console/Resources/xlf/Resources.ko.xlf @@ -1658,7 +1658,7 @@ The test run parameter argument '{0}' is invalid. Please use the format below. -Format : TestRunParameters.Parameter(name="<name>", value="<value>") + Format: TestRunParameters.Parameter(name="<name>", value="<value>") The test run parameter argument '{0}' is invalid. Please use the format below. Format : TestRunParameters.Parameter(name="<name>", value="<value>") diff --git a/src/vstest.console/Resources/xlf/Resources.pl.xlf b/src/vstest.console/Resources/xlf/Resources.pl.xlf index 3223203e49..21aa593e6e 100644 --- a/src/vstest.console/Resources/xlf/Resources.pl.xlf +++ b/src/vstest.console/Resources/xlf/Resources.pl.xlf @@ -1658,7 +1658,7 @@ The test run parameter argument '{0}' is invalid. Please use the format below. -Format : TestRunParameters.Parameter(name="<name>", value="<value>") + Format: TestRunParameters.Parameter(name="<name>", value="<value>") The test run parameter argument '{0}' is invalid. Please use the format below. Format : TestRunParameters.Parameter(name="<name>", value="<value>") diff --git a/src/vstest.console/Resources/xlf/Resources.pt-BR.xlf b/src/vstest.console/Resources/xlf/Resources.pt-BR.xlf index 182a3b91d4..09598879f5 100644 --- a/src/vstest.console/Resources/xlf/Resources.pt-BR.xlf +++ b/src/vstest.console/Resources/xlf/Resources.pt-BR.xlf @@ -1658,7 +1658,7 @@ Altere o prefixo de nível de diagnóstico do agente de console, como mostrado a The test run parameter argument '{0}' is invalid. Please use the format below. -Format : TestRunParameters.Parameter(name="<name>", value="<value>") + Format: TestRunParameters.Parameter(name="<name>", value="<value>") The test run parameter argument '{0}' is invalid. Please use the format below. Format : TestRunParameters.Parameter(name="<name>", value="<value>") diff --git a/src/vstest.console/Resources/xlf/Resources.ru.xlf b/src/vstest.console/Resources/xlf/Resources.ru.xlf index 7dfb4ee40c..9945ffd96b 100644 --- a/src/vstest.console/Resources/xlf/Resources.ru.xlf +++ b/src/vstest.console/Resources/xlf/Resources.ru.xlf @@ -1658,7 +1658,7 @@ The test run parameter argument '{0}' is invalid. Please use the format below. -Format : TestRunParameters.Parameter(name="<name>", value="<value>") + Format: TestRunParameters.Parameter(name="<name>", value="<value>") The test run parameter argument '{0}' is invalid. Please use the format below. Format : TestRunParameters.Parameter(name="<name>", value="<value>") diff --git a/src/vstest.console/Resources/xlf/Resources.tr.xlf b/src/vstest.console/Resources/xlf/Resources.tr.xlf index 75b0f917b0..c04e502962 100644 --- a/src/vstest.console/Resources/xlf/Resources.tr.xlf +++ b/src/vstest.console/Resources/xlf/Resources.tr.xlf @@ -1658,7 +1658,7 @@ Günlükler için izleme düzeyini aşağıda gösterildiği gibi değiştirin The test run parameter argument '{0}' is invalid. Please use the format below. -Format : TestRunParameters.Parameter(name="<name>", value="<value>") + Format: TestRunParameters.Parameter(name="<name>", value="<value>") The test run parameter argument '{0}' is invalid. Please use the format below. Format : TestRunParameters.Parameter(name="<name>", value="<value>") diff --git a/src/vstest.console/Resources/xlf/Resources.xlf b/src/vstest.console/Resources/xlf/Resources.xlf index ab8c0079b7..0b04e50662 100644 --- a/src/vstest.console/Resources/xlf/Resources.xlf +++ b/src/vstest.console/Resources/xlf/Resources.xlf @@ -849,7 +849,7 @@ The test run parameter argument '{0}' is invalid. Please use the format below. -Format : TestRunParameters.Parameter(name="<name>", value="<value>") + Format: TestRunParameters.Parameter(name="<name>", value="<value>") The test run parameter argument '{0}' is invalid. Please use the format below. Format : TestRunParameters.Parameter(name="<name>", value="<value>") diff --git a/src/vstest.console/Resources/xlf/Resources.zh-Hans.xlf b/src/vstest.console/Resources/xlf/Resources.zh-Hans.xlf index 50f63177b6..96430b5b1a 100644 --- a/src/vstest.console/Resources/xlf/Resources.zh-Hans.xlf +++ b/src/vstest.console/Resources/xlf/Resources.zh-Hans.xlf @@ -1657,7 +1657,7 @@ The test run parameter argument '{0}' is invalid. Please use the format below. -Format : TestRunParameters.Parameter(name="<name>", value="<value>") + Format: TestRunParameters.Parameter(name="<name>", value="<value>") The test run parameter argument '{0}' is invalid. Please use the format below. Format : TestRunParameters.Parameter(name="<name>", value="<value>") diff --git a/src/vstest.console/Resources/xlf/Resources.zh-Hant.xlf b/src/vstest.console/Resources/xlf/Resources.zh-Hant.xlf index 9a3fc105af..102d4a44d0 100644 --- a/src/vstest.console/Resources/xlf/Resources.zh-Hant.xlf +++ b/src/vstest.console/Resources/xlf/Resources.zh-Hant.xlf @@ -1659,7 +1659,7 @@ The test run parameter argument '{0}' is invalid. Please use the format below. -Format : TestRunParameters.Parameter(name="<name>", value="<value>") + Format: TestRunParameters.Parameter(name="<name>", value="<value>") The test run parameter argument '{0}' is invalid. Please use the format below. Format : TestRunParameters.Parameter(name="<name>", value="<value>") diff --git a/test/vstest.console.UnitTests/Processors/CLIRunSettingsArgumentProcessorTests.cs b/test/vstest.console.UnitTests/Processors/CLIRunSettingsArgumentProcessorTests.cs index 58d8bcc252..791b7b9ff4 100644 --- a/test/vstest.console.UnitTests/Processors/CLIRunSettingsArgumentProcessorTests.cs +++ b/test/vstest.console.UnitTests/Processors/CLIRunSettingsArgumentProcessorTests.cs @@ -123,45 +123,10 @@ public void InitializeShouldIgnoreKeyIfValueIsNotPassed() Assert.AreEqual(RunSettingsWithDeploymentDisabled, settingsProvider.ActiveRunSettings.SettingsXml); } - [TestMethod] - public void InitializeShouldIgnoreWhiteSpaceInBeginningOrEndOfKey() - { - var args = new string[] { " MSTest.DeploymentEnabled =False" }; - - this.executor.Initialize(args); - - Assert.IsNotNull(this.settingsProvider.ActiveRunSettings); - Assert.AreEqual(RunSettingsWithDeploymentDisabled, settingsProvider.ActiveRunSettings.SettingsXml); - } - - [DynamicData(nameof(ValidTestCases), DynamicDataSourceType.Method)] - [DataTestMethod] - public void InitializeShouldValidateTestRunParameter(string arg, string runSettingsWithTestRunParameters) - { - var args = new string[] { arg }; - - this.executor.Initialize(args); - - Assert.IsNotNull(this.settingsProvider.ActiveRunSettings); - Assert.AreEqual(runSettingsWithTestRunParameters, settingsProvider.ActiveRunSettings.SettingsXml); - } - - [DynamicData(nameof(InvalidTestCases), DynamicDataSourceType.Method)] - [DataTestMethod] - public void InitializeShouldThrowErrorIfTestRunParameterNodeIsInValid(string arg) - { - var args = new string[] { arg }; - var str = string.Format(CommandLineResources.InvalidTestRunParameterArgument, arg); - - CommandLineException ex = Assert.ThrowsException(() => this.executor.Initialize(args)); - - Assert.AreEqual(str, ex.Message); - } - [DataRow("Testameter.Parameter(name=\"asf\",value=\"rgq\")")] [DataRow("TestRunParameter.Parameter(name=\"asf\",value=\"rgq\")")] [TestMethod] - public void InitializeShouldThrowErrorIfTestRunParameterNodeNameIsInValid(string arg) + public void InitializeShouldThrowErrorIfArgumentIsInValid(string arg) { var args = new string[] { arg }; var str = string.Format(CommandLineResources.MalformedRunSettingsKey); @@ -171,59 +136,17 @@ public void InitializeShouldThrowErrorIfTestRunParameterNodeNameIsInValid(string Assert.AreEqual(str, ex.Message); } - public static IEnumerable InvalidTestCases() + [TestMethod] + public void InitializeShouldIgnoreWhiteSpaceInBeginningOrEndOfKey() { - return invalidTestCases; - } + var args = new string[] { " MSTest.DeploymentEnabled =False" }; - private static readonly List invalidTestCases = new List - { - new object[] { "TestRunParameters.Parameter(name=asf,value=rgq)" }, - new object[] { "TestRunParameters.Parameter(name=\"asf\",value=\"rgq\" )"}, - new object[] { "TestRunParameters.Parameter( name=\"asf\",value=\"rgq\")" }, - new object[] { "TestRunParametersParameter(name=\"asf\",value=\"rgq\")" }, - new object[] { "TestRunParameters.Paramete(name=\"asf\",value=\"rgq\")" }, - new object[] { "TestRunParameters.Parametername=\"asf\",value=\"rgq\")" }, - new object[] { "TestRunParameters.Parameter(ame=\"asf\",value=\"rgq\")" }, - new object[] { "TestRunParameters.Parameter(name\"asf\",value=\"rgq\")" }, - new object[] { "TestRunParameters.Parameter(name=\"asf\" value=\"rgq\")" }, - new object[] { "TestRunParameters.Parameter(name=\"asf\",alue=\"rgq\")" }, - new object[] { "TestRunParameters.Parameter(name=\"asf\",value\"rgq\")" }, - new object[] { "TestRunParameters.Parameter(name=\"asf\",value=\"rgq\"" }, - new object[] { "TestRunParameters.Parameter(name=\"asf\",value=\"rgq\")wfds" }, - new object[] { "TestRunParameters.Parameter(name=\"\",value=\"rgq\")" }, - new object[] { "TestRunParameters.Parameter(name=\"asf\",value=\"\")" }, - new object[] { "TestRunParameters.Parameter(name=asf\",value=\"rgq\")" }, - new object[] { "TestRunParameters.Parameter(name=\"asf,value=\"rgq\")" }, - new object[] { "TestRunParameters.Parameter(name=\"asf\",value=rgq\")" }, - new object[] { "TestRunParameters.Parameter(name=\"asf\",value=\"rgq)" }, - new object[] { "TestRunParameters.Parameter(name=\"asf@#!\",value=\"rgq\")" }, - new object[] { "TestRunParameters.Parameter(name=\"\",value=\"fgf\")" }, - new object[] { "TestRunParameters.Parameter(name=\"gag\",value=\"\")" }, - new object[] { "TestRunParameters.Parameter(name=\"gag\")" } - }; + this.executor.Initialize(args); - public static IEnumerable ValidTestCases() - { - return validTestCases; + Assert.IsNotNull(this.settingsProvider.ActiveRunSettings); + Assert.AreEqual(RunSettingsWithDeploymentDisabled, settingsProvider.ActiveRunSettings.SettingsXml); } - private static readonly List validTestCases = new List - { - new object[] { "TestRunParameters.Parameter(name=\"weburl\",value=\"&><\")" , - "\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n" - }, - new object[] { "TestRunParameters.Parameter(name=\"weburl\",value=\"http://localhost//abc\")" , - "\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n" - }, - new object[] { "TestRunParameters.Parameter(name= \"a_sf123_12\",value= \"2324346a!@#$%^*()_+-=':;.,/?{}[]|\")" , - "\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n" - }, - new object[] { "TestRunParameters.Parameter(name = \"weburl\",value = \"http://localhost//abc\")" , - "\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n" - }, - }; - [TestMethod] public void InitializeShouldIgnoreThrowExceptionIfKeyHasWhiteSpace() { @@ -349,6 +272,82 @@ public void InitializeShouldNotUpdateCommandLineOptionsArchitectureAndFxIfNotPro Assert.IsFalse(this.commandLineOptions.FrameworkVersionSpecified); } + [DynamicData(nameof(TestRunParameterArgValidTestCases), DynamicDataSourceType.Method)] + [DataTestMethod] + public void InitializeShouldValidateTestRunParameter(string arg, string runSettingsWithTestRunParameters) + { + var args = new string[] { arg }; + + this.executor.Initialize(args); + + Assert.IsNotNull(this.settingsProvider.ActiveRunSettings); + Assert.AreEqual(runSettingsWithTestRunParameters, settingsProvider.ActiveRunSettings.SettingsXml); + } + + [DynamicData(nameof(TestRunParameterArgInvalidTestCases), DynamicDataSourceType.Method)] + [DataTestMethod] + public void InitializeShouldThrowErrorIfTestRunParameterNodeIsInValid(string arg) + { + var args = new string[] { arg }; + var str = string.Format(CommandLineResources.InvalidTestRunParameterArgument, arg); + + CommandLineException ex = Assert.ThrowsException(() => this.executor.Initialize(args)); + + Assert.AreEqual(str, ex.Message); + } + + public static IEnumerable TestRunParameterArgInvalidTestCases() + { + return invalidTestCases; + } + + private static readonly List invalidTestCases = new List + { + new object[] { "TestRunParameters.Parameter(name=asf,value=rgq)" }, + new object[] { "TestRunParameters.Parameter(name=\"asf\",value=\"rgq\" )"}, + new object[] { "TestRunParameters.Parameter( name=\"asf\",value=\"rgq\")" }, + new object[] { "TestRunParametersParameter(name=\"asf\",value=\"rgq\")" }, + new object[] { "TestRunParameters.Paramete(name=\"asf\",value=\"rgq\")" }, + new object[] { "TestRunParameters.Parametername=\"asf\",value=\"rgq\")" }, + new object[] { "TestRunParameters.Parameter(ame=\"asf\",value=\"rgq\")" }, + new object[] { "TestRunParameters.Parameter(name\"asf\",value=\"rgq\")" }, + new object[] { "TestRunParameters.Parameter(name=\"asf\" value=\"rgq\")" }, + new object[] { "TestRunParameters.Parameter(name=\"asf\",alue=\"rgq\")" }, + new object[] { "TestRunParameters.Parameter(name=\"asf\",value\"rgq\")" }, + new object[] { "TestRunParameters.Parameter(name=\"asf\",value=\"rgq\"" }, + new object[] { "TestRunParameters.Parameter(name=\"asf\",value=\"rgq\")wfds" }, + new object[] { "TestRunParameters.Parameter(name=\"\",value=\"rgq\")" }, + new object[] { "TestRunParameters.Parameter(name=\"asf\",value=\"\")" }, + new object[] { "TestRunParameters.Parameter(name=asf\",value=\"rgq\")" }, + new object[] { "TestRunParameters.Parameter(name=\"asf,value=\"rgq\")" }, + new object[] { "TestRunParameters.Parameter(name=\"asf\",value=rgq\")" }, + new object[] { "TestRunParameters.Parameter(name=\"asf\",value=\"rgq)" }, + new object[] { "TestRunParameters.Parameter(name=\"asf@#!\",value=\"rgq\")" }, + new object[] { "TestRunParameters.Parameter(name=\"\",value=\"fgf\")" }, + new object[] { "TestRunParameters.Parameter(name=\"gag\",value=\"\")" }, + new object[] { "TestRunParameters.Parameter(name=\"gag\")" } + }; + + public static IEnumerable TestRunParameterArgValidTestCases() + { + return validTestCases; + } + + private static readonly List validTestCases = new List + { + new object[] { "TestRunParameters.Parameter(name=\"weburl\",value=\"&><\")" , + "\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n" + }, + new object[] { "TestRunParameters.Parameter(name=\"weburl\",value=\"http://localhost//abc\")" , + "\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n" + }, + new object[] { "TestRunParameters.Parameter(name= \"a_sf123_12\",value= \"2324346a!@#$%^*()_+-=':;.,/?{}[]|\")" , + "\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n" + }, + new object[] { "TestRunParameters.Parameter(name = \"weburl\" , value = \"http://localhost//abc\")" , + "\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n" + }, + }; #endregion } } From e5f4e7c152f221f23c280e17a201579b56e7889e Mon Sep 17 00:00:00 2001 From: vineeth Hanumanthu Date: Fri, 29 Nov 2019 11:52:54 +0530 Subject: [PATCH 8/9] resource string is changed --- .../Resources/Resources.Designer.cs | 2 +- src/vstest.console/Resources/Resources.resx | 2 +- .../Resources/xlf/Resources.cs.xlf | 2 +- .../Resources/xlf/Resources.de.xlf | 2 +- .../Resources/xlf/Resources.es.xlf | 2 +- .../Resources/xlf/Resources.fr.xlf | 2 +- .../Resources/xlf/Resources.it.xlf | 2 +- .../Resources/xlf/Resources.ja.xlf | 2 +- .../Resources/xlf/Resources.ko.xlf | 2 +- .../Resources/xlf/Resources.pl.xlf | 2 +- .../Resources/xlf/Resources.pt-BR.xlf | 2 +- .../Resources/xlf/Resources.ru.xlf | 2 +- .../Resources/xlf/Resources.tr.xlf | 2 +- .../Resources/xlf/Resources.xlf | 2 +- .../Resources/xlf/Resources.zh-Hans.xlf | 2 +- .../Resources/xlf/Resources.zh-Hant.xlf | 2 +- .../CLIRunSettingsArgumentProcessorTests.cs | 84 +++++++++---------- 17 files changed, 56 insertions(+), 60 deletions(-) diff --git a/src/vstest.console/Resources/Resources.Designer.cs b/src/vstest.console/Resources/Resources.Designer.cs index 2b7706b889..17706664d3 100644 --- a/src/vstest.console/Resources/Resources.Designer.cs +++ b/src/vstest.console/Resources/Resources.Designer.cs @@ -827,7 +827,7 @@ internal static string InvalidTestCaseFilterValueForSpecificTests { /// /// Looks up a localized string similar to The test run parameter argument '{0}' is invalid. Please use the format below. - /// Format: TestRunParameters.Parameter(name="<name>", value="<value>"). + /// Format: TestRunParameters.Parameter(name=\"<name>\", value=\"<value>\"). /// internal static string InvalidTestRunParameterArgument { get { diff --git a/src/vstest.console/Resources/Resources.resx b/src/vstest.console/Resources/Resources.resx index c8caa6ff14..911ce94288 100644 --- a/src/vstest.console/Resources/Resources.resx +++ b/src/vstest.console/Resources/Resources.resx @@ -736,6 +736,6 @@ The test run parameter argument '{0}' is invalid. Please use the format below. - Format: TestRunParameters.Parameter(name="<name>", value="<value>") + Format: TestRunParameters.Parameter(name=\"<name>\", value=\"<value>\") \ No newline at end of file diff --git a/src/vstest.console/Resources/xlf/Resources.cs.xlf b/src/vstest.console/Resources/xlf/Resources.cs.xlf index 2a5b097f98..b3df2ad5e6 100644 --- a/src/vstest.console/Resources/xlf/Resources.cs.xlf +++ b/src/vstest.console/Resources/xlf/Resources.cs.xlf @@ -1658,7 +1658,7 @@ The test run parameter argument '{0}' is invalid. Please use the format below. - Format: TestRunParameters.Parameter(name="<name>", value="<value>") + Format: TestRunParameters.Parameter(name=\"<name>\", value=\"<value>\") The test run parameter argument '{0}' is invalid. Please use the format below. Format : TestRunParameters.Parameter(name="<name>", value="<value>") diff --git a/src/vstest.console/Resources/xlf/Resources.de.xlf b/src/vstest.console/Resources/xlf/Resources.de.xlf index fcaa4c32d5..767d993a65 100644 --- a/src/vstest.console/Resources/xlf/Resources.de.xlf +++ b/src/vstest.console/Resources/xlf/Resources.de.xlf @@ -1658,7 +1658,7 @@ The test run parameter argument '{0}' is invalid. Please use the format below. - Format: TestRunParameters.Parameter(name="<name>", value="<value>") + Format: TestRunParameters.Parameter(name=\"<name>\", value=\"<value>\") The test run parameter argument '{0}' is invalid. Please use the format below. Format : TestRunParameters.Parameter(name="<name>", value="<value>") diff --git a/src/vstest.console/Resources/xlf/Resources.es.xlf b/src/vstest.console/Resources/xlf/Resources.es.xlf index c5c58b4ec7..c3ab4e9b84 100644 --- a/src/vstest.console/Resources/xlf/Resources.es.xlf +++ b/src/vstest.console/Resources/xlf/Resources.es.xlf @@ -1661,7 +1661,7 @@ The test run parameter argument '{0}' is invalid. Please use the format below. - Format: TestRunParameters.Parameter(name="<name>", value="<value>") + Format: TestRunParameters.Parameter(name=\"<name>\", value=\"<value>\") The test run parameter argument '{0}' is invalid. Please use the format below. Format : TestRunParameters.Parameter(name="<name>", value="<value>") diff --git a/src/vstest.console/Resources/xlf/Resources.fr.xlf b/src/vstest.console/Resources/xlf/Resources.fr.xlf index dc9a2b4a86..0242deb88b 100644 --- a/src/vstest.console/Resources/xlf/Resources.fr.xlf +++ b/src/vstest.console/Resources/xlf/Resources.fr.xlf @@ -1658,7 +1658,7 @@ The test run parameter argument '{0}' is invalid. Please use the format below. - Format: TestRunParameters.Parameter(name="<name>", value="<value>") + Format: TestRunParameters.Parameter(name=\"<name>\", value=\"<value>\") The test run parameter argument '{0}' is invalid. Please use the format below. Format : TestRunParameters.Parameter(name="<name>", value="<value>") diff --git a/src/vstest.console/Resources/xlf/Resources.it.xlf b/src/vstest.console/Resources/xlf/Resources.it.xlf index cb173a37c9..66f8d6b9a9 100644 --- a/src/vstest.console/Resources/xlf/Resources.it.xlf +++ b/src/vstest.console/Resources/xlf/Resources.it.xlf @@ -1658,7 +1658,7 @@ The test run parameter argument '{0}' is invalid. Please use the format below. - Format: TestRunParameters.Parameter(name="<name>", value="<value>") + Format: TestRunParameters.Parameter(name=\"<name>\", value=\"<value>\") The test run parameter argument '{0}' is invalid. Please use the format below. Format : TestRunParameters.Parameter(name="<name>", value="<value>") diff --git a/src/vstest.console/Resources/xlf/Resources.ja.xlf b/src/vstest.console/Resources/xlf/Resources.ja.xlf index 08f9755d3e..26f4c1156f 100644 --- a/src/vstest.console/Resources/xlf/Resources.ja.xlf +++ b/src/vstest.console/Resources/xlf/Resources.ja.xlf @@ -1658,7 +1658,7 @@ The test run parameter argument '{0}' is invalid. Please use the format below. - Format: TestRunParameters.Parameter(name="<name>", value="<value>") + Format: TestRunParameters.Parameter(name=\"<name>\", value=\"<value>\") The test run parameter argument '{0}' is invalid. Please use the format below. Format : TestRunParameters.Parameter(name="<name>", value="<value>") diff --git a/src/vstest.console/Resources/xlf/Resources.ko.xlf b/src/vstest.console/Resources/xlf/Resources.ko.xlf index d7ecdf8acc..d80a84e3e4 100644 --- a/src/vstest.console/Resources/xlf/Resources.ko.xlf +++ b/src/vstest.console/Resources/xlf/Resources.ko.xlf @@ -1658,7 +1658,7 @@ The test run parameter argument '{0}' is invalid. Please use the format below. - Format: TestRunParameters.Parameter(name="<name>", value="<value>") + Format: TestRunParameters.Parameter(name=\"<name>\", value=\"<value>\") The test run parameter argument '{0}' is invalid. Please use the format below. Format : TestRunParameters.Parameter(name="<name>", value="<value>") diff --git a/src/vstest.console/Resources/xlf/Resources.pl.xlf b/src/vstest.console/Resources/xlf/Resources.pl.xlf index 21aa593e6e..d05d81125f 100644 --- a/src/vstest.console/Resources/xlf/Resources.pl.xlf +++ b/src/vstest.console/Resources/xlf/Resources.pl.xlf @@ -1658,7 +1658,7 @@ The test run parameter argument '{0}' is invalid. Please use the format below. - Format: TestRunParameters.Parameter(name="<name>", value="<value>") + Format: TestRunParameters.Parameter(name=\"<name>\", value=\"<value>\") The test run parameter argument '{0}' is invalid. Please use the format below. Format : TestRunParameters.Parameter(name="<name>", value="<value>") diff --git a/src/vstest.console/Resources/xlf/Resources.pt-BR.xlf b/src/vstest.console/Resources/xlf/Resources.pt-BR.xlf index 09598879f5..5ad8db1740 100644 --- a/src/vstest.console/Resources/xlf/Resources.pt-BR.xlf +++ b/src/vstest.console/Resources/xlf/Resources.pt-BR.xlf @@ -1658,7 +1658,7 @@ Altere o prefixo de nível de diagnóstico do agente de console, como mostrado a The test run parameter argument '{0}' is invalid. Please use the format below. - Format: TestRunParameters.Parameter(name="<name>", value="<value>") + Format: TestRunParameters.Parameter(name=\"<name>\", value=\"<value>\") The test run parameter argument '{0}' is invalid. Please use the format below. Format : TestRunParameters.Parameter(name="<name>", value="<value>") diff --git a/src/vstest.console/Resources/xlf/Resources.ru.xlf b/src/vstest.console/Resources/xlf/Resources.ru.xlf index 9945ffd96b..40daac4ca2 100644 --- a/src/vstest.console/Resources/xlf/Resources.ru.xlf +++ b/src/vstest.console/Resources/xlf/Resources.ru.xlf @@ -1658,7 +1658,7 @@ The test run parameter argument '{0}' is invalid. Please use the format below. - Format: TestRunParameters.Parameter(name="<name>", value="<value>") + Format: TestRunParameters.Parameter(name=\"<name>\", value=\"<value>\") The test run parameter argument '{0}' is invalid. Please use the format below. Format : TestRunParameters.Parameter(name="<name>", value="<value>") diff --git a/src/vstest.console/Resources/xlf/Resources.tr.xlf b/src/vstest.console/Resources/xlf/Resources.tr.xlf index c04e502962..f73b42ab42 100644 --- a/src/vstest.console/Resources/xlf/Resources.tr.xlf +++ b/src/vstest.console/Resources/xlf/Resources.tr.xlf @@ -1658,7 +1658,7 @@ Günlükler için izleme düzeyini aşağıda gösterildiği gibi değiştirin The test run parameter argument '{0}' is invalid. Please use the format below. - Format: TestRunParameters.Parameter(name="<name>", value="<value>") + Format: TestRunParameters.Parameter(name=\"<name>\", value=\"<value>\") The test run parameter argument '{0}' is invalid. Please use the format below. Format : TestRunParameters.Parameter(name="<name>", value="<value>") diff --git a/src/vstest.console/Resources/xlf/Resources.xlf b/src/vstest.console/Resources/xlf/Resources.xlf index 0b04e50662..d9147b5b1e 100644 --- a/src/vstest.console/Resources/xlf/Resources.xlf +++ b/src/vstest.console/Resources/xlf/Resources.xlf @@ -849,7 +849,7 @@ The test run parameter argument '{0}' is invalid. Please use the format below. - Format: TestRunParameters.Parameter(name="<name>", value="<value>") + Format: TestRunParameters.Parameter(name=\"<name>\", value=\"<value>\") The test run parameter argument '{0}' is invalid. Please use the format below. Format : TestRunParameters.Parameter(name="<name>", value="<value>") diff --git a/src/vstest.console/Resources/xlf/Resources.zh-Hans.xlf b/src/vstest.console/Resources/xlf/Resources.zh-Hans.xlf index 96430b5b1a..9cf23d8eac 100644 --- a/src/vstest.console/Resources/xlf/Resources.zh-Hans.xlf +++ b/src/vstest.console/Resources/xlf/Resources.zh-Hans.xlf @@ -1657,7 +1657,7 @@ The test run parameter argument '{0}' is invalid. Please use the format below. - Format: TestRunParameters.Parameter(name="<name>", value="<value>") + Format: TestRunParameters.Parameter(name=\"<name>\", value=\"<value>\") The test run parameter argument '{0}' is invalid. Please use the format below. Format : TestRunParameters.Parameter(name="<name>", value="<value>") diff --git a/src/vstest.console/Resources/xlf/Resources.zh-Hant.xlf b/src/vstest.console/Resources/xlf/Resources.zh-Hant.xlf index 102d4a44d0..e622a6e140 100644 --- a/src/vstest.console/Resources/xlf/Resources.zh-Hant.xlf +++ b/src/vstest.console/Resources/xlf/Resources.zh-Hant.xlf @@ -1659,7 +1659,7 @@ The test run parameter argument '{0}' is invalid. Please use the format below. - Format: TestRunParameters.Parameter(name="<name>", value="<value>") + Format: TestRunParameters.Parameter(name=\"<name>\", value=\"<value>\") The test run parameter argument '{0}' is invalid. Please use the format below. Format : TestRunParameters.Parameter(name="<name>", value="<value>") diff --git a/test/vstest.console.UnitTests/Processors/CLIRunSettingsArgumentProcessorTests.cs b/test/vstest.console.UnitTests/Processors/CLIRunSettingsArgumentProcessorTests.cs index 791b7b9ff4..12e3ec3ecc 100644 --- a/test/vstest.console.UnitTests/Processors/CLIRunSettingsArgumentProcessorTests.cs +++ b/test/vstest.console.UnitTests/Processors/CLIRunSettingsArgumentProcessorTests.cs @@ -298,56 +298,52 @@ public void InitializeShouldThrowErrorIfTestRunParameterNodeIsInValid(string arg public static IEnumerable TestRunParameterArgInvalidTestCases() { - return invalidTestCases; + return new List + { + new object[] { "TestRunParameters.Parameter(name=asf,value=rgq)" }, + new object[] { "TestRunParameters.Parameter(name=\"asf\",value=\"rgq\" )"}, + new object[] { "TestRunParameters.Parameter( name=\"asf\",value=\"rgq\")" }, + new object[] { "TestRunParametersParameter(name=\"asf\",value=\"rgq\")" }, + new object[] { "TestRunParameters.Paramete(name=\"asf\",value=\"rgq\")" }, + new object[] { "TestRunParameters.Parametername=\"asf\",value=\"rgq\")" }, + new object[] { "TestRunParameters.Parameter(ame=\"asf\",value=\"rgq\")" }, + new object[] { "TestRunParameters.Parameter(name\"asf\",value=\"rgq\")" }, + new object[] { "TestRunParameters.Parameter(name=\"asf\" value=\"rgq\")" }, + new object[] { "TestRunParameters.Parameter(name=\"asf\",alue=\"rgq\")" }, + new object[] { "TestRunParameters.Parameter(name=\"asf\",value\"rgq\")" }, + new object[] { "TestRunParameters.Parameter(name=\"asf\",value=\"rgq\"" }, + new object[] { "TestRunParameters.Parameter(name=\"asf\",value=\"rgq\")wfds" }, + new object[] { "TestRunParameters.Parameter(name=\"\",value=\"rgq\")" }, + new object[] { "TestRunParameters.Parameter(name=\"asf\",value=\"\")" }, + new object[] { "TestRunParameters.Parameter(name=asf\",value=\"rgq\")" }, + new object[] { "TestRunParameters.Parameter(name=\"asf,value=\"rgq\")" }, + new object[] { "TestRunParameters.Parameter(name=\"asf\",value=rgq\")" }, + new object[] { "TestRunParameters.Parameter(name=\"asf\",value=\"rgq)" }, + new object[] { "TestRunParameters.Parameter(name=\"asf@#!\",value=\"rgq\")" }, + new object[] { "TestRunParameters.Parameter(name=\"\",value=\"fgf\")" }, + new object[] { "TestRunParameters.Parameter(name=\"gag\",value=\"\")" }, + new object[] { "TestRunParameters.Parameter(name=\"gag\")" } + }; } - private static readonly List invalidTestCases = new List - { - new object[] { "TestRunParameters.Parameter(name=asf,value=rgq)" }, - new object[] { "TestRunParameters.Parameter(name=\"asf\",value=\"rgq\" )"}, - new object[] { "TestRunParameters.Parameter( name=\"asf\",value=\"rgq\")" }, - new object[] { "TestRunParametersParameter(name=\"asf\",value=\"rgq\")" }, - new object[] { "TestRunParameters.Paramete(name=\"asf\",value=\"rgq\")" }, - new object[] { "TestRunParameters.Parametername=\"asf\",value=\"rgq\")" }, - new object[] { "TestRunParameters.Parameter(ame=\"asf\",value=\"rgq\")" }, - new object[] { "TestRunParameters.Parameter(name\"asf\",value=\"rgq\")" }, - new object[] { "TestRunParameters.Parameter(name=\"asf\" value=\"rgq\")" }, - new object[] { "TestRunParameters.Parameter(name=\"asf\",alue=\"rgq\")" }, - new object[] { "TestRunParameters.Parameter(name=\"asf\",value\"rgq\")" }, - new object[] { "TestRunParameters.Parameter(name=\"asf\",value=\"rgq\"" }, - new object[] { "TestRunParameters.Parameter(name=\"asf\",value=\"rgq\")wfds" }, - new object[] { "TestRunParameters.Parameter(name=\"\",value=\"rgq\")" }, - new object[] { "TestRunParameters.Parameter(name=\"asf\",value=\"\")" }, - new object[] { "TestRunParameters.Parameter(name=asf\",value=\"rgq\")" }, - new object[] { "TestRunParameters.Parameter(name=\"asf,value=\"rgq\")" }, - new object[] { "TestRunParameters.Parameter(name=\"asf\",value=rgq\")" }, - new object[] { "TestRunParameters.Parameter(name=\"asf\",value=\"rgq)" }, - new object[] { "TestRunParameters.Parameter(name=\"asf@#!\",value=\"rgq\")" }, - new object[] { "TestRunParameters.Parameter(name=\"\",value=\"fgf\")" }, - new object[] { "TestRunParameters.Parameter(name=\"gag\",value=\"\")" }, - new object[] { "TestRunParameters.Parameter(name=\"gag\")" } - }; - public static IEnumerable TestRunParameterArgValidTestCases() { - return validTestCases; + return new List { + new object[] { "TestRunParameters.Parameter(name=\"weburl\",value=\"&><\")" , + "\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n" + }, + new object[] { "TestRunParameters.Parameter(name=\"weburl\",value=\"http://localhost//abc\")" , + "\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n" + }, + new object[] { "TestRunParameters.Parameter(name= \"a_sf123_12\",value= \"2324346a!@#$%^*()_+-=':;.,/?{}[]|\")" , + "\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n" + }, + new object[] { "TestRunParameters.Parameter(name = \"weburl\" , value = \"http://localhost//abc\")" , + "\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n" + }, + }; } - private static readonly List validTestCases = new List - { - new object[] { "TestRunParameters.Parameter(name=\"weburl\",value=\"&><\")" , - "\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n" - }, - new object[] { "TestRunParameters.Parameter(name=\"weburl\",value=\"http://localhost//abc\")" , - "\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n" - }, - new object[] { "TestRunParameters.Parameter(name= \"a_sf123_12\",value= \"2324346a!@#$%^*()_+-=':;.,/?{}[]|\")" , - "\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n" - }, - new object[] { "TestRunParameters.Parameter(name = \"weburl\" , value = \"http://localhost//abc\")" , - "\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n" - }, - }; #endregion } } From 68e54121bb259cbe6b6b3c09f7005b6684d47068 Mon Sep 17 00:00:00 2001 From: vineeth Hanumanthu Date: Fri, 29 Nov 2019 19:02:23 +0530 Subject: [PATCH 9/9] formatted --- .../RunSettingsProviderExtensions.cs | 4 +- .../RunSettingsProviderExtensionsTests.cs | 4 +- .../CLIRunSettingsArgumentProcessorTests.cs | 84 ++++++++++--------- 3 files changed, 48 insertions(+), 44 deletions(-) diff --git a/src/Microsoft.TestPlatform.Common/Utilities/RunSettingsProviderExtensions.cs b/src/Microsoft.TestPlatform.Common/Utilities/RunSettingsProviderExtensions.cs index 639ab316c4..406db01feb 100644 --- a/src/Microsoft.TestPlatform.Common/Utilities/RunSettingsProviderExtensions.cs +++ b/src/Microsoft.TestPlatform.Common/Utilities/RunSettingsProviderExtensions.cs @@ -118,7 +118,7 @@ public static void UpdateTestRunParameterSettingsNode(this IRunSettingsProvider var attrName = match.Groups[AttributeNameString].Value; var attrValue = match.Groups[AttributeValueString].Value; - if (!TryOverRideAttributeValue(testRunParameterNode, attrName, attrValue)) + if (!TryOverrideAttributeValue(testRunParameterNode, attrName, attrValue)) { XmlElement element = xmlDocument.CreateElement(ParameterString); element.SetAttribute(NameString, attrName); @@ -130,7 +130,7 @@ public static void UpdateTestRunParameterSettingsNode(this IRunSettingsProvider runSettingsProvider.UpdateRunSettings(xmlDocument.OuterXml); } - private static bool TryOverRideAttributeValue(XmlNode xmlNode, string attrName, string attrValue) + private static bool TryOverrideAttributeValue(XmlNode xmlNode, string attrName, string attrValue) { foreach (XmlNode node in xmlNode.ChildNodes) { diff --git a/test/Microsoft.TestPlatform.Common.UnitTests/ExtensionFramework/Utilities/RunSettingsProviderExtensionsTests.cs b/test/Microsoft.TestPlatform.Common.UnitTests/ExtensionFramework/Utilities/RunSettingsProviderExtensionsTests.cs index dcb1ea3d1c..82e834be78 100644 --- a/test/Microsoft.TestPlatform.Common.UnitTests/ExtensionFramework/Utilities/RunSettingsProviderExtensionsTests.cs +++ b/test/Microsoft.TestPlatform.Common.UnitTests/ExtensionFramework/Utilities/RunSettingsProviderExtensionsTests.cs @@ -147,13 +147,13 @@ public void UpdateTestRunParameterSettingsNodeShouldAddNewKeyIfNotPresent() public void UpdateTetsRunParameterSettingsNodeShouldOverrideValueIfKeyIsAlreadyPresent() { var runSettingsWithTestRunParameters = "\r\n\r\n \r\n \r\n \r\n"; - var runSettingsWithTestRunParametersOverRode = "\r\n\r\n \r\n \r\n \r\n"; + var runSettingsWithTestRunParametersOverrode = "\r\n\r\n \r\n \r\n \r\n"; this.runSettingsProvider.UpdateRunSettings(runSettingsWithTestRunParameters); var match = this.runSettingsProvider.GetTestRunParameterNodeMatch("TestRunParameters.Parameter(name=\"weburl\",value=\"http://localhost//def\")"); this.runSettingsProvider.UpdateTestRunParameterSettingsNode(match); - Assert.AreEqual(runSettingsWithTestRunParametersOverRode, this.runSettingsProvider.ActiveRunSettings.SettingsXml); + Assert.AreEqual(runSettingsWithTestRunParametersOverrode, this.runSettingsProvider.ActiveRunSettings.SettingsXml); } [TestMethod] diff --git a/test/vstest.console.UnitTests/Processors/CLIRunSettingsArgumentProcessorTests.cs b/test/vstest.console.UnitTests/Processors/CLIRunSettingsArgumentProcessorTests.cs index 12e3ec3ecc..2a8d4ea7bb 100644 --- a/test/vstest.console.UnitTests/Processors/CLIRunSettingsArgumentProcessorTests.cs +++ b/test/vstest.console.UnitTests/Processors/CLIRunSettingsArgumentProcessorTests.cs @@ -298,52 +298,56 @@ public void InitializeShouldThrowErrorIfTestRunParameterNodeIsInValid(string arg public static IEnumerable TestRunParameterArgInvalidTestCases() { - return new List - { - new object[] { "TestRunParameters.Parameter(name=asf,value=rgq)" }, - new object[] { "TestRunParameters.Parameter(name=\"asf\",value=\"rgq\" )"}, - new object[] { "TestRunParameters.Parameter( name=\"asf\",value=\"rgq\")" }, - new object[] { "TestRunParametersParameter(name=\"asf\",value=\"rgq\")" }, - new object[] { "TestRunParameters.Paramete(name=\"asf\",value=\"rgq\")" }, - new object[] { "TestRunParameters.Parametername=\"asf\",value=\"rgq\")" }, - new object[] { "TestRunParameters.Parameter(ame=\"asf\",value=\"rgq\")" }, - new object[] { "TestRunParameters.Parameter(name\"asf\",value=\"rgq\")" }, - new object[] { "TestRunParameters.Parameter(name=\"asf\" value=\"rgq\")" }, - new object[] { "TestRunParameters.Parameter(name=\"asf\",alue=\"rgq\")" }, - new object[] { "TestRunParameters.Parameter(name=\"asf\",value\"rgq\")" }, - new object[] { "TestRunParameters.Parameter(name=\"asf\",value=\"rgq\"" }, - new object[] { "TestRunParameters.Parameter(name=\"asf\",value=\"rgq\")wfds" }, - new object[] { "TestRunParameters.Parameter(name=\"\",value=\"rgq\")" }, - new object[] { "TestRunParameters.Parameter(name=\"asf\",value=\"\")" }, - new object[] { "TestRunParameters.Parameter(name=asf\",value=\"rgq\")" }, - new object[] { "TestRunParameters.Parameter(name=\"asf,value=\"rgq\")" }, - new object[] { "TestRunParameters.Parameter(name=\"asf\",value=rgq\")" }, - new object[] { "TestRunParameters.Parameter(name=\"asf\",value=\"rgq)" }, - new object[] { "TestRunParameters.Parameter(name=\"asf@#!\",value=\"rgq\")" }, - new object[] { "TestRunParameters.Parameter(name=\"\",value=\"fgf\")" }, - new object[] { "TestRunParameters.Parameter(name=\"gag\",value=\"\")" }, - new object[] { "TestRunParameters.Parameter(name=\"gag\")" } - }; + return invalidTestCases; } + private static readonly List invalidTestCases = new List + { + new object[] { "TestRunParameters.Parameter(name=asf,value=rgq)" }, + new object[] { "TestRunParameters.Parameter(name=\"asf\",value=\"rgq\" )"}, + new object[] { "TestRunParameters.Parameter( name=\"asf\",value=\"rgq\")" }, + new object[] { "TestRunParametersParameter(name=\"asf\",value=\"rgq\")" }, + new object[] { "TestRunParameters.Paramete(name=\"asf\",value=\"rgq\")" }, + new object[] { "TestRunParameters.Parametername=\"asf\",value=\"rgq\")" }, + new object[] { "TestRunParameters.Parameter(ame=\"asf\",value=\"rgq\")" }, + new object[] { "TestRunParameters.Parameter(name\"asf\",value=\"rgq\")" }, + new object[] { "TestRunParameters.Parameter(name=\"asf\" value=\"rgq\")" }, + new object[] { "TestRunParameters.Parameter(name=\"asf\",alue=\"rgq\")" }, + new object[] { "TestRunParameters.Parameter(name=\"asf\",value\"rgq\")" }, + new object[] { "TestRunParameters.Parameter(name=\"asf\",value=\"rgq\"" }, + new object[] { "TestRunParameters.Parameter(name=\"asf\",value=\"rgq\")wfds" }, + new object[] { "TestRunParameters.Parameter(name=\"\",value=\"rgq\")" }, + new object[] { "TestRunParameters.Parameter(name=\"asf\",value=\"\")" }, + new object[] { "TestRunParameters.Parameter(name=asf\",value=\"rgq\")" }, + new object[] { "TestRunParameters.Parameter(name=\"asf,value=\"rgq\")" }, + new object[] { "TestRunParameters.Parameter(name=\"asf\",value=rgq\")" }, + new object[] { "TestRunParameters.Parameter(name=\"asf\",value=\"rgq)" }, + new object[] { "TestRunParameters.Parameter(name=\"asf@#!\",value=\"rgq\")" }, + new object[] { "TestRunParameters.Parameter(name=\"\",value=\"fgf\")" }, + new object[] { "TestRunParameters.Parameter(name=\"gag\",value=\"\")" }, + new object[] { "TestRunParameters.Parameter(name=\"gag\")" } + }; + public static IEnumerable TestRunParameterArgValidTestCases() { - return new List { - new object[] { "TestRunParameters.Parameter(name=\"weburl\",value=\"&><\")" , - "\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n" - }, - new object[] { "TestRunParameters.Parameter(name=\"weburl\",value=\"http://localhost//abc\")" , - "\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n" - }, - new object[] { "TestRunParameters.Parameter(name= \"a_sf123_12\",value= \"2324346a!@#$%^*()_+-=':;.,/?{}[]|\")" , - "\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n" - }, - new object[] { "TestRunParameters.Parameter(name = \"weburl\" , value = \"http://localhost//abc\")" , - "\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n" - }, - }; + return validTestCases; } + private static readonly List validTestCases = new List + { + new object[] { "TestRunParameters.Parameter(name=\"weburl\",value=\"&><\")" , + "\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n" + }, + new object[] { "TestRunParameters.Parameter(name=\"weburl\",value=\"http://localhost//abc\")" , + "\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n" + }, + new object[] { "TestRunParameters.Parameter(name= \"a_sf123_12\",value= \"2324346a!@#$%^*()_+-=':;.,/?{}[]|\")" , + "\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n" + }, + new object[] { "TestRunParameters.Parameter(name = \"weburl\" , value = \"http://localhost//abc\")" , + "\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n" + }, + }; #endregion } }