public void FluentConsoleApplication_CommandsFullyDefinedRunWithTokens_ExpectedResults()
        {
            // ARRANGE
            var numberA = 5;
            var numberB = 2;

            int    sum     = 0;
            double product = 0;
            IFluentConsoleApplication app =
                FluentConsoleApplication.Create("Calculator", "Use this application for math.")
                .DefineCommand("add", "Add two numbers")
                .WithParameter <int>("X", "First operand", input => int.Parse(input))
                .WithParameter <int>("Y", "Second operand", input => int.Parse(input))
                .Does(args => sum = args.X + args.Y)
                .DefineCommand("mult", "Multiply two numbers")
                .WithParameter <double>("X", "First operand", input => double.Parse(input))
                .WithParameter <double>("Y", "Second operand", input => double.Parse(input))
                .Does(args => product = args.X * args.Y);

            // ACT
            //   Emulate user input
            app.Run(new string[] { "add", numberA.ToString(), numberB.ToString() });
            app.Run(new string[] { "mult", numberA.ToString(), numberB.ToString() });

            // ASSERT
            sum.Should().Be(numberA + numberB);
            product.Should().BeApproximately(numberA * numberB, precision: 0.01);
        }
        public void FluentConsoleApplication_CommandsWithImpliedParsingDelegate_TotalOfCalculation()
        {
            // ARRANGE
            var numberA = 5;
            var numberB = 2;

            long   sum     = 0;
            double product = 0;
            IFluentConsoleApplication app =
                FluentConsoleApplication.Create("Calculator", "Use this application for math.")
                .DefineCommand("add", "Add two numbers")
                .WithParameter <int>("X", "First operand")
                .WithParameter <long>("Y", "Second operand")
                .Does(args => sum = args.X + args.Y)
                .DefineCommand("mult", "Multiply two numbers")
                .WithParameter <double>("X", "First operand")
                .WithParameter <decimal>("Y", "Second operand")
                .Does(args => product = args.X * (double)args.Y);

            // ACT
            //   Emulate user input
            app.Run($"add {numberA} {numberB}");
            app.Run($"mult {numberA} {numberB}");

            // ASSERT
            sum.Should().Be(numberA + numberB);
            product.Should().BeApproximately(numberA * numberB, precision: 0.01);
        }
        public void FluentConsoleApplication_MethodsInvokedWithoutAnyDescriptionProvided_ExpectedResults()
        {
            // ARRANGE
            var numberA = 5;
            var numberB = 2;

            int    sum     = 0;
            double product = 0;
            IFluentConsoleApplication app =
                FluentConsoleApplication.Create("Calculator")
                .DefineCommand("add")
                .WithParameter("X", input => int.Parse(input))
                .WithParameter <int>("Y", input => int.Parse(input))
                .Does(args => sum = args.X + args.Y)
                .DefineCommand("mult")
                .WithParameter <double>("X")
                .WithParameter("Y", input => double.Parse(input))
                .Does(args => product = args.X * args.Y);

            // ACT
            //   Emulate user input
            app.Run($"add {numberA} {numberB}");
            app.Run($"mult {numberA} {numberB}");

            // ASSERT
            sum.Should().Be(numberA + numberB);
            product.Should().BeApproximately(numberA * numberB, precision: 0.01);
        }