From 95b1be66d4c16b1b05b761c1771df229ac0e539c Mon Sep 17 00:00:00 2001 From: Sean Hall Date: Fri, 31 Dec 2021 18:20:50 -0600 Subject: Try to get more helpful test failure messages. --- .../WixBuildTools.TestSupport/WixAssert.cs | 48 +++++++++++++++++++++- 1 file changed, 46 insertions(+), 2 deletions(-) (limited to 'src/internal/WixBuildTools.TestSupport') diff --git a/src/internal/WixBuildTools.TestSupport/WixAssert.cs b/src/internal/WixBuildTools.TestSupport/WixAssert.cs index 5638a787..938902ec 100644 --- a/src/internal/WixBuildTools.TestSupport/WixAssert.cs +++ b/src/internal/WixBuildTools.TestSupport/WixAssert.cs @@ -3,6 +3,7 @@ namespace WixBuildTools.TestSupport { using System; + using System.Collections.Generic; using System.Linq; using System.Xml.Linq; using Xunit; @@ -14,10 +15,10 @@ namespace WixBuildTools.TestSupport for (var i = 0; i < expectedLines.Length; ++i) { Assert.True(actualLines.Length > i, $"{i}: expectedLines longer than actualLines"); - Assert.Equal($"{i}: {expectedLines[i]}", $"{i}: {actualLines[i]}"); + WixAssert.StringEqual($"{i}: {expectedLines[i]}", $"{i}: {actualLines[i]}"); } - Assert.True(expectedLines.Length == actualLines.Length, "actualLines longer than expectedLines"); + Assert.True(expectedLines.Length == actualLines.Length, $"actualLines ({actualLines.Length}) longer than expectedLines ({expectedLines.Length})"); } public static void CompareXml(XContainer xExpected, XContainer xActual) @@ -43,5 +44,48 @@ namespace WixBuildTools.TestSupport throw new SucceededException(hr, String.Format(format, formatArgs)); } } + + public static void StringCollectionEmpty(IList collection) + { + if (collection.Count > 0) + { + Assert.True(false, $"The collection was expected to be empty, but instead was [{Environment.NewLine}\"{String.Join($"\", {Environment.NewLine}\"", collection)}\"{Environment.NewLine}]"); + } + } + + public static void StringEqual(string expected, string actual, bool ignoreCase = false) + { + var comparer = ignoreCase ? StringObjectEqualityComparer.InvariantCultureIgnoreCase : StringObjectEqualityComparer.InvariantCulture; + Assert.Equal(expected, actual, comparer); + } + + public static void NotStringEqual(string expected, string actual, bool ignoreCase = false) + { + var comparer = ignoreCase ? StringObjectEqualityComparer.InvariantCultureIgnoreCase : StringObjectEqualityComparer.InvariantCulture; + Assert.NotEqual(expected, actual, comparer); + } + + private class StringObjectEqualityComparer : IEqualityComparer + { + public static readonly StringObjectEqualityComparer InvariantCultureIgnoreCase = new StringObjectEqualityComparer(true); + public static readonly StringObjectEqualityComparer InvariantCulture = new StringObjectEqualityComparer(false); + + private readonly StringComparer _stringComparer; + + public StringObjectEqualityComparer(bool ignoreCase) + { + this._stringComparer = ignoreCase ? StringComparer.InvariantCultureIgnoreCase : StringComparer.InvariantCulture; + } + + public new bool Equals(object x, object y) + { + return this._stringComparer.Equals((string)x,(string)y); + } + + public int GetHashCode(object obj) + { + return this._stringComparer.GetHashCode((string)obj); + } + } } } -- cgit v1.2.3-55-g6feb