public function test_import_multianswer() { $xml = ' <question type="cloze"> <name> <text>Simple multianswer</text> </name> <questiontext format="html"> <text><![CDATA[Complete this opening line of verse: "The {1:SHORTANSWER:Dog#Wrong, silly!~=Owl#Well done!~*#Wrong answer} and the {1:MULTICHOICE:Bow-wow#You seem to have a dog obsessions!~Wiggly worm#Now you are just being ridiculous!~=Pussy-cat#Well done!} went to sea".]]></text> </questiontext> <generalfeedback format="html"> <text><![CDATA[General feedback: It\'s from "The Owl and the Pussy-cat" by Lear: "The owl and the pussycat went to sea".]]></text> </generalfeedback> <penalty>0.5</penalty> <hidden>0</hidden> <hint format="html"> <text>Hint 1</text> </hint> <hint format="html"> <text>Hint 2</text> </hint> </question> '; $xmldata = xmlize($xml); $importer = new qformat_xml(); $q = $importer->import_multianswer($xmldata['question']); // Annoyingly, import works in a weird way (it duplicates code, rather // than just calling save_question) so we cannot use // test_question_maker::get_question_form_data('multianswer', 'twosubq'). $expectedqa = new stdClass(); $expectedqa->name = 'Simple multianswer'; $expectedqa->qtype = 'multianswer'; $expectedqa->questiontext = 'Complete this opening line of verse: "The {#1} and the {#2} went to sea".'; $expectedqa->generalfeedback = 'General feedback: It\'s from "The Owl and the Pussy-cat" by Lear: "The owl and the pussycat went to sea".'; $expectedqa->defaultmark = 2; $expectedqa->penalty = 0.5; $expectedqa->hint = array( array('text' => 'Hint 1', 'format' => FORMAT_HTML), array('text' => 'Hint 2', 'format' => FORMAT_HTML), ); $sa = new stdClass(); $sa->questiontext = array('text' => '{1:SHORTANSWER:Dog#Wrong, silly!~=Owl#Well done!~*#Wrong answer}', 'format' => FORMAT_HTML, 'itemid' => null); $sa->generalfeedback = array('text' => '', 'format' => FORMAT_HTML, 'itemid' => null); $sa->defaultmark = 1.0; $sa->qtype = 'shortanswer'; $sa->usecase = 0; $sa->answer = array('Dog', 'Owl', '*'); $sa->fraction = array(0, 1, 0); $sa->feedback = array( array('text' => 'Wrong, silly!', 'format' => FORMAT_HTML, 'itemid' => null), array('text' => 'Well done!', 'format' => FORMAT_HTML, 'itemid' => null), array('text' => 'Wrong answer', 'format' => FORMAT_HTML, 'itemid' => null), ); $mc = new stdClass(); $mc->generalfeedback = ''; $mc->questiontext = array('text' => '{1:MULTICHOICE:Bow-wow#You seem to have a dog obsessions!~' . 'Wiggly worm#Now you are just being ridiculous!~=Pussy-cat#Well done!}', 'format' => FORMAT_HTML, 'itemid' => null); $mc->generalfeedback = array('text' => '', 'format' => FORMAT_HTML, 'itemid' => null); $mc->defaultmark = 1.0; $mc->qtype = 'multichoice'; $mc->layout = 0; $mc->single = 1; $mc->shuffleanswers = 1; $mc->correctfeedback = array('text' => '', 'format' => FORMAT_HTML, 'itemid' => null); $mc->partiallycorrectfeedback = array('text' => '', 'format' => FORMAT_HTML, 'itemid' => null); $mc->incorrectfeedback = array('text' => '', 'format' => FORMAT_HTML, 'itemid' => null); $mc->answernumbering = 0; $mc->answer = array( array('text' => 'Bow-wow', 'format' => FORMAT_HTML, 'itemid' => null), array('text' => 'Wiggly worm', 'format' => FORMAT_HTML, 'itemid' => null), array('text' => 'Pussy-cat', 'format' => FORMAT_HTML, 'itemid' => null), ); $mc->fraction = array(0, 0, 1); $mc->feedback = array( array('text' => 'You seem to have a dog obsessions!', 'format' => FORMAT_HTML, 'itemid' => null), array('text' => 'Now you are just being ridiculous!', 'format' => FORMAT_HTML, 'itemid' => null), array('text' => 'Well done!', 'format' => FORMAT_HTML, 'itemid' => null), ); $expectedqa->options = new stdClass(); $expectedqa->options->questions = array( 1 => $sa, 2 => $mc, ); $this->assertEquals($expectedqa->hint, $q->hint); $this->assertEquals($expectedqa->options->questions[1], $q->options->questions[1]); $this->assertEquals($expectedqa->options->questions[2], $q->options->questions[2]); $this->assert(new question_check_specified_fields_expectation($expectedqa), $q); }