Skip to content

Commit

Permalink
Added more meaningful information when dereferencing malformed
Browse files Browse the repository at this point in the history
assessmentItemRefs.
  • Loading branch information
= committed Mar 10, 2016
1 parent 2fbf803 commit 71ed15a
Show file tree
Hide file tree
Showing 5 changed files with 61 additions and 3 deletions.
1 change: 1 addition & 0 deletions src/qtism/data/state/VariableDeclaration.php
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
use qtism\common\enums\Cardinality;
use \SplObserver;
use \SplObjectStorage;
use \InvalidArgumentException;

/**
* From IMS QTI:
Expand Down
6 changes: 3 additions & 3 deletions src/qtism/data/storage/xml/XmlCompactDocument.php
Original file line number Diff line number Diff line change
Expand Up @@ -310,7 +310,7 @@ protected static function resolveAssessmentItemRef(ExtendedAssessmentItemRef $co
$compactAssessmentItemRef->setTimeDependent($item->isTimeDependent());
$compactAssessmentItemRef->setEndAttemptIdentifiers($item->getEndAttemptIdentifiers());
} catch (Exception $e) {
$msg = "An error occured while unreferencing file '${href}'.";
$msg = "An error occured while unreferencing item reference with identifier '" . $compactAssessmentItemRef->getIdentifier() . "'.";
throw new XmlStorageException($msg, XmlStorageException::RESOLUTION, $e);
}
}
Expand All @@ -333,8 +333,8 @@ protected static function resolveAssessmentSectionRef(AssessmentSectionRef $asse

return $doc->getDocumentComponent();
} catch (XmlStorageException $e) {
$msg = "An error occured while unreferencing file '${href}'.";
throw new XmlStorageException($msg, XmlStorageException::RESOLUTION);
$msg = "An error occured while unreferencing section reference with identifier '" . $assessmentSectionRef->getIdentifier() . "'.";
throw new XmlStorageException($msg, XmlStorageException::RESOLUTION, $e);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
use qtism\data\NavigationMode;
use qtism\data\storage\xml\XmlDocument;
use qtism\data\AssessmentTest;
use qtism\data\storage\xml\XmlStorageException;
use \DOMDocument;

class XmlCompactAssessmentDocumentTest extends QtiSmTestCase {
Expand Down Expand Up @@ -505,4 +506,17 @@ public function testCreateFromAssessmentTestEndAttemptIdentifiers() {
$this->assertEquals('LOST', $endAttemptIdentifiers[0]);
$this->assertEquals('LOST2', $endAttemptIdentifiers[1]);
}

public function testCreateFromAssessmentTestInvalidAssessmentItemRefResolution() {
$this->setExpectedException(
'\\qtism\\data\\storage\\xml\\XmlStorageException',
"An error occured while unreferencing item reference with identifier 'Q01'.",
XmlStorageException::RESOLUTION
);

$doc = new XmlDocument('2.1');
$file = self::samplesDir() . 'custom/tests/invalidassessmentitemref.xml';
$doc->load($file);
$compactDoc = XmlCompactDocument::createFromXmlAssessmentTestDocument($doc, new LocalFileResolver());
}
}
11 changes: 11 additions & 0 deletions test/samples/custom/tests/invalidassessmentitemref.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<assessmentTest xmlns="http://www.imsglobal.org/xsd/imsqti_v2p1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.imsglobal.org/xsd/imsqti_v2p1 http://www.imsglobal.org/xsd/qti/qtiv2p1/imsqti_v2p1.xsd"
identifier="invalidassessmentitemref" title="Invalid AssessmentItemRef">
<testPart identifier="T01" navigationMode="nonlinear" submissionMode="individual">
<assessmentSection identifier="S01" title="Section 01" visible="true">
<assessmentItemRef identifier="Q01" href="../../invalid/invalidresponseidentifier.xml"/>
</assessmentSection>
</testPart>
</assessmentTest>
32 changes: 32 additions & 0 deletions test/samples/invalid/invalidresponseidentifier.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8"?>
<assessmentItem xmlns="http://www.imsglobal.org/xsd/imsqti_v2p1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.imsglobal.org/xsd/imsqti_v2p1 http://www.imsglobal.org/xsd/qti/qtiv2p1/imsqti_v2p1.xsd"
identifier="choiceMultiple" title="Composition of Water" adaptive="false" timeDependent="false">
<!-- identifier of responseDeclaration is invalid for QTI-SDK because it has a leading "space" char. -->
<responseDeclaration identifier=" RESPONSE" cardinality="multiple" baseType="identifier">
<correctResponse>
<value>H</value>
<value>O</value>
</correctResponse>
<mapping lowerBound="0" upperBound="2" defaultValue="-2">
<mapEntry mapKey="H" mappedValue="1"/>
<mapEntry mapKey="O" mappedValue="1"/>
<mapEntry mapKey="Cl" mappedValue="-1"/>
</mapping>
</responseDeclaration>
<outcomeDeclaration identifier="SCORE" cardinality="single" baseType="float"/>
<itemBody>
<choiceInteraction responseIdentifier="RESPONSE" shuffle="true" maxChoices="0">
<prompt>Which of the following elements are used to form water?</prompt>
<simpleChoice identifier="H" fixed="false">Hydrogen</simpleChoice>
<simpleChoice identifier="He" fixed="false">Helium</simpleChoice>
<simpleChoice identifier="C" fixed="false">Carbon</simpleChoice>
<simpleChoice identifier="O" fixed="false">Oxygen</simpleChoice>
<simpleChoice identifier="N" fixed="false">Nitrogen</simpleChoice>
<simpleChoice identifier="Cl" fixed="false">Chlorine</simpleChoice>
</choiceInteraction>
</itemBody>
<responseProcessing
template="http://www.imsglobal.org/question/qti_v2p1/rptemplates/map_response"/>
</assessmentItem>

0 comments on commit 71ed15a

Please sign in to comment.