tao-test/app/taoQtiItem/test/integration/QtiPackageParsingTest.php

115 lines
3.7 KiB
PHP
Raw Permalink Normal View History

2022-08-29 20:14:13 +02:00
<?php
/**
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; under version 2
* of the License (non-upgradable).
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* Copyright (c) 2013 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);
*
*
*/
namespace oat\taoQtiItem\test\integration;
use \common_ext_ExtensionsManager;
use oat\tao\test\TaoPhpUnitTestRunner;
use oat\taoQtiItem\model\qti\Service;
use oat\taoQtiItem\model\qti\PackageParser;
use oat\taoQtiItem\model\qti\ManifestParser;
include_once dirname(__FILE__) . '/../../includes/raw_start.php';
/**
*
* @author Bertrand Chevrier, <taosupport@tudor.lu>
* @package taoQTI
*/
class QtiPackageParsingTest extends TaoPhpUnitTestRunner
{
protected $qtiService;
/**
* tests initialization
*/
public function setUp(): void
{
TaoPhpUnitTestRunner::initTest();
$this->qtiService = Service::singleton();
}
/**
* test qti file parsing: validation and loading in a non-persistant context
*/
public function testFileParsing()
{
//check if wrong packages are not validated correctly
foreach (glob(dirname(__FILE__) . '/samples/parser/wrong/*.zip') as $file) {
$qtiParser = new PackageParser($file);
$qtiParser->validate();
$this->assertFalse($qtiParser->isValid(), 'failed with: ' . $file);
$this->assertTrue(count($qtiParser->getErrors()) > 0);
$this->assertTrue(strlen($qtiParser->displayErrors()) > 0);
}
//check if package samples are valid
foreach (glob(dirname(__FILE__) . '/samples/package/QTI/*.zip') as $file) {
$qtiParser = new PackageParser($file);
$qtiParser->validate();
if (!$qtiParser->isValid()) {
echo $qtiParser->displayErrors();
}
$this->assertTrue($qtiParser->isValid());
}
//check if wrong manifest files are not validated correctly
foreach (glob(dirname(__FILE__) . '/samples/package/wrong/*.xml') as $file) {
$qtiParser = new ManifestParser($file);
$qtiParser->validate();
$this->assertFalse($qtiParser->isValid());
$this->assertTrue(count($qtiParser->getErrors()) > 0);
$this->assertTrue(strlen($qtiParser->displayErrors()) > 0);
}
//check if manifest samples are valid
$basePath = common_ext_ExtensionsManager::singleton()->getExtensionById('taoQtiItem')->getDir();
foreach (glob(dirname(__FILE__) . '/samples/package/*.xml') as $file) {
$qtiParser = new ManifestParser($file);
$schema = '';
$fileContent = file_get_contents($file);
if (strpos($fileContent, 'xmlns="http://www.imsglobal.org/xsd/apip/apipv1p0/imscp_v1p1"')) {
$schema = $basePath . 'model/qti/data/apipv1p0/Core_Level/Package/apipv1p0_imscpv1p2_v1p0.xsd';
}
$qtiParser->validate($schema);
if (!$qtiParser->isValid()) {
echo $qtiParser->displayErrors();
}
$this->assertTrue($qtiParser->isValid());
}
}
}