Page MenuHomePhabricator

CI failures on PHP 8.4 from some core tests that call Parsoid's `DOMCompat::querySelector` method
Closed, ResolvedPublicBUG REPORT

Description

I first noticed these test failures on the PHP 8.4 'check experimental' test for this DNM patch to mediawiki/vendor (that pulls in the originally-proposed fix for T409283).
However, I can also reproduce this locally when running the master branch of mediawiki/core (as long as I have authoritative class maps disabled, for the reasons described in that task).

Steps to replicate the issue

  • Have a local MediaWiki development environment
  • Update Composer dependencies using composer update
  • Run composer phpunit:entrypoint -- --filter "(Contributions|ChangesList)Test"

What happens?

There were 5 errors:

1) ChangesListTest::testInsertLogEntry
TypeError: PHPUnit\Framework\Assert::assertStringContainsString(): Argument #2 ($haystack) must be of type string, null given, called in /workspace/src/tests/phpunit/includes/RecentChanges/ChangesListTest.php on line 78

/workspace/src/tests/phpunit/includes/RecentChanges/ChangesListTest.php:78
=== Logs generated by test case
[...]
===

2) MediaWiki\Tests\Specials\SpecialContributionsTest::testExecuteNoResultsForIPTarget with data set "Temporary accounts not enabled" (false, 'contributions-title')
TypeError: PHPUnit\Framework\Assert::assertStringNotContainsString(): Argument #2 ($haystack) must be of type string, null given, called in /workspace/src/tests/phpunit/includes/Specials/SpecialContributionsTest.php on line 210

/workspace/src/tests/phpunit/includes/Specials/SpecialContributionsTest.php:210
=== Logs generated by test case
[...]
===

3) MediaWiki\Tests\Specials\SpecialContributionsTest::testExecuteNoResultsForIPTarget with data set "Temporary accounts enabled" (true, 'contributions-title-for-ip-wh...nabled')
TypeError: PHPUnit\Framework\Assert::assertStringNotContainsString(): Argument #2 ($haystack) must be of type string, null given, called in /workspace/src/tests/phpunit/includes/Specials/SpecialContributionsTest.php on line 210

/workspace/src/tests/phpunit/includes/Specials/SpecialContributionsTest.php:210
=== Logs generated by test case
[...]
===

4) MediaWiki\Tests\Specials\SpecialDeletedContributionsTest::testExecuteNoResultsForIPTarget with data set "Temporary accounts not enabled" (false, 'deletedcontributions-title')
TypeError: PHPUnit\Framework\Assert::assertStringNotContainsString(): Argument #2 ($haystack) must be of type string, null given, called in /workspace/src/tests/phpunit/includes/Specials/SpecialDeletedContributionsTest.php on line 80

/workspace/src/tests/phpunit/includes/Specials/SpecialDeletedContributionsTest.php:80
=== Logs generated by test case
[...]
===

5) MediaWiki\Tests\Specials\SpecialDeletedContributionsTest::testExecuteNoResultsForIPTarget with data set "Temporary accounts enabled" (true, 'deletedcontributions-title-fo...nabled')
TypeError: PHPUnit\Framework\Assert::assertStringNotContainsString(): Argument #2 ($haystack) must be of type string, null given, called in /workspace/src/tests/phpunit/includes/Specials/SpecialDeletedContributionsTest.php on line 80

/workspace/src/tests/phpunit/includes/Specials/SpecialDeletedContributionsTest.php:80
=== Logs generated by test case
[...]
===

(copied from https://integration.wikimedia.org/ci/job/quibble-for-mediawiki-core-vendor-mysql-php84/12/console, but I get the same errors locally)

Software version
mw/core @ 4676165fa46f

Other information/Notes
Potentially-relevant lines from the test files in question:

tests/phpunit/includes/RecentChanges/ChangesListTest.php; lines 69-78
		// Get the log entry HTML line and check that the wrapping element is present.
		$html = $changesList->insertLogEntry( $recentChange );
		$htmlElement = DOMUtils::parseHTML( $html );
		$wrappingElement = DOMCompat::querySelector(
			$htmlElement, '.mw-changeslist-log-entry.class-added-by-hook'
		);
		$this->assertNotNull( $wrappingElement );
		$lineInnerHtml = $wrappingElement->nodeValue;

		$this->assertStringContainsString( '(logentry-delete-delete', $lineInnerHtml );

[https://github.com/wikimedia/mediawiki/blob/4676165fa46ff40a816886423d7de87e799bb843/tests/phpunit/includes/RecentChanges/ChangesListTest.php#L69-L78]

tests/phpunit/includes/Specials/SpecialContributionsTest.php; lines 207-210
		[ $html ] = $this->executeSpecialPage( '4.3.2.1', null, null, null, true );
		$specialPageDocument = DOMUtils::parseHTML( $html );
		$contentHtml = DOMCompat::querySelector( $specialPageDocument, '#content' )->nodeValue;
		$this->assertStringNotContainsString( 'mw-pager-body', $contentHtml );

[https://github.com/wikimedia/mediawiki/blob/4676165fa46ff40a816886423d7de87e799bb843/tests/phpunit/includes/Specials/SpecialContributionsTest.php#L207-L210]

tests/phpunit/includes/Specials/SpecialDeletedContributionsTest.php; lines 71-80
		[ $html ] = $this->executeSpecialPage(
			'127.0.0.1',
			null,
			null,
			self::$sysop,
			true
		);
		$specialPageDocument = DOMUtils::parseHTML( $html );
		$contentHtml = DOMCompat::querySelector( $specialPageDocument, '#content' )->nodeValue;
		$this->assertStringNotContainsString( 'mw-pager-body', $contentHtml );

[https://github.com/wikimedia/mediawiki/blob/4676165fa46ff40a816886423d7de87e799bb843/tests/phpunit/includes/Specials/SpecialDeletedContributionsTest.php#L71-L80]


I'm assuming that this should maybe be fixed within Parsoid due to (what seems like) breakage of back-compatibility from PHP 8.4 onwards; but also tagging the components that have failing tests for visibility.

Event Timeline

Restricted Application added a subscriber: Aklapper. · View Herald Transcript
A_smart_kitten renamed this task from CI failures on PHP 8.4 from core tests that call Parsoid's `DOMCompat::querySelector` method to CI failures on PHP 8.4 from some core tests that call Parsoid's `DOMCompat::querySelector` method.Dec 29 2025, 9:26 PM
A_smart_kitten updated the task description. (Show Details)

Weird that these don't seem to appear for PHP 8.5...

They do for me locally when using PHP 8.5 & running composer phpunit:entrypoint -- --filter "(Contributions|ChangesList)Test" -- if they're not yet appearing in Wikimedia's PHP8.5 CI, maybe that's because of some way/order in which it runs/filters the tests?

Looking at https://integration.wikimedia.org/ci/job/quibble-for-mediawiki-core-vendor-mysql-php85/6/consoleFull vs https://integration.wikimedia.org/ci/job/quibble-for-mediawiki-core-vendor-mysql-php84/12/consoleFull it seems the batch of 18752 is an earlier batch that is failing, so yeah, it's just group ordering in that sense.

And because of the warnings/fails in that batch/grouping, it's not moving onto the next. So that makes some sense.

The bug is the usage of ->nodeValue to get the inner HTML of a node; using DOMCompat::getInnerHTML() will do the same thing in a standards-compliant (and PHP8.4-friendly) way. Patch incoming.

Change #1224706 had a related patch set uploaded (by C. Scott Ananian; author: C. Scott Ananian):

[mediawiki/core@master] [php8.4] Use DOMCompat::innerHTML() instead of Element::nodeValue

https://gerrit.wikimedia.org/r/1224706

Change #1224706 merged by jenkins-bot:

[mediawiki/core@master] [php8.4] Use DOMCompat::innerHTML() instead of Element::nodeValue

https://gerrit.wikimedia.org/r/1224706

Change #1224731 had a related patch set uploaded (by Reedy; author: C. Scott Ananian):

[mediawiki/core@REL1_45] [php8.4] Use DOMCompat::innerHTML() instead of Element::nodeValue

https://gerrit.wikimedia.org/r/1224731

Change #1224732 had a related patch set uploaded (by Reedy; author: C. Scott Ananian):

[mediawiki/core@REL1_44] [php8.4] Use DOMCompat::innerHTML() instead of Element::nodeValue

https://gerrit.wikimedia.org/r/1224732

Change #1224735 had a related patch set uploaded (by Reedy; author: C. Scott Ananian):

[mediawiki/core@REL1_43] [php8.4] Use DOMCompat::innerHTML() instead of Element::nodeValue

https://gerrit.wikimedia.org/r/1224735

Change #1224731 merged by jenkins-bot:

[mediawiki/core@REL1_45] [php8.4] Use DOMCompat::innerHTML() instead of Element::nodeValue

https://gerrit.wikimedia.org/r/1224731

Change #1224732 merged by jenkins-bot:

[mediawiki/core@REL1_44] [php8.4] Use DOMCompat::innerHTML() instead of Element::nodeValue

https://gerrit.wikimedia.org/r/1224732

Change #1224735 merged by jenkins-bot:

[mediawiki/core@REL1_43] [php8.4] Use DOMCompat::innerHTML() instead of Element::nodeValue

https://gerrit.wikimedia.org/r/1224735

For the record - confirming that, in a local dev environment (with mediawiki/core & mediawiki/skins/Vector), the reported tests pass using PHP 8.4 following @cscott's patch :)

$ composer phpunit:entrypoint -- --filter "(Contributions|ChangesList)Test"
Using PHP 8.4.16
Running with MediaWiki settings because there might be integration tests
PHPUnit 9.6.21 by Sebastian Bergmann and contributors.

................................................................. 65 / 67 ( 97%)
..                                                                67 / 67 (100%)

Time: 00:03.327, Memory: 362.25 MB

OK (67 tests, 135 assertions)

Closing as resolved based on that, and as all the backports have been merged AFAICS. Feel free to reopen if there's something I've missed!

Actually, a follow-up: I took a look at Codesearch (https://codesearch.wmcloud.org/deployed/?q=nodeValue&files=%5C.php for WMF-deployed code only); and, unfortunately, it seems like these failures relating to nodeValue might've been indicative of a wider backwards-compatibility problem.

To take DiscussionTools as a semi-random example from that Codesearch result:

$ composer phpunit:entrypoint -- extensions/DiscussionTools --filter "Comment(Formatter|Modifier)Test" --verbose
Using PHP 8.4.16
Running with MediaWiki settings because there might be integration tests
PHPUnit 9.6.21 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.16
Configuration: /[...]/mediawiki/phpunit.xml.dist

.........E..E..E..E..E..E.....E..E........E..E..E..E..E..E.....  63 / 129 ( 48%)
................................EEEEE.......................... 126 / 129 ( 97%)
...                                                             129 / 129 (100%)

Time: 00:21.486, Memory: 88.50 MB

There were 19 errors:

1) MediaWiki\Extension\DiscussionTools\Tests\CommentFormatterTest::testAddDiscussionToolsInternal with data set #2 ('plwiki oldparser', 'Wikipedia:Kawiarenka/Artykuły...iernik', 'cases/pl-big-oldparser/pl-big...r.html', 'cases/pl-big-oldparser/pl-big...y.html', '../data/plwiki-config.json', '../data/plwiki-data.json', false, false)
Error: Cannot modify readonly property Dom\HTMLElement::$nodeValue

/[...]/mediawiki/extensions/DiscussionTools/includes/CommentFormatter.php:601
/[...]/mediawiki/extensions/DiscussionTools/includes/BatchModifyElements.php:43
/[...]/mediawiki/includes/Html/HtmlHelperTrait.php:42
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Serializer/Serializer.php:289
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Serializer/Serializer.php:258
/[...]/mediawiki/vendor/wikimedia/remex-html/src/TreeBuilder/TreeBuilder.php:725
/[...]/mediawiki/vendor/wikimedia/remex-html/src/TreeBuilder/InBody.php:672
/[...]/mediawiki/vendor/wikimedia/remex-html/src/TreeBuilder/Dispatcher.php:434
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Tokenizer/Tokenizer.php:619
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Tokenizer/Tokenizer.php:406
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Tokenizer/Tokenizer.php:214
/[...]/mediawiki/includes/Html/HtmlHelper.php:65
/[...]/mediawiki/extensions/DiscussionTools/includes/BatchModifyElements.php:28
/[...]/mediawiki/extensions/DiscussionTools/tests/phpunit/CommentFormatterTest.php:142
=== Logs generated by test case
[...]
===

2) MediaWiki\Extension\DiscussionTools\Tests\CommentFormatterTest::testAddDiscussionToolsInternal with data set #5 ('enwiki oldparser', 'Wikipedia:Village pump (techn...ve 175', 'cases/en-big-oldparser/en-big...r.html', 'cases/en-big-oldparser/en-big...y.html', '../data/enwiki-config.json', '../data/enwiki-data.json', false, false)
Error: Cannot modify readonly property Dom\HTMLElement::$nodeValue

/[...]/mediawiki/extensions/DiscussionTools/includes/CommentFormatter.php:601
/[...]/mediawiki/extensions/DiscussionTools/includes/BatchModifyElements.php:43
/[...]/mediawiki/includes/Html/HtmlHelperTrait.php:42
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Serializer/Serializer.php:289
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Serializer/Serializer.php:258
/[...]/mediawiki/vendor/wikimedia/remex-html/src/TreeBuilder/TreeBuilder.php:725
/[...]/mediawiki/vendor/wikimedia/remex-html/src/TreeBuilder/InBody.php:672
/[...]/mediawiki/vendor/wikimedia/remex-html/src/TreeBuilder/Dispatcher.php:434
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Tokenizer/Tokenizer.php:619
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Tokenizer/Tokenizer.php:406
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Tokenizer/Tokenizer.php:214
/[...]/mediawiki/includes/Html/HtmlHelper.php:65
/[...]/mediawiki/extensions/DiscussionTools/includes/BatchModifyElements.php:28
/[...]/mediawiki/extensions/DiscussionTools/tests/phpunit/CommentFormatterTest.php:142
=== Logs generated by test case
[...]
===

3) MediaWiki\Extension\DiscussionTools\Tests\CommentFormatterTest::testAddDiscussionToolsInternal with data set #8 ('arwiki no-paragraph oldparser', 'نقاش المستخدم:Khaled', 'cases/ar-no-paragraph-oldpars...r.html', 'cases/ar-no-paragraph-oldpars...y.html', '../data/arwiki-config.json', '../data/arwiki-data.json', false, false)
Error: Cannot modify readonly property Dom\HTMLElement::$nodeValue

/[...]/mediawiki/extensions/DiscussionTools/includes/CommentFormatter.php:601
/[...]/mediawiki/extensions/DiscussionTools/includes/BatchModifyElements.php:43
/[...]/mediawiki/includes/Html/HtmlHelperTrait.php:42
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Serializer/Serializer.php:289
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Serializer/Serializer.php:258
/[...]/mediawiki/vendor/wikimedia/remex-html/src/TreeBuilder/TreeBuilder.php:725
/[...]/mediawiki/vendor/wikimedia/remex-html/src/TreeBuilder/InBody.php:672
/[...]/mediawiki/vendor/wikimedia/remex-html/src/TreeBuilder/Dispatcher.php:434
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Tokenizer/Tokenizer.php:619
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Tokenizer/Tokenizer.php:406
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Tokenizer/Tokenizer.php:214
/[...]/mediawiki/includes/Html/HtmlHelper.php:65
/[...]/mediawiki/extensions/DiscussionTools/includes/BatchModifyElements.php:28
/[...]/mediawiki/extensions/DiscussionTools/tests/phpunit/CommentFormatterTest.php:142
=== Logs generated by test case
[...]
===

4) MediaWiki\Extension\DiscussionTools\Tests\CommentFormatterTest::testAddDiscussionToolsInternal with data set #11 ('frwiki unsigned oldparser', 'Discussion:Le Monde', 'cases/fr-unsigned-oldparser/f...r.html', 'cases/fr-unsigned-oldparser/f...y.html', '../data/frwiki-config.json', '../data/frwiki-data.json', false, false)
Error: Cannot modify readonly property Dom\HTMLElement::$nodeValue

/[...]/mediawiki/extensions/DiscussionTools/includes/CommentFormatter.php:601
/[...]/mediawiki/extensions/DiscussionTools/includes/BatchModifyElements.php:43
/[...]/mediawiki/includes/Html/HtmlHelperTrait.php:42
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Serializer/Serializer.php:289
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Serializer/Serializer.php:258
/[...]/mediawiki/vendor/wikimedia/remex-html/src/TreeBuilder/TreeBuilder.php:725
/[...]/mediawiki/vendor/wikimedia/remex-html/src/TreeBuilder/InBody.php:672
/[...]/mediawiki/vendor/wikimedia/remex-html/src/TreeBuilder/Dispatcher.php:434
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Tokenizer/Tokenizer.php:619
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Tokenizer/Tokenizer.php:406
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Tokenizer/Tokenizer.php:214
/[...]/mediawiki/includes/Html/HtmlHelper.php:65
/[...]/mediawiki/extensions/DiscussionTools/includes/BatchModifyElements.php:28
/[...]/mediawiki/extensions/DiscussionTools/tests/phpunit/CommentFormatterTest.php:142
=== Logs generated by test case
[...]
===

5) MediaWiki\Extension\DiscussionTools\Tests\CommentFormatterTest::testAddDiscussionToolsInternal with data set #14 ('itwiki unsigned oldparser', 'Aiuto:Sportello informazioni', 'cases/it-unsigned-oldparser/i...r.html', 'cases/it-unsigned-oldparser/i...y.html', '../data/itwiki-config.json', '../data/itwiki-data.json', false, false)
Error: Cannot modify readonly property Dom\HTMLElement::$nodeValue

/[...]/mediawiki/extensions/DiscussionTools/includes/CommentFormatter.php:601
/[...]/mediawiki/extensions/DiscussionTools/includes/BatchModifyElements.php:43
/[...]/mediawiki/includes/Html/HtmlHelperTrait.php:42
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Serializer/Serializer.php:289
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Serializer/Serializer.php:258
/[...]/mediawiki/vendor/wikimedia/remex-html/src/TreeBuilder/TreeBuilder.php:725
/[...]/mediawiki/vendor/wikimedia/remex-html/src/TreeBuilder/InBody.php:672
/[...]/mediawiki/vendor/wikimedia/remex-html/src/TreeBuilder/Dispatcher.php:434
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Tokenizer/Tokenizer.php:619
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Tokenizer/Tokenizer.php:406
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Tokenizer/Tokenizer.php:214
/[...]/mediawiki/includes/Html/HtmlHelper.php:65
/[...]/mediawiki/extensions/DiscussionTools/includes/BatchModifyElements.php:28
/[...]/mediawiki/extensions/DiscussionTools/tests/phpunit/CommentFormatterTest.php:142
=== Logs generated by test case
[...]
===

6) MediaWiki\Extension\DiscussionTools\Tests\CommentFormatterTest::testAddDiscussionToolsInternal with data set #17 ('Double signature 1', 'Wikipedia:Requests for commen... names', 'cases/double-signature1/doubl...1.html', 'cases/double-signature1/doubl...y.html', '../data/enwiki-config.json', '../data/enwiki-data.json', false, false)
Error: Cannot modify readonly property Dom\HTMLElement::$nodeValue

/[...]/mediawiki/extensions/DiscussionTools/includes/CommentFormatter.php:601
/[...]/mediawiki/extensions/DiscussionTools/includes/BatchModifyElements.php:43
/[...]/mediawiki/includes/Html/HtmlHelperTrait.php:42
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Serializer/Serializer.php:289
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Serializer/Serializer.php:258
/[...]/mediawiki/vendor/wikimedia/remex-html/src/TreeBuilder/TreeBuilder.php:725
/[...]/mediawiki/vendor/wikimedia/remex-html/src/TreeBuilder/InBody.php:672
/[...]/mediawiki/vendor/wikimedia/remex-html/src/TreeBuilder/Dispatcher.php:434
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Tokenizer/Tokenizer.php:619
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Tokenizer/Tokenizer.php:406
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Tokenizer/Tokenizer.php:214
/[...]/mediawiki/includes/Html/HtmlHelper.php:65
/[...]/mediawiki/extensions/DiscussionTools/includes/BatchModifyElements.php:28
/[...]/mediawiki/extensions/DiscussionTools/tests/phpunit/CommentFormatterTest.php:142
=== Logs generated by test case
[...]
===

7) MediaWiki\Extension\DiscussionTools\Tests\CommentFormatterTest::testAddDiscussionToolsInternal with data set #23 ('Mess caused by unclosed <font...kitext', 'Overleg:Unclosed font', 'cases/unclosed-font/unclosed-font.html', 'cases/unclosed-font/unclosed-...y.html', '../data/nlwiki-config.json', '../data/nlwiki-data.json', false, false)
Error: Cannot modify readonly property Dom\HTMLElement::$nodeValue

/[...]/mediawiki/extensions/DiscussionTools/includes/CommentFormatter.php:601
/[...]/mediawiki/extensions/DiscussionTools/includes/BatchModifyElements.php:43
/[...]/mediawiki/includes/Html/HtmlHelperTrait.php:42
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Serializer/Serializer.php:289
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Serializer/Serializer.php:258
/[...]/mediawiki/vendor/wikimedia/remex-html/src/TreeBuilder/TreeBuilder.php:725
/[...]/mediawiki/vendor/wikimedia/remex-html/src/TreeBuilder/InBody.php:672
/[...]/mediawiki/vendor/wikimedia/remex-html/src/TreeBuilder/Dispatcher.php:434
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Tokenizer/Tokenizer.php:619
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Tokenizer/Tokenizer.php:406
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Tokenizer/Tokenizer.php:214
/[...]/mediawiki/includes/Html/HtmlHelper.php:65
/[...]/mediawiki/extensions/DiscussionTools/includes/BatchModifyElements.php:28
/[...]/mediawiki/extensions/DiscussionTools/tests/phpunit/CommentFormatterTest.php:142
=== Logs generated by test case
[...]
===

8) MediaWiki\Extension\DiscussionTools\Tests\CommentFormatterTest::testAddDiscussionToolsInternal with data set #26 ('Reply inserted inside/outside...ements', 'Talk:Wrappers', 'cases/wrappers/wrappers.html', 'cases/wrappers/wrappers-forma...y.html', '../data/enwiki-config.json', '../data/enwiki-data.json', false, false)
Error: Cannot modify readonly property Dom\HTMLElement::$nodeValue

/[...]/mediawiki/extensions/DiscussionTools/includes/CommentFormatter.php:601
/[...]/mediawiki/extensions/DiscussionTools/includes/BatchModifyElements.php:43
/[...]/mediawiki/includes/Html/HtmlHelperTrait.php:42
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Serializer/Serializer.php:289
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Serializer/Serializer.php:258
/[...]/mediawiki/vendor/wikimedia/remex-html/src/TreeBuilder/TreeBuilder.php:725
/[...]/mediawiki/vendor/wikimedia/remex-html/src/TreeBuilder/InBody.php:672
/[...]/mediawiki/vendor/wikimedia/remex-html/src/TreeBuilder/Dispatcher.php:434
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Tokenizer/Tokenizer.php:619
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Tokenizer/Tokenizer.php:406
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Tokenizer/Tokenizer.php:214
/[...]/mediawiki/includes/Html/HtmlHelper.php:65
/[...]/mediawiki/extensions/DiscussionTools/includes/BatchModifyElements.php:28
/[...]/mediawiki/extensions/DiscussionTools/tests/phpunit/CommentFormatterTest.php:142
=== Logs generated by test case
[...]
===

9) MediaWiki\Extension\DiscussionTools\Tests\CommentFormatterTest::testAddDiscussionToolsInternal with data set #35 ('Signatures in funny places', 'Talk:Signatures funny', 'cases/signatures-funny/signat...y.html', 'cases/signatures-funny/signat...y.html', '../data/enwiki-config.json', '../data/enwiki-data.json', false, false)
Error: Cannot modify readonly property Dom\HTMLElement::$nodeValue

/[...]/mediawiki/extensions/DiscussionTools/includes/CommentFormatter.php:601
/[...]/mediawiki/extensions/DiscussionTools/includes/BatchModifyElements.php:43
/[...]/mediawiki/includes/Html/HtmlHelperTrait.php:42
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Serializer/Serializer.php:289
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Serializer/Serializer.php:258
/[...]/mediawiki/vendor/wikimedia/remex-html/src/TreeBuilder/TreeBuilder.php:725
/[...]/mediawiki/vendor/wikimedia/remex-html/src/TreeBuilder/InBody.php:672
/[...]/mediawiki/vendor/wikimedia/remex-html/src/TreeBuilder/Dispatcher.php:434
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Tokenizer/Tokenizer.php:619
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Tokenizer/Tokenizer.php:406
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Tokenizer/Tokenizer.php:214
/[...]/mediawiki/includes/Html/HtmlHelper.php:65
/[...]/mediawiki/extensions/DiscussionTools/includes/BatchModifyElements.php:28
/[...]/mediawiki/extensions/DiscussionTools/tests/phpunit/CommentFormatterTest.php:142
=== Logs generated by test case
[...]
===

10) MediaWiki\Extension\DiscussionTools\Tests\CommentFormatterTest::testAddDiscussionToolsInternal with data set #38 ('For parser cache', 'Talk:For parser cache', 'cases/for-parser-cache/for-pa...e.html', 'cases/for-parser-cache/for-pa...y.html', '../data/enwiki-config.json', '../data/enwiki-data.json', false, false)
Error: Cannot modify readonly property Dom\HTMLElement::$nodeValue

/[...]/mediawiki/extensions/DiscussionTools/includes/CommentFormatter.php:601
/[...]/mediawiki/extensions/DiscussionTools/includes/BatchModifyElements.php:43
/[...]/mediawiki/includes/Html/HtmlHelperTrait.php:42
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Serializer/Serializer.php:289
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Serializer/Serializer.php:258
/[...]/mediawiki/vendor/wikimedia/remex-html/src/TreeBuilder/TreeBuilder.php:725
/[...]/mediawiki/vendor/wikimedia/remex-html/src/TreeBuilder/InBody.php:672
/[...]/mediawiki/vendor/wikimedia/remex-html/src/TreeBuilder/Dispatcher.php:434
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Tokenizer/Tokenizer.php:619
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Tokenizer/Tokenizer.php:406
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Tokenizer/Tokenizer.php:214
/[...]/mediawiki/includes/Html/HtmlHelper.php:65
/[...]/mediawiki/extensions/DiscussionTools/includes/BatchModifyElements.php:28
/[...]/mediawiki/extensions/DiscussionTools/tests/phpunit/CommentFormatterTest.php:142
=== Logs generated by test case
[...]
===

11) MediaWiki\Extension\DiscussionTools\Tests\CommentFormatterTest::testAddDiscussionToolsInternal with data set #41 ('For parser cache (new)', 'Talk:For parser cache', 'cases/for-parser-cache-new/fo...w.html', 'cases/for-parser-cache-new/fo...y.html', '../data/enwiki-config.json', '../data/enwiki-data.json', false, false)
Error: Cannot modify readonly property Dom\HTMLElement::$nodeValue

/[...]/mediawiki/extensions/DiscussionTools/includes/CommentFormatter.php:601
/[...]/mediawiki/extensions/DiscussionTools/includes/BatchModifyElements.php:43
/[...]/mediawiki/includes/Html/HtmlHelperTrait.php:42
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Serializer/Serializer.php:289
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Serializer/Serializer.php:258
/[...]/mediawiki/vendor/wikimedia/remex-html/src/TreeBuilder/TreeBuilder.php:725
/[...]/mediawiki/vendor/wikimedia/remex-html/src/TreeBuilder/InBody.php:672
/[...]/mediawiki/vendor/wikimedia/remex-html/src/TreeBuilder/Dispatcher.php:434
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Tokenizer/Tokenizer.php:619
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Tokenizer/Tokenizer.php:406
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Tokenizer/Tokenizer.php:214
/[...]/mediawiki/includes/Html/HtmlHelper.php:65
/[...]/mediawiki/extensions/DiscussionTools/includes/BatchModifyElements.php:28
/[...]/mediawiki/extensions/DiscussionTools/tests/phpunit/CommentFormatterTest.php:142
=== Logs generated by test case
[...]
===

12) MediaWiki\Extension\DiscussionTools\Tests\CommentFormatterTest::testAddDiscussionToolsInternal with data set #44 ('tracked template', 'Commons talk:SPARQL query service', 'cases/tracked-template/tracke...e.html', 'cases/tracked-template/tracke...y.html', '../data/commonswiki-config.json', '../data/commonswiki-data.json', false, false)
Error: Cannot modify readonly property Dom\HTMLElement::$nodeValue

/[...]/mediawiki/extensions/DiscussionTools/includes/CommentFormatter.php:601
/[...]/mediawiki/extensions/DiscussionTools/includes/BatchModifyElements.php:43
/[...]/mediawiki/includes/Html/HtmlHelperTrait.php:42
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Serializer/Serializer.php:289
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Serializer/Serializer.php:258
/[...]/mediawiki/vendor/wikimedia/remex-html/src/TreeBuilder/TreeBuilder.php:725
/[...]/mediawiki/vendor/wikimedia/remex-html/src/TreeBuilder/InBody.php:672
/[...]/mediawiki/vendor/wikimedia/remex-html/src/TreeBuilder/Dispatcher.php:434
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Tokenizer/Tokenizer.php:619
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Tokenizer/Tokenizer.php:406
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Tokenizer/Tokenizer.php:214
/[...]/mediawiki/includes/Html/HtmlHelper.php:65
/[...]/mediawiki/extensions/DiscussionTools/includes/BatchModifyElements.php:28
/[...]/mediawiki/extensions/DiscussionTools/tests/phpunit/CommentFormatterTest.php:142
=== Logs generated by test case
[...]
===

13) MediaWiki\Extension\DiscussionTools\Tests\CommentFormatterTest::testAddDiscussionToolsInternal with data set #47 ('Timestamp format switch behavior', 'Talk:T304595', 'cases/timestamp-format-switch...h.html', 'cases/timestamp-format-switch...y.html', '../data/enwiki-config.json', '../data/enwiki-data.json', false, false)
Error: Cannot modify readonly property Dom\HTMLElement::$nodeValue

/[...]/mediawiki/extensions/DiscussionTools/includes/CommentFormatter.php:601
/[...]/mediawiki/extensions/DiscussionTools/includes/BatchModifyElements.php:43
/[...]/mediawiki/includes/Html/HtmlHelperTrait.php:42
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Serializer/Serializer.php:289
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Serializer/Serializer.php:258
/[...]/mediawiki/vendor/wikimedia/remex-html/src/TreeBuilder/TreeBuilder.php:725
/[...]/mediawiki/vendor/wikimedia/remex-html/src/TreeBuilder/InBody.php:672
/[...]/mediawiki/vendor/wikimedia/remex-html/src/TreeBuilder/Dispatcher.php:434
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Tokenizer/Tokenizer.php:619
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Tokenizer/Tokenizer.php:406
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Tokenizer/Tokenizer.php:214
/[...]/mediawiki/includes/Html/HtmlHelper.php:65
/[...]/mediawiki/extensions/DiscussionTools/includes/BatchModifyElements.php:28
/[...]/mediawiki/extensions/DiscussionTools/tests/phpunit/CommentFormatterTest.php:142
=== Logs generated by test case
[...]
===

14) MediaWiki\Extension\DiscussionTools\Tests\CommentFormatterTest::testAddDiscussionToolsInternal with data set #50 ('Suppressed talk classes', 'User_talk:ESanders_(WMF)/supp...d-talk', 'cases/suppressed-talk/suppres...k.html', 'cases/suppressed-talk/suppres...y.html', '../data/enwiki-config.json', '../data/enwiki-data.json', false, false)
Error: Cannot modify readonly property Dom\HTMLElement::$nodeValue

/[...]/mediawiki/extensions/DiscussionTools/includes/CommentFormatter.php:601
/[...]/mediawiki/extensions/DiscussionTools/includes/BatchModifyElements.php:43
/[...]/mediawiki/includes/Html/HtmlHelperTrait.php:42
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Serializer/Serializer.php:289
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Serializer/Serializer.php:258
/[...]/mediawiki/vendor/wikimedia/remex-html/src/TreeBuilder/TreeBuilder.php:725
/[...]/mediawiki/vendor/wikimedia/remex-html/src/TreeBuilder/InBody.php:672
/[...]/mediawiki/vendor/wikimedia/remex-html/src/TreeBuilder/Dispatcher.php:434
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Tokenizer/Tokenizer.php:619
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Tokenizer/Tokenizer.php:406
/[...]/mediawiki/vendor/wikimedia/remex-html/src/Tokenizer/Tokenizer.php:214
/[...]/mediawiki/includes/Html/HtmlHelper.php:65
/[...]/mediawiki/extensions/DiscussionTools/includes/BatchModifyElements.php:28
/[...]/mediawiki/extensions/DiscussionTools/tests/phpunit/CommentFormatterTest.php:142
=== Logs generated by test case
[...]
===

15) MediaWiki\Extension\DiscussionTools\Tests\CommentModifierTest::testAddReplyLink with data set #0 ('plwiki oldparser', 'Wikipedia:Kawiarenka/Artykuły...iernik', 'cases/pl-big-oldparser/pl-big...r.html', 'cases/pl-big-oldparser/pl-big...y.html', '../data/plwiki-config.json', '../data/plwiki-data.json')
Error: Cannot modify readonly property Dom\HTMLElement::$nodeValue

/[...]/mediawiki/extensions/DiscussionTools/tests/phpunit/CommentModifierTest.php:90
=== Logs generated by test case
[...]
===

16) MediaWiki\Extension\DiscussionTools\Tests\CommentModifierTest::testAddReplyLink with data set #1 ('enwiki oldparser', 'Wikipedia:Village pump (techn...ve 175', 'cases/en-big-oldparser/en-big...r.html', 'cases/en-big-oldparser/en-big...y.html', '../data/enwiki-config.json', '../data/enwiki-data.json')
Error: Cannot modify readonly property Dom\HTMLElement::$nodeValue

/[...]/mediawiki/extensions/DiscussionTools/tests/phpunit/CommentModifierTest.php:90
=== Logs generated by test case
[...]
===

17) MediaWiki\Extension\DiscussionTools\Tests\CommentModifierTest::testAddReplyLink with data set #2 ('arwiki no-paragraph oldparser', 'نقاش المستخدم:Khaled', 'cases/ar-no-paragraph-oldpars...r.html', 'cases/ar-no-paragraph-oldpars...y.html', '../data/arwiki-config.json', '../data/arwiki-data.json')
Error: Cannot modify readonly property Dom\HTMLElement::$nodeValue

/[...]/mediawiki/extensions/DiscussionTools/tests/phpunit/CommentModifierTest.php:90
=== Logs generated by test case
[...]
===

18) MediaWiki\Extension\DiscussionTools\Tests\CommentModifierTest::testAddReplyLink with data set #3 ('frwiki unsigned oldparser', 'Discussion:Le Monde', 'cases/fr-unsigned-oldparser/f...r.html', 'cases/fr-unsigned-oldparser/f...y.html', '../data/frwiki-config.json', '../data/frwiki-data.json')
Error: Cannot modify readonly property Dom\HTMLElement::$nodeValue

/[...]/mediawiki/extensions/DiscussionTools/tests/phpunit/CommentModifierTest.php:90
=== Logs generated by test case
[...]
===

19) MediaWiki\Extension\DiscussionTools\Tests\CommentModifierTest::testAddReplyLink with data set #4 ('Signatures in funny places', 'Talk:Signatures funny', 'cases/signatures-funny/signat...y.html', 'cases/signatures-funny/signat...y.html', '../data/enwiki-config.json', '../data/enwiki-data.json')
Error: Cannot modify readonly property Dom\HTMLElement::$nodeValue

/[...]/mediawiki/extensions/DiscussionTools/tests/phpunit/CommentModifierTest.php:90
=== Logs generated by test case
[...]
===

ERRORS!
Tests: 129, Assertions: 157, Errors: 19.

Granted that the Codesearch result linked above will probably have false-positives; but right now I'm feeling (at least) a bit concerned about the Parsoid and/or PHP backwards-compatibility break here (especially for parts of code that might not currently be covered by tests). cc @cscott