public void Invalid_builds_throw(string input)
 {
     Assert.Throws <ArgumentException>(() =>
     {
         var plateau = new MarsRoverBuilder(input).Build();
     });
 }
        public void Plateau_height_is_set_up_correctly_when_building(string input, int expectedHeight)
        {
            // act
            var plateau = new MarsRoverBuilder(input).Build();

            // assert
            Assert.AreEqual(expectedHeight, plateau.Height);
        }
        public void Plateau_width_is_set_up_correctly_when_building(string input, int expectedWidth)
        {
            // act
            var plateau = new MarsRoverBuilder(input).Build();

            // assert
            Assert.AreEqual(expectedWidth, plateau.Width);
        }
        public void Rover_initial_positions_are_set_up_on_build()
        {
            // arrange
            var input = "5 5\n\n1 2 N\n\nLMLMLMLMM\n\n3 3 E\n\nMMRMMRMRRM";
            var firstRoverPosition = new Position(1, 2, Position.Facing.N);

            // act
            var plateau = new MarsRoverBuilder(input).Build();

            // assert
            Assert.AreEqual(firstRoverPosition, plateau.Rovers.First().Position);
        }
示例#5
0
        public void Simulate_returns_false_when_no_steps_remain()
        {
            // arrange
            var input   = "5 5\n\n1 2 N\n\nLMLMLMLMM\n\n3 3 E\n\nMMRMMRMRRM";
            var plateau = new MarsRoverBuilder(input).Build();

            plateau.Simulate(9);

            // act
            var simulationComplete = plateau.Simulate(10);

            // assert
            Assert.IsTrue(simulationComplete);
        }
        public void Multiple_rovers_will_have_their_positions_set_on_build()
        {
            // arrange
            var input = "5 5\n\n1 2 N\n\nLMLMLMLMM\n\n3 3 E\n\nMMRMMRMRRM\n\n1 5 S\n\nMMRMMRMRRM";
            var secondRoverPosition = new Position(3, 3, Position.Facing.E);
            var thirdRoverPosition  = new Position(1, 5, Position.Facing.S);
            var positions           = new List <Position>()
            {
                secondRoverPosition, thirdRoverPosition
            };

            // act
            var plateau = new MarsRoverBuilder(input).Build();

            // assert
            CollectionAssert.AreEqual(plateau.Rovers.Skip(1).Select(r => r.Position).ToList(), positions);
        }
示例#7
0
        public void Simulate_runs_1_step_when_stipulated()
        {
            // arrange
            var input   = "5 5\n\n1 2 N\n\nLMLMLMLMM\n\n3 3 E\n\nMMRMMRMRRM";
            var plateau = new MarsRoverBuilder(input).Build();

            // act
            plateau.Simulate(1);

            // assert
            var expectedPositions = new List <Position>()
            {
                new Position(1, 2, Position.Facing.W),
                new Position(3, 3, Position.Facing.E)
            };

            CollectionAssert.AreEqual(expectedPositions, plateau.Rovers.Select(r => r.Position));
        }
示例#8
0
        public void Simulate_runs_all_rover_commands()
        {
            // arrange
            var input   = "5 5\n\n1 2 N\n\nLMLMLMLMM\n\n3 3 E\n\nMMRMMRMRRM";
            var plateau = new MarsRoverBuilder(input).Build();

            // act
            plateau.Simulate();

            // assert
            var expectedPositions = new List <Position>()
            {
                new Position(1, 3, Position.Facing.N),
                new Position(5, 1, Position.Facing.E)
            };

            CollectionAssert.AreEqual(expectedPositions, plateau.Rovers.Select(r => r.Position));
        }
示例#9
0
        public void Simulate_handles_overshooting_of_simulation_gracefully()
        {
            // arrange
            var input   = "5 5\n\n1 2 N\n\nLMLMLMLMM\n\n3 3 E\n\nMMRMMRMRRM";
            var plateau = new MarsRoverBuilder(input).Build();

            plateau.Simulate(9);

            // act
            plateau.Simulate(11);

            // assert
            var expectedPositions = new List <Position>()
            {
                new Position(1, 3, Position.Facing.N),
                new Position(5, 1, Position.Facing.E)
            };

            CollectionAssert.AreEqual(expectedPositions, plateau.Rovers.Select(r => r.Position));
        }
示例#10
0
        public void Simulate_finishes_simulation_when_all_steps_have_been_ran_in_sequence()
        {
            // arrange
            var input   = "5 5\n\n1 2 N\n\nLMLMLMLMM\n\n3 3 E\n\nMMRMMRMRRM";
            var plateau = new MarsRoverBuilder(input).Build();

            plateau.Simulate(9);

            // act
            plateau.Simulate(10);

            // assert
            var expectedPositions = new List <Position>()
            {
                new Position(1, 3, Position.Facing.N),
                new Position(5, 1, Position.Facing.E)
            };

            CollectionAssert.AreEqual(expectedPositions, plateau.Rovers.Select(r => r.Position));
        }
        public void Rovers_build_with_commands_in_the_same_order_as_the_input()
        {
            // arrange
            var input = "5 5\n\n1 2 N\n\nLMRM";
            var expectedCommandTypes = new List <Type>()
            {
                typeof(TurnLeftCommand),
                typeof(MoveCommand),
                typeof(TurnRightCommand),
                typeof(MoveCommand)
            };

            // act
            var plateau = new MarsRoverBuilder(input).Build();

            // assert
            var actualCommandTypes = plateau.Rovers.First().Commands.Select(c => c.GetType()).ToList();

            CollectionAssert.AreEqual(expectedCommandTypes, actualCommandTypes);
        }