/**
  * test qti file parsing: validation and loading in a non-persistant context
  * @dataProvider QtiFileProvider
  */
 public function testParsingQti($file, $valid)
 {
     $qtiParser = new Parser($file);
     $qtiParser->validate();
     if ($valid) {
         $this->assertEquals(array(), $qtiParser->getErrors());
         $this->assertTrue($qtiParser->isValid());
         $item = $qtiParser->load();
         $this->assertInstanceOf('\\oat\\taoQtiItem\\model\\qti\\Item', $item);
     } else {
         $this->assertFalse($qtiParser->isValid());
         $this->assertTrue(count($qtiParser->getErrors()) > 0);
         $this->assertTrue(strlen($qtiParser->displayErrors()) > 0);
     }
 }
 /**
  * test qti file parsing: validation and loading in a non-persistant context
  */
 public function testFileParsingQti2p1()
 {
     //check if wrong files are not validated correctly
     foreach (glob(dirname(__FILE__) . '/samples/wrong/*.*') as $file) {
         $qtiParser = new Parser($file);
         $qtiParser->validate();
         $this->assertFalse($qtiParser->isValid());
         $this->assertTrue(count($qtiParser->getErrors()) > 0);
         $this->assertTrue(strlen($qtiParser->displayErrors()) > 0);
     }
     $files = array_merge(glob(dirname(__FILE__) . '/samples/xml/qtiv2p1/*.xml'), glob(dirname(__FILE__) . '/samples/xml/qtiv2p1/rubricBlock/*.xml'));
     //check if samples are loaded
     foreach ($files as $file) {
         $qtiParser = new Parser($file);
         $qtiParser->validate();
         if (!$qtiParser->isValid()) {
             echo $qtiParser->displayErrors();
         }
         $this->assertTrue($qtiParser->isValid());
         $item = $qtiParser->load();
         $this->assertInstanceOf('\\oat\\taoQtiItem\\model\\qti\\Item', $item);
     }
 }
 protected function createQtiItemModel($qtiFile, $validate = true)
 {
     $qtiXml = Authoring::sanitizeQtiXml($qtiFile);
     //validate the file to import
     $qtiParser = new Parser($qtiXml);
     if ($validate) {
         $basePath = common_ext_ExtensionsManager::singleton()->getExtensionById('taoQtiItem')->getDir();
         $qtiParser->validate();
         if (!$qtiParser->isValid()) {
             $failedValidation = true;
             $eStrs = array();
             foreach ($qtiParser->getErrors() as $libXmlError) {
                 $eStrs[] = __('QTI-XML error at line %1$d "%2$s".', $libXmlError['line'], str_replace('[LibXMLError] ', '', trim($libXmlError['message'])));
             }
             // Make sure there are no duplicate...
             $eStrs = array_unique($eStrs);
             // Add sub-report.
             throw new ValidationException($qtiFile, $eStrs);
         }
     }
     $qtiItem = $qtiParser->load();
     return $qtiItem;
 }
 protected function createQtiItemModel($qtiFile, $validate = true)
 {
     $qtiXml = Authoring::sanitizeQtiXml($qtiFile);
     //validate the file to import
     $qtiParser = new Parser($qtiXml);
     if ($validate) {
         $qtiParser->validate();
         if (!$qtiParser->isValid()) {
             $eStrs = array();
             foreach ($qtiParser->getErrors() as $libXmlError) {
                 $eStrs[] = __('QTI-XML error at line %1$d "%2$s".', $libXmlError['line'], str_replace('[LibXMLError] ', '', trim($libXmlError['message'])));
             }
             // Make sure there are no duplicate...
             $eStrs = array_unique($eStrs);
             // Add sub-report.
             throw new ValidationException($qtiFile, $eStrs);
         }
     }
     $qtiItem = $qtiParser->load();
     if (!$qtiItem && count($qtiParser->getErrors())) {
         $errors = [];
         foreach ($qtiParser->getErrors() as $error) {
             $errors[] = $error['message'];
         }
         throw new ValidationException($qtiFile, $errors);
     }
     return $qtiItem;
 }