WordPress.org

Make WordPress Core

Changeset 43220


Ignore:
Timestamp:
05/10/2018 05:57:38 PM (19 months 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.