Exemplo n.º 1
0
 def setUp(self):
     self._test_initial_point = Point(0, 0)
     self._test_point = Point(10, 10)
     self._test_direction = 'E'
     self._test_terrain = Terrain(self._test_point)
     self._test_rover = Rover(self._test_initial_point,
                              self._test_direction, self._test_terrain)
Exemplo n.º 2
0
    def test_eq(self):
        new_point = Point(self._x_float_value, self._y_float_value)
        self.assertTrue(self._test_point == new_point)

        new_point = Point(10, 12)
        self.assertFalse(self._test_point == new_point)

        new_point = 34
        self.assertFalse(self._test_point == new_point)
Exemplo n.º 3
0
    def test_position_setter(self):
        new_value = Point(4, 3)
        self._test_rover.position = new_value
        self.assertEqual(new_value, self._test_rover.position)

        with self.assertRaises(Exception) as context:
            new_position = Point(self._test_point.x + 1, 0)
            self._test_rover.position = new_position
        self.assertTrue(
            "You realize the position (" + str(new_position.x) + " " +
            str(new_position.y) +
            ") is off the plateau right?" in str(context.exception))
Exemplo n.º 4
0
    def create_terrain_from_user_input(input_str):
        """
        Creates a terrtain based on user input

        :param input_str: Upper coordinates for the edge of the terrain
        :type input_str: str

        :returns: A terrain based on the user specifications
        :rtype: Terrain
        """

        try:
            num_list = list(map(int, input_str.split()))

            # find invalid input
            if len(num_list) != 2:
                raise Exception("You did not input 2 values. Please follow my very polite input instructions next time.")
            if not all(i > 0 for i in num_list):
                raise Exception("Part of your input was not a positive integer [positive means bigger than 0 ;-)].")

            # return a Terrain object
            return Terrain(Point(num_list[0], num_list[1]))

        except ValueError:
            raise Exception("Part of your input was not an integer. "
                            "Please see the definition for an integer here: https://en.wikipedia.org/wiki/Integer.")
Exemplo n.º 5
0
    def create_rover_from_user_input(input_str, terrain):
        """
        Creates rovers based on user input

        :param input_str: Initial rover coordinates and direction
        :type input_str: str
        :param terrain: Terrain on which the rover will move
        :type terrain: Terrain

        :returns: A rover based on the user specifications
        :rtype: Rover
        """

        try:
            input_str_list = input_str.split()

            # find invalid input
            if len(input_str_list) != 3:
                raise Exception("You did not input 3 values. Please follow my very polite input instructions next time.")
            num_list = list(map(int, input_str_list[0:2]))
            if not all(i >= 0 for i in num_list):
                raise Exception("One of your first 2 numbers was not a non-negative integer "
                                "[non-negative means bigger than or equal to 0 ;-)].")
            if not Rover.is_valid_direction(input_str_list[2]):
                raise Exception(input_str_list[2] + " is not a valid direction.")
            initial_point = Point(num_list[0], num_list[1])
            if not terrain.is_valid_move(initial_point):
                raise Exception("The initial position (" + str(initial_point.x) + ", " + str(initial_point.y) +") "
                                "of the rover is not on the plateau!")
            # return a Rover object
            return Rover(initial_point, input_str_list[2], terrain)

        except ValueError:
            raise Exception("One of your first two numbers was not an integer. "
                            "Please see the definition for an integer here: https://en.wikipedia.org/wiki/Integer.")
Exemplo n.º 6
0
    def test_move(self):
        self._test_rover.move()
        self.assertEqual(Point(1, 0), self._test_rover.position)

        self._test_rover.direction = 'N'
        self._test_rover.move()
        self.assertEqual(Point(1, 1), self._test_rover.position)

        self._test_rover.direction = 'W'
        self._test_rover.move()
        self.assertEqual(Point(0, 1), self._test_rover.position)

        self._test_rover.direction = 'S'
        self._test_rover.move()
        self.assertEqual(Point(0, 0), self._test_rover.position)

        with self.assertRaises(Exception) as context:
            self._test_rover.move()
        self.assertTrue(
            "The rover moved off the plateau and burst into flame! (You tried to move to: ("
            + str(self._test_rover._position.x) + " " +
            str(self._test_rover._position.y) + "))" in str(context.exception))
Exemplo n.º 7
0
    def test_create_terrain_from_user_input(self):
        input_string = "10 10"
        terrain = CreateRovers.create_terrain_from_user_input(input_string)
        self.assertIsNotNone(terrain)
        self.assertEqual(Terrain(Point(10, 10)), terrain)

        with self.assertRaises(Exception) as context:
            input_string = "0"
            CreateRovers.create_terrain_from_user_input(input_string)
        self.assertTrue(
            "You did not input 2 values. Please follow my very polite input instructions next time."
            in str(context.exception))

        with self.assertRaises(Exception) as context:
            input_string = "1 -2"
            CreateRovers.create_terrain_from_user_input(input_string)
        self.assertTrue(
            "Part of your input was not a positive integer [positive means bigger than 0 ;-)]"
            in str(context.exception))

        with self.assertRaises(Exception) as context:
            input_string = "0 1"
            CreateRovers.create_terrain_from_user_input(input_string)
        self.assertTrue(
            "Part of your input was not a positive integer [positive means bigger than 0 ;-)]"
            in str(context.exception))

        with self.assertRaises(Exception) as context:
            input_string = "6.344 1"
            CreateRovers.create_terrain_from_user_input(input_string)
        self.assertTrue(
            "Part of your input was not an integer. "
            "Please see the definition for an integer here: https://en.wikipedia.org/wiki/Integer"
            in str(context.exception))

        with self.assertRaises(Exception) as context:
            input_string = "3 asdfd"
            CreateRovers.create_terrain_from_user_input(input_string)
        self.assertTrue(
            "Part of your input was not an integer. "
            "Please see the definition for an integer here: https://en.wikipedia.org/wiki/Integer"
            in str(context.exception))
Exemplo n.º 8
0
    def test_create_rover_from_user_input(self):
        mock_terrain = Terrain(Point(10, 10))

        input_string = "0 0 N"
        rover = CreateRovers.create_rover_from_user_input(
            input_string, mock_terrain)
        self.assertIsNotNone(rover)
        self.assertEqual(mock_terrain, rover.terrain)
        self.assertEqual('N', rover.direction)
        self.assertEqual(Point(0, 0), rover.position)

        with self.assertRaises(Exception) as context:
            input_string = "MLRMMRL"
            CreateRovers.create_rover_from_user_input(input_string,
                                                      mock_terrain)
        self.assertTrue(
            "You did not input 3 values. Please follow my very polite input instructions next time."
            in str(context.exception))

        with self.assertRaises(Exception) as context:
            input_string = "-9 0 W"
            CreateRovers.create_rover_from_user_input(input_string,
                                                      mock_terrain)
        self.assertTrue(
            "One of your first 2 numbers was not a non-negative integer "
            "[non-negative means bigger than or equal to 0 ;-)]" in str(
                context.exception))

        with self.assertRaises(Exception) as context:
            input_string = "0 -2 W"
            CreateRovers.create_rover_from_user_input(input_string,
                                                      mock_terrain)
        self.assertTrue(
            "One of your first 2 numbers was not a non-negative integer "
            "[non-negative means bigger than or equal to 0 ;-)]" in str(
                context.exception))

        with self.assertRaises(Exception) as context:
            input_string = "0.4 6 W"
            CreateRovers.create_rover_from_user_input(input_string,
                                                      mock_terrain)
        self.assertTrue(
            "One of your first two numbers was not an integer. "
            "Please see the definition for an integer here: https://en.wikipedia.org/wiki/Integer"
            in str(context.exception))

        with self.assertRaises(Exception) as context:
            input_string = "0 dfgdf W"
            CreateRovers.create_rover_from_user_input(input_string,
                                                      mock_terrain)
        self.assertTrue(
            "One of your first two numbers was not an integer. "
            "Please see the definition for an integer here: https://en.wikipedia.org/wiki/Integer"
            in str(context.exception))

        with self.assertRaises(Exception) as context:
            input_string = "0 6 w"
            CreateRovers.create_rover_from_user_input(input_string,
                                                      mock_terrain)
        self.assertTrue(
            "w is not a valid direction." in str(context.exception))

        with self.assertRaises(Exception) as context:
            input_string = "11 6 W"
            CreateRovers.create_rover_from_user_input(input_string,
                                                      mock_terrain)
        self.assertTrue("The initial position (11, 6) of the rover "
                        "is not on the plateau!" in str(context.exception))

        with self.assertRaises(Exception) as context:
            input_string = "9 11 W"
            CreateRovers.create_rover_from_user_input(input_string,
                                                      mock_terrain)
        self.assertTrue("The initial position (9, 11) of the rover "
                        "is not on the plateau!" in str(context.exception))
Exemplo n.º 9
0
 def test_execute_command(self):
     self._test_rover.execute_command("LMRRMLMLM")
     self.assertEqual(Point(1, 1), self._test_rover.position)
     self.assertEqual('N', self._test_rover.direction)
Exemplo n.º 10
0
 def test_example_2(self):
     my_rover = Rover(Point(3, 3), 'E', Terrain(Point(5, 5)))
     my_rover.execute_command('MMRMMRMRRM')
     self.assertEqual("5 1 E", my_rover.current_position())
Exemplo n.º 11
0
 def test_example_1(self):
     my_rover = Rover(Point(1, 2), 'N', Terrain(Point(5, 5)))
     my_rover.execute_command('LMLMLMLMM')
     self.assertEqual("1 3 N", my_rover.current_position())
Exemplo n.º 12
0
 def test_terrain_setter(self):
     new_terrain = Terrain(Point(9, 9))
     self._test_rover.terrain = new_terrain
     self.assertEqual(new_terrain, self._test_rover.terrain)
Exemplo n.º 13
0
 def setUp(self):
     self._x_float_value = -8.45
     self._y_float_value = 4.65
     self._test_point = Point(self._x_float_value, self._y_float_value)