using System; using System.Collections.Generic; using System.Linq; namespace Timeline.Tests { public static class XUnitHelper { public static IEnumerable ComposeTestData(params IEnumerable[] testDatas) { return ComposeTestData(new ArraySegment>(testDatas)); } public static IEnumerable ComposeTestData(ArraySegment> testDatas) { if (testDatas.Count == 0) throw new ArgumentException("Test data list can't be empty.", nameof(testDatas)); if (testDatas.Count == 1) { foreach (var d in testDatas[0]) yield return d; } else { foreach (var head in testDatas[0]) foreach (var rest in ComposeTestData(testDatas.Slice(1))) yield return head.Concat(rest).ToArray(); } } public static IEnumerable AppendTestData(this IEnumerable origin, params IEnumerable[] toAppend) { IEnumerable result = origin; foreach (var oneToAppend in toAppend) { result = ComposeTestData(result, oneToAppend.Select(testData => new object?[] { testData })); } return result; } } }