/// <summary> /// Method for next robot action in Queue /// </summary> /// <returns>true - if all is alright, false - if robot lost</returns> public bool ExecuteActions() { while (true) { // break on empty queue if (actionsQueue.Count == 0) { return(true); } //var nextAction = actionsQueue.Dequeue(); var nextAction = ActionStrategyFabric.GetAction(actionsQueue.Dequeue()); if (nextAction == null) { // log or throw exception return(false); } if (!nextAction.DoAction(currentField, this)) { // robot will be lost so just stop further execution return(false); } continue; } }
public void TurnLeftAction() { // Arrange var fieldMock = new Mock <IField>(); var robot = new Robot(fieldMock.Object, 0, 0, "N", ""); var turnRightAction = ActionStrategyFabric.GetAction('L'); // Act turnRightAction.DoAction(fieldMock.Object, robot); // Assert Assert.Equal(RobotDirections.W, robot.CurrentDirection); }
public void Initialization() { // Arrange var nullAction = ActionStrategyFabric.GetAction('_'); var forwardAction = ActionStrategyFabric.GetAction('F'); var turnLeftAction = ActionStrategyFabric.GetAction('L'); var turnRightAction = ActionStrategyFabric.GetAction('R'); // Act // Assert Assert.Null(nullAction); Assert.IsType <ForwardAction>(forwardAction); Assert.IsType <TurnLeftAction>(turnLeftAction); Assert.IsType <TurnRightAction>(turnRightAction); }
public void ForwardAction() { // Arrange var fieldMock = new Mock <IField>(); fieldMock.Setup(f => f.IsMovementAvailable(It.IsAny <int>(), It.IsAny <int>(), It.IsAny <RobotDirections>())).Returns(true); var robot = new Robot(fieldMock.Object, 0, 0, "N", ""); var robot1 = new Robot(fieldMock.Object, 0, 0, "E", ""); var forwardAction = ActionStrategyFabric.GetAction('F'); // Act forwardAction.DoAction(fieldMock.Object, robot); forwardAction.DoAction(fieldMock.Object, robot1); // Assert // first robot moves North(Y axis) Assert.Equal(0, robot.CurrentX); Assert.Equal(1, robot.CurrentY); // first robot moves North(X axis) Assert.Equal(1, robot1.CurrentX); Assert.Equal(0, robot1.CurrentY); }