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:
committed by
Dan Poltawski
parent
1f1dc87fc1
commit
7db20e0073
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user