Ejemplo n.º 1
0
class TestMovementExecutor(object):

    SAMPLE_SPEED = 20
    SAMPLE_ANGLE = 45
    SAMPLE_EXCESSIVE_SPEED = 500
    SAMPLE_DISTANCE = Vector2(45, 50)
    SAMPLE_EXCESSIVE_DISTANCE = Vector2(500, 500)
    
    @mock.patch('drivers.microcontroller_driver.MicrocontrollerDriver.MicrocontrollerDriver', autospec = False)
    def setup(self, microcontroller_driver_mock):
        self._microcontroller_driver_mock_instance = microcontroller_driver_mock.return_value
        self._microcontroller_driver_mock_instance.get_last_command_minimal_progression.side_effect = [0, 50, 100]
        self._movement_executor = MovementExecutor(self._microcontroller_driver_mock_instance)

    def test_when_stopping_movement_then_movenent_is_stopped(self):
        self._movement_executor.stop_movement()
        self._microcontroller_driver_mock_instance.kill_all_motors.assert_called_with()

    def test_given_forward_movement_speed_when_moving_then_driver_is_called_with_movement(self):
        self._movement_executor.move(MovementType.MOVE_FORWARD, self.SAMPLE_SPEED)
        self._microcontroller_driver_mock_instance.move_forward.assert_called_with(self.SAMPLE_SPEED)

    def test_given_backward_movement_speed_when_moving_then_driver_is_called_with_movement(self):
        self._movement_executor.move(MovementType.MOVE_BACKWARD, self.SAMPLE_SPEED)
        self._microcontroller_driver_mock_instance.move_backward.assert_called_with(self.SAMPLE_SPEED)

    def test_given_left_movement_speed_when_moving_then_driver_is_called_with_movement(self):
        self._movement_executor.move(MovementType.MOVE_LEFT, self.SAMPLE_SPEED)
        self._microcontroller_driver_mock_instance.move_left.assert_called_with(self.SAMPLE_SPEED)

    def test_given_right_movement_speed_when_moving_then_driver_is_called_with_movement(self):
        self._movement_executor.move(MovementType.MOVE_RIGHT, self.SAMPLE_SPEED)
        self._microcontroller_driver_mock_instance.move_right.assert_called_with(self.SAMPLE_SPEED)

    def test_given_left_rotate_speed_when_moving_then_driver_is_called_with_movement(self):
        self._movement_executor.move(MovementType.ROTATE_LEFT, self.SAMPLE_SPEED)
        self._microcontroller_driver_mock_instance.rotate_to_the_left.assert_called_with(self.SAMPLE_SPEED)

    def test_given_right_rotate_speed_when_moving_then_driver_is_called_with_movement(self):
        self._movement_executor.move(MovementType.ROTATE_RIGHT, self.SAMPLE_SPEED)
        self._microcontroller_driver_mock_instance.rotate_to_the_right.assert_called_with(self.SAMPLE_SPEED)

    @raises(InvalidOperationError)
    def test_given_excessive_movement_speed_when_moving_then_error_is_raised(self):
        self._movement_executor.move(MovementType.MOVE_LEFT, self.SAMPLE_EXCESSIVE_SPEED)

    def test_given_rotation_angle_when_rotating_then_driver_is_called_with_rotation(self):
        self._movement_executor.rotate(self.SAMPLE_ANGLE, self.SAMPLE_SPEED)
        self._microcontroller_driver_mock_instance.rotate.assert_called_with(self.SAMPLE_ANGLE, self.SAMPLE_SPEED)

    def test_given_distance_when_moving_then_driver_is_called_with_movement(self):
        self._movement_executor.move_to(self.SAMPLE_DISTANCE, self.SAMPLE_SPEED)
        self._microcontroller_driver_mock_instance.move_to.assert_called_with(self.SAMPLE_DISTANCE.x, self.SAMPLE_DISTANCE.y, self.SAMPLE_SPEED)

    @raises(InvalidOperationError)
    def test_given_excessive_movement_distance_when_moving_then_error_is_raised(self):
        self._movement_executor.move_to(self.SAMPLE_EXCESSIVE_DISTANCE)
Ejemplo n.º 2
0
 def setup(self, microcontroller_driver_mock):
     self._microcontroller_driver_mock_instance = microcontroller_driver_mock.return_value
     self._microcontroller_driver_mock_instance.get_last_command_minimal_progression.side_effect = [0, 50, 100]
     self._movement_executor = MovementExecutor(self._microcontroller_driver_mock_instance)