Make WordPress Core

Ticket #43619: 43619.diff

File 43619.diff, 1.7 KB (added by schlessera, 6 years ago)

Polyfill implementation with basic unit tests

  • src/wp-includes/compat.php

    diff --git src/wp-includes/compat.php src/wp-includes/compat.php
    index 7377a384c8..83221c74fc 100644
    endif; 
    505505if ( ! function_exists( 'spl_autoload_register' ) ) {
    506506        require_once ABSPATH . WPINC . '/spl-autoload-compat.php';
    507507}
     508
     509if ( ! function_exists( 'is_iterable' ) ) {
     510        /**
     511         * Polyfill for is_iterable function added in PHP 7.1.
     512         *
     513         * Verify that the content of a variable is a non-empty array or an object
     514         * implementing the Traversable interface.
     515         *
     516         * @since 5.0
     517         *
     518         * @param mixed $var Variable to check.
     519         *
     520         * @return bool Whether the provided variable is iterable.
     521         */
     522        function is_iterable( $var ) {
     523                return ( is_array( $var ) && ! empty( $var ) )
     524                        || $var instanceof Traversable;
     525        }
     526}
  • tests/phpunit/tests/compat.php

    diff --git tests/phpunit/tests/compat.php tests/phpunit/tests/compat.php
    index 3d873745b9..1dd0c925d4 100644
    EOT; 
    186186                $this->assertEquals( '["foo"]', $json->encodeUnsafe( array( 'foo' ) ) );
    187187                $this->assertEquals( array( 'foo' ), $json->decode( '["foo"]' ) );
    188188        }
     189
     190        /**
     191         * @dataProvider iterable_variable_test_data
     192         * @param mixed $variable
     193         * @param bool $expected
     194         */
     195        function test_is_iterable( $variable, $expected ) {
     196                $this->assertEquals( is_iterable( $variable ), $expected );
     197        }
     198
     199        function iterable_variable_test_data() {
     200                return array(
     201                        array( array( 1, 2, 3 ), true ),
     202                        array( new \ArrayIterator( array( 1, 2, 3 ) ), true ),
     203                        array( 1, false ),
     204                        array( 3.14, false ),
     205                        array( new stdClass(), false ),
     206                );
     207        }
    189208}
    190209
    191210/* used in test_mb_substr_phpcore */