/**
  * Get the time remaining to be spent by the candidate on the source of the time
  * constraint. Please note that this method will never return negative durations.
  *
  * @return Duration|boolean A Duration object or false if there is no maxTime constraint running for the source of the time constraint.
  */
 public function getMaximumRemainingTime()
 {
     if (($timeLimits = $this->getSource()->getTimeLimits()) !== null && ($maxTime = $timeLimits->getMaxTime()) !== null) {
         $remaining = clone $maxTime;
         if ($this->getApplyExtraTime() && $this->timer) {
             // take care of the already consumed extra time under the current constraint
             // and append the full remaining extra time
             // the total must correspond to the already elapsed time plus the remaining time
             $currentExtraTime = $this->timer->getRemainingExtraTime() + $this->timer->getConsumedExtraTime($this->getSource()->getIdentifier());
             $extraTime = min($this->timer->getExtraTime(), $currentExtraTime);
             $remaining->add(new QtiDuration('PT' . $extraTime . 'S'));
         }
         $remaining->sub($this->getDuration());
         return $remaining->isNegative() === true ? new QtiDuration('PT0S') : $remaining;
     } else {
         return false;
     }
 }
예제 #2
0
 /**
  * Test the QtiTimer::consumeExtraTime()
  */
 public function testConsumeExtraTime()
 {
     $timer = new QtiTimer();
     $this->assertEquals(0, $timer->getExtraTime());
     $extraTime = 77;
     $timer->setExtraTime($extraTime);
     $this->assertEquals($extraTime, $timer->getExtraTime());
     $consume = 6;
     $consumedTime = $consume;
     $timer->consumeExtraTime($consume);
     $this->assertEquals($extraTime, $timer->getExtraTime());
     $this->assertEquals($consumedTime, $timer->getConsumedExtraTime());
     $remainingTime = $extraTime - $consumedTime;
     $this->assertEquals($remainingTime, $timer->getRemainingExtraTime());
     $consume = 5;
     $consumedTime += $consume;
     $timer->consumeExtraTime($consume);
     $this->assertEquals($extraTime, $timer->getExtraTime());
     $this->assertEquals($consumedTime, $timer->getConsumedExtraTime());
     $remainingTime = $extraTime - $consumedTime;
     $this->assertEquals($remainingTime, $timer->getRemainingExtraTime());
     $tags = ['test', 'part1'];
     $consume = 2;
     $consumedTime += $consume;
     $timer->consumeExtraTime($consume, $tags);
     $this->assertEquals($extraTime, $timer->getExtraTime());
     $this->assertEquals($consumedTime, $timer->getConsumedExtraTime());
     $this->assertEquals($consume, $timer->getConsumedExtraTime($tags));
     $this->assertEquals($consume, $timer->getConsumedExtraTime($tags[0]));
     $this->assertEquals($consume, $timer->getConsumedExtraTime($tags[1]));
     $this->assertEquals(0, $timer->getConsumedExtraTime('unknown'));
     $remainingTime = $extraTime - $consumedTime;
     $this->assertEquals($remainingTime, $timer->getRemainingExtraTime());
 }