public static string GetAssertMessage(string expected, string actual, bool escapeQuotes = false, string expectedValueSourcePath = null, int expectedValueSourceLine = 0) { return(GetAssertMessage(DiffUtil.Lines(expected), DiffUtil.Lines(actual), escapeQuotes, expectedValueSourcePath, expectedValueSourceLine)); }
public static string GetAssertMessage <T>( IEnumerable <T> expected, IEnumerable <T> actual, IEqualityComparer <T> comparer = null, string prefix = null, Func <T, string> itemInspector = null, string itemSeparator = null, string expectedValueSourcePath = null, int expectedValueSourceLine = 0) { if (itemInspector == null) { if (typeof(T) == typeof(byte)) { itemInspector = b => $"0x{b:X2}"; } else { itemInspector = new Func <T, string>(obj => (obj != null) ? obj.ToString() : "<null>"); } } if (itemSeparator == null) { if (typeof(T) == typeof(byte)) { itemSeparator = ", "; } else { itemSeparator = "," + Environment.NewLine; } } var expectedString = string.Join(itemSeparator, expected.Take(10).Select(itemInspector)); var actualString = string.Join(itemSeparator, actual.Select(itemInspector)); var message = new StringBuilder(); if (!string.IsNullOrEmpty(prefix)) { message.AppendLine(prefix); message.AppendLine(); } message.AppendLine("Expected:"); message.AppendLine(expectedString); if (expected.Count() > 10) { message.AppendLine("... truncated ..."); } message.AppendLine("Actual:"); message.AppendLine(actualString); message.AppendLine("Differences:"); message.AppendLine(DiffUtil.DiffReport(expected, actual, itemSeparator, comparer, itemInspector)); if (TryGenerateExpectedSourceFileAndGetDiffLink(actualString, expected.Count(), expectedValueSourcePath, expectedValueSourceLine, out var link)) { message.AppendLine(link); } return(message.ToString()); }