/// <summary> /// Does deep-equivalence testing on two collections, ignoring complex item referencing. /// Two collections are deep-equivalent when their object data matches, but not necessarily /// in order. /// </summary> /// <param name="continuation">Continuation to operate on</param> /// <param name="expected">Collection to match</param> /// <param name="customMessageGenerator">Generates a custom message to add when failing</param> /// <param name="customEqualityComparers">Custom implementations of IEqualityComparer<TProperty> /// to use when comparing properties of type TProperty</param> /// <typeparam name="T">Collection item type</typeparam> public static void To <T>( this ICollectionDeepEquivalent <T> continuation, IEnumerable <T> expected, Func <string> customMessageGenerator, params object[] customEqualityComparers ) { continuation.AddMatcher( collection => { var result = CollectionsAreDeepEquivalent( collection, expected, customEqualityComparers); return(new MatcherResult( result.AreEqual, () => FinalMessageFor( new[] { "Expected", collection.LimitedPrint(), $"{result.AreEqual.AsNot()} to be deep equivalent to", expected.LimitedPrint() }.Concat(result.Errors).ToArray(), customMessageGenerator ))); }); }
/// <summary> /// Does deep-equivalence testing on two collections, ignoring complex item referencing. /// Two collections are deep-equivalent when their object data matches, but not necessarily /// in order. /// </summary> /// <param name="continuation">Continuation to operate on</param> /// <param name="expected">Collection to match</param> /// <param name="customEqualityComparers">Custom implementations of IEqualityComparer<TProperty> /// to use when comparing properties of type TProperty</param> /// <typeparam name="T">Collection item type</typeparam> public static void To <T>( this ICollectionDeepEquivalent <T> continuation, IEnumerable <T> expected, params object[] customEqualityComparers ) { continuation.To(expected, NULL_STRING, customEqualityComparers); }
/// <summary> /// Does deep-equivalence testing on two collections, ignoring complex item referencing. /// Two collections are deep-equivalent when their object data matches, but not necessarily /// in order. /// </summary> /// <param name="continuation">Continuation to operate on</param> /// <param name="expected">Collection to match</param> /// <param name="customMessage">Custom message to add when failing</param> /// <param name="customEqualityComparers">Custom implementations of IEqualityComparer<TProperty> /// to use when comparing properties of type TProperty</param> /// <typeparam name="T">Collection item type</typeparam> public static void To <T>( this ICollectionDeepEquivalent <T> continuation, IEnumerable <T> expected, string customMessage, params object[] customEqualityComparers ) { continuation.To(expected, () => customMessage, customEqualityComparers); }