MDL-46256 count_letters: an unit tests and fix HTML editity handling

This commit is contained in:
Tim Hunt 2021-01-19 15:50:05 +00:00
parent c110115cc0
commit 82a050d67b
2 changed files with 27 additions and 1 deletions

View file

@ -8375,11 +8375,12 @@ function count_words($string) {
* Letters are defined as chars not in tags and different from whitespace. * Letters are defined as chars not in tags and different from whitespace.
* *
* @category string * @category string
* @param string $string The text to be searched for letters. * @param string $string The text to be searched for letters. May be HTML.
* @return int The count of letters in the specified text. * @return int The count of letters in the specified text.
*/ */
function count_letters($string) { function count_letters($string) {
$string = strip_tags($string); // Tags are out now. $string = strip_tags($string); // Tags are out now.
$string = html_entity_decode($string);
$string = preg_replace('/[[:space:]]*/', '', $string); // Whitespace are out now. $string = preg_replace('/[[:space:]]*/', '', $string); // Whitespace are out now.
return core_text::strlen($string); return core_text::strlen($string);

View file

@ -3822,6 +3822,31 @@ class core_moodlelib_testcase extends advanced_testcase {
]; ];
} }
/**
* Test function {@see count_letters()}.
*
* @dataProvider count_letters_testcases
* @param int $expectedcount number of characters in $string.
* @param string $string the test string to count the letters of.
*/
public function test_count_letters(int $expectedcount, string $string): void {
$this->assertEquals($expectedcount, count_letters($string));
}
/**
* Data provider for {@see count_letters_testcases}.
*
* @return array of test cases.
*/
public function count_letters_testcases(): array {
return [
[0, ''],
[1, 'x'],
[1, '&'],
[4, '<p>frog</p>'],
];
}
/** /**
* Tests the getremoteaddr() function. * Tests the getremoteaddr() function.
*/ */