/**
  * Question creation test 
  * @param
  * @return
  */
 public function testCreation()
 {
     global $ilDB;
     include_once './Modules/TestQuestionPool/classes/class.assMultipleChoice.php';
     $insert_id = ilassMultipleChoiceTest::createSampleQuestion();
     $this->assertGreaterThan(0, $insert_id);
     if ($insert_id > 0) {
         $mc = new assMultipleChoice();
         $mc->loadFromDb($insert_id);
         $this->assertEquals($mc->getPoints(), 2);
         $this->assertEquals($mc->getTitle(), "unit test multiple choice question");
         $this->assertEquals($mc->getComment(), "unit test multiple choice question comment");
         $this->assertEquals($mc->getAuthor(), "Helmut Schottmüller");
         $this->assertEquals($mc->getQuestion(), "<p><strong>unit tests</strong> are...</p>");
         $this->assertEquals(count($mc->getAnswers()), 4);
         $result = $mc->delete($insert_id);
         $this->assertEquals($result, true);
     }
 }
 /**
  * Calculate points
  *
  * This function calculates the points for a given answer.
  * Better would be to re-use from T&A here in the future.
  * When this code has been written this has not been possible yet.
  *
  * @param
  * @return
  */
 static function calculatePoints($a_type, $a_id, $a_choice)
 {
     global $ilLog;
     switch ($a_type) {
         case "assSingleChoice":
             include_once "./Modules/TestQuestionPool/classes/class.assSingleChoice.php";
             $q = new assSingleChoice();
             $q->loadFromDb($a_id);
             $points = 0;
             foreach ($q->getAnswers() as $key => $answer) {
                 if (isset($a_choice[0]) && $key == $a_choice[0]) {
                     $points += $answer->getPoints();
                 }
             }
             break;
         case "assMultipleChoice":
             include_once "./Modules/TestQuestionPool/classes/class.assMultipleChoice.php";
             $q = new assMultipleChoice();
             $q->loadFromDb($a_id);
             $points = 0;
             foreach ($q->getAnswers() as $key => $answer) {
                 if (is_array($a_choice) && in_array($key, $a_choice)) {
                     $points += $answer->getPoints();
                 } else {
                     $points += $answer->getPointsUnchecked();
                 }
             }
             break;
         case "assClozeTest":
             include_once "./Modules/TestQuestionPool/classes/class.assClozeTest.php";
             $q = new assClozeTest();
             $q->loadFromDb($a_id);
             $points = 0;
             foreach ($q->getGaps() as $id => $gap) {
                 $choice = $a_choice[$id];
                 switch ($gap->getType()) {
                     case CLOZE_TEXT:
                         $gappoints = 0;
                         for ($order = 0; $order < $gap->getItemCount(); $order++) {
                             $answer = $gap->getItem($order);
                             $gotpoints = $q->getTextgapPoints($answer->getAnswertext(), $choice, $answer->getPoints());
                             if ($gotpoints > $gappoints) {
                                 $gappoints = $gotpoints;
                             }
                         }
                         $points += $gappoints;
                         //$ilLog->write("ct: ".$gappoints);
                         break;
                     case CLOZE_NUMERIC:
                         $gappoints = 0;
                         for ($order = 0; $order < $gap->getItemCount(); $order++) {
                             $answer = $gap->getItem($order);
                             $gotpoints = $q->getNumericgapPoints($answer->getAnswertext(), $choice, $answer->getPoints(), $answer->getLowerBound(), $answer->getUpperBound());
                             if ($gotpoints > $gappoints) {
                                 $gappoints = $gotpoints;
                             }
                         }
                         $points += $gappoints;
                         //$ilLog->write("cn: ".$gappoints);
                         break;
                     case CLOZE_SELECT:
                         for ($order = 0; $order < $gap->getItemCount(); $order++) {
                             $answer = $gap->getItem($order);
                             if ($choice == $answer->getOrder()) {
                                 $answerpoints = $answer->getPoints();
                                 $points += $answerpoints;
                                 //$ilLog->write("cs: ".$answerpoints);
                             }
                         }
                         break;
                 }
             }
             break;
         case "assMatchingQuestion":
             include_once "./Modules/TestQuestionPool/classes/class.assMatchingQuestion.php";
             $q = new assMatchingQuestion();
             $q->loadFromDb($a_id);
             $points = 0;
             for ($i = 0; $i < $q->getMatchingPairCount(); $i++) {
                 $pair = $q->getMatchingPair($i);
                 if (is_array($a_choice) && in_array($pair->definition->identifier . "-" . $pair->term->identifier, $a_choice)) {
                     $points += $pair->points;
                 }
             }
             break;
         case "assOrderingQuestion":
             include_once "./Modules/TestQuestionPool/classes/class.assOrderingQuestion.php";
             $q = new assOrderingQuestion();
             $q->loadFromDb($a_id);
             $points = 0;
             $cnt = 1;
             $right = true;
             foreach ($q->getAnswers() as $answer) {
                 if ($a_choice[$cnt - 1] != $cnt) {
                     $right = false;
                 }
                 $cnt++;
             }
             if ($right) {
                 $points = $q->getPoints();
             }
             break;
         case "assImagemapQuestion":
             include_once "./Modules/TestQuestionPool/classes/class.assImagemapQuestion.php";
             $q = new assImagemapQuestion();
             $q->loadFromDb($a_id);
             $points = 0;
             foreach ($q->getAnswers() as $key => $answer) {
                 if (is_array($a_choice) && in_array($key, $a_choice)) {
                     $points += $answer->getPoints();
                 }
             }
             break;
     }
     if ($points < 0) {
         $points = 0;
     }
     return (int) $points;
 }