예제 #1
0
        public void TestSimulateWithNoErrors(string input, Point[] expectedCoordinates, char[] expectedDirections, bool hasError)
        {
            SetUpLogging();
            var parser  = new Parser(Log.Logger);
            var plateau = new Plateau(parser);
            var factory = new MovableFactory(plateau, parser, Log.Logger);
            var mars    = new MarsSimulator(plateau, parser, factory, Log.Logger).Init(input);

            mars.Simulate();
            for (var i = 0; i < expectedCoordinates.Length; i++)
            {
                var movable = mars.Movables.FirstOrDefault(p => p.Id == i + 1);
                Assert.IsFalse(mars.AreaToExplore.IsPositionOpen(expectedCoordinates[i]), "Rover " + (i + 1) + " in wrong position");
                Assert.AreEqual(expectedDirections[i], movable.Direction, "Rover " + (i + 1) + " facing wrong direction");
            }
        }
예제 #2
0
        public void TestSimulateContingencyDeploymentSuccessOnRover2(string input)
        {
            var loggerMock = new Mock <ILogger>();

            loggerMock.Setup(p => p.Warning(It.IsAny <string>()));

            var parser  = new Parser(loggerMock.Object);
            var plateau = new Plateau(parser);
            var factory = new MovableFactory(plateau, parser, loggerMock.Object);
            var mars    = new MarsSimulator(plateau, parser, factory, loggerMock.Object).Init(input);

            mars.Simulate();

            Assert.AreEqual(2, plateau.Grid[4][0].Id);
            loggerMock.Verify(p => p.Warning <Point>(It.IsAny <string>(), It.IsAny <Point>())); //bad deploy, aborted movement cmd
        }
예제 #3
0
        public void TestSimulateContingencyDeploymentErrorOnRover2(string input)
        {
            var loggerMock = new Mock <ILogger>();

            loggerMock.Setup(p => p.Error(It.IsAny <string>()));

            var parser  = new Parser(loggerMock.Object);
            var plateau = new Plateau(parser);
            var factory = new MovableFactory(plateau, parser, loggerMock.Object);
            var mars    = new MarsSimulator(plateau, parser, factory, loggerMock.Object).Init(input);

            mars.Simulate();

            Assert.AreEqual(1, plateau.Grid[4][0].Id);
            Assert.AreNotEqual(2, plateau.Grid[4][0].Id);
            Assert.AreEqual(3, plateau.Grid[4][1].Id);
            loggerMock.Verify(p => p.Error(It.IsAny <string>()), Times.Exactly(2)); //bad deploy, aborted movement cmd
        }
예제 #4
0
        public void TestSimulateInvalidMovementCommandErrorHandled(string input)
        {
            var loggerMock = new Mock <ILogger>();

            loggerMock.Setup(p => p.Error(It.IsAny <string>()));

            var parser  = new Parser(loggerMock.Object);
            var plateau = new Plateau(parser);
            var factory = new MovableFactory(plateau, parser, loggerMock.Object);
            var mars    = new MarsSimulator(plateau, parser, factory, loggerMock.Object).Init(input);

            mars.Simulate();

            var movable = mars.AreaToExplore.Grid[4][0];

            Assert.IsNotNull(movable);
            Assert.AreEqual('E', movable.Direction);
            loggerMock.Verify(p => p.Error(It.IsAny <string>()), Times.Exactly(1));
        }