Work around change in SimpleXMLElement behavior introduced in PHP 7.3.17
authorC. Scott Ananian <cscott@cscott.net>
Thu, 30 Apr 2020 22:10:43 +0000 (18:10 -0400)
committerReedy <reedy@wikimedia.org>
Thu, 30 Apr 2020 23:15:34 +0000 (23:15 +0000)
commitb1f648042f08a33314861f4cd22758dc02068f46
tree595255091d02e462611e3479834e86909fdb6341
parent3bdc458b4f70a05652f1b59a51c9a2e06006268c
Work around change in SimpleXMLElement behavior introduced in PHP 7.3.17

Upstream bug reports of the behavior change introduced in PHP 7.3.17 (and
applied to PHP 7.4 branch as well):
https://bugs.php.net/bug.php?id=79528
https://bugs.php.net/bug.php?id=79485

The reponsible commit in PHP was https://github.com/php/php-src/pull/5246

This was a "bug fix" in the sense that SimpleXML used to discard the
attributes on the namespace elements, which look like this:
     <namespace key="-2" case="first-letter">Media</namespace>
SimpleXML used to return this as a string "Media" instead of a
SimpleXMLElement... but ExportTest (inadvertently?) depended on that
behavior.

In any case, if we iterate over SimpleXMLElement::children() we always
get SimpleXMLElements, not "sometimes strings", and so our code will
correct correctly on PHP below 7.3.17 and above, regardless of how PHP
decides to handle this "bug".

Bug: T250568
Change-Id: I9c2cb6a86fd6e8023c1979ec6838071a87a7bcea
(cherry picked from commit 7f1ad7d9848782d025bad63149e058964fc37c97)
tests/phpunit/includes/ExportTest.php