diff --git a/src/NUnitTestAdapter/Internal/Extensions.cs b/src/NUnitTestAdapter/Internal/Extensions.cs new file mode 100644 index 00000000..619b0c7b --- /dev/null +++ b/src/NUnitTestAdapter/Internal/Extensions.cs @@ -0,0 +1,20 @@ +using System; + +namespace NUnit.VisualStudio.TestAdapter.Internal +{ +#if NET35 + + public static class TypeExtensions + { + public static Type GetTypeInfo(this Type type) => type; + } +#endif + public static class StringExtensions + { + public static bool IsNullOrWhiteSpace(this string value) + { + return value == null || value.Trim().Length == 0; + } + } +} + diff --git a/src/NUnitTestAdapter/Internal/TypeExtensions.cs b/src/NUnitTestAdapter/Internal/TypeExtensions.cs deleted file mode 100644 index 27cbe6c9..00000000 --- a/src/NUnitTestAdapter/Internal/TypeExtensions.cs +++ /dev/null @@ -1,11 +0,0 @@ -#if NET35 -using System; - -namespace NUnit.VisualStudio.TestAdapter.Internal -{ - public static class TypeExtensions - { - public static Type GetTypeInfo(this Type type) => type; - } -} -#endif diff --git a/src/NUnitTestAdapter/NUnitEventListener.cs b/src/NUnitTestAdapter/NUnitEventListener.cs index eaedd55b..763ca55d 100644 --- a/src/NUnitTestAdapter/NUnitEventListener.cs +++ b/src/NUnitTestAdapter/NUnitEventListener.cs @@ -1,5 +1,5 @@ // *********************************************************************** -// Copyright (c) 2011-2015 Charlie Poole, Terje Sandstrom +// Copyright (c) 2011-2018 Charlie Poole, Terje Sandstrom // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the @@ -22,7 +22,6 @@ // *********************************************************************** using System; -using System.Collections.Generic; #if !NETCOREAPP1_0 using System.Runtime.Remoting; #endif @@ -32,7 +31,7 @@ using Microsoft.VisualStudio.TestPlatform.ObjectModel.Logging; using NUnit.Engine; using NUnit.VisualStudio.TestAdapter.Dump; -using TestResult = Microsoft.VisualStudio.TestPlatform.ObjectModel.TestResult; +using NUnit.VisualStudio.TestAdapter.Internal; namespace NUnit.VisualStudio.TestAdapter { @@ -156,16 +155,15 @@ public void TestFinished(XmlNode resultNode) public void SuiteFinished(XmlNode resultNode) { var result = resultNode.GetAttribute("result"); - var label = resultNode.GetAttribute("label"); var site = resultNode.GetAttribute("site"); - + if (result == "Failed") { if (site == "SetUp" || site == "TearDown") { _recorder.SendMessage( TestMessageLevel.Warning, - string.Format("{0} failed for test fixture {1}", site, resultNode.GetAttribute("fullname"))); + $"{site} failed for test fixture {resultNode.GetAttribute("fullname")}"); var messageNode = resultNode.SelectSingleNode("failure/message"); if (messageNode != null) @@ -180,22 +178,21 @@ public void SuiteFinished(XmlNode resultNode) private static readonly string NL = Environment.NewLine; private static readonly int NL_LENGTH = NL.Length; - private IDumpXml dumpXml; + private readonly IDumpXml dumpXml; public void TestOutput(XmlNode outputNode) { - var testName = outputNode.GetAttribute("testname"); - var stream = outputNode.GetAttribute("stream"); var text = outputNode.InnerText; // Remove final newline since logger will add one if (text.EndsWith(NL)) text = text.Substring(0, text.Length - NL_LENGTH); - // An empty message will cause SendMessage to throw - if (text.Length == 0) text = " "; - - _recorder.SendMessage(TestMessageLevel.Warning, text); + if (text.IsNullOrWhiteSpace()) + { + return; + } + _recorder.SendMessage(TestMessageLevel.Warning, text); } } } diff --git a/src/NUnitTestAdapterTests/ExtensionsTests.cs b/src/NUnitTestAdapterTests/ExtensionsTests.cs new file mode 100644 index 00000000..87c98bb0 --- /dev/null +++ b/src/NUnitTestAdapterTests/ExtensionsTests.cs @@ -0,0 +1,57 @@ +// *********************************************************************** +// Copyright (c) 2018 Charlie Poole, Terje Sandstrom +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// *********************************************************************** + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using NUnit.Framework; +using NUnit.VisualStudio.TestAdapter.Internal; + +namespace NUnit.VisualStudio.TestAdapter.Tests +{ +#if !NETCOREAPP1_0 + public class ExtensionsTests + { + [TestCase("\t\t\t")] + [TestCase(" \t")] + [TestCase(" ")] + [TestCase("")] + public void ThatIsNullOrWhiteSpaceHandlesTabs(string value) + { + var res = StringExtensions.IsNullOrWhiteSpace(value); + Assert.That(res); + } + + [TestCase("\t42")] + [TestCase(" 42")] + [TestCase("42\n\r")] + public void ThatIsNullOrWhiteSpaceHandlesNonWhiteSpace(string value) + { + var res = StringExtensions.IsNullOrWhiteSpace(value); + Assert.That(res, Is.False); + } + } +#endif +}