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

This commit is contained in:
Tim Hunt
2021-01-21 09:54:01 +00:00
parent b4fd86591d
commit 063dce507a
2 changed files with 27 additions and 1 deletions
+2 -1
View File
@@ -8375,11 +8375,12 @@ function count_words($string) {
* Letters are defined as chars not in tags and different from whitespace.
*
* @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.
*/
function count_letters($string) {
$string = strip_tags($string); // Tags are out now.
$string = html_entity_decode($string);
$string = preg_replace('/[[:space:]]*/', '', $string); // Whitespace are out now.
return core_text::strlen($string);
+25
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.
*/