/// <summary>
    /// fluent setter for <see cref="ISupportSwitchIncludeArchiveFilenames"/>.
    /// </summary>
    /// <typeparam name="T">the builder to support the <see cref="ISupportSwitchIncludeArchiveFilenames"/>.</typeparam>
    /// <param name="this">The builder-instance.</param>
    /// <param name="type">The <see cref="RecurseType"/>.</param>
    /// <param name="fileNameWildcard">The filename-wildcard.</param>
    /// <param name="additional">Additional filename-wildcards.</param>
    /// <returns>The builder-instance for fluent re-use.</returns>
    public static T WithIncludeArchiveFilenames <T>(this T @this, RecurseType type, string fileNameWildcard, params string[] additional)
        where T : ISupportSwitchBuilder <ISupportSwitchIncludeArchiveFilenames>
    {
        var first = new SwitchIncludeArchiveFilename(fileNameWildcard, type);
        var rest  = additional.Select(x => new SwitchIncludeArchiveFilename(x, type));

        return(@this.WithIncludeArchiveFilenames(first, rest));
    }
    public void Include_without_Recurse_outputs_no_recurse()
    {
        var          fixture  = new SevenZipSettingsFixture();
        var          sut      = new SwitchIncludeArchiveFilename("*.txt");
        const string expected = "-ai!*.txt";

        var actual = fixture.Parse(b => sut.BuildArguments(ref b));

        actual.ShouldBe(expected);
    }
    public void Include_with_Recurse_Wildcards_outputs_r_zero()
    {
        var          fixture  = new SevenZipSettingsFixture();
        var          sut      = new SwitchIncludeArchiveFilename("*.txt", RecurseType.EnableOnlyForWildcardNames);
        const string expected = "-air0!*.txt";

        var actual = fixture.Parse(b => sut.BuildArguments(ref b));

        actual.ShouldBe(expected);
    }
    public void Include_with_Recurse_disabled_outputs_r_minus()
    {
        var          fixture  = new SevenZipSettingsFixture();
        var          sut      = new SwitchIncludeArchiveFilename("*.txt", RecurseType.Disable);
        const string expected = "-air-!*.txt";

        var actual = fixture.Parse(b => sut.BuildArguments(ref b));

        actual.ShouldBe(expected);
    }
    private static T WithIncludeArchiveFilenames <T>(
        this T @this,
        SwitchIncludeArchiveFilename first,
        IEnumerable <SwitchIncludeArchiveFilename> rest)
        where T : ISupportSwitchBuilder <ISupportSwitchIncludeArchiveFilenames>
    {
        if (@this.Command.IncludeArchiveFilenames == null)
        {
            @this.Command.IncludeArchiveFilenames = new SwitchIncludeArchiveFilenameCollection(first);
        }
        else
        {
            @this.Command.IncludeArchiveFilenames.Add(first);
        }

        rest.ToList().ForEach(@this.Command.IncludeArchiveFilenames.Add);

        return(@this);
    }