public function test_xml_import() { $xml = '<!-- question: 0 --> <question type="stack"> <name> <text>test-0</text> </name> <questiontext format="html"> <text>What is $1+1$? [[input:ans1]] [[validation:ans1]]</text> </questiontext> <generalfeedback format="html"> <text></text> </generalfeedback> <defaultgrade>1</defaultgrade> <penalty>0.3333333</penalty> <hidden>0</hidden> <questionvariables> <text></text> </questionvariables> <specificfeedback format="html"> <text>[[feedback:firsttree]]</text> </specificfeedback> <questionnote> <text></text> </questionnote> <questionsimplify>1</questionsimplify> <assumepositive>0</assumepositive> <prtcorrect format="html"> <text><![CDATA[<p>Correct answer, well done.</p>]]></text> </prtcorrect> <prtpartiallycorrect format="html"> <text><![CDATA[<p>Your answer is partially correct.</p>]]></text> </prtpartiallycorrect> <prtincorrect format="html"> <text><![CDATA[<p>Incorrect answer.</p>]]></text> </prtincorrect> <multiplicationsign>dot</multiplicationsign> <sqrtsign>1</sqrtsign> <complexno>i</complexno> <inversetrig>cos-1</inversetrig> <matrixparens>[</matrixparens> <variantsselectionseed></variantsselectionseed> <input> <name>ans1</name> <type>algebraic</type> <tans>2</tans> <boxsize>5</boxsize> <strictsyntax>1</strictsyntax> <insertstars>0</insertstars> <syntaxhint></syntaxhint> <forbidwords></forbidwords> <allowwords></allowwords> <forbidfloat>1</forbidfloat> <requirelowestterms>0</requirelowestterms> <checkanswertype>0</checkanswertype> <mustverify>1</mustverify> <showvalidation>1</showvalidation> <options></options> </input> <prt> <name>firsttree</name> <value>1</value> <autosimplify>1</autosimplify> <feedbackvariables> <text></text> </feedbackvariables> <node> <name>0</name> <answertest>EqualComAss</answertest> <sans>ans1</sans> <tans>2</tans> <testoptions></testoptions> <quiet>0</quiet> <truescoremode>=</truescoremode> <truescore>1</truescore> <truepenalty>0</truepenalty> <truenextnode>-1</truenextnode> <trueanswernote>firsttree-1-T</trueanswernote> <truefeedback format="html"> <text></text> </truefeedback> <falsescoremode>=</falsescoremode> <falsescore>0</falsescore> <falsepenalty>0</falsepenalty> <falsenextnode>-1</falsenextnode> <falseanswernote>firsttree-1-F</falseanswernote> <falsefeedback format="html"> <text></text> </falsefeedback> </node> </prt> <deployedseed>12345</deployedseed> <qtest> <testcase>1</testcase> <testinput> <name>ans1</name> <value>2</value> </testinput> <expected> <name>firsttree</name> <expectedscore>1</expectedscore> <expectedpenalty>0</expectedpenalty> <expectedanswernote>firsttree-1-T</expectedanswernote> </expected> </qtest> </question> '; $xmldata = xmlize($xml); $importer = new qformat_xml(); $q = $importer->try_importing_using_qtypes($xmldata['question'], null, null, 'stack'); $expectedq = new stdClass(); $expectedq->qtype = 'stack'; $expectedq->name = 'test-0'; $expectedq->questiontext = 'What is $1+1$? [[input:ans1]] [[validation:ans1]]'; $expectedq->questiontextformat = FORMAT_HTML; $expectedq->generalfeedback = ''; $expectedq->generalfeedbackformat = FORMAT_HTML; $expectedq->defaultmark = 1; $expectedq->length = 1; $expectedq->penalty = 0.3333333; $expectedq->questionvariables = ''; $expectedq->specificfeedback = array('text' => '[[feedback:firsttree]]', 'format' => FORMAT_HTML, 'files' => array()); $expectedq->questionnote = ''; $expectedq->questionsimplify = 1; $expectedq->assumepositive = 0; $expectedq->prtcorrect = array('text' => '<p>Correct answer, well done.</p>', 'format' => FORMAT_HTML, 'files' => array()); $expectedq->prtpartiallycorrect = array('text' => '<p>Your answer is partially correct.</p>', 'format' => FORMAT_HTML, 'files' => array()); $expectedq->prtincorrect = array('text' => '<p>Incorrect answer.</p>', 'format' => FORMAT_HTML, 'files' => array()); $expectedq->multiplicationsign = 'dot'; $expectedq->sqrtsign = 1; $expectedq->complexno = 'i'; $expectedq->inversetrig = 'cos-1'; $expectedq->matrixparens = '['; $expectedq->variantsselectionseed = ''; $expectedq->ans1type = 'algebraic'; $expectedq->ans1modelans = 2; $expectedq->ans1boxsize = 5; $expectedq->ans1strictsyntax = 1; $expectedq->ans1insertstars = 0; $expectedq->ans1syntaxhint = ''; $expectedq->ans1forbidwords = ''; $expectedq->ans1allowwords = ''; $expectedq->ans1forbidfloat = 1; $expectedq->ans1requirelowestterms = 0; $expectedq->ans1checkanswertype = 0; $expectedq->ans1mustverify = 1; $expectedq->ans1showvalidation = 1; $expectedq->ans1options = ''; $expectedq->firsttreevalue = 1; $expectedq->firsttreeautosimplify = 1; $expectedq->firsttreefeedbackvariables = ''; $expectedq->firsttreeanswertest[0] = 'EqualComAss'; $expectedq->firsttreesans[0] = 'ans1'; $expectedq->firsttreetans[0] = '2'; $expectedq->firsttreetestoptions[0] = ''; $expectedq->firsttreequiet[0] = 0; $expectedq->firsttreetruescoremode[0] = '='; $expectedq->firsttreetruescore[0] = 1; $expectedq->firsttreetruepenalty[0] = 0; $expectedq->firsttreetruenextnode[0] = -1; $expectedq->firsttreetrueanswernote[0] = 'firsttree-1-T'; $expectedq->firsttreetruefeedback[0] = array('text' => '', 'format' => FORMAT_HTML, 'files' => array()); $expectedq->firsttreefalsescoremode[0] = '='; $expectedq->firsttreefalsescore[0] = 0; $expectedq->firsttreefalsepenalty[0] = 0; $expectedq->firsttreefalsenextnode[0] = -1; $expectedq->firsttreefalseanswernote[0] = 'firsttree-1-F'; $expectedq->firsttreefalsefeedback[0] = array('text' => '', 'format' => FORMAT_HTML, 'files' => array()); $expectedq->deployedseeds = array('12345'); $qtest = new stack_question_test(array('ans1' => '2')); $qtest->add_expected_result('firsttree', new stack_potentialresponse_tree_state(1, true, 1, 0, '', array('firsttree-1-T'))); $expectedq->testcases[1] = $qtest; $this->assert(new question_check_specified_fields_expectation($expectedq), $q); $this->assertEquals($expectedq->deployedseeds, $q->deployedseeds); // Redundant, but gives better fail messages. $this->assertEquals($expectedq->testcases, $q->testcases); // Redundant, but gives better fail messages. }
public function test_xml_import_legacy() { $xml = ' <question type="ddwtos"> <name> <text>QDandD1 Base definition</text> </name> <questiontext format="html"> <text><p>Drag and drop the words from the list below to fill the blank spaces ' . 'and correctly complete the sentence.</p> <p>At 25°C all aqueous basic ' . 'solutions have [[1]] ion concentrations less than [[8]]<br />mol ' . 'litre<sup>-1</sup> and pH values [[9]] than [[6]].</p> ' . '<!--DONOTCLEAN--></text> </questiontext> <image></image> <generalfeedback> <text><p>At 25 &#xB0;C all aqueous basic solutions have hydrogen ion ' . 'concentrations less than 10<sup>&#x2212;7</sup> mol ' . 'litre<sup>&#x2212;1</sup> and pH values greater than 7.</p> ' . '<p>See Section 9 of S103 <em class="italic">Discovering ' . 'Science</em> Block 8.</p></text> </generalfeedback> <defaultgrade>1</defaultgrade> <penalty>0.33</penalty> <hidden>0</hidden> <shuffleanswers>0</shuffleanswers> <shuffleanswers>false</shuffleanswers> <answer> <correctanswer>1</correctanswer> <text>hydrogen</text> <feedback> <text>O:8:"stdClass":2:{s:9:"draggroup";s:1:"1";s:8:"infinite";i:0;}</text> </feedback> </answer> <answer> <correctanswer>0</correctanswer> <text>positive</text> <feedback> <text>O:8:"stdClass":2:{s:9:"draggroup";s:1:"1";s:8:"infinite";i:0;}</text> </feedback> </answer> <answer> <correctanswer>0</correctanswer> <text>hydroxide</text> <feedback> <text>O:8:"stdClass":2:{s:9:"draggroup";s:1:"1";s:8:"infinite";i:0;}</text> </feedback> </answer> <answer> <correctanswer>0</correctanswer> <text>negative</text> <feedback> <text>O:8:"stdClass":2:{s:9:"draggroup";s:1:"1";s:8:"infinite";i:0;}</text> </feedback> </answer> <answer> <correctanswer>0</correctanswer> <text>10<sup>7</sup></text> <feedback> <text>O:8:"stdClass":2:{s:9:"draggroup";s:1:"2";s:8:"infinite";i:0;}</text> </feedback> </answer> <answer> <correctanswer>1</correctanswer> <text>7</text> <feedback> <text>O:8:"stdClass":2:{s:9:"draggroup";s:1:"2";s:8:"infinite";i:0;}</text> </feedback> </answer> <answer> <correctanswer>0</correctanswer> <text>1</text> <feedback> <text>O:8:"stdClass":2:{s:9:"draggroup";s:1:"2";s:8:"infinite";i:0;}</text> </feedback> </answer> <answer> <correctanswer>1</correctanswer> <text>10<sup>-7</sup></text> <feedback> <text>O:8:"stdClass":2:{s:9:"draggroup";s:1:"2";s:8:"infinite";i:0;}</text> </feedback> </answer> <answer> <correctanswer>1</correctanswer> <text>greater</text> <feedback> <text>O:8:"stdClass":2:{s:9:"draggroup";s:1:"3";s:8:"infinite";i:0;}</text> </feedback> </answer> <answer> <correctanswer>0</correctanswer> <text>less</text> <feedback> <text>O:8:"stdClass":2:{s:9:"draggroup";s:1:"3";s:8:"infinite";i:0;}</text> </feedback> </answer> <correctfeedback> <text>Your answer is correct.</text> </correctfeedback> <correctresponsesfeedback>1</correctresponsesfeedback> <partiallycorrectfeedback> <text>Your answer is partially correct.</text> </partiallycorrectfeedback> <incorrectfeedback> <text>Your answer is incorrect.</text> </incorrectfeedback> <unlimited>0</unlimited> <penalty>0.33</penalty> <hint> <statenumberofcorrectresponses>1</statenumberofcorrectresponses> <clearincorrectresponses>0</clearincorrectresponses> <hintcontent> <text>You may wish to read Section 9 of <em ' . 'class="italic">Discovering Science</em> Block 8.</text> </hintcontent> </hint> <hint> <statenumberofcorrectresponses>1</statenumberofcorrectresponses> <clearincorrectresponses>1</clearincorrectresponses> <hintcontent> <text>Any incorrect choices will be removed before your final try.</text> </hintcontent> </hint> </question>'; $xmldata = xmlize($xml); $importer = new qformat_xml(); $q = $importer->try_importing_using_qtypes($xmldata['question'], null, null, 'ddwtos'); $expectedq = new stdClass(); $expectedq->qtype = 'ddwtos'; $expectedq->name = 'QDandD1 Base definition'; $expectedq->questiontext = '<p>Drag and drop the words from the list below ' . 'to fill the blank spaces and correctly complete the sentence.</p>' . '<p>At 25°C all aqueous basic solutions have [[1]] ion concentrations ' . 'less than [[8]]<br />mol litre<sup>-1</sup> and pH values [[9]] than [[6]].</p>' . '<!--DONOTCLEAN-->'; $expectedq->questiontextformat = FORMAT_HTML; $expectedq->generalfeedback = '<p>At 25 °C all aqueous basic solutions ' . 'have hydrogen ion concentrations less than 10<sup>−7</sup> ' . 'mol litre<sup>−1</sup> and pH values greater than 7.</p><p>See ' . 'Section 9 of S103 <em class="italic">Discovering Science</em> Block 8.</p>'; $expectedq->defaultmark = 1; $expectedq->length = 1; $expectedq->penalty = 0.3333333; $expectedq->shuffleanswers = 0; $expectedq->correctfeedback = array('text' => 'Your answer is correct.', 'format' => FORMAT_HTML); $expectedq->partiallycorrectfeedback = array('text' => 'Your answer is partially correct.', 'format' => FORMAT_HTML); $expectedq->shownumcorrect = true; $expectedq->incorrectfeedback = array('text' => 'Your answer is incorrect.', 'format' => FORMAT_HTML); $expectedq->choices = array(array('answer' => array('text' => 'hydrogen', 'format' => FORMAT_PLAIN), 'choicegroup' => 1, 'infinite' => false), array('answer' => array('text' => 'positive', 'format' => FORMAT_PLAIN), 'choicegroup' => 1, 'infinite' => false), array('answer' => array('text' => 'hydroxide', 'format' => FORMAT_PLAIN), 'choicegroup' => 1, 'infinite' => false), array('answer' => array('text' => 'negative', 'format' => FORMAT_PLAIN), 'choicegroup' => 1, 'infinite' => false), array('answer' => array('text' => '10<sup>7</sup>', 'format' => FORMAT_PLAIN), 'choicegroup' => 2, 'infinite' => false), array('answer' => array('text' => '7', 'format' => FORMAT_PLAIN), 'choicegroup' => 2, 'infinite' => false), array('answer' => array('text' => '1', 'format' => FORMAT_PLAIN), 'choicegroup' => 2, 'infinite' => false), array('answer' => array('text' => '10<sup>-7</sup>', 'format' => FORMAT_PLAIN), 'choicegroup' => 2, 'infinite' => false), array('answer' => array('text' => 'greater', 'format' => FORMAT_PLAIN), 'choicegroup' => 3, 'infinite' => false), array('answer' => array('text' => 'less', 'format' => FORMAT_PLAIN), 'choicegroup' => 3, 'infinite' => false)); $expectedq->hint = array(array('text' => 'You may wish to read Section 9 of ' . '<em class="italic">Discovering Science</em> Block 8.', 'format' => FORMAT_HTML), array('text' => 'Any incorrect choices will be removed before your final try.', 'format' => FORMAT_HTML)); $expectedq->hintshownumcorrect = array(true, true); $expectedq->hintclearwrong = array(false, true); $this->assert(new question_check_specified_fields_expectation($expectedq), $q); $this->assertEquals($expectedq->choices, $q->choices); $this->assertEquals($expectedq->hint, $q->hint); }
public function test_xml_import() { $xml = ' <question type="gapselect"> <name> <text>A select missing words question</text> </name> <questiontext format="moodle_auto_format"> <text>Put these in order: [[1]], [[2]], [[3]].</text> </questiontext> <generalfeedback> <text>The answer is Alpha, Beta, Gamma.</text> </generalfeedback> <defaultgrade>3</defaultgrade> <penalty>0.3333333</penalty> <hidden>0</hidden> <shuffleanswers>1</shuffleanswers> <correctfeedback> <text><![CDATA[<p>Your answer is correct.</p>]]></text> </correctfeedback> <partiallycorrectfeedback> <text><![CDATA[<p>Your answer is partially correct.</p>]]></text> </partiallycorrectfeedback> <incorrectfeedback> <text><![CDATA[<p>Your answer is incorrect.</p>]]></text> </incorrectfeedback> <shownumcorrect/> <selectoption> <text>Alpha</text> <group>1</group> </selectoption> <selectoption> <text>Beta</text> <group>1</group> </selectoption> <selectoption> <text>Gamma</text> <group>1</group> </selectoption> <hint format="moodle_auto_format"> <text>Try again.</text> <shownumcorrect /> </hint> <hint format="moodle_auto_format"> <text>These are the first three letters of the Greek alphabet.</text> <shownumcorrect /> <clearwrong /> </hint> </question>'; $xmldata = xmlize($xml); $importer = new qformat_xml(); $q = $importer->try_importing_using_qtypes($xmldata['question'], null, null, 'gapselect'); $expectedq = new stdClass(); $expectedq->qtype = 'gapselect'; $expectedq->name = 'A select missing words question'; $expectedq->questiontext = 'Put these in order: [[1]], [[2]], [[3]].'; $expectedq->questiontextformat = FORMAT_MOODLE; $expectedq->generalfeedback = 'The answer is Alpha, Beta, Gamma.'; $expectedq->defaultmark = 3; $expectedq->length = 1; $expectedq->penalty = 0.3333333; $expectedq->shuffleanswers = 1; $expectedq->correctfeedback = array('text' => '<p>Your answer is correct.</p>', 'format' => FORMAT_MOODLE, 'files' => array()); $expectedq->partiallycorrectfeedback = array('text' => '<p>Your answer is partially correct.</p>', 'format' => FORMAT_MOODLE, 'files' => array()); $expectedq->shownumcorrect = true; $expectedq->incorrectfeedback = array('text' => '<p>Your answer is incorrect.</p>', 'format' => FORMAT_MOODLE, 'files' => array()); $expectedq->choices = array(array('answer' => 'Alpha', 'choicegroup' => 1), array('answer' => 'Beta', 'choicegroup' => 1), array('answer' => 'Gamma', 'choicegroup' => 1)); $expectedq->hint = array(array('text' => 'Try again.', 'format' => FORMAT_MOODLE, 'files' => array()), array('text' => 'These are the first three letters of the Greek alphabet.', 'format' => FORMAT_MOODLE, 'files' => array())); $expectedq->hintshownumcorrect = array(true, true); $expectedq->hintclearwrong = array(false, true); $this->assert(new question_check_specified_fields_expectation($expectedq), $q); $this->assertEquals($expectedq->hint, $q->hint); }