diff --git a/Advanced Software Engineering/Advanced Software Engineering Tests/SettingsAndHelperFunctionsTester.cs b/Advanced Software Engineering/Advanced Software Engineering Tests/SettingsAndHelperFunctionsTester.cs index c65748b..e5fe4c4 100644 --- a/Advanced Software Engineering/Advanced Software Engineering Tests/SettingsAndHelperFunctionsTester.cs +++ b/Advanced Software Engineering/Advanced Software Engineering Tests/SettingsAndHelperFunctionsTester.cs @@ -2,6 +2,7 @@ using Microsoft.VisualStudio.TestTools.UnitTesting; using Advanced_Software_Engineering; using System; using System.Collections.Generic; +using System.Linq; namespace Advanced_Software_Engineering_Tests { [TestClass] @@ -23,15 +24,7 @@ namespace Advanced_Software_Engineering_Tests { string obfuscatedInput = correctOutput; - until = rand.Next(50); - for (int i = 0; i < until; i++) { - if (rand.Next(1) == 0) obfuscatedInput += space; - } - - until = rand.Next(50); - for (int i = 0; i < until; i++) { - if (rand.Next(1) == 0) obfuscatedInput = space + obfuscatedInput; - } + obfuscatedInput = randomSpaces() + obfuscatedInput + randomSpaces(); Assert.AreEqual(correctOutput, SettingsAndHelperFunctions.Strip(obfuscatedInput)); @@ -66,7 +59,7 @@ namespace Advanced_Software_Engineering_Tests { [TestMethod] public void ConvertToDouble_Random1() { - for(int i = 0; i < 100000; i++) { + for (int i = 0; i < 100000; i++) { double expected = rand.NextDouble(); string input = expected.ToString(); @@ -80,7 +73,7 @@ namespace Advanced_Software_Engineering_Tests { string[] expected = (new List { "a", "test", "t", "asdf" }).ToArray(); int i = 0; - foreach(string s in SettingsAndHelperFunctions.StripStringArray(input)) { + foreach (string s in SettingsAndHelperFunctions.StripStringArray(input)) { Assert.AreEqual(expected[i++], s); } } @@ -95,5 +88,72 @@ namespace Advanced_Software_Engineering_Tests { Assert.AreEqual(expected[i++], s); } } + + [TestMethod] + public void CommandAndParameterParser_Manual1() { + Dictionary commands = SettingsAndHelperFunctions.CommandAndParameterParser("moveto 200, 200"); + Assert.AreEqual("moveto", commands["command"][0]); + Assert.AreEqual("200", commands["parameters"][0]); + Assert.AreEqual("200", commands["parameters"][1]); + } + + [TestMethod] + public void CommandAndParameterParser_Manual2() { + Dictionary commands = SettingsAndHelperFunctions.CommandAndParameterParser("clear"); + Assert.AreEqual("clear", commands["command"][0]); + Assert.IsFalse(commands.Keys.Contains("parameters")); + } + + [TestMethod] + public void CommandAndParameterParser_Manual3() { + Dictionary commands = SettingsAndHelperFunctions.CommandAndParameterParser(""); + Assert.IsFalse(commands.Keys.Contains("command")); + Assert.IsFalse(commands.Keys.Contains("parameters")); + } + + [TestMethod] + public void CommandAndParameterParser_Manual4() { + Dictionary commands = SettingsAndHelperFunctions.CommandAndParameterParser(" genericCommand 2, 3,4 5"); + + Assert.AreEqual("genericCommand", commands["command"][0]); + Assert.AreEqual("2", commands["parameters"][0]); + Assert.AreEqual("3", commands["parameters"][1]); + Assert.AreEqual("4 5", commands["parameters"][2]); + } + + string randomSpaces() { + string spaces = " "; + for (int i = 0; i < 50; i++) spaces += " "; + return spaces; + } + + [TestMethod] + public void CommandAndParameterParser_Random1() { + + string[] randomCommands = {"test", "moveto", "lineto", "markiplier", "clear", "shape", "etc" }; + + for(int test = 0; test < 10000; test++) { + string command = randomCommands[rand.Next(randomCommands.Length)]; + string input = randomSpaces() + command; + + List parameters = new List(); + for(int parameterI = 0; parameterI < rand.Next(99) + 1; parameterI++) { + string parameter = (rand.NextDouble() * rand.Next(-1000, 1000)).ToString(); + parameters.Add(parameter); + input += randomSpaces() + parameter + randomSpaces() + "," + randomSpaces(); + } + + Dictionary commands = SettingsAndHelperFunctions.CommandAndParameterParser(input); + + Assert.AreEqual(command, commands["command"][0]); + + int i = 0; + foreach(string expected in parameters) { + Assert.AreEqual(expected, commands["parameters"][i++]); + } + + } + + } } } diff --git a/Advanced Software Engineering/Advanced Software Engineering/SettingsAndHelperFunctions.cs b/Advanced Software Engineering/Advanced Software Engineering/SettingsAndHelperFunctions.cs index 602dcce..1896128 100644 --- a/Advanced Software Engineering/Advanced Software Engineering/SettingsAndHelperFunctions.cs +++ b/Advanced Software Engineering/Advanced Software Engineering/SettingsAndHelperFunctions.cs @@ -98,8 +98,12 @@ namespace Advanced_Software_Engineering { public static Dictionary CommandAndParameterParser(string text) { Dictionary commandAndParameters = new Dictionary(); + //prepare the parameters by stripping them of spaces + string prepParameters = Strip(text); + if (prepParameters.Length == 0) return commandAndParameters; + //split the command from the parameters - string[] parameters = Strip(text).Split(new char[] { " "[0] }, 2); + string[] parameters = prepParameters.Split(new char[] { " "[0] }, 2); //There are parameters, make the command if (parameters.Length > 0) {