public void Example_Documentation()
        {
            var swA = new CommandSwitch("AAA", 'a');

            swA.AddParameter(Arity.One, "a-param");
            swA.SetHelp("Help for A.");

            var swB = new CommandSwitch("be");

            swB.AddParameter(Arity.NoneOrOne, "b-param");
            swB.SetHelp("Help for B.");

            var parser = new Parser();

            parser.AddSwitch(swA);
            parser.AddSwitch(swB);

            var result = parser.Parse(new string[] { "-a", "111", "--be=222", "path1" });

            Assert.AreEqual(1, result.pathsCount);
            Assert.AreEqual("path1", result.paths[0]);
            Assert.AreEqual(2, result.switchesCount);
            Assert.AreEqual("AAA", result.switches[0].primaryName);
            Assert.AreEqual("111", result.switches[0].args[0]);
            Assert.AreEqual("be", result.switches[1].primaryName);
            Assert.AreEqual("222", result.switches[1].args[0]);
        }
Exemple #2
0
        public QueueItemEventHandler(IQueueItemService queueItemService)
        {
            this.queueItemService = queueItemService;

            CommandSwitch
            .CaseWhen(Constants.GetQueueItems, SendQueueItems);
        }
        public void RepeatedSwitches_OneOrNoneArgIncorrect_Throws()
        {
            var parser = new Parser();
            var swA    = new CommandSwitch("AA", 'a');

            swA.AddParameter(Arity.NoneOrOne, "ones");
            parser.AddSwitch(swA);

            Assert.Throws <InvalidInput>(() => parser.Parse(new string[] { "-a=111", "--AA=222" }));
        }
        public void RepeatedSwitches_NoArg()
        {
            var parser = new Parser();
            var swA    = new CommandSwitch("AA", 'a');

            parser.AddSwitch(swA);

            var result = parser.Parse(new string[] { "-a", "--AA" });

            Assert.AreEqual(0, result.pathsCount);
            Assert.AreEqual(1, result.switchesCount);
            Assert.AreEqual("AA", result.switches[0].primaryName);
            Assert.AreEqual(0, result.switches[0].argsCount);
        }
Exemple #5
0
        private static int ParseSwitches(IList <string> args, out CommandSwitch switches)
        {
            switches = CommandSwitch.None;
            var index = 0;

            while (index < args.Count)
            {
                var possibleSwitch = args[index].ToLowerInvariant();
                if (possibleSwitch.Length == 0 || possibleSwitch[0] != '-')
                {
                    break;
                }

                switch (possibleSwitch)
                {
                case "--":
                    return(index + 1);

                case "-n":
                    switches |= CommandSwitch.NewLine;
                    break;

                case "-t":
                    switches |= CommandSwitch.Tab;
                    break;

                case "-x":
                    switches |= CommandSwitch.ExtendedSyntax;
                    if (switches.HasFlag(CommandSwitch.OnlyEscape))
                    {
                        throw new ArgumentException("Conflict: " + CommandSwitch.ExtendedSyntax + " already " + CommandSwitch.OnlyEscape + " set!", "args");
                    }
                    break;

                case "-e":
                    switches |= CommandSwitch.OnlyEscape;
                    if (switches.HasFlag(CommandSwitch.ExtendedSyntax))
                    {
                        throw new ArgumentException("Conflict: " + CommandSwitch.OnlyEscape + " already " + CommandSwitch.ExtendedSyntax + " set!", "args");
                    }
                    break;

                default:
                    throw new ArgumentException("Cannot parse option: " + possibleSwitch, "args");
                }
                index++;
            }
            return(index);
        }
Exemple #6
0
        public void GetHelp_WhenNoLongNameAndNoAltNames()
        {
            var sw1 = new CommandSwitch("s");

            sw1.SetHelp("Help here");
            sw1.AddParameter(Arity.NoneOrOne, "p");

            StringBuilder sb = new StringBuilder();

            sw1.GetHelp(new Setup(), sb);
            var actual   = sb.ToString();
            var expected = " -s[=p]                   Help here\n";

            Assert.AreEqual(expected, actual);
        }
        public void SwitchesWithArguments_OneOrNone_NoValue()
        {
            var parser = new Parser();
            var swA    = new CommandSwitch("a");

            swA.AddParameter(Arity.NoneOrOne, "ones");
            parser.AddSwitch(swA);

            var result = parser.Parse(new string[] { "-a" });

            Assert.AreEqual(0, result.pathsCount);
            Assert.AreEqual(1, result.switchesCount);
            Assert.AreEqual("a", result.switches[0].primaryName);
            Assert.AreEqual(0, result.switches[0].argsCount);
        }
Exemple #8
0
        public void GetHelp_MaybeParam()
        {
            var sw1 = new CommandSwitch("switch");

            sw1.SetHelp("Help here");
            sw1.AddParameter(Arity.NoneOrOne, "p");

            StringBuilder sb = new StringBuilder();

            sw1.GetHelp(new Setup(), sb);
            var actual   = sb.ToString();
            var expected = "    --switch[=p]          Help here\n";

            Assert.AreEqual(expected, actual);
        }
Exemple #9
0
        public void GetHelp_NoParam()
        {
            var sw1 = new CommandSwitch("switch", 's');

            sw1.AddAlternativeNames("alt");
            sw1.SetHelp("Help here");

            StringBuilder sb = new StringBuilder();

            sw1.GetHelp(new Setup(), sb);
            var actual   = sb.ToString();
            var expected = " -s --switch, --alt       Help here\n";

            Assert.AreEqual(expected, actual);
        }
Exemple #10
0
        public void GetHelp_WithAltNamesNoLongname_CorrectDisplay()
        {
            var sw1 = new CommandSwitch("s");

            sw1.AddAlternativeNames("alternative");
            sw1.SetHelp("Help here");

            StringBuilder sb = new StringBuilder();

            sw1.GetHelp(new Setup(), sb);
            var actual   = sb.ToString();
            var expected = " -s --alternative         Help here\n";

            Assert.AreEqual(expected, actual);
        }
        public void SwitchesOnly()
        {
            var parser = new Parser();
            var swA    = new CommandSwitch("a");
            var swBE   = new CommandSwitch("be");

            parser.AddSwitch(swA);
            parser.AddSwitch(swBE);

            var result = parser.Parse(new string[] { "-a", "--be" });

            Assert.AreEqual(0, result.pathsCount);
            Assert.AreEqual(2, result.switchesCount);
            Assert.AreEqual("a", result.switches[0].primaryName);
            Assert.AreEqual("be", result.switches[1].primaryName);
        }
        public void PathsThenSwitches_MeansPaths()
        {
            var parser = new Parser();
            var swA    = new CommandSwitch("a");
            var swBE   = new CommandSwitch("be");

            parser.AddSwitch(swA);
            parser.AddSwitch(swBE);

            var result = parser.Parse(new string[] { "path1", "-a", "--be", });

            Assert.AreEqual(3, result.pathsCount);
            Assert.AreEqual("path1", result.paths[0]);
            Assert.AreEqual("-a", result.paths[1]);
            Assert.AreEqual("--be", result.paths[2]);
        }
        public void SwitchesWithArguments_Many()
        {
            var parser = new Parser();
            var swA    = new CommandSwitch("a");

            swA.AddParameter(Arity.Any, "ones");
            parser.AddSwitch(swA);

            var result = parser.Parse(new string[] { "-a", "111", "222" });

            Assert.AreEqual(0, result.pathsCount);
            Assert.AreEqual(1, result.switchesCount);
            Assert.AreEqual("a", result.switches[0].primaryName);
            Assert.AreEqual(2, result.switches[0].argsCount);
            Assert.AreEqual("111", result.switches[0].args[0]);
            Assert.AreEqual("222", result.switches[0].args[1]);
        }
        public void PathsMixedWithSwitches_MeansPaths()
        {
            var parser = new Parser();
            var swA    = new CommandSwitch("a");
            var swBE   = new CommandSwitch("be");

            parser.AddSwitch(swA);
            parser.AddSwitch(swBE);

            var result = parser.Parse(new string[] { "-a", "path1", "--be", });

            Assert.AreEqual(2, result.pathsCount);
            Assert.AreEqual("path1", result.paths[0]);
            Assert.AreEqual("--be", result.paths[1]);
            Assert.AreEqual(1, result.switchesCount);
            Assert.AreEqual("a", result.switches[0].primaryName);
        }
        public void SwitchesWithArguments_Many_InterruptedBySwitch()
        {
            var parser = new Parser();
            var swA    = new CommandSwitch("a");
            var swBE   = new CommandSwitch("be");

            swA.AddParameter(Arity.Any, "ones");
            swBE.AddParameter(Arity.NoneOrOne, "threes");
            parser.AddSwitch(swA);
            parser.AddSwitch(swBE);

            var result = parser.Parse(new string[] { "-a", "111", "222", "--be=333" });

            Assert.AreEqual(0, result.pathsCount);
            Assert.AreEqual(2, result.switchesCount);
            Assert.AreEqual("a", result.switches[0].primaryName);
            Assert.AreEqual(2, result.switches[0].argsCount);
            Assert.AreEqual("111", result.switches[0].args[0]);
            Assert.AreEqual("222", result.switches[0].args[1]);
            Assert.AreEqual("be", result.switches[1].primaryName);
            Assert.AreEqual("333", result.switches[1].args[0]);
        }
Exemple #16
0
        public void MakeSwitch_SingleCharString()
        {
            var sw = new CommandSwitch("A");

            Assert.AreEqual("A", sw.primaryName);
        }
Exemple #17
0
        public void MakeSwitch_WithShortName_GetsLong()
        {
            var sw = new CommandSwitch("AAA", 'a');

            Assert.AreEqual("AAA", sw.primaryName);
        }
Exemple #18
0
        private static async Task WriteSentenceAsync(string sentence, CommandSwitch commandSwitches)
        {
            if (commandSwitches.HasFlag(CommandSwitch.Tab))
            {
                await Console.Out.WriteAsync('\t');
            }

            if (commandSwitches.HasFlag(CommandSwitch.ExtendedSyntax))
            {
                foreach (var colouredString in sentence.Atomize().ToColourizedStrings())
                {
                    if (colouredString.ControlChar > '\0')
                    {
                        switch (colouredString.ControlChar)
                        {
                        case 'a':
                            ControlCharHelper.DoBeep(colouredString);
                            break;
                        }
                    }
                    else
                    {
                        if (colouredString.Colours.IsReset)
                        {
                            Console.ResetColor();
                        }
                        else if (colouredString.Colours.IsSwap)
                        {
                            var temp = Console.ForegroundColor;
                            Console.ForegroundColor = Console.BackgroundColor;
                            Console.BackgroundColor = temp;
                        }
                        else
                        {
                            if (colouredString.Colours.Foreground >= 0)
                            {
                                Console.ForegroundColor = (ConsoleColor)colouredString.Colours.Foreground;
                            }
                            if (colouredString.Colours.Background >= 0)
                            {
                                Console.BackgroundColor = (ConsoleColor)colouredString.Colours.Background;
                            }
                        }
                        await Console.Out.WriteAsync(colouredString.Text);
                    }
                }
            }
            else if (commandSwitches.HasFlag(CommandSwitch.OnlyEscape))
            {
                var inputLength   = sentence.Length;
                var replacedChars = new StringBuilder(inputLength);
                for (var i = 0; i < inputLength; i++)
                {
                    var @char = sentence[i];
                    switch (@char)
                    {
                    case '\\':
                        char composed;
                        switch (sentence[++i])
                        {
                        case 'a': composed = '\a'; break;

                        case 'b': composed = '\b'; break;

                        case 'e': composed = '\x1b'; break;

                        case 'f': composed = '\f'; break;

                        case 'n': composed = '\n'; break;

                        case 'v': composed = '\v'; break;

                        default:
                            throw new ArgumentException(@"Escape sequence \" + sentence[i] + " is not supported!", "sentence");
                        }
                        replacedChars.Append(composed);
                        break;

                    default:
                        replacedChars.Append(@char);
                        break;
                    }
                }
                await Console.Out.WriteAsync(replacedChars.ToString());
            }
            else
            {
                await Console.Out.WriteAsync(sentence);
            }

            if (commandSwitches.HasFlag(CommandSwitch.NewLine))
            {
                await Console.Out.WriteLineAsync();
            }
        }
Exemple #19
0
        public QueueEventHandler(IQueueService queueService)
        {
            this.queueService = queueService;

            CommandSwitch.CaseWhen(Constants.GetQueue, GetQueue);
        }