aboutsummaryrefslogtreecommitdiffstats
path: root/tests/phpunit/unit/includes/GlobalFunctions
diff options
context:
space:
mode:
authorBartosz Dziewoński <dziewonski@fastmail.fm>2024-07-18 00:43:38 +0200
committerBartosz Dziewoński <dziewonski@fastmail.fm>2024-07-22 19:42:50 +0000
commit7d9ca602db202ea09362014d7029083ea58cb54a (patch)
tree344a977e5f81752d523fed1e403c32759b98e4dd /tests/phpunit/unit/includes/GlobalFunctions
parent7ad5a2ca5464e2686c1565aac46250a71673f323 (diff)
downloadmediawikicore-7d9ca602db202ea09362014d7029083ea58cb54a.tar.gz
mediawikicore-7d9ca602db202ea09362014d7029083ea58cb54a.zip
UserAuthority: Fix wikitext escaping for block errors (again)
In 279fd16bab170eba95158a7cf438cfac17ff37b5, I made what I thought was a trivial change to UserAuthorityTest: (diff slightly modified here for clarity) - $message = $permissionStatus->getErrors()[2]['message']; + $message = $permissionStatus->getMessages()[2]; $this->assertArrayEquals( $this->getFakeBlockMessageParams(), $message->getParams() ); And in 3d92cb2f824b333eef876211ad257478d1e8aa21, I made what I thought was also a trivial change to UserAuthority: (diff slightly modified here for clarity, likewise) - foreach ( $errors as $err ) { - $status->fatal( wfMessage( ...$err ) ); - } + $status->merge( $tempStatus ); However, it turns out these two pieces of code had vital roles: * The code in UserAuthority ensured that the final status contains Message objects instead of key strings + parameter arrays, and thus does not trigger wikitext escaping in a legacy code path (T368821). * The code in UserAuthorityTest accessed the internals of the same status with (now deprecated) getErrors() to check that it indeed contained a Message object, rather then a key string, which would cause a test failure due to a fatal error in the code below. getMessages() returns objects regardless of what's inside the status, so the test never fails. Thus I managed to disarm the regression test, and then cause exactly the regression it was supposed to prevent: block error messages on Special:CreateAccount have parameters shown as wikitext (T306494). Restore a foreach loop instead of `$status->merge()` to fix that, and document why it is there. Change the test so that it actually runs the code whose behavior it wants to verify, instead of a related but different method, hopefully making it more resilient against future developers. (I found the bug because the test started failing with the refactoring I'm trying to do in I625a48a6ecd3fad5c2ed76b23343a0fef91e1b83.) Bug: T306494 Change-Id: I7601fc51702cb33ef9d2b341ea555dc230d31537
Diffstat (limited to 'tests/phpunit/unit/includes/GlobalFunctions')
-rw-r--r--tests/phpunit/unit/includes/GlobalFunctions/WfEscapeWikiTextTest.php22
1 files changed, 12 insertions, 10 deletions
diff --git a/tests/phpunit/unit/includes/GlobalFunctions/WfEscapeWikiTextTest.php b/tests/phpunit/unit/includes/GlobalFunctions/WfEscapeWikiTextTest.php
index ed3b37fcf4ed..c9de634b8fe4 100644
--- a/tests/phpunit/unit/includes/GlobalFunctions/WfEscapeWikiTextTest.php
+++ b/tests/phpunit/unit/includes/GlobalFunctions/WfEscapeWikiTextTest.php
@@ -14,16 +14,18 @@ class WfEscapeWikiTextTest extends MediaWikiUnitTestCase {
$old = $wgEnableMagicLinks;
$wgEnableMagicLinks = [];
- $actual = wfEscapeWikiText( $input );
- // Sanity check that the output can be decoded back to the input
- // input as well.
- $decoded = html_entity_decode( $actual, ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML5 );
- $this->assertEquals( $decoded, (string)$input );
- // And that the output was what we expected
- $this->assertEquals( $expected, $actual );
-
- // restore global
- $wgEnableMagicLinks = $old;
+ try {
+ $actual = wfEscapeWikiText( $input );
+ // Sanity check that the output can be decoded back to the input
+ // input as well.
+ $decoded = html_entity_decode( $actual, ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML5 );
+ $this->assertEquals( $decoded, (string)$input );
+ // And that the output was what we expected
+ $this->assertEquals( $expected, $actual );
+ } finally {
+ // restore global
+ $wgEnableMagicLinks = $old;
+ }
}
public function provideEscape() {