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)
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)