Make WordPress Core

Changeset 60116


Ignore:
Timestamp:
04/01/2025 01:30:09 PM (18 months ago)
Author:
joemcgill
Message:

General: Improve unit tests for wp_unique_id_from_values().

This is a follow-up to [60038], which updates the PHPUnit tests to account for different systems producing potentially different hashes due to platform specific floating point precision settings.

Reviewed by audrasjb, desrosj.
Merges [60113] to the 6.8 branch.

Props debarghyabanerjee, joemcgill, peterwilsoncc, siliconforks.
Fixes #63175.

Location:
branches/6.8
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/6.8

  • branches/6.8/tests/phpunit/tests/functions/wpUniqueIdFromValues.php

    r60038 r60116  
    1414
    1515        /**
     16         * Prefix used for testing.
     17         *
     18         * @var string
     19         */
     20        private $prefix = 'my-prefix-';
     21
     22        /**
    1623         * Test that the function returns consistent ids for the passed params.
    1724         *
     
    2229         * @since 6.8.0
    2330         */
    24         public function test_wp_unique_id_from_values( $expected, $data, $prefix ) {
    25                 $output1 = wp_unique_id_from_values( $data );
    26                 $output2 = wp_unique_id_from_values( $data, $prefix );
    27                 $this->assertSame( $expected, $output1 );
    28                 $this->assertSame( $prefix . $expected, $output2 );
     31        public function test_wp_unique_id_from_values( $data ) {
     32                // Generate IDs.
     33                $unique_id_original = wp_unique_id_from_values( $data );
     34                $unique_id_prefixed = wp_unique_id_from_values( $data, $this->prefix );
     35
     36                // Ensure that the same input produces the same ID.
     37                $this->assertSame( $unique_id_original, wp_unique_id_from_values( $data ) );
     38                $this->assertSame( $unique_id_prefixed, wp_unique_id_from_values( $data, $this->prefix ) );
     39
     40                // Ensure that the prefixed ID is the prefix + the original ID.
     41                $this->assertSame( $this->prefix . $unique_id_original, $unique_id_prefixed );
     42        }
     43
     44        /**
     45         * Test that different input data generates distinct IDs.
     46         *
     47         * @ticket 62985
     48         *
     49         * @dataProvider data_wp_unique_id_from_values
     50         *
     51         * @since 6.8.0
     52         */
     53        public function test_wp_unique_id_from_values_uniqueness( $data ) {
     54                // Generate IDs.
     55                $unique_id_original = wp_unique_id_from_values( $data );
     56                $unique_id_prefixed = wp_unique_id_from_values( $data, $this->prefix );
     57
     58                // Modify the data slightly to generate a different ID.
     59                $data_modified          = $data;
     60                $data_modified['value'] = 'modified';
     61
     62                // Generate new IDs with the modified data.
     63                $unique_id_modified          = wp_unique_id_from_values( $data_modified );
     64                $unique_id_prefixed_modified = wp_unique_id_from_values( $data_modified, $this->prefix );
     65
     66                // Assert that the IDs for different data are distinct.
     67                $this->assertNotSame( $unique_id_original, $unique_id_modified );
     68                $this->assertNotSame( $unique_id_prefixed, $unique_id_prefixed_modified );
    2969        }
    3070
     
    3676        public function data_wp_unique_id_from_values() {
    3777                return array(
    38                         'string'          => array(
    39                                 'expected' => '469f5989',
    40                                 'data'     => array(
    41                                         'value' => 'text',
    42                                 ),
    43                                 'prefix'   => 'my-prefix-',
    44                         ),
    45                         'integer'         => array(
    46                                 'expected' => 'b2f0842e',
    47                                 'data'     => array(
    48                                         'value' => 123,
    49                                 ),
    50                                 'prefix'   => 'my-prefix-',
    51                         ),
    52                         'float'           => array(
    53                                 'expected' => 'a756f54d',
    54                                 'data'     => array(
    55                                         'value' => 1.23,
    56                                 ),
    57                                 'prefix'   => 'my-prefix-',
    58                         ),
    59                         'boolean'         => array(
    60                                 'expected' => 'bdae8be3',
    61                                 'data'     => array(
    62                                         'value' => true,
    63                                 ),
    64                                 'prefix'   => 'my-prefix-',
    65                         ),
    66                         'object'          => array(
    67                                 'expected' => '477bd670',
    68                                 'data'     => array(
    69                                         'value' => new StdClass(),
    70                                 ),
    71                                 'prefix'   => 'my-prefix-',
    72                         ),
    73                         'null'            => array(
    74                                 'expected' => 'a860dd95',
    75                                 'data'     => array(
    76                                         'value' => null,
    77                                 ),
    78                                 'prefix'   => 'my-prefix-',
    79                         ),
     78                        'string'          => array( array( 'value' => 'text' ) ),
     79                        'integer'         => array( array( 'value' => 123 ) ),
     80                        'float'           => array( array( 'value' => 1.23 ) ),
     81                        'boolean'         => array( array( 'value' => true ) ),
     82                        'object'          => array( array( 'value' => new StdClass() ) ),
     83                        'null'            => array( array( 'value' => null ) ),
    8084                        'multiple values' => array(
    81                                 'expected' => 'ef258a5d',
    82                                 'data'     => array(
     85                                array(
    8386                                        'value1' => 'text',
    8487                                        'value2' => 123,
     
    8891                                        'value6' => null,
    8992                                ),
    90                                 'prefix'   => 'my-prefix-',
    9193                        ),
    9294                        'nested arrays'   => array(
    93                                 'expected' => '4345cae5',
    94                                 'data'     => array(
     95                                array(
    9596                                        'list1' => array(
    9697                                                'value1' => 'text',
     
    104105                                        ),
    105106                                ),
    106                                 'prefix'   => 'my-prefix-',
    107107                        ),
    108108                );
     
    119119         */
    120120        public function test_wp_unique_id_from_values_empty_array() {
    121                 wp_unique_id_from_values( array(), 'my-prefix-' );
     121                wp_unique_id_from_values( array(), $this->prefix );
    122122        }
    123123
     
    131131         * @since 6.8.0
    132132         */
    133         public function test_wp_unique_id_from_values_invalid_data( $data, $prefix ) {
     133        public function test_wp_unique_id_from_values_invalid_data( $data ) {
    134134                $this->expectException( TypeError::class );
    135135
    136                 wp_unique_id_from_values( $data, $prefix );
     136                wp_unique_id_from_values( $data, $this->prefix );
    137137        }
    138138
    139139        /**
    140          * Data provider.
     140         * Data provider for invalid data tests.
    141141         *
    142142         * @return array[]
     
    144144        public function data_wp_unique_id_from_values_invalid_data() {
    145145                return array(
    146                         'string'  => array(
    147                                 'data'   => 'text',
    148                                 'prefix' => '',
    149                         ),
    150                         'integer' => array(
    151                                 'data'   => 123,
    152                                 'prefix' => '',
    153                         ),
    154                         'float'   => array(
    155                                 'data'   => 1.23,
    156                                 'prefix' => '',
    157                         ),
    158                         'boolean' => array(
    159                                 'data'   => true,
    160                                 'prefix' => '',
    161                         ),
    162                         'object'  => array(
    163                                 'data'   => new StdClass(),
    164                                 'prefix' => '',
    165                         ),
    166                         'null'    => array(
    167                                 'data'   => null,
    168                                 'prefix' => '',
    169                         ),
     146                        'string'  => array( 'text' ),
     147                        'integer' => array( 123 ),
     148                        'float'   => array( 1.23 ),
     149                        'boolean' => array( true ),
     150                        'object'  => array( new StdClass() ),
     151                        'null'    => array( null ),
    170152                );
    171153        }
Note: See TracChangeset for help on using the changeset viewer.