Make WordPress Core

Changeset 51663


Ignore:
Timestamp:
08/26/2021 03:54:29 PM (5 years ago)
Author:
SergeyBiryukov
Message:

Tests: Move wp_list_pluck() tests to their own file.

The tests were partially duplicated in two separate files.

Follow-up to [431/tests], [28900], [38928], [42527].

See #53363, #53987.

Location:
trunk/tests/phpunit/tests/functions
Files:
1 edited
1 copied

Legend:

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

    r51568 r51663  
    22
    33/**
    4  * Test wp_filter_object_list(), wp_list_filter(), wp_list_pluck().
     4 * Test wp_filter_object_list().
    55 *
    66 * @group functions.php
    77 * @covers ::wp_filter_object_list
    8  * @covers ::wp_list_pluck
    98 */
    109class Tests_Functions_wpListFilter extends WP_UnitTestCase {
     
    136135        }
    137136
    138         function test_wp_list_pluck() {
    139                 $list = wp_list_pluck( $this->object_list, 'name' );
    140                 $this->assertSame(
    141                         array(
    142                                 'foo' => 'foo',
    143                                 'bar' => 'bar',
    144                                 'baz' => 'baz',
    145                         ),
    146                         $list
    147                 );
    148 
    149                 $list = wp_list_pluck( $this->array_list, 'name' );
    150                 $this->assertSame(
    151                         array(
    152                                 'foo' => 'foo',
    153                                 'bar' => 'bar',
    154                                 'baz' => 'baz',
    155                         ),
    156                         $list
    157                 );
    158         }
    159 
    160         /**
    161          * @ticket 28666
    162          */
    163         function test_wp_list_pluck_index_key() {
    164                 $list = wp_list_pluck( $this->array_list, 'name', 'id' );
    165                 $this->assertSame(
    166                         array(
    167                                 'f' => 'foo',
    168                                 'b' => 'bar',
    169                                 'z' => 'baz',
    170                         ),
    171                         $list
    172                 );
    173         }
    174 
    175         /**
    176          * @ticket 28666
    177          */
    178         function test_wp_list_pluck_object_index_key() {
    179                 $list = wp_list_pluck( $this->object_list, 'name', 'id' );
    180                 $this->assertSame(
    181                         array(
    182                                 'f' => 'foo',
    183                                 'b' => 'bar',
    184                                 'z' => 'baz',
    185                         ),
    186                         $list
    187                 );
    188         }
    189 
    190         /**
    191          * @ticket 28666
    192          */
    193         function test_wp_list_pluck_missing_index_key() {
    194                 $list = wp_list_pluck( $this->array_list, 'name', 'nonexistent' );
    195                 $this->assertSame(
    196                         array(
    197                                 0 => 'foo',
    198                                 1 => 'bar',
    199                                 2 => 'baz',
    200                         ),
    201                         $list
    202                 );
    203         }
    204 
    205         /**
    206          * @ticket 28666
    207          */
    208         function test_wp_list_pluck_partial_missing_index_key() {
    209                 $array_list = $this->array_list;
    210                 unset( $array_list['bar']['id'] );
    211                 $list = wp_list_pluck( $array_list, 'name', 'id' );
    212                 $this->assertSame(
    213                         array(
    214                                 'f' => 'foo',
    215                                 0   => 'bar',
    216                                 'z' => 'baz',
    217                         ),
    218                         $list
    219                 );
    220         }
    221 
    222         /**
    223          * @ticket 28666
    224          */
    225         function test_wp_list_pluck_mixed_index_key() {
    226                 $mixed_list        = $this->array_list;
    227                 $mixed_list['bar'] = (object) $mixed_list['bar'];
    228                 $list              = wp_list_pluck( $mixed_list, 'name', 'id' );
    229                 $this->assertSame(
    230                         array(
    231                                 'f' => 'foo',
    232                                 'b' => 'bar',
    233                                 'z' => 'baz',
    234                         ),
    235                         $list
    236                 );
    237         }
    238 
    239         /**
    240          * @ticket 16895
    241          */
    242         function test_wp_list_pluck_containing_references() {
    243                 $ref_list = array(
    244                         & $this->object_list['foo'],
    245                         & $this->object_list['bar'],
    246                 );
    247 
    248                 $this->assertInstanceOf( 'stdClass', $ref_list[0] );
    249                 $this->assertInstanceOf( 'stdClass', $ref_list[1] );
    250 
    251                 $list = wp_list_pluck( $ref_list, 'name' );
    252                 $this->assertSame(
    253                         array(
    254                                 'foo',
    255                                 'bar',
    256                         ),
    257                         $list
    258                 );
    259 
    260                 $this->assertInstanceOf( 'stdClass', $ref_list[0] );
    261                 $this->assertInstanceOf( 'stdClass', $ref_list[1] );
    262         }
    263 
    264         /**
    265          * @ticket 16895
    266          */
    267         function test_wp_list_pluck_containing_references_keys() {
    268                 $ref_list = array(
    269                         & $this->object_list['foo'],
    270                         & $this->object_list['bar'],
    271                 );
    272 
    273                 $this->assertInstanceOf( 'stdClass', $ref_list[0] );
    274                 $this->assertInstanceOf( 'stdClass', $ref_list[1] );
    275 
    276                 $list = wp_list_pluck( $ref_list, 'name', 'id' );
    277                 $this->assertSame(
    278                         array(
    279                                 'f' => 'foo',
    280                                 'b' => 'bar',
    281                         ),
    282                         $list
    283                 );
    284 
    285                 $this->assertInstanceOf( 'stdClass', $ref_list[0] );
    286                 $this->assertInstanceOf( 'stdClass', $ref_list[1] );
    287         }
    288 
    289137        function test_filter_object_list_nested_array_and() {
    290138                $list = wp_filter_object_list( $this->object_list, array( 'field4' => array( 'blue' ) ), 'AND' );
  • trunk/tests/phpunit/tests/functions/wpListPluck.php

    r51609 r51663  
    22
    33/**
    4  * Test wp_filter_object_list(), wp_list_filter(), wp_list_pluck().
     4 * Test wp_list_pluck().
    55 *
    66 * @group functions.php
    7  * @covers ::wp_filter_object_list
    87 * @covers ::wp_list_pluck
    98 */
    10 class Tests_Functions_wpListFilter extends WP_UnitTestCase {
     9class Tests_Functions_wpListPluck extends WP_UnitTestCase {
    1110        public $object_list = array();
    1211        public $array_list  = array();
     
    4342        }
    4443
    45         function test_filter_object_list_and() {
    46                 $list = wp_filter_object_list(
    47                         $this->object_list,
    48                         array(
    49                                 'field1' => true,
    50                                 'field2' => true,
    51                         ),
    52                         'AND'
    53                 );
    54                 $this->assertCount( 2, $list );
    55                 $this->assertArrayHasKey( 'foo', $list );
    56                 $this->assertArrayHasKey( 'bar', $list );
    57         }
    58 
    59         function test_filter_object_list_or() {
    60                 $list = wp_filter_object_list(
    61                         $this->object_list,
    62                         array(
    63                                 'field1' => true,
    64                                 'field2' => true,
    65                         ),
    66                         'OR'
    67                 );
    68                 $this->assertCount( 3, $list );
    69                 $this->assertArrayHasKey( 'foo', $list );
    70                 $this->assertArrayHasKey( 'bar', $list );
    71                 $this->assertArrayHasKey( 'baz', $list );
    72         }
    73 
    74         function test_filter_object_list_not() {
    75                 $list = wp_filter_object_list(
    76                         $this->object_list,
    77                         array(
    78                                 'field2' => true,
    79                                 'field3' => true,
    80                         ),
    81                         'NOT'
    82                 );
    83                 $this->assertCount( 1, $list );
    84                 $this->assertArrayHasKey( 'baz', $list );
    85         }
    86 
    87         function test_filter_object_list_and_field() {
    88                 $list = wp_filter_object_list(
    89                         $this->object_list,
    90                         array(
    91                                 'field1' => true,
    92                                 'field2' => true,
    93                         ),
    94                         'AND',
    95                         'name'
    96                 );
    97                 $this->assertSame(
    98                         array(
    99                                 'foo' => 'foo',
    100                                 'bar' => 'bar',
    101                         ),
    102                         $list
    103                 );
    104         }
    105 
    106         function test_filter_object_list_or_field() {
    107                 $list = wp_filter_object_list(
    108                         $this->object_list,
    109                         array(
    110                                 'field2' => true,
    111                                 'field3' => true,
    112                         ),
    113                         'OR',
    114                         'name'
    115                 );
    116                 $this->assertSame(
    117                         array(
    118                                 'foo' => 'foo',
    119                                 'bar' => 'bar',
    120                         ),
    121                         $list
    122                 );
    123         }
    124 
    125         function test_filter_object_list_not_field() {
    126                 $list = wp_filter_object_list(
    127                         $this->object_list,
    128                         array(
    129                                 'field2' => true,
    130                                 'field3' => true,
    131                         ),
    132                         'NOT',
    133                         'name'
    134                 );
    135                 $this->assertSame( array( 'baz' => 'baz' ), $list );
    136         }
    137 
    138         function test_wp_list_pluck() {
     44        function test_wp_list_pluck_array_and_object() {
    13945                $list = wp_list_pluck( $this->object_list, 'name' );
    14046                $this->assertSame(
     
    287193        }
    288194
    289         function test_filter_object_list_nested_array_and() {
    290                 $list = wp_filter_object_list( $this->object_list, array( 'field4' => array( 'blue' ) ), 'AND' );
    291                 $this->assertCount( 1, $list );
    292                 $this->assertArrayHasKey( 'baz', $list );
    293         }
    294 
    295         function test_filter_object_list_nested_array_not() {
    296                 $list = wp_filter_object_list( $this->object_list, array( 'field4' => array( 'red' ) ), 'NOT' );
    297                 $this->assertCount( 2, $list );
    298                 $this->assertArrayHasKey( 'bar', $list );
    299                 $this->assertArrayHasKey( 'baz', $list );
    300         }
    301 
    302         function test_filter_object_list_nested_array_or() {
    303                 $list = wp_filter_object_list(
    304                         $this->object_list,
    305                         array(
    306                                 'field3' => true,
    307                                 'field4' => array( 'blue' ),
    308                         ),
    309                         'OR'
    310                 );
    311                 $this->assertCount( 2, $list );
    312                 $this->assertArrayHasKey( 'foo', $list );
    313                 $this->assertArrayHasKey( 'baz', $list );
    314         }
    315 
    316         function test_filter_object_list_nested_array_or_singular() {
    317                 $list = wp_filter_object_list( $this->object_list, array( 'field4' => array( 'blue' ) ), 'OR' );
    318                 $this->assertCount( 1, $list );
    319                 $this->assertArrayHasKey( 'baz', $list );
    320         }
    321 
    322         function test_filter_object_list_nested_array_and_field() {
    323                 $list = wp_filter_object_list( $this->object_list, array( 'field4' => array( 'blue' ) ), 'AND', 'name' );
    324                 $this->assertSame( array( 'baz' => 'baz' ), $list );
    325         }
    326 
    327         function test_filter_object_list_nested_array_not_field() {
    328                 $list = wp_filter_object_list( $this->object_list, array( 'field4' => array( 'green' ) ), 'NOT', 'name' );
    329                 $this->assertSame(
    330                         array(
    331                                 'foo' => 'foo',
    332                                 'baz' => 'baz',
    333                         ),
    334                         $list
    335                 );
    336         }
    337 
    338         function test_filter_object_list_nested_array_or_field() {
    339                 $list = wp_filter_object_list(
    340                         $this->object_list,
    341                         array(
    342                                 'field3' => true,
    343                                 'field4' => array( 'blue' ),
    344                         ),
    345                         'OR',
    346                         'name'
    347                 );
    348                 $this->assertSame(
    349                         array(
    350                                 'foo' => 'foo',
    351                                 'baz' => 'baz',
    352                         ),
    353                         $list
     195        /**
     196         * @dataProvider data_test_wp_list_pluck
     197         *
     198         * @param array      $list      List of objects or arrays.
     199         * @param int|string $field     Field from the object to place instead of the entire object
     200         * @param int|string $index_key Field from the object to use as keys for the new array.
     201         * @param array      $expected  Expected result.
     202         */
     203        public function test_wp_list_pluck( $list, $field, $index_key, $expected ) {
     204                $this->assertSameSetsWithIndex( $expected, wp_list_pluck( $list, $field, $index_key ) );
     205        }
     206
     207        public function data_test_wp_list_pluck() {
     208                return array(
     209                        'arrays'                         => array(
     210                                array(
     211                                        array(
     212                                                'foo' => 'bar',
     213                                                'bar' => 'baz',
     214                                                'abc' => 'xyz',
     215                                        ),
     216                                        array(
     217                                                'foo'   => 'foo',
     218                                                '123'   => '456',
     219                                                'lorem' => 'ipsum',
     220                                        ),
     221                                        array( 'foo' => 'baz' ),
     222                                ),
     223                                'foo',
     224                                null,
     225                                array( 'bar', 'foo', 'baz' ),
     226                        ),
     227                        'arrays with index key'          => array(
     228                                array(
     229                                        array(
     230                                                'foo' => 'bar',
     231                                                'bar' => 'baz',
     232                                                'abc' => 'xyz',
     233                                                'key' => 'foo',
     234                                        ),
     235                                        array(
     236                                                'foo'   => 'foo',
     237                                                '123'   => '456',
     238                                                'lorem' => 'ipsum',
     239                                                'key'   => 'bar',
     240                                        ),
     241                                        array(
     242                                                'foo' => 'baz',
     243                                                'key' => 'value',
     244                                        ),
     245                                ),
     246                                'foo',
     247                                'key',
     248                                array(
     249                                        'foo'   => 'bar',
     250                                        'bar'   => 'foo',
     251                                        'value' => 'baz',
     252                                ),
     253                        ),
     254                        'arrays with index key missing'  => array(
     255                                array(
     256                                        array(
     257                                                'foo' => 'bar',
     258                                                'bar' => 'baz',
     259                                                'abc' => 'xyz',
     260                                        ),
     261                                        array(
     262                                                'foo'   => 'foo',
     263                                                '123'   => '456',
     264                                                'lorem' => 'ipsum',
     265                                                'key'   => 'bar',
     266                                        ),
     267                                        array(
     268                                                'foo' => 'baz',
     269                                                'key' => 'value',
     270                                        ),
     271                                ),
     272                                'foo',
     273                                'key',
     274                                array(
     275                                        'bar',
     276                                        'bar'   => 'foo',
     277                                        'value' => 'baz',
     278                                ),
     279                        ),
     280                        'objects'                        => array(
     281                                array(
     282                                        (object) array(
     283                                                'foo' => 'bar',
     284                                                'bar' => 'baz',
     285                                                'abc' => 'xyz',
     286                                        ),
     287                                        (object) array(
     288                                                'foo'   => 'foo',
     289                                                '123'   => '456',
     290                                                'lorem' => 'ipsum',
     291                                        ),
     292                                        (object) array( 'foo' => 'baz' ),
     293                                ),
     294                                'foo',
     295                                null,
     296                                array( 'bar', 'foo', 'baz' ),
     297                        ),
     298                        'objects with index key'         => array(
     299                                array(
     300                                        (object) array(
     301                                                'foo' => 'bar',
     302                                                'bar' => 'baz',
     303                                                'abc' => 'xyz',
     304                                                'key' => 'foo',
     305                                        ),
     306                                        (object) array(
     307                                                'foo'   => 'foo',
     308                                                '123'   => '456',
     309                                                'lorem' => 'ipsum',
     310                                                'key'   => 'bar',
     311                                        ),
     312                                        (object) array(
     313                                                'foo' => 'baz',
     314                                                'key' => 'value',
     315                                        ),
     316                                ),
     317                                'foo',
     318                                'key',
     319                                array(
     320                                        'foo'   => 'bar',
     321                                        'bar'   => 'foo',
     322                                        'value' => 'baz',
     323                                ),
     324                        ),
     325                        'objects with index key missing' => array(
     326                                array(
     327                                        (object) array(
     328                                                'foo' => 'bar',
     329                                                'bar' => 'baz',
     330                                                'abc' => 'xyz',
     331                                        ),
     332                                        (object) array(
     333                                                'foo'   => 'foo',
     334                                                '123'   => '456',
     335                                                'lorem' => 'ipsum',
     336                                                'key'   => 'bar',
     337                                        ),
     338                                        (object) array(
     339                                                'foo' => 'baz',
     340                                                'key' => 'value',
     341                                        ),
     342                                ),
     343                                'foo',
     344                                'key',
     345                                array(
     346                                        'bar',
     347                                        'bar'   => 'foo',
     348                                        'value' => 'baz',
     349                                ),
     350                        ),
    354351                );
    355352        }
Note: See TracChangeset for help on using the changeset viewer.