Пример #1
0
        public void Run(IEnumerable <string> arguments, IFluentConsoleApplication application)
        {
            dynamic packedArguments   = new ExpandoObject();
            var     keyValueArguments = packedArguments as IDictionary <string, object>;

            // Add current application as part of the arguments
            keyValueArguments.Add("Application", application);

            // Add parameters as fields and associate provided values
            var parametersEnumerator = DefinedCommand.Parameters.GetEnumerator();
            var argumentsEnumerator  = arguments.GetEnumerator();

            while (parametersEnumerator.MoveNext() && argumentsEnumerator.MoveNext())
            {
                var currentParameter = parametersEnumerator.Current;
                var argumentType     = currentParameter.Type;
                var argumentName     = currentParameter.Name;
                var argumentValue    = Convert.ChangeType(currentParameter.GetValue(argumentsEnumerator.Current), argumentType);

                keyValueArguments.Add(argumentName, argumentValue);
            }

            // Run
            Action(packedArguments);
        }
Пример #2
0
 public DefinedCommand(IFluentConsoleApplication application, string commandName, string commandDescription)
 {
     Application = application;
     Name        = commandName;
     Description = commandDescription;
     Parameters  = Enumerable.Empty <IDefinedParameter>();
 }
        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_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_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);
        }
Пример #6
0
 /// <summary>
 /// Define a command for a <see cref="IFluentConsoleApplication"/>.
 /// </summary>
 /// <param name="application">Application to add the command being defined</param>
 /// <param name="commandName">Command's name</param>
 /// <param name="commandDescription">Command's description</param>
 /// <returns></returns>
 public static IDefinedCommand DefineCommand(this IFluentConsoleApplication application, string commandName, string commandDescription = null)
 {
     return(new DefinedCommand(application, commandName, commandDescription));
 }
 public FluentConsoleApplication(IFluentConsoleApplication application, IRunnableCommand command)
     : this(application.Name, application.Description)
 {
     RunnableCommands = application.RunnableCommands.Concat(new[] { command });
 }