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)
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)
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))
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.")
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.")
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))
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))
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))
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)
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())
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())
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)
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)