public void TestParser(string instructions, int expectedCount) { var singleInstructionMock = new Mock <ISingleInstructionParser>(MockBehavior.Strict); var testInstruction = new RelativeInstruction( direction: new RelativeDirection(90), travelDistance: 1); singleInstructionMock.Setup(p => p.ParseSingleInstruction(It.IsNotNull <string>())). Returns(testInstruction); var fullParser = new RelativeInstructionParser( singleInstructionParser: singleInstructionMock.Object); var result = fullParser.ParseRawInstructions(instructions); // Make sure result is not null. Assert.NotNull(result); // Make sure the number of things we expected came back. Assert.Equal(expectedCount, result.Count); // Make sure the parser mock got called as many times as we expect. singleInstructionMock.Verify(p => p.ParseSingleInstruction(It.IsNotNull <string>()), Times.Exactly(expectedCount)); // Make sure the items returned by the single parser // get included in the final output. foreach (var item in result) { Assert.Equal(testInstruction, item); } }
public void ConstructorArgumentsGetAssigned() { var direction = new RelativeDirection(0); const double travelDistance = 38.3; var instruction = new RelativeInstruction( direction: direction, travelDistance: travelDistance); Assert.Equal(direction, instruction.Direction); Assert.Equal(travelDistance, instruction.TravelDistance); }
public void DefaultSimulateResults() { var sim = new InstructionSimulator(); var leftOne = new RelativeInstruction( direction: new RelativeDirection(90), travelDistance: 1); // Three left turns + 1 step should get us at 0, -1 var simList = new List <RelativeInstruction> { leftOne, leftOne, leftOne }; var result = sim.Simulate(simList); // These are almost integration-worthy tests. But they are still useful. Assert.Equal(result.StartPosition, new GridCoordinate(0, 0)); Assert.Equal(result.EndPosition, new GridCoordinate(0, -1)); }