MDL-11824 - Literal asterisk (\*) in shortanswer question not handled correctly by get_correct_responses + Unit tests.

This commit is contained in:
tjhunt
2007-10-22 15:36:50 +00:00
parent b1062ec362
commit 32a6bb301e
2 changed files with 49 additions and 0 deletions
@@ -223,6 +223,17 @@ class question_shortanswer_qtype extends default_questiontype {
return preg_match($regexp, trim($string));
}
/*
* Override the parent class method, to remove escaping from asterisks.
*/
function get_correct_responses(&$question, &$state) {
$response = parent::get_correct_responses($question, $state);
if (is_array($response)) {
$response[''] = addslashes(str_replace('\*', '*', stripslashes($response[''])));
}
return $response;
}
/// BACKUP FUNCTIONS ////////////////////////////
/*
@@ -12,6 +12,10 @@ if (!defined('MOODLE_INTERNAL')) {
die('Direct access to this script is forbidden.'); /// It must be included from a Moodle page
}
require_once(dirname(__FILE__) . '/../../../../config.php');
global $CFG;
require_once($CFG->libdir . '/simpletestlib.php');
require_once($CFG->dirroot . '/question/type/questiontype.php');
class question_shortanswer_qtype_test extends UnitTestCase {
@@ -67,6 +71,40 @@ class question_shortanswer_qtype_test extends UnitTestCase {
$this->assertTrue($this->qtype->compare_string_with_wildcard('[a-z]', '[a-z]', false));
$this->assertTrue($this->qtype->compare_string_with_wildcard('\{}/', '\{}/', true));
}
function test_get_correct_responses() {
$answer1 = new stdClass;
$answer1->id = 17;
$answer1->answer = "frog";
$answer1->fraction = 1;
$answer2 = new stdClass;
$answer2->id = 23;
$answer2->answer = "f*g";
$answer2->fraction = 1;
$answer3 = new stdClass;
$answer3->id = 29;
$answer3->answer = "12\*13";
$answer3->fraction = 1;
$answer4 = new stdClass;
$answer4->id = 31;
$answer4->answer = "*";
$answer4->fraction = 0;
$question = new stdClass;
$question->options->answers = array(
17 => $answer1,
23 => $answer2,
29 => $answer3,
31 => $answer4
);
$state = new stdClass;
$this->assertEqual($this->qtype->get_correct_responses($question, $state), array('' => 'frog'));
$question->options->answers[17]->fraction = 0;
$this->assertEqual($this->qtype->get_correct_responses($question, $state), array('' => 'f*g'));
$question->options->answers[23]->fraction = 0;
$this->assertEqual($this->qtype->get_correct_responses($question, $state), array('' => '12*13'));
$question->options->answers[29]->fraction = 0;
$this->assertNull($this->qtype->get_correct_responses($question, $state));
}
}
?>