187 lines
5.3 KiB
PHP
187 lines
5.3 KiB
PHP
<?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) 2019 (original work) Open Assessment Technologies SA;
|
|
*
|
|
* @author Oleksandr Zagovorychev <zagovorichev@gmail.com>
|
|
*/
|
|
|
|
namespace oat\taoQtiItem\test\unit\model;
|
|
|
|
use common_exception_Error;
|
|
use core_kernel_classes_Resource;
|
|
use Exception;
|
|
use oat\generis\test\TestCase;
|
|
use oat\tao\model\service\ServiceFileStorage;
|
|
use oat\taoQtiItem\model\QtiJsonItemCompiler;
|
|
use PHPUnit_Framework_TestResult;
|
|
use ReflectionClass;
|
|
use ReflectionException;
|
|
|
|
class QtiJsonItemCompilerTest extends TestCase
|
|
{
|
|
|
|
/**
|
|
* @return array
|
|
*/
|
|
public function xmlAttributesData()
|
|
{
|
|
return [
|
|
// simple data returns as it is
|
|
[
|
|
[
|
|
[
|
|
'data'
|
|
]
|
|
],
|
|
['data'],
|
|
],
|
|
[
|
|
[
|
|
'<p>text</p>'
|
|
],
|
|
'<p>text</p>'
|
|
],
|
|
// xml parsed
|
|
[
|
|
[
|
|
[
|
|
'core' => [
|
|
'apipAccessibility' => '<p>text</p>',
|
|
],
|
|
]
|
|
],
|
|
[
|
|
'core' => [
|
|
'apipAccessibility' => [
|
|
'text'
|
|
],
|
|
]
|
|
]
|
|
],
|
|
// empty tags left on their place
|
|
[
|
|
[
|
|
[
|
|
'core' => [
|
|
'apipAccessibility' => '<div><p>text</p><p></p><br/><a> </a></div>',
|
|
],
|
|
]
|
|
],
|
|
[
|
|
'core' => [
|
|
'apipAccessibility' => [
|
|
'p' => [
|
|
'text',
|
|
[]
|
|
],
|
|
'br' => [],
|
|
'a' => [' ']
|
|
],
|
|
]
|
|
]
|
|
]
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @return array
|
|
*/
|
|
public function xmlBadAttributesData()
|
|
{
|
|
return [
|
|
// xml validation
|
|
[
|
|
[
|
|
[
|
|
'core' => [
|
|
'apipAccessibility' => 'just a string',
|
|
]
|
|
]
|
|
],
|
|
[
|
|
'exception' => [
|
|
'class' => common_exception_Error::class,
|
|
'message' => 'Start tag expected, \'<\' not found [1]'
|
|
]
|
|
]
|
|
],
|
|
// no root element
|
|
[
|
|
[
|
|
[
|
|
'core' => [
|
|
'apipAccessibility' => '<p>text</p><p></p><br/><a> </a>',
|
|
],
|
|
]
|
|
],
|
|
[
|
|
'exception' => [
|
|
'class' => common_exception_Error::class,
|
|
'message' => 'Extra content at the end of the document [1]'
|
|
]
|
|
]
|
|
]
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @param array $data
|
|
* @return mixed|PHPUnit_Framework_TestResult
|
|
* @throws ReflectionException
|
|
*/
|
|
protected function invokeMethod($data)
|
|
{
|
|
$class = new ReflectionClass(QtiJsonItemCompiler::class);
|
|
$method = $class->getMethod('convertXmlAttributes');
|
|
$method->setAccessible(true);
|
|
/** @var core_kernel_classes_Resource $resource */
|
|
$resource = $this->createMock(core_kernel_classes_Resource::class);
|
|
/** @var ServiceFileStorage $storage */
|
|
$storage = $this->createMock(ServiceFileStorage::class);
|
|
$obj = new QtiJsonItemCompiler($resource, $storage);
|
|
return $method->invokeArgs($obj, $data);
|
|
}
|
|
|
|
/**
|
|
* @dataProvider xmlAttributesData
|
|
* @param $data
|
|
* @param $expected
|
|
* @throws ReflectionException
|
|
*/
|
|
public function testConvertXmlAttributes($data, $expected)
|
|
{
|
|
$result = $this->invokeMethod($data);
|
|
$this->assertSame($expected, $result);
|
|
}
|
|
|
|
/**
|
|
* @dataProvider xmlBadAttributesData
|
|
* @param $data
|
|
* @param $expected
|
|
*/
|
|
public function testExceptionsConvertXmlAttributes($data, $expected)
|
|
{
|
|
try {
|
|
$this->invokeMethod($data);
|
|
} catch (Exception $e) {
|
|
$this->assertSame($expected['exception']['class'], get_class($e));
|
|
$this->assertSame($expected['exception']['message'], $e->getMessage());
|
|
}
|
|
}
|
|
}
|