199 lines
12 KiB
PHP
199 lines
12 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) 2014 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);
|
||
|
*
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
use PHPUnit\Framework\TestCase;
|
||
|
use qtism\runtime\common\Variable;
|
||
|
use qtism\runtime\common\ResponseVariable;
|
||
|
use qtism\runtime\common\OutcomeVariable;
|
||
|
use qtism\runtime\common\MultipleContainer;
|
||
|
use qtism\runtime\common\OrderedContainer;
|
||
|
use qtism\runtime\common\RecordContainer;
|
||
|
use qtism\data\IAssessmentItem;
|
||
|
use qtism\data\AssessmentItem;
|
||
|
use qtism\data\state\OutcomeDeclarationCollection;
|
||
|
use qtism\data\state\OutcomeDeclaration;
|
||
|
use qtism\data\state\ResponseDeclarationCollection;
|
||
|
use qtism\data\state\ResponseDeclaration;
|
||
|
use qtism\common\enums\BaseType;
|
||
|
use qtism\common\enums\Cardinality;
|
||
|
use qtism\common\datatypes\QtiFloat;
|
||
|
use qtism\common\datatypes\QtiIdentifier;
|
||
|
use qtism\common\datatypes\QtiInteger;
|
||
|
use qtism\common\datatypes\QtiBoolean;
|
||
|
use qtism\common\datatypes\QtiString;
|
||
|
use qtism\common\datatypes\QtiPoint;
|
||
|
use qtism\common\datatypes\QtiPair;
|
||
|
use qtism\common\datatypes\QtiDirectedPair;
|
||
|
use qtism\common\datatypes\QtiDuration;
|
||
|
use qtism\common\datatypes\QtiUri;
|
||
|
use qtism\common\datatypes\QtiIntOrIdentifier;
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
* @author Jérôme Bogaerts <jerome@taotesting.com>
|
||
|
* @package taoQtiCommon
|
||
|
|
||
|
*/
|
||
|
class PciVariableFillerTest extends TestCase
|
||
|
{
|
||
|
/**
|
||
|
* @dataProvider fillVariableProvider
|
||
|
*
|
||
|
* @param IAssessmentItem $itemRef The reference item.
|
||
|
* @param string $variableIdentifier The identifier of the variable.
|
||
|
* @param array $data Client-side data.
|
||
|
* @param Variable $expectedVariable
|
||
|
*/
|
||
|
public function testFillVariable(array $data, Variable $expectedVariable) {
|
||
|
// Non-time dependent basic item in 'Yoda English'.
|
||
|
$itemRef = new AssessmentItem('Q01', 'Question 01', false, 'en-YO');
|
||
|
|
||
|
$outcomeDeclarations = new OutcomeDeclarationCollection();
|
||
|
$outcomeDeclarations[] = new OutcomeDeclaration('OUTCOME1', BaseType::FLOAT, Cardinality::SINGLE);
|
||
|
$outcomeDeclarations[] = new OutcomeDeclaration('OUTCOME2', BaseType::INTEGER, Cardinality::SINGLE);
|
||
|
$outcomeDeclarations[] = new OutcomeDeclaration('OUTCOME3', BaseType::BOOLEAN, Cardinality::SINGLE);
|
||
|
$outcomeDeclarations[] = new OutcomeDeclaration('OUTCOME4', BaseType::STRING, Cardinality::SINGLE);
|
||
|
$outcomeDeclarations[] = new OutcomeDeclaration('OUTCOME5', BaseType::POINT, Cardinality::SINGLE);
|
||
|
$outcomeDeclarations[] = new OutcomeDeclaration('OUTCOME6', BaseType::PAIR, Cardinality::SINGLE);
|
||
|
$outcomeDeclarations[] = new OutcomeDeclaration('OUTCOME7', BaseType::DIRECTED_PAIR, Cardinality::SINGLE);
|
||
|
$outcomeDeclarations[] = new OutcomeDeclaration('OUTCOME8', BaseType::DURATION, Cardinality::SINGLE);
|
||
|
$outcomeDeclarations[] = new OutcomeDeclaration('OUTCOME9', BaseType::URI, Cardinality::SINGLE);
|
||
|
$outcomeDeclarations[] = new OutcomeDeclaration('OUTCOME10', BaseType::IDENTIFIER, Cardinality::SINGLE);
|
||
|
$outcomeDeclarations[] = new OutcomeDeclaration('OUTCOME11', BaseType::INT_OR_IDENTIFIER, Cardinality::SINGLE);
|
||
|
$outcomeDeclarations[] = new OutcomeDeclaration('OUTCOME12', BaseType::INTEGER, Cardinality::SINGLE);
|
||
|
|
||
|
$responseDeclarations = new ResponseDeclarationCollection();
|
||
|
$responseDeclarations[] = new ResponseDeclaration('RESPONSE1', BaseType::IDENTIFIER, Cardinality::SINGLE);
|
||
|
$responseDeclarations[] = new ResponseDeclaration('RESPONSE2', BaseType::IDENTIFIER, Cardinality::MULTIPLE);
|
||
|
$responseDeclarations[] = new ResponseDeclaration('RESPONSE3', BaseType::DIRECTED_PAIR, Cardinality::ORDERED);
|
||
|
$responseDeclarations[] = new ResponseDeclaration('RESPONSE4', -1, Cardinality::RECORD);
|
||
|
$responseDeclarations[] = new ResponseDeclaration('RESPONSE5', -1, Cardinality::RECORD);
|
||
|
$responseDeclarations[] = new ResponseDeclaration('RESPONSE6', -1, Cardinality::RECORD);
|
||
|
$responseDeclarations[] = new ResponseDeclaration('RESPONSE7', -1, Cardinality::RECORD);
|
||
|
$responseDeclarations[] = new ResponseDeclaration('RESPONSE8', BaseType::BOOLEAN, Cardinality::MULTIPLE);
|
||
|
|
||
|
$itemRef->setOutcomeDeclarations($outcomeDeclarations);
|
||
|
$itemRef->setResponseDeclarations($responseDeclarations);
|
||
|
|
||
|
$filler = new taoQtiCommon_helpers_PciVariableFiller($itemRef);
|
||
|
$variable = $filler->fill($expectedVariable->getIdentifier(), $data);
|
||
|
|
||
|
$this->assertEquals($expectedVariable->getIdentifier(), $variable->getIdentifier());
|
||
|
$this->assertEquals($expectedVariable->getBaseType(), $variable->getBaseType());
|
||
|
$this->assertEquals($expectedVariable->getCardinality(), $variable->getCardinality());
|
||
|
$this->assertEquals(get_class($expectedVariable), get_class($variable));
|
||
|
|
||
|
if ($expectedVariable->getValue() === null) {
|
||
|
$this->assertSame($expectedVariable->getValue(), $variable->getValue());
|
||
|
}
|
||
|
else {
|
||
|
$this->assertTrue($expectedVariable->getValue()->equals($variable->getValue()));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public function fillVariableProvider() {
|
||
|
|
||
|
$returnValue = array();
|
||
|
|
||
|
$json = array('base' => array('float' => 13.37));
|
||
|
$expectedVariable = new OutcomeVariable('OUTCOME1', Cardinality::SINGLE, BaseType::FLOAT, new QtiFloat(13.37));
|
||
|
$returnValue[] = array($json, $expectedVariable);
|
||
|
|
||
|
$json = array('base' => array('integer' => 10));
|
||
|
$expectedVariable = new OutcomeVariable('OUTCOME2', Cardinality::SINGLE, BaseType::INTEGER, new QtiInteger(10));
|
||
|
$returnValue[] = array($json, $expectedVariable);
|
||
|
|
||
|
$json = array('base' => array('boolean' => true));
|
||
|
$expectedVariable = new OutcomeVariable('OUTCOME3', Cardinality::SINGLE, BaseType::BOOLEAN, new QtiBoolean(true));
|
||
|
$returnValue[] = array($json, $expectedVariable);
|
||
|
|
||
|
$json = array('base' => array('string' => 'String!'));
|
||
|
$expectedVariable = new OutcomeVariable('OUTCOME4', Cardinality::SINGLE, BaseType::STRING, new QtiString('String!'));
|
||
|
$returnValue[] = array($json, $expectedVariable);
|
||
|
|
||
|
$json = array('base' => array('point' => array(10, 10)));
|
||
|
$expectedVariable = new OutcomeVariable('OUTCOME5', Cardinality::SINGLE, BaseType::POINT, new QtiPoint(10, 10));
|
||
|
$returnValue[] = array($json, $expectedVariable);
|
||
|
|
||
|
$json = array('base' => array('pair' => array('A', 'B')));
|
||
|
$expectedVariable = new OutcomeVariable('OUTCOME6', Cardinality::SINGLE, BaseType::PAIR, new QtiPair('A', 'B'));
|
||
|
$returnValue[] = array($json, $expectedVariable);
|
||
|
|
||
|
$json = array('base' => array('directedPair' => array('A', 'B')));
|
||
|
$expectedVariable = new OutcomeVariable('OUTCOME7', Cardinality::SINGLE, BaseType::DIRECTED_PAIR, new QtiDirectedPair('A', 'B'));
|
||
|
$returnValue[] = array($json, $expectedVariable);
|
||
|
|
||
|
$json = array('base' => array('duration' => 'PT1S'));
|
||
|
$expectedVariable = new OutcomeVariable('OUTCOME8', Cardinality::SINGLE, BaseType::DURATION, new QtiDuration('PT1S'));
|
||
|
$returnValue[] = array($json, $expectedVariable);
|
||
|
|
||
|
$json = array('base' => array('uri' => 'http://www.taotesting.com'));
|
||
|
$expectedVariable = new OutcomeVariable('OUTCOME9', Cardinality::SINGLE, BaseType::URI, new QtiUri('http://www.taotesting.com'));
|
||
|
$returnValue[] = array($json, $expectedVariable);
|
||
|
|
||
|
$json = array('base' => array('identifier' => 'ChoiceB'));
|
||
|
$expectedVariable = new OutcomeVariable('OUTCOME10', Cardinality::SINGLE, BaseType::IDENTIFIER, new QtiIdentifier('ChoiceB'));
|
||
|
$returnValue[] = array($json, $expectedVariable);
|
||
|
|
||
|
$json = array('base' => array('intOrIdentifier' => 255));
|
||
|
$expectedVariable = new OutcomeVariable('OUTCOME11', Cardinality::SINGLE, BaseType::INT_OR_IDENTIFIER, new QtiIntOrIdentifier(255));
|
||
|
$returnValue[] = array($json, $expectedVariable);
|
||
|
|
||
|
$json = array('base' => null);
|
||
|
$expectedVariable = new OutcomeVariable('OUTCOME12', Cardinality::SINGLE, BaseType::INTEGER, null);
|
||
|
$returnValue[] = array($json, $expectedVariable);
|
||
|
|
||
|
$json = array('base' => array('identifier' => 'ChoiceA'));
|
||
|
$expectedVariable = new ResponseVariable('RESPONSE1', Cardinality::SINGLE, BaseType::IDENTIFIER, new QtiIdentifier('ChoiceA'));
|
||
|
$returnValue[] = array($json, $expectedVariable);
|
||
|
|
||
|
$json = array('list' => array('identifier' => array('ChoiceA', 'ChoiceC')));
|
||
|
$expectedVariable = new ResponseVariable('RESPONSE2', Cardinality::MULTIPLE, BaseType::IDENTIFIER, new MultipleContainer(BaseType::IDENTIFIER, array(new QtiIdentifier('ChoiceA'), new QtiIdentifier('ChoiceC'))));
|
||
|
$returnValue[] = array($json, $expectedVariable);
|
||
|
|
||
|
$json = array('list' => array('directedPair' => array(array('A', 'B'), array('C', 'D'))));
|
||
|
$expectedVariable = new ResponseVariable('RESPONSE3', Cardinality::ORDERED, BaseType::DIRECTED_PAIR, new OrderedContainer(BaseType::DIRECTED_PAIR, array(new QtiDirectedPair('A', 'B'), new QtiDirectedPair('C', 'D'))));
|
||
|
$returnValue[] = array($json, $expectedVariable);
|
||
|
|
||
|
$json = array('record' => array());
|
||
|
$expectedVariable = new ResponseVariable('RESPONSE4', Cardinality::RECORD, -1, new RecordContainer());
|
||
|
$returnValue[] = array($json, $expectedVariable);
|
||
|
|
||
|
$json = array('record' => array(array('name' => 'A', 'base' => array('identifier' => 'ChoiceA')), array('name' => 'B', 'base' => array('identifier' => 'ChoiceB'))));
|
||
|
$expectedVariable = new ResponseVariable('RESPONSE5', Cardinality::RECORD, -1, new RecordContainer(array('A' => new QtiIdentifier('ChoiceA'), 'B' => new QtiIdentifier('ChoiceB'))));
|
||
|
$returnValue[] = array($json, $expectedVariable);
|
||
|
|
||
|
$json = array('record' => array(array('name' => 'A', 'base' => null)));
|
||
|
$expectedVariable = new ResponseVariable('RESPONSE6', Cardinality::RECORD, -1, new RecordContainer(array('A' => null)));
|
||
|
$returnValue[] = array($json, $expectedVariable);
|
||
|
|
||
|
$json = array('record' => array(array('name' => 'A', 'base' => array('boolean' => true)), array('name' => 'B', 'base' => null), array('name' => 'C', 'base' => array('boolean' => false))));
|
||
|
$expectedVariable = new ResponseVariable('RESPONSE7', Cardinality::RECORD, -1, new RecordContainer(array('A' => new QtiBoolean(true), 'B' => null, 'C' => new QtiBoolean(false))));
|
||
|
$returnValue[] = array($json, $expectedVariable);
|
||
|
|
||
|
$json = array('list' => array('boolean' => array(true, null, false)));
|
||
|
$expectedVariable = new ResponseVariable('RESPONSE8', Cardinality::MULTIPLE, BaseType::BOOLEAN, new MultipleContainer(BaseType::BOOLEAN, array(new QtiBoolean(true), null, new QtiBoolean(false))));
|
||
|
$returnValue[] = array($json, $expectedVariable);
|
||
|
|
||
|
return $returnValue;
|
||
|
}
|
||
|
}
|