public void Allow_A_Positional_Of_A_Single_String()
        {
            // arrange
            var contextBuilder = new ContextBuilder();
            var parser0        = new Parser <string>("base");
            var builder0       = new ParserBuilder <string>(contextBuilder, parser0);
            var parser1        = new Parser("base");
            var builder1       = new ParserBuilder(contextBuilder, parser1);

            // act
            builder0.WithPositional((o, s) => { });
            builder1.WithPositional((o, s) => { });

            // assert
            builder0.Parser.Parameters.Single().Should().BeAssignableTo <Positional <string> >();
            builder1.Parser.Parameters.Single().Should().BeAssignableTo <Positional>();
        }
        public void Throw_If_Multiple_Strings_Passed_To_The_Single_String_Callback()
        {
            // arrange
            var contextBuilder = new ContextBuilder();
            var parser0        = new Parser <string>("base");
            var builder0       = new ParserBuilder <string>(contextBuilder, parser0);
            var parser1        = new Parser("base");
            var builder1       = new ParserBuilder(contextBuilder, parser1);

            // act
            builder0.WithPositional((o, s) => { });
            builder1.WithPositional((o, s) => { });

            // assert
            Action mightThrow0 = () => builder0.Parser.Parameters.Single().ConsumeCallback("", "a b".Split(' '));

            mightThrow0.Should().Throw <InvalidOperationException>();
            Action mightThrow1 = () =>
                                 builder1.Parser.Parameters.Single().ConsumeCallback(new object(), "a b".Split(' '));

            mightThrow1.Should().Throw <InvalidOperationException>();
        }