From 137d438f743198030c6df626b046af04d10abb99 Mon Sep 17 00:00:00 2001 From: Bob Arnson Date: Thu, 20 Aug 2020 20:57:06 -0400 Subject: Add CompareXml methods to assert XML equality. --- src/WixBuildTools.TestSupport/WixAssert.cs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/WixBuildTools.TestSupport/WixAssert.cs b/src/WixBuildTools.TestSupport/WixAssert.cs index 32a98463..0882e26e 100644 --- a/src/WixBuildTools.TestSupport/WixAssert.cs +++ b/src/WixBuildTools.TestSupport/WixAssert.cs @@ -3,6 +3,8 @@ namespace WixBuildTools.TestSupport { using System; + using System.Linq; + using System.Xml.Linq; using Xunit; public class WixAssert : Assert @@ -14,9 +16,26 @@ namespace WixBuildTools.TestSupport Assert.True(actualLines.Length > i, $"{i}: expectedLines longer than actualLines"); Assert.Equal($"{i}: {expectedLines[i]}", $"{i}: {actualLines[i]}"); } + Assert.True(expectedLines.Length == actualLines.Length, "actualLines longer than expectedLines"); } + public static void CompareXml(XContainer xExpected, XContainer xActual) + { + var actuals = xActual.Descendants().Select(x => $"{x.Name.LocalName}:{String.Join(",", x.Attributes().OrderBy(a => a.Name.LocalName).Select(a => $"{a.Name.LocalName}={a.Value}"))}"); + var expecteds = xExpected.Descendants().Select(x => $"{x.Name.LocalName}:{String.Join(",", x.Attributes().OrderBy(a => a.Name.LocalName).Select(a => $"{a.Name.LocalName}={a.Value}"))}"); + + CompareLineByLine(expecteds.OrderBy(s => s).ToArray(), actuals.OrderBy(s => s).ToArray()); + } + + public static void CompareXml(string expectedPath, string actualPath) + { + var expectedDoc = XDocument.Load(expectedPath, LoadOptions.PreserveWhitespace | LoadOptions.SetBaseUri | LoadOptions.SetLineInfo); + var actualDoc = XDocument.Load(actualPath, LoadOptions.PreserveWhitespace | LoadOptions.SetBaseUri | LoadOptions.SetLineInfo); + + CompareXml(expectedDoc, actualDoc); + } + public static void Succeeded(int hr, string format, params object[] formatArgs) { if (0 > hr) -- cgit v1.2.3-55-g6feb