示例#1
0
        /// <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;
            }
        }
示例#2
0
        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);
        }
示例#3
0
        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);
        }
示例#4
0
        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);
        }