code: public function move(RunnerServiceContext $context, $direction, $scope, $ref)
      {
          $result = true;
  
          if ($context instanceof QtiRunnerServiceContext) {
              try {
                  $result = QtiRunnerNavigation::move($direction, $scope, $context, $ref);
                  if ($result) {
                      $this->continueInteraction($context);
                  }
              } catch (AssessmentTestSessionException $e) {
                  switch ($e->getCode()) {
                      case AssessmentTestSessionException::ASSESSMENT_TEST_DURATION_OVERFLOW:
                      case AssessmentTestSessionException::TEST_PART_DURATION_OVERFLOW:
                      case AssessmentTestSessionException::ASSESSMENT_SECTION_DURATION_OVERFLOW:
                      case AssessmentTestSessionException::ASSESSMENT_ITEM_DURATION_OVERFLOW:
                          $this->onTimeout($context, $e);
                          break;
                  }
              }
          } else {
              throw new \common_exception_InvalidArgumentType(
                  'QtiRunnerService',
                  'move',
                  0,
                  'oat\taoQtiTest\models\runner\QtiRunnerServiceContext',
                  $context
              );
          }
  
          return $result;
      }
docs: Moves the current position to the provided scoped reference.
  @param RunnerServiceContext $context
  @param $direction
  @param $scope
  @param $ref
  @return boolean
  @throws \common_Exception