using System.Collections.Generic; using System.Linq; using System.Text; namespace Mono.Linker.Tests.TestCasesRunner { public static class FormattingUtils { public static string FormatSequenceCompareFailureMessage (IEnumerable actual, IEnumerable expected) { var builder = new StringBuilder (); builder.AppendLine ("---------------"); builder.AppendLine ($"Expected/Original (Total : {expected.Count ()})"); builder.AppendLine ("---------------"); // Format in a quoted array form for easier copying into a expected sequence attribute builder.AppendLine (expected.Select (c => $"\"{c}\",").AggregateWithNewLine ()); builder.AppendLine ("---------------"); builder.AppendLine ($"Actual/Linked (Total : {actual.Count ()})"); builder.AppendLine ("---------------"); // Format in a quoted array form for easier copying into a expected sequence attribute builder.AppendLine (actual.Select (c => $"\"{c}\",").AggregateWithNewLine ()); builder.AppendLine ("---------------"); return builder.ToString (); } public static string FormatSequenceCompareFailureMessage2 (IEnumerable actual, IEnumerable expected, IEnumerable original) { var builder = new StringBuilder (); builder.AppendLine ("---------------"); builder.AppendLine ($"Expected (Total : {expected.Count ()})"); builder.AppendLine ("---------------"); // Format in a quoted array form for easier copying into a expected sequence attribute builder.AppendLine (expected.Select (c => $"\"{c}\",").AggregateWithNewLine ()); builder.AppendLine ("---------------"); builder.AppendLine ($"Actual/Linked (Total : {actual.Count ()})"); builder.AppendLine ("---------------"); // Format in a quoted array form for easier copying into a expected sequence attribute builder.AppendLine (actual.Select (c => $"\"{c}\",").AggregateWithNewLine ()); builder.AppendLine ("---------------"); builder.AppendLine ($"Original (Total : {original.Count ()})"); builder.AppendLine ("---------------"); // Format in a quoted array form for easier copying into a expected sequence attribute builder.AppendLine (original.Select (c => $"\"{c}\",").AggregateWithNewLine ()); builder.AppendLine ("---------------"); return builder.ToString (); } private static string AggregateWithNewLine (this IEnumerable elements) { return elements.AggregateWith (System.Environment.NewLine); } private static string AggregateWith (this IEnumerable elements, string separator) { if (elements.Any ()) return elements.Aggregate ((buff, s) => buff + separator + s); return string.Empty; } } }