From 5dc866cc703419a889204b96c26c45afdbbcd167 Mon Sep 17 00:00:00 2001 From: Paul Holden Date: Mon, 22 Nov 2021 22:16:03 +0000 Subject: [PATCH] MDL-73054 filter_emoticon: re-factor test data providers. PHPUnit test dataProvider methods should not modify global state, such as initializing $OUTPUT, as they can cause failures in unrelated tests at a distance. --- filter/emoticon/tests/filter_test.php | 58 +++++++++++++++++++-------- 1 file changed, 42 insertions(+), 16 deletions(-) diff --git a/filter/emoticon/tests/filter_test.php b/filter/emoticon/tests/filter_test.php index 9935db92d80..d9bdfdfde7c 100644 --- a/filter/emoticon/tests/filter_test.php +++ b/filter/emoticon/tests/filter_test.php @@ -33,6 +33,47 @@ require_once($CFG->dirroot . '/filter/emoticon/filter.php'); // Include the code */ class filter_emoticon_testcase extends advanced_testcase { + /** + * Test that filter ignores nolink/pre element, and processes remaining text + * + * @param string $input + * @param string $expectedprefix + * + * @dataProvider filter_emoticon_filtered_provider + */ + public function test_filter_emoticon_filtered(string $input, string $expectedprefix): void { + $this->resetAfterTest(); + + $filteredtext = (new testable_filter_emoticon())->filter($input, [ + 'originalformat' => FORMAT_HTML, + ]); + + $this->assertStringStartsWith($expectedprefix, $filteredtext); + $this->assertStringEndsWith($this->get_converted_content_for_emoticon('(n)'), $filteredtext); + } + + /** + * Data provider for {@see test_filter_emoticon_filtered} + * + * @return string[] + */ + public function filter_emoticon_filtered_provider(): array { + return [ + 'FORMAT_HTML is filtered' => [ + 'input' => 'Hello(n)', + 'expectedprefix' => 'Hello', + ], + 'Nested nolink should not be processed, emoticon postfix should be' => [ + 'input' => '(n)(n)(n)', + 'expectedprefix' => '(n)(n)', + ], + 'Nested pre should not be processed, emoticon postfix should be' => [ + 'input' => '
(n)
(n)
(n)', + 'expectedprefix' => '
(n)
(n)
', + ], + ]; + } + /** * Tests the filter doesn't affect nolink classes. * @@ -48,7 +89,7 @@ class filter_emoticon_testcase extends advanced_testcase { } /** - * The data provider for filter emoticon tests. + * The data provider for filter emoticon tests, containing input that is not expected to be filtered * * @return array */ @@ -70,11 +111,6 @@ class filter_emoticon_testcase extends advanced_testcase { 'format' => FORMAT_PLAIN, 'expected' => $grr, ], - 'FORMAT_HTML is filtered' => [ - 'input' => $grr, - 'format' => FORMAT_HTML, - 'expected' => $this->get_converted_content_for_emoticon($grr), - ], 'Script tag should not be processed' => [ 'input' => "", 'format' => FORMAT_HTML, @@ -90,11 +126,6 @@ class filter_emoticon_testcase extends advanced_testcase { 'format' => FORMAT_HTML, 'expected' => '(n)(n)', ], - 'Nested nolink should not be processed but following emoticon' => [ - 'input' => '(n)(n)(n)', - 'format' => FORMAT_HTML, - 'expected' => '(n)(n)' . $this->get_converted_content_for_emoticon('(n)'), - ], 'Basic pre should not be processed' => [ 'input' => '
(n)
', 'format' => FORMAT_HTML, @@ -105,11 +136,6 @@ class filter_emoticon_testcase extends advanced_testcase { 'format' => FORMAT_HTML, 'expected' => '
(n)
(n)
', ], - 'Nested pre should not be processed but following emoticon' => [ - 'input' => '
(n)
(n)
(n)', - 'format' => FORMAT_HTML, - 'expected' => '
(n)
(n)
' . $this->get_converted_content_for_emoticon('(n)'), - ], ]; }