using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using AMWD.Common.Cli; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace UnitTests.Common.Cli { [TestClass] public class CommandLineParserTests { [TestMethod] public void ShouldParseStringToArgs() { // arrange // act string[] result = CommandLineParser.ParseArgsString("Option1 \"Option 2\" \"Some \"\" Option\" Foo=Bar \\ /help \\\\backslash \\\"escapedquote \\test"); // assert Assert.IsNotNull(result); Assert.AreEqual(9, result.Length); Assert.AreEqual("Option1", result[0]); Assert.AreEqual("Option 2", result[1]); Assert.AreEqual("Some \" Option", result[2]); Assert.AreEqual("Foo=Bar", result[3]); Assert.AreEqual("\\", result[4]); Assert.AreEqual("/help", result[5]); Assert.AreEqual("\\backslash", result[6]); Assert.AreEqual("\"escapedquote", result[7]); Assert.AreEqual("\\test", result[8]); } [TestMethod] public void ShouldReadArgs() { // arrange var parser = new CommandLineParser(); // act parser.ReadArgs("Option1 \"Option 2\""); string[] args = parser.GetType().GetField("args", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(parser) as string[]; // assert Assert.IsNotNull(args); Assert.AreEqual(2, args.Length); Assert.AreEqual("Option1", args[0]); Assert.AreEqual("Option 2", args[1]); } [TestMethod] public void ShouldRegisterOptions() { // arrange var parser = new CommandLineParser(); // act parser.RegisterOption("opt1"); parser.RegisterOption("opt2", 1); parser.RegisterOption("opt3", 2).Required().Single(); parser.RegisterOption("opt4").Alias("option4"); var options = parser.GetType().GetField("options", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(parser) as List