Make WordPress Core


Ignore:
Timestamp:
08/13/2022 12:09:41 PM (20 months ago)
Author:
SergeyBiryukov
Message:

Tests: Bring some consistency to serialization tests.

There were two sets of tests for is_serialized():

  • One in the functions.php file, based on the same file name in core.
  • One in a separate class in the functions directory.

To avoid confusion and make it easier to decide where new tests should go in the future, the existing tests are now combined in the latter location.

Includes:

  • Moving is_serialized() and maybe_serialize() tests into their own classes.
  • Using named data providers to make test output more descriptive.
  • Combining test cases and removing duplicates.

Follow-up to [278/tests], [279/tests], [328/tests], [32631], [45754], [47452], [49382], [53886], [53889].

See #55652.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tests/phpunit/tests/functions/isSerialized.php

    r53886 r53890  
    1212
    1313    /**
    14      * Run tests on `is_serialized()`.
    15      *
    1614     * @dataProvider data_is_serialized
     15     * @dataProvider data_is_not_serialized
    1716     *
    1817     * @param mixed $data     Data value to test.
    1918     * @param bool  $expected Expected function result.
    2019     */
    21     public function test_is_serialized_string( $data, $expected ) {
     20    public function test_is_serialized( $data, $expected ) {
    2221        $this->assertSame( $expected, is_serialized( $data ) );
    2322    }
    2423
    2524    /**
    26      * Data provider method for testing `is_serialized()`.
     25     * Data provider for `test_is_serialized()`.
    2726     *
    2827     * @return array
     
    3029    public function data_is_serialized() {
    3130        return array(
    32             'an array'                             => array(
     31            'serialized empty array'            => array(
     32                'data'     => serialize( array() ),
     33                'expected' => true,
     34            ),
     35            'serialized non-empty array'        => array(
     36                'data'     => serialize( array( 1, 1, 2, 3, 5, 8, 13 ) ),
     37                'expected' => true,
     38            ),
     39            'serialized empty object'           => array(
     40                'data'     => serialize( new stdClass() ),
     41                'expected' => true,
     42            ),
     43            'serialized non-empty object'       => array(
     44                'data'     => serialize(
     45                    (object) array(
     46                        'test' => true,
     47                        '1',
     48                        2,
     49                    )
     50                ),
     51                'expected' => true,
     52            ),
     53            'serialized null'                   => array(
     54                'data'     => serialize( null ),
     55                'expected' => true,
     56            ),
     57            'serialized boolean true'           => array(
     58                'data'     => serialize( true ),
     59                'expected' => true,
     60            ),
     61            'serialized boolean false'          => array(
     62                'data'     => serialize( false ),
     63                'expected' => true,
     64            ),
     65            'serialized integer -1'             => array(
     66                'data'     => serialize( -1 ),
     67                'expected' => true,
     68            ),
     69            'serialized integer 1'              => array(
     70                'data'     => serialize( -1 ),
     71                'expected' => true,
     72            ),
     73            'serialized float 1.1'              => array(
     74                'data'     => serialize( 1.1 ),
     75                'expected' => true,
     76            ),
     77            'serialized string'                 => array(
     78                'data'     => serialize( 'this string will be serialized' ),
     79                'expected' => true,
     80            ),
     81            'serialized string with line break' => array(
     82                'data'     => serialize( "a\nb" ),
     83                'expected' => true,
     84            ),
     85            'serialized string with leading and trailing spaces' => array(
     86                'data'     => '   s:25:"this string is serialized";   ',
     87                'expected' => true,
     88            ),
     89            'serialized enum'                   => array(
     90                'data'     => 'E:7:"Foo:bar";',
     91                'expected' => true,
     92            ),
     93        );
     94    }
     95
     96    /**
     97     * Data provider for `test_is_serialized()`.
     98     *
     99     * @return array
     100     */
     101    public function data_is_not_serialized() {
     102        return array(
     103            'an empty array'                             => array(
    33104                'data'     => array(),
    34105                'expected' => false,
    35106            ),
    36             'an object'                            => array(
     107            'a non-empty array'                          => array(
     108                'data'     => array( 1, 1, 2, 3, 5, 8, 13 ),
     109                'expected' => false,
     110            ),
     111            'an empty object'                            => array(
    37112                'data'     => new stdClass(),
    38113                'expected' => false,
    39114            ),
    40             'a boolean false'                      => array(
     115            'a non-empty object'                         => array(
     116                'data'     => (object) array(
     117                    'test' => true,
     118                    '1',
     119                    2,
     120                ),
     121                'expected' => false,
     122            ),
     123            'null'                                       => array(
     124                'data'     => null,
     125                'expected' => false,
     126            ),
     127            'a boolean true'                             => array(
     128                'data'     => true,
     129                'expected' => false,
     130            ),
     131            'a boolean false'                            => array(
    41132                'data'     => false,
    42133                'expected' => false,
    43134            ),
    44             'a boolean true'                       => array(
    45                 'data'     => true,
    46                 'expected' => false,
    47             ),
    48             'an integer 0'                         => array(
     135            'an integer -1'                              => array(
     136                'data'     => -1,
     137                'expected' => false,
     138            ),
     139            'an integer 0'                               => array(
    49140                'data'     => 0,
    50141                'expected' => false,
    51142            ),
    52             'an integer 1'                         => array(
     143            'an integer 1'                               => array(
    53144                'data'     => 1,
    54145                'expected' => false,
    55146            ),
    56             'a float 0.0'                          => array(
     147            'a float 0.0'                                => array(
    57148                'data'     => 0.0,
    58149                'expected' => false,
    59150            ),
    60             'a float 1.0'                          => array(
    61                 'data'     => 1.0,
    62                 'expected' => false,
    63             ),
    64             'string that is too short'             => array(
     151            'a float 1.1'                                => array(
     152                'data'     => 1.1,
     153                'expected' => false,
     154            ),
     155            'a string'                                   => array(
     156                'data'     => 'a string',
     157                'expected' => false,
     158            ),
     159            'a string with line break'                   => array(
     160                'data'     => "a\nb",
     161                'expected' => false,
     162            ),
     163            'a string with leading and trailing garbage' => array(
     164                'data'     => 'garbage:a:0:garbage;',
     165                'expected' => false,
     166            ),
     167            'a string with missing double quotes'        => array(
     168                'data'     => 's:4:test;',
     169                'expected' => false,
     170            ),
     171            'a string that is too short'                 => array(
    65172                'data'     => 's:3',
    66173                'expected' => false,
    67174            ),
    68             'not a colon in second position'       => array(
     175            'not a colon in second position'             => array(
    69176                'data'     => 's!3:"foo";',
    70177                'expected' => false,
    71178            ),
    72             'no trailing semicolon (strict check)' => array(
     179            'no trailing semicolon (strict check)'       => array(
    73180                'data'     => 's:3:"foo"',
    74181                'expected' => false,
    75182            ),
    76             'valid serialized null'                => array(
    77                 'data'     => 'N;',
    78                 'expected' => true,
    79             ),
    80             'valid serialized Enum'                => array(
    81                 'data'     => 'E:7:"Foo:bar";',
    82                 'expected' => true,
    83             ),
    84183        );
    85184    }
     185
     186    /**
     187     * @ticket 46570
     188     * @dataProvider data_is_serialized_should_return_true_for_large_floats
     189     */
     190    public function test_is_serialized_should_return_true_for_large_floats( $value ) {
     191        $this->assertTrue( is_serialized( $value ) );
     192    }
     193
     194    public function data_is_serialized_should_return_true_for_large_floats() {
     195        return array(
     196            array( serialize( 1.7976931348623157E+308 ) ),
     197            array( serialize( array( 1.7976931348623157E+308, 1.23e50 ) ) ),
     198        );
     199    }
     200
     201    /**
     202     * @ticket 17375
     203     */
     204    public function test_no_new_serializable_types() {
     205        $this->assertFalse( is_serialized( 'C:16:"Serialized_Class":6:{a:0:{}}' ) );
     206    }
    86207}
Note: See TracChangeset for help on using the changeset viewer.