public void DevideCommand_Test() { var inputStringCommand = new[] { "5 5\r\n1 2 N\r\nLMLMLMLMM\r\n", "5 5\r\n1 2 N\r\nLMLMLMLMM\r\n1 2 N" }; var outputValues = new IComparable[] { 3, "ERROR" }; for (int i = 0; i < inputStringCommand.Length; i++) { try { DevideCommand devideCommand = new DevideCommand(inputStringCommand[i]); Assert.AreEqual(devideCommand.GetArrayListCommand.Length, outputValues[i]); } catch (DevideCommandException exceptionDevideCommand) { Assert.AreEqual(exceptionDevideCommand.Message, "Не достаточно данных для отправки"); } } }
/// <summary> /// Распредиление команд по объектам /// </summary> /// <param name="devideCommand">Класс для дробления сырого текста команд на массив для дальнейшего распределения по объектам</param> public ControlCommand(DevideCommand devideCommand) { GetFinalPositionRobot = new Dictionary<string, string>(); Area area = new Area(new Point(devideCommand.GetArrayListCommand[0])); List<RobotBody> dronsList = new List<RobotBody>(); int j = 1; int i = 0; while (i < ((devideCommand.GetArrayListCommand.Length - 1) / 2)) { Regex regex = new Regex(@"^\s*\d+\s+\d+\s+[NnEeSsWw]$"); if (regex.IsMatch(devideCommand.GetArrayListCommand[j])) { regex = new Regex(@"(\d+\s+\d+)|([NnEeSsWw])"); MatchCollection matches = regex.Matches(devideCommand.GetArrayListCommand[j]); RobotBody dron = new RobotBody( new Point(matches[0].Value), new Course(matches[1].ToString()) ); j++; dron.Run(new Command(devideCommand.GetArrayListCommand[j]), area); dronsList.Add(dron); j++; i++; GetFinalPositionRobot.Add("Робот № " + i, String.Format("{0} {1} {2}\r\n", dron.Point.X, dron.Point.Y, dron.Course.Direction)); } else { CommandControlException ex = new CommandControlException("Строка не корректна."); ex.Data.Add("Возможная ошибка в строке", devideCommand.GetArrayListCommand[j]); throw ex; } } }