MDL-37157: Normalize short answers before comparison

This ensures that ambiguous Unicode representations can be compared sanely.
Also add some tests to ensure it keeps working.

Thanks to Tim Hunt for the syntax check.
This commit is contained in:
Didier Raboud
2013-01-07 14:00:13 +08:00
committed by Dan Poltawski
parent 850aa189e4
commit f4537d5676
2 changed files with 17 additions and 0 deletions
+5
View File
@@ -102,6 +102,11 @@ class qtype_shortanswer_question extends question_graded_by_strategy
$regexp .= 'i';
}
if (function_exists('normalizer_normalize')) {
$regexp = normalizer_normalize($regexp, Normalizer::FORM_C);
$string = normalizer_normalize($string, Normalizer::FORM_C);
}
return preg_match($regexp, trim($string));
}
@@ -106,6 +106,18 @@ class qtype_shortanswer_question_test extends advanced_testcase {
// See http://moodle.org/mod/forum/discuss.php?d=120557
$this->assertTrue((bool)qtype_shortanswer_question::compare_string_with_wildcard(
'ITÁLIE', 'Itálie', true));
if (function_exists('normalizer_normalize')) {
// Test ambiguous unicode representations
$this->assertTrue((bool)qtype_shortanswer_question::compare_string_with_wildcard(
'départ', 'DÉPART', true));
$this->assertFalse((bool)qtype_shortanswer_question::compare_string_with_wildcard(
'départ', 'DÉPART', false));
$this->assertTrue((bool)qtype_shortanswer_question::compare_string_with_wildcard(
'd'."\xC3\xA9".'part', 'd'."\x65\xCC\x81".'part', false));
$this->assertTrue((bool)qtype_shortanswer_question::compare_string_with_wildcard(
'd'."\xC3\xA9".'part', 'D'."\x45\xCC\x81".'PART', true));
}
}
public function test_is_complete_response() {