internal static void Main(string[] args) { if (null == args || args.Length == 0 ) throw new ArgumentException("Args cannot be null or empty"); string argsWithNewLines = ParseString(args[0]); string[] argsSplit = argsWithNewLines.Split(new[] { "\n" }, StringSplitOptions.None); if (argsSplit.Length % 2 != 1) throw new ArgumentException("ArgsSplit should always be an odd number"); // If external libraries were allowed, and the requirement would benefit could refactor to make use of DI, // moving eveerying other than the container bootstrapper to annother assembly containing Application var lawn = GetLawn(argsSplit[0]); var stage = new Stage(lawn); // Ordinarilly I would ask for clarification early on regarding handling a variable number of Lawn Mowers, min max etc. // With that in mind I have implemented this aspect quite spefically to handle just the test input. // Supporting structure should make it easy extend/abstract this to cater for different business rules. var mowerInitializationTuples = GetMowerInitializationTuples(argsSplit); stage.AddLawnMower(mowerInitializationTuples[0].Item1, mowerInitializationTuples[0].Item2, mowerInitializationTuples[0].Item3, mowerInitializationTuples[0].Item4); stage.AddLawnMower(mowerInitializationTuples[1].Item1, mowerInitializationTuples[1].Item2, mowerInitializationTuples[1].Item3, mowerInitializationTuples[1].Item4); stage.RunMowers(); Console.ReadLine(); }
public void StageAddLawnMower_CalledTwice_AddsTwoLawnMowersToMowersWithMovementInstructionsAtExpectedIndex() { //Arrange string[] argsSplit = "5 5\n1 2 N\nLMLMLMLMM\n3 3 E\nMMRMMMRMRMM".Split(new[] { "\n" }, StringSplitOptions.None); var lawn = new Lawn(5, 5); var stage = new Stage(lawn); var mowerInitializationTuples = ProgramWithPublicMethods.GetMowerInitializationTuples(argsSplit); //Act stage.AddLawnMower(mowerInitializationTuples[0].Item1, mowerInitializationTuples[0].Item2, mowerInitializationTuples[0].Item3, mowerInitializationTuples[0].Item4); stage.AddLawnMower(mowerInitializationTuples[1].Item1, mowerInitializationTuples[1].Item2, mowerInitializationTuples[1].Item3, mowerInitializationTuples[1].Item4); //Assert lawnMower1 inputs Assert.AreEqual(1, stage.MowersWithMovementInstructions[0].Item1.XCord); Assert.AreEqual(2, stage.MowersWithMovementInstructions[0].Item1.YCord); Assert.AreEqual(CompassDirection.N, stage.MowersWithMovementInstructions[0].Item1.Heading); StringAssert.IsMatch("LMLMLMLMM", stage.MowersWithMovementInstructions[0].Item2); //Assert lawnMower2 inputs Assert.AreEqual(3, stage.MowersWithMovementInstructions[1].Item1.XCord); Assert.AreEqual(3, stage.MowersWithMovementInstructions[1].Item1.YCord); Assert.AreEqual(CompassDirection.E, stage.MowersWithMovementInstructions[1].Item1.Heading); StringAssert.IsMatch("MMRMMMRMRMM", stage.MowersWithMovementInstructions[1].Item2); }