コード例 #1
0
 /**
  * @dataProvider sequencedIdentifiersProvider
  * 
  * @param string $identifier
  * @param string $expectedPrefix
  * @param string $expectedSequence
  * @param string $expectedVariableName
  */
 public function testSequencedIdentifiers($identifier, $expectedPrefix, $expectedSequence, $expectedVariableName)
 {
     $v = new VariableIdentifier($identifier);
     $this->assertEquals($identifier, $v->getIdentifier());
     $this->assertTrue($v->hasPrefix());
     $this->assertTrue($v->hasSequenceNumber());
     $this->assertEquals($expectedPrefix, $v->getPrefix());
     $this->assertEquals($expectedVariableName, $v->getVariableName());
     $this->assertEquals($expectedSequence, $v->getSequenceNumber());
 }
コード例 #2
0
 /**
  * Get the item sessions held by the test session by item reference $identifier.
  * 
  * @param string $identifier An item reference $identifier e.g. Q04. Prefixed or sequenced identifiers e.g. Q04.1.X are considered to be malformed.
  * @return AssessmentItemSessionCollection|false A collection of AssessmentItemSession objects or false if no item session could be found for $identifier.
  * @throws InvalidArgumentException If the given $identifier is malformed.
  */
 public function getAssessmentItemSessions($identifier)
 {
     try {
         $v = new VariableIdentifier($identifier);
         if ($v->hasPrefix() === true || $v->hasSequenceNumber() === true) {
             $msg = "'{$identifier}' is not a valid item reference identifier.";
             throw new InvalidArgumentException($msg, 0);
         }
         $itemRefs = $this->getAssessmentItemRefs();
         if (isset($itemRefs[$identifier]) === false) {
             return false;
         }
         try {
             return $this->getAssessmentItemSessionStore()->getAssessmentItemSessions($itemRefs[$identifier]);
         } catch (OutOfBoundsException $e) {
             return false;
         }
     } catch (InvalidArgumentException $e) {
         $msg = "'{$identifier}' is not a valid item reference identifier.";
         throw new InvalidArgumentException($msg, 0, $e);
     }
 }
コード例 #3
0
 /**
  * Set the value of a variable with identifier $offset.
  *
  * @throws \OutOfRangeException If $offset is not a string or an invalid variable identifier.
  * @throws \OutOfBoundsException If the variable with identifier $offset cannot be found.
  */
 public function offsetSet($offset, $value)
 {
     if (gettype($offset) !== 'string') {
         $msg = "An AssessmentTestSession object must be addressed by string.";
         throw new OutOfRangeException($msg);
     }
     try {
         $v = new VariableIdentifier($offset);
         if ($v->hasPrefix() === false) {
             // global scope request.
             $data =& $this->getDataPlaceHolder();
             $varName = $v->getVariableName();
             if (isset($data[$varName]) === false) {
                 $msg = "The variable '{$varName}' to be set does not exist in the current context.";
                 throw new OutOfBoundsException($msg);
             }
             $data[$offset]->setValue($value);
             return;
         } else {
             // prefix given.
             // - prefix targets an item ?
             $store = $this->getAssessmentItemSessionStore();
             $items = $this->getAssessmentItemRefs();
             $sequence = $v->hasSequenceNumber() === true ? $v->getSequenceNumber() - 1 : 0;
             $prefix = $v->getPrefix();
             try {
                 if (isset($items[$prefix]) && ($session = $this->getItemSession($items[$prefix], $sequence)) !== false) {
                     $session[$v->getVariableName()] = $value;
                     return;
                 }
             } catch (OutOfBoundsException $e) {
                 // The session could be retrieved, but no such variable into it.
             }
             $msg = "The variable '" . $v->__toString() . "' does not exist in the current context.";
             throw new OutOfBoundsException($msg);
         }
     } catch (InvalidArgumentException $e) {
         // Invalid variable identifier.
         $msg = "AssessmentTestSession object addressed with an invalid identifier '{$offset}'.";
         throw new OutOfRangeException($msg, 0, $e);
     }
 }