/// <summary> /// Checks that the checked <see cref="IEnumerable"/> contains only the authorized items. Can only be used after a call to Contains. /// </summary> /// <param name="check"> /// The chained fluent check. /// </param> /// <returns> /// A check link. /// </returns> public static ExtendableCheckLink <ICheck <IEnumerable>, IEnumerable> Only(this ExtendableCheckLink <ICheck <IEnumerable>, IEnumerable> check) { IExtendableCheckLink <ICheck <IEnumerable>, IEnumerable> chainedCheckLink = check; chainedCheckLink.AccessCheck.IsOnlyMadeOf(chainedCheckLink.OriginalComparand); return(check); }
/// <summary> /// Checks that the checked <see cref="string"/> contains the expected list of strings in the correct order. /// </summary> /// <param name="chainedCheckLink"> /// The chained fluent check. /// </param> /// <returns> /// A check link. /// </returns> public static IExtendableCheckLink <ICheck <string>, string[]> InThatOrder(this ExtendableCheckLink <ICheck <string>, string[]> chainedCheckLink) { IExtendableCheckLink <ICheck <string>, string[]> context = chainedCheckLink; ExtensibilityHelper.BeginCheck(context.AccessCheck). CantBeNegated("InThatOrder"). Analyze((sut, test) => { var lastIndex = 0; foreach (var content in context.OriginalComparand) { lastIndex = sut.IndexOf(content, lastIndex, StringComparison.Ordinal); if (lastIndex >= 0) { continue; } test.Fail("The {0} does not contain the expected strings in the correct order."); return; } }). DefineExpectedValues(context.OriginalComparand, context.OriginalComparand.Length, "in this order", "") .EndCheck(); return(chainedCheckLink); }
/// <summary> /// Checks that the checked <see cref="IEnumerable"/> contains the expected list of items only once. /// </summary> /// <param name="check"> /// The chained fluent check. /// </param> /// <returns> bv /// A check link. /// </returns> public static ExtendableCheckLink <ICheck <IEnumerable>, IEnumerable> Once(this ExtendableCheckLink <ICheck <IEnumerable>, IEnumerable> check) { IExtendableCheckLink <ICheck <IEnumerable>, IEnumerable> chainedCheckLink = check; ImplementOnce( ExtensibilityHelper.BeginCheckAs(chainedCheckLink.AccessCheck, enumerable => enumerable.Cast <object>()), chainedCheckLink.OriginalComparand.Cast <object>()); return(check); }
/// <summary> /// Checks that the checked <see cref="string"/> contains the expected list of strings only once. /// </summary> /// <param name="chainedCheckLink"> /// The chained fluent check. /// </param> /// <returns> /// A check link. /// </returns> public static ExtendableCheckLink <ICheck <string>, string[]> Once(this ExtendableCheckLink <ICheck <string>, string[]> chainedCheckLink) { IExtendableCheckLink <ICheck <string>, string[]> context = chainedCheckLink; ExtensibilityHelper.BeginCheck(context.AccessCheck). CantBeNegated("Once"). Analyze((sut, test) => { foreach (var content in context.OriginalComparand) { var firstIndex = sut.IndexOf(content, StringComparison.Ordinal); var lastIndexOf = sut.LastIndexOf(content, StringComparison.Ordinal); if (firstIndex != lastIndexOf) { test.Fail( $"The {{0}} contains {content.ToStringProperlyFormatted().DoubleCurlyBraces()} at {firstIndex} and {lastIndexOf}, where as it must contains it once."); return; } } }). DefineExpectedValues(context.OriginalComparand, context.OriginalComparand.Length, "once", "").EndCheck(); return(chainedCheckLink); }
/// <summary> /// Checks that the checked <see cref="IEnumerable"/> contains the expected list of items only once. /// </summary> /// <param name="check"> /// The chained fluent check. /// </param> /// <returns> /// A check link. /// </returns> public static ExtendableCheckLink <ICheck <IEnumerable <T> >, IEnumerable <T> > Once <T>(this ExtendableCheckLink <ICheck <IEnumerable <T> >, IEnumerable <T> > check) { IExtendableCheckLink <ICheck <IEnumerable <T> >, IEnumerable <T> > chainedCheckLink = check; ImplementOnce(ExtensibilityHelper.BeginCheck(chainedCheckLink.AccessCheck), chainedCheckLink.OriginalComparand); return(check); }