Make WordPress Core

Changeset 43220 for trunk


Ignore:
Timestamp:
05/10/2018 05:57:38 PM (8 years ago)
Author:
SergeyBiryukov
Message:

General: In the is_countable() polyfill, if the provided object implements SimpleXMLElement or ResourceBundle, consider it countable.

Props ayeshrajans, jrf, desrosj.
Fixes #43583.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/compat.php

    r43036 r43220  
    521521         */
    522522        function is_countable( $var ) {
    523                 return ( is_array( $var ) || $var instanceof Countable );
     523                return ( is_array( $var )
     524                        || $var instanceof Countable
     525                        || $var instanceof SimpleXMLElement
     526                        || $var instanceof ResourceBundle
     527                );
    524528        }
    525529}
  • trunk/tests/phpunit/tests/compat.php

    r43036 r43220  
    189189
    190190        /**
     191         * Test that is_countable() is always available (either from PHP or WP).
     192         *
    191193         * @ticket 43583
    192194         */
    … …  
    201203         *
    202204         * @dataProvider countable_variable_test_data
     205         *
     206         * @param mixed $variable     Variable to check.
     207         * @param bool  $is_countable The expected return value of PHP 7.3 is_countable() function.
    203208         */
    204209        function test_is_countable_functionality( $variable, $is_countable ) {
    205                 $this->assertEquals( is_countable( $variable ), $is_countable );
     210                $this->assertSame( is_countable( $variable ), $is_countable );
    206211        }
    207212
    … …  
    233238
    234239        /**
     240         * Test is_countable() polyfill for ResourceBundle.
     241         *
     242         * @ticket 43583
     243         */
     244        function test_is_countable_ResourceBundle() {
     245                if ( ! class_exists( 'ResourceBundle' ) ) {
     246                        $this->markTestSkipped( 'The intl extension is not loaded. ResourceBundle not tested for is_countable().' );
     247                }
     248
     249                $this->assertTrue( is_countable( new ResourceBundle( 'en', null ) ) );
     250        }
     251
     252        /**
     253         * Test is_countable() polyfill for SimpleXMLElement.
     254         *
     255         * @ticket 43583
     256         */
     257        function test_is_countable_SimpleXMLElement() {
     258                if ( ! class_exists( 'SimpleXMLElement' ) ) {
     259                        $this->markTestSkipped( 'The xml extension is not loaded. SimpleXMLElement not tested for is_countable().' );
     260                }
     261
     262                $this->assertTrue( is_countable( new SimpleXMLElement( '<xml><tag>1</tag><tag>2</tag></xml>' ) ) );
     263        }
     264
     265        /**
     266         * Test that is_iterable() is always available (either from PHP or WP).
     267         *
    235268         * @ticket 43619
    236269         */
    … …  
    245278         *
    246279         * @dataProvider iterable_variable_test_data
     280         *
     281         * @param mixed $variable    Variable to check.
     282         * @param bool  $is_iterable The expected return value of PHP 7.1 is_iterable() function.
    247283         */
    248284        function test_is_iterable_functionality( $variable, $is_iterable ) {
    249                 $this->assertEquals( is_iterable( $variable ), $is_iterable );
     285                $this->assertSame( is_iterable( $variable ), $is_iterable );
    250286        }
    251287
Note: See TracChangeset for help on using the changeset viewer.