Make WordPress Core

Changeset 53478


Ignore:
Timestamp:
06/07/2022 02:44:00 PM (3 years ago)
Author:
SergeyBiryukov
Message:

Tests: Move the tests for individual pluggable functions into their own directory.

This aims to make the tests more discoverable and easier to expand.

Follow-up to [50790], [53473], [53477].

See #55652.

Location:
trunk/tests/phpunit/tests
Files:
1 added
1 edited
2 copied

Legend:

Unmodified
Added
Removed
  • trunk/tests/phpunit/tests/pluggable.php

    r53477 r53478  
    339339        return $signatures;
    340340    }
    341 
    342     /**
    343      * @ticket 28020
    344      */
    345     public function test_get_user_by_should_return_same_instance_as_wp_get_current_user() {
    346         // Create a test user.
    347         $new_user = self::factory()->user->create( array( 'role' => 'subscriber' ) );
    348 
    349         // Set the test user as the current user.
    350         $current_user = wp_set_current_user( $new_user );
    351 
    352         // Get the test user using get_user_by().
    353         $from_get_user_by = get_user_by( 'id', $new_user );
    354 
    355         $this->assertSame( $current_user, $from_get_user_by );
    356     }
    357 
    358     /**
    359      * Tests that wp_rand() returns zero when `$min` and `$max` are zero.
    360      *
    361      * @ticket 55194
    362      * @dataProvider data_wp_rand_should_return_zero_when_min_and_max_are_zero
    363      * @covers ::wp_rand
    364      *
    365      * @param mixed $min Lower limit for the generated number.
    366      * @param mixed $max Upper limit for the generated number.
    367      */
    368     public function test_wp_rand_should_return_zero_when_min_and_max_are_zero( $min, $max ) {
    369         $this->assertSame( 0, wp_rand( $min, $max ) );
    370     }
    371 
    372     /**
    373      * Data provider.
    374      *
    375      * @return array
    376      */
    377     public function data_wp_rand_should_return_zero_when_min_and_max_are_zero() {
    378         return array(
    379             'min and max as 0'      => array(
    380                 'min' => 0,
    381                 'max' => 0,
    382             ),
    383             'min and max as 0.0'    => array(
    384                 'min' => 0.0,
    385                 'max' => 0.0,
    386             ),
    387             'min as null, max as 0' => array(
    388                 'min' => null,
    389                 'max' => 0,
    390             ),
    391         );
    392     }
    393 
    394     /**
    395      * Tests that wp_rand() returns a positive integer for both positive and negative input.
    396      *
    397      * @ticket 55194
    398      * @dataProvider data_wp_rand_should_return_a_positive_integer
    399      * @covers ::wp_rand
    400      *
    401      * @param int $min Lower limit for the generated number.
    402      * @param int $max Upper limit for the generated number.
    403      */
    404     public function test_wp_rand_should_return_a_positive_integer( $min, $max ) {
    405         $this->assertGreaterThan(
    406             0,
    407             wp_rand( $min, $max ),
    408             'The value was not greater than 0'
    409         );
    410 
    411         $this->assertLessThan(
    412             100,
    413             wp_rand( $min, $max ),
    414             'The value was not less than 100'
    415         );
    416     }
    417 
    418     /**
    419      * Data provider.
    420      *
    421      * @return array
    422      */
    423     public function data_wp_rand_should_return_a_positive_integer() {
    424         return array(
    425             '1 and 99'       => array(
    426                 'min' => 1,
    427                 'max' => 99,
    428             ),
    429             '-1 and 99'      => array(
    430                 'min' => -1,
    431                 'max' => 99,
    432             ),
    433             '1 and -99'      => array(
    434                 'min' => 1,
    435                 'max' => -99,
    436             ),
    437             '-1 and -99'     => array(
    438                 'min' => -1,
    439                 'max' => -99,
    440             ),
    441             '1.0 and 99.0'   => array(
    442                 'min' => 1.0,
    443                 'max' => 99.0,
    444             ),
    445             '-1.0 and -99.0' => array(
    446                 'min' => -1.0,
    447                 'max' => -99.0,
    448             ),
    449         );
    450     }
    451341}
  • trunk/tests/phpunit/tests/pluggable/getUserBy.php

    r53477 r53478  
    33/**
    44 * @group pluggable
     5 * @covers ::get_user_by
    56 */
    6 class Tests_Pluggable extends WP_UnitTestCase {
    7 
    8     /**
    9      * Tests that the signatures of all functions in pluggable.php match their expected signature.
    10      *
    11      * @ticket 33654
    12      * @ticket 33867
    13      *
    14      * @dataProvider get_defined_pluggable_functions
    15      */
    16     public function test_pluggable_function_signatures_match( $function ) {
    17 
    18         $signatures = $this->get_pluggable_function_signatures();
    19 
    20         $this->assertTrue( function_exists( $function ) );
    21         $this->assertArrayHasKey( $function, $signatures );
    22 
    23         $function_ref = new ReflectionFunction( $function );
    24         $param_refs   = $function_ref->getParameters();
    25 
    26         $this->assertSame( count( $signatures[ $function ] ), count( $param_refs ) );
    27 
    28         $i = 0;
    29 
    30         foreach ( $signatures[ $function ] as $name => $value ) {
    31 
    32             $param_ref = $param_refs[ $i ];
    33             $msg       = 'Parameter: ' . $param_ref->getName();
    34 
    35             if ( is_numeric( $name ) ) {
    36                 $name = $value;
    37                 $this->assertFalse( $param_ref->isOptional(), $msg );
    38             } else {
    39                 $this->assertTrue( $param_ref->isOptional(), $msg );
    40                 $this->assertSame( $value, $param_ref->getDefaultValue(), $msg );
    41             }
    42 
    43             $this->assertSame( $name, $param_ref->getName(), $msg );
    44 
    45             $i++;
    46 
    47         }
    48 
    49     }
    50 
    51     /**
    52      * Test the tests. Makes sure all the expected pluggable functions exist and that they live in pluggable.php.
    53      *
    54      * @ticket 33654
    55      * @ticket 33867
    56      */
    57     public function test_all_pluggable_functions_exist() {
    58 
    59         $defined  = wp_list_pluck( $this->get_defined_pluggable_functions(), 0 );
    60         $expected = $this->get_pluggable_function_signatures();
    61 
    62         foreach ( $expected as $function => $sig ) {
    63             $msg = 'Function: ' . $function . '()';
    64             $this->assertTrue( function_exists( $function ), $msg );
    65             $this->assertContains( $function, $defined, $msg );
    66         }
    67 
    68     }
    69 
    70     /**
    71      * Data provider for our pluggable function signature tests.
    72      *
    73      * @return array Data provider array of pluggable function names.
    74      */
    75     public function get_defined_pluggable_functions() {
    76 
    77         require_once ABSPATH . '/wp-admin/includes/upgrade.php';
    78 
    79         $test_functions = array(
    80             'install_network',
    81             'wp_install',
    82             'wp_install_defaults',
    83             'wp_new_blog_notification',
    84             'wp_upgrade',
    85             'install_global_terms',
    86         );
    87         $test_files     = array(
    88             'wp-includes/pluggable.php',
    89         );
    90 
    91         // Pluggable function signatures are not tested when an external object cache is in use. See #31491.
    92         if ( ! wp_using_ext_object_cache() ) {
    93             $test_files[] = 'wp-includes/cache.php';
    94         }
    95 
    96         $data = array();
    97 
    98         foreach ( $test_functions as $function ) {
    99             $data[] = array(
    100                 $function,
    101             );
    102         }
    103 
    104         foreach ( $test_files as $file ) {
    105             preg_match_all( '#^\t?function (\w+)#m', file_get_contents( ABSPATH . '/' . $file ), $functions );
    106 
    107             foreach ( $functions[1] as $function ) {
    108                 $data[] = array(
    109                     $function,
    110                 );
    111             }
    112         }
    113 
    114         return $data;
    115 
    116     }
    117 
    118     /**
    119      * Expected pluggable function signatures.
    120      *
    121      * @return array Array of signatures keyed by their function name.
    122      */
    123     public function get_pluggable_function_signatures() {
    124 
    125         $signatures = array(
    126 
    127             // wp-includes/pluggable.php:
    128             'wp_set_current_user'             => array(
    129                 'id',
    130                 'name' => '',
    131             ),
    132             'wp_get_current_user'             => array(),
    133             'get_userdata'                    => array( 'user_id' ),
    134             'get_user_by'                     => array( 'field', 'value' ),
    135             'cache_users'                     => array( 'user_ids' ),
    136             'wp_mail'                         => array(
    137                 'to',
    138                 'subject',
    139                 'message',
    140                 'headers'     => '',
    141                 'attachments' => array(),
    142             ),
    143             'wp_authenticate'                 => array( 'username', 'password' ),
    144             'wp_logout'                       => array(),
    145             'wp_validate_auth_cookie'         => array(
    146                 'cookie' => '',
    147                 'scheme' => '',
    148             ),
    149             'wp_generate_auth_cookie'         => array(
    150                 'user_id',
    151                 'expiration',
    152                 'scheme' => 'auth',
    153                 'token'  => '',
    154             ),
    155             'wp_parse_auth_cookie'            => array(
    156                 'cookie' => '',
    157                 'scheme' => '',
    158             ),
    159             'wp_set_auth_cookie'              => array(
    160                 'user_id',
    161                 'remember' => false,
    162                 'secure'   => '',
    163                 'token'    => '',
    164             ),
    165             'wp_clear_auth_cookie'            => array(),
    166             'is_user_logged_in'               => array(),
    167             'auth_redirect'                   => array(),
    168             'check_admin_referer'             => array(
    169                 'action'    => -1,
    170                 'query_arg' => '_wpnonce',
    171             ),
    172             'check_ajax_referer'              => array(
    173                 'action'    => -1,
    174                 'query_arg' => false,
    175                 'die'       => true,
    176             ),
    177             'wp_redirect'                     => array(
    178                 'location',
    179                 'status'        => 302,
    180                 'x_redirect_by' => 'WordPress',
    181             ),
    182             'wp_sanitize_redirect'            => array( 'location' ),
    183             '_wp_sanitize_utf8_in_redirect'   => array( 'matches' ),
    184             'wp_safe_redirect'                => array(
    185                 'location',
    186                 'status'        => 302,
    187                 'x_redirect_by' => 'WordPress',
    188             ),
    189             'wp_validate_redirect'            => array(
    190                 'location',
    191                 'default' => '',
    192             ),
    193             'wp_notify_postauthor'            => array(
    194                 'comment_id',
    195                 'deprecated' => null,
    196             ),
    197             'wp_notify_moderator'             => array( 'comment_id' ),
    198             'wp_password_change_notification' => array( 'user' ),
    199             'wp_new_user_notification'        => array(
    200                 'user_id',
    201                 'deprecated' => null,
    202                 'notify'     => '',
    203             ),
    204             'wp_nonce_tick'                   => array(),
    205             'wp_verify_nonce'                 => array(
    206                 'nonce',
    207                 'action' => -1,
    208             ),
    209             'wp_create_nonce'                 => array( 'action' => -1 ),
    210             'wp_salt'                         => array( 'scheme' => 'auth' ),
    211             'wp_hash'                         => array(
    212                 'data',
    213                 'scheme' => 'auth',
    214             ),
    215             'wp_hash_password'                => array( 'password' ),
    216             'wp_check_password'               => array(
    217                 'password',
    218                 'hash',
    219                 'user_id' => '',
    220             ),
    221             'wp_generate_password'            => array(
    222                 'length'              => 12,
    223                 'special_chars'       => true,
    224                 'extra_special_chars' => false,
    225             ),
    226             'wp_rand'                         => array(
    227                 'min' => null,
    228                 'max' => null,
    229             ),
    230             'wp_set_password'                 => array( 'password', 'user_id' ),
    231             'get_avatar'                      => array(
    232                 'id_or_email',
    233                 'size'    => 96,
    234                 'default' => '',
    235                 'alt'     => '',
    236                 'args'    => null,
    237             ),
    238             'wp_text_diff'                    => array(
    239                 'left_string',
    240                 'right_string',
    241                 'args' => null,
    242             ),
    243 
    244             // wp-admin/includes/schema.php:
    245             'install_network'                 => array(),
    246 
    247             // wp-admin/includes/upgrade.php:
    248             'wp_install'                      => array(
    249                 'blog_title',
    250                 'user_name',
    251                 'user_email',
    252                 'is_public',
    253                 'deprecated'    => '',
    254                 'user_password' => '',
    255                 'language'      => '',
    256             ),
    257             'wp_install_defaults'             => array( 'user_id' ),
    258             'wp_new_blog_notification'        => array( 'blog_title', 'blog_url', 'user_id', 'password' ),
    259             'wp_upgrade'                      => array(),
    260             'install_global_terms'            => array(),
    261         );
    262 
    263         // Pluggable function signatures are not tested when an external object cache is in use. See #31491.
    264         if ( ! wp_using_ext_object_cache() ) {
    265             $signatures = array_merge(
    266                 $signatures,
    267                 array(
    268 
    269                     // wp-includes/cache.php:
    270                     'wp_cache_init'                      => array(),
    271                     'wp_cache_add'                       => array(
    272                         'key',
    273                         'data',
    274                         'group'  => '',
    275                         'expire' => 0,
    276                     ),
    277                     'wp_cache_add_multiple'              => array(
    278                         'data',
    279                         'group'  => '',
    280                         'expire' => 0,
    281                     ),
    282                     'wp_cache_replace'                   => array(
    283                         'key',
    284                         'data',
    285                         'group'  => '',
    286                         'expire' => 0,
    287                     ),
    288                     'wp_cache_set'                       => array(
    289                         'key',
    290                         'data',
    291                         'group'  => '',
    292                         'expire' => 0,
    293                     ),
    294                     'wp_cache_set_multiple'              => array(
    295                         'data',
    296                         'group'  => '',
    297                         'expire' => 0,
    298                     ),
    299                     'wp_cache_get'                       => array(
    300                         'key',
    301                         'group' => '',
    302                         'force' => false,
    303                         'found' => null,
    304                     ),
    305                     'wp_cache_get_multiple'              => array(
    306                         'keys',
    307                         'group' => '',
    308                         'force' => false,
    309                     ),
    310                     'wp_cache_delete'                    => array(
    311                         'key',
    312                         'group' => '',
    313                     ),
    314                     'wp_cache_delete_multiple'           => array(
    315                         'keys',
    316                         'group' => '',
    317                     ),
    318                     'wp_cache_incr'                      => array(
    319                         'key',
    320                         'offset' => 1,
    321                         'group'  => '',
    322                     ),
    323                     'wp_cache_decr'                      => array(
    324                         'key',
    325                         'offset' => 1,
    326                         'group'  => '',
    327                     ),
    328                     'wp_cache_flush'                     => array(),
    329                     'wp_cache_flush_runtime'             => array(),
    330                     'wp_cache_close'                     => array(),
    331                     'wp_cache_add_global_groups'         => array( 'groups' ),
    332                     'wp_cache_add_non_persistent_groups' => array( 'groups' ),
    333                     'wp_cache_switch_to_blog'            => array( 'blog_id' ),
    334                     'wp_cache_reset'                     => array(),
    335                 )
    336             );
    337         }
    338 
    339         return $signatures;
    340     }
     7class Tests_Pluggable_GetUserBy extends WP_UnitTestCase {
    3418
    3429    /**
     
    35522        $this->assertSame( $current_user, $from_get_user_by );
    35623    }
    357 
    358     /**
    359      * Tests that wp_rand() returns zero when `$min` and `$max` are zero.
    360      *
    361      * @ticket 55194
    362      * @dataProvider data_wp_rand_should_return_zero_when_min_and_max_are_zero
    363      * @covers ::wp_rand
    364      *
    365      * @param mixed $min Lower limit for the generated number.
    366      * @param mixed $max Upper limit for the generated number.
    367      */
    368     public function test_wp_rand_should_return_zero_when_min_and_max_are_zero( $min, $max ) {
    369         $this->assertSame( 0, wp_rand( $min, $max ) );
    370     }
    371 
    372     /**
    373      * Data provider.
    374      *
    375      * @return array
    376      */
    377     public function data_wp_rand_should_return_zero_when_min_and_max_are_zero() {
    378         return array(
    379             'min and max as 0'      => array(
    380                 'min' => 0,
    381                 'max' => 0,
    382             ),
    383             'min and max as 0.0'    => array(
    384                 'min' => 0.0,
    385                 'max' => 0.0,
    386             ),
    387             'min as null, max as 0' => array(
    388                 'min' => null,
    389                 'max' => 0,
    390             ),
    391         );
    392     }
    393 
    394     /**
    395      * Tests that wp_rand() returns a positive integer for both positive and negative input.
    396      *
    397      * @ticket 55194
    398      * @dataProvider data_wp_rand_should_return_a_positive_integer
    399      * @covers ::wp_rand
    400      *
    401      * @param int $min Lower limit for the generated number.
    402      * @param int $max Upper limit for the generated number.
    403      */
    404     public function test_wp_rand_should_return_a_positive_integer( $min, $max ) {
    405         $this->assertGreaterThan(
    406             0,
    407             wp_rand( $min, $max ),
    408             'The value was not greater than 0'
    409         );
    410 
    411         $this->assertLessThan(
    412             100,
    413             wp_rand( $min, $max ),
    414             'The value was not less than 100'
    415         );
    416     }
    417 
    418     /**
    419      * Data provider.
    420      *
    421      * @return array
    422      */
    423     public function data_wp_rand_should_return_a_positive_integer() {
    424         return array(
    425             '1 and 99'       => array(
    426                 'min' => 1,
    427                 'max' => 99,
    428             ),
    429             '-1 and 99'      => array(
    430                 'min' => -1,
    431                 'max' => 99,
    432             ),
    433             '1 and -99'      => array(
    434                 'min' => 1,
    435                 'max' => -99,
    436             ),
    437             '-1 and -99'     => array(
    438                 'min' => -1,
    439                 'max' => -99,
    440             ),
    441             '1.0 and 99.0'   => array(
    442                 'min' => 1.0,
    443                 'max' => 99.0,
    444             ),
    445             '-1.0 and -99.0' => array(
    446                 'min' => -1.0,
    447                 'max' => -99.0,
    448             ),
    449         );
    450     }
    45124}
  • trunk/tests/phpunit/tests/pluggable/wpRand.php

    r53477 r53478  
    33/**
    44 * @group pluggable
     5 * @covers ::wp_rand
    56 */
    6 class Tests_Pluggable extends WP_UnitTestCase {
    7 
    8     /**
    9      * Tests that the signatures of all functions in pluggable.php match their expected signature.
    10      *
    11      * @ticket 33654
    12      * @ticket 33867
    13      *
    14      * @dataProvider get_defined_pluggable_functions
    15      */
    16     public function test_pluggable_function_signatures_match( $function ) {
    17 
    18         $signatures = $this->get_pluggable_function_signatures();
    19 
    20         $this->assertTrue( function_exists( $function ) );
    21         $this->assertArrayHasKey( $function, $signatures );
    22 
    23         $function_ref = new ReflectionFunction( $function );
    24         $param_refs   = $function_ref->getParameters();
    25 
    26         $this->assertSame( count( $signatures[ $function ] ), count( $param_refs ) );
    27 
    28         $i = 0;
    29 
    30         foreach ( $signatures[ $function ] as $name => $value ) {
    31 
    32             $param_ref = $param_refs[ $i ];
    33             $msg       = 'Parameter: ' . $param_ref->getName();
    34 
    35             if ( is_numeric( $name ) ) {
    36                 $name = $value;
    37                 $this->assertFalse( $param_ref->isOptional(), $msg );
    38             } else {
    39                 $this->assertTrue( $param_ref->isOptional(), $msg );
    40                 $this->assertSame( $value, $param_ref->getDefaultValue(), $msg );
    41             }
    42 
    43             $this->assertSame( $name, $param_ref->getName(), $msg );
    44 
    45             $i++;
    46 
    47         }
    48 
    49     }
    50 
    51     /**
    52      * Test the tests. Makes sure all the expected pluggable functions exist and that they live in pluggable.php.
    53      *
    54      * @ticket 33654
    55      * @ticket 33867
    56      */
    57     public function test_all_pluggable_functions_exist() {
    58 
    59         $defined  = wp_list_pluck( $this->get_defined_pluggable_functions(), 0 );
    60         $expected = $this->get_pluggable_function_signatures();
    61 
    62         foreach ( $expected as $function => $sig ) {
    63             $msg = 'Function: ' . $function . '()';
    64             $this->assertTrue( function_exists( $function ), $msg );
    65             $this->assertContains( $function, $defined, $msg );
    66         }
    67 
    68     }
    69 
    70     /**
    71      * Data provider for our pluggable function signature tests.
    72      *
    73      * @return array Data provider array of pluggable function names.
    74      */
    75     public function get_defined_pluggable_functions() {
    76 
    77         require_once ABSPATH . '/wp-admin/includes/upgrade.php';
    78 
    79         $test_functions = array(
    80             'install_network',
    81             'wp_install',
    82             'wp_install_defaults',
    83             'wp_new_blog_notification',
    84             'wp_upgrade',
    85             'install_global_terms',
    86         );
    87         $test_files     = array(
    88             'wp-includes/pluggable.php',
    89         );
    90 
    91         // Pluggable function signatures are not tested when an external object cache is in use. See #31491.
    92         if ( ! wp_using_ext_object_cache() ) {
    93             $test_files[] = 'wp-includes/cache.php';
    94         }
    95 
    96         $data = array();
    97 
    98         foreach ( $test_functions as $function ) {
    99             $data[] = array(
    100                 $function,
    101             );
    102         }
    103 
    104         foreach ( $test_files as $file ) {
    105             preg_match_all( '#^\t?function (\w+)#m', file_get_contents( ABSPATH . '/' . $file ), $functions );
    106 
    107             foreach ( $functions[1] as $function ) {
    108                 $data[] = array(
    109                     $function,
    110                 );
    111             }
    112         }
    113 
    114         return $data;
    115 
    116     }
    117 
    118     /**
    119      * Expected pluggable function signatures.
    120      *
    121      * @return array Array of signatures keyed by their function name.
    122      */
    123     public function get_pluggable_function_signatures() {
    124 
    125         $signatures = array(
    126 
    127             // wp-includes/pluggable.php:
    128             'wp_set_current_user'             => array(
    129                 'id',
    130                 'name' => '',
    131             ),
    132             'wp_get_current_user'             => array(),
    133             'get_userdata'                    => array( 'user_id' ),
    134             'get_user_by'                     => array( 'field', 'value' ),
    135             'cache_users'                     => array( 'user_ids' ),
    136             'wp_mail'                         => array(
    137                 'to',
    138                 'subject',
    139                 'message',
    140                 'headers'     => '',
    141                 'attachments' => array(),
    142             ),
    143             'wp_authenticate'                 => array( 'username', 'password' ),
    144             'wp_logout'                       => array(),
    145             'wp_validate_auth_cookie'         => array(
    146                 'cookie' => '',
    147                 'scheme' => '',
    148             ),
    149             'wp_generate_auth_cookie'         => array(
    150                 'user_id',
    151                 'expiration',
    152                 'scheme' => 'auth',
    153                 'token'  => '',
    154             ),
    155             'wp_parse_auth_cookie'            => array(
    156                 'cookie' => '',
    157                 'scheme' => '',
    158             ),
    159             'wp_set_auth_cookie'              => array(
    160                 'user_id',
    161                 'remember' => false,
    162                 'secure'   => '',
    163                 'token'    => '',
    164             ),
    165             'wp_clear_auth_cookie'            => array(),
    166             'is_user_logged_in'               => array(),
    167             'auth_redirect'                   => array(),
    168             'check_admin_referer'             => array(
    169                 'action'    => -1,
    170                 'query_arg' => '_wpnonce',
    171             ),
    172             'check_ajax_referer'              => array(
    173                 'action'    => -1,
    174                 'query_arg' => false,
    175                 'die'       => true,
    176             ),
    177             'wp_redirect'                     => array(
    178                 'location',
    179                 'status'        => 302,
    180                 'x_redirect_by' => 'WordPress',
    181             ),
    182             'wp_sanitize_redirect'            => array( 'location' ),
    183             '_wp_sanitize_utf8_in_redirect'   => array( 'matches' ),
    184             'wp_safe_redirect'                => array(
    185                 'location',
    186                 'status'        => 302,
    187                 'x_redirect_by' => 'WordPress',
    188             ),
    189             'wp_validate_redirect'            => array(
    190                 'location',
    191                 'default' => '',
    192             ),
    193             'wp_notify_postauthor'            => array(
    194                 'comment_id',
    195                 'deprecated' => null,
    196             ),
    197             'wp_notify_moderator'             => array( 'comment_id' ),
    198             'wp_password_change_notification' => array( 'user' ),
    199             'wp_new_user_notification'        => array(
    200                 'user_id',
    201                 'deprecated' => null,
    202                 'notify'     => '',
    203             ),
    204             'wp_nonce_tick'                   => array(),
    205             'wp_verify_nonce'                 => array(
    206                 'nonce',
    207                 'action' => -1,
    208             ),
    209             'wp_create_nonce'                 => array( 'action' => -1 ),
    210             'wp_salt'                         => array( 'scheme' => 'auth' ),
    211             'wp_hash'                         => array(
    212                 'data',
    213                 'scheme' => 'auth',
    214             ),
    215             'wp_hash_password'                => array( 'password' ),
    216             'wp_check_password'               => array(
    217                 'password',
    218                 'hash',
    219                 'user_id' => '',
    220             ),
    221             'wp_generate_password'            => array(
    222                 'length'              => 12,
    223                 'special_chars'       => true,
    224                 'extra_special_chars' => false,
    225             ),
    226             'wp_rand'                         => array(
    227                 'min' => null,
    228                 'max' => null,
    229             ),
    230             'wp_set_password'                 => array( 'password', 'user_id' ),
    231             'get_avatar'                      => array(
    232                 'id_or_email',
    233                 'size'    => 96,
    234                 'default' => '',
    235                 'alt'     => '',
    236                 'args'    => null,
    237             ),
    238             'wp_text_diff'                    => array(
    239                 'left_string',
    240                 'right_string',
    241                 'args' => null,
    242             ),
    243 
    244             // wp-admin/includes/schema.php:
    245             'install_network'                 => array(),
    246 
    247             // wp-admin/includes/upgrade.php:
    248             'wp_install'                      => array(
    249                 'blog_title',
    250                 'user_name',
    251                 'user_email',
    252                 'is_public',
    253                 'deprecated'    => '',
    254                 'user_password' => '',
    255                 'language'      => '',
    256             ),
    257             'wp_install_defaults'             => array( 'user_id' ),
    258             'wp_new_blog_notification'        => array( 'blog_title', 'blog_url', 'user_id', 'password' ),
    259             'wp_upgrade'                      => array(),
    260             'install_global_terms'            => array(),
    261         );
    262 
    263         // Pluggable function signatures are not tested when an external object cache is in use. See #31491.
    264         if ( ! wp_using_ext_object_cache() ) {
    265             $signatures = array_merge(
    266                 $signatures,
    267                 array(
    268 
    269                     // wp-includes/cache.php:
    270                     'wp_cache_init'                      => array(),
    271                     'wp_cache_add'                       => array(
    272                         'key',
    273                         'data',
    274                         'group'  => '',
    275                         'expire' => 0,
    276                     ),
    277                     'wp_cache_add_multiple'              => array(
    278                         'data',
    279                         'group'  => '',
    280                         'expire' => 0,
    281                     ),
    282                     'wp_cache_replace'                   => array(
    283                         'key',
    284                         'data',
    285                         'group'  => '',
    286                         'expire' => 0,
    287                     ),
    288                     'wp_cache_set'                       => array(
    289                         'key',
    290                         'data',
    291                         'group'  => '',
    292                         'expire' => 0,
    293                     ),
    294                     'wp_cache_set_multiple'              => array(
    295                         'data',
    296                         'group'  => '',
    297                         'expire' => 0,
    298                     ),
    299                     'wp_cache_get'                       => array(
    300                         'key',
    301                         'group' => '',
    302                         'force' => false,
    303                         'found' => null,
    304                     ),
    305                     'wp_cache_get_multiple'              => array(
    306                         'keys',
    307                         'group' => '',
    308                         'force' => false,
    309                     ),
    310                     'wp_cache_delete'                    => array(
    311                         'key',
    312                         'group' => '',
    313                     ),
    314                     'wp_cache_delete_multiple'           => array(
    315                         'keys',
    316                         'group' => '',
    317                     ),
    318                     'wp_cache_incr'                      => array(
    319                         'key',
    320                         'offset' => 1,
    321                         'group'  => '',
    322                     ),
    323                     'wp_cache_decr'                      => array(
    324                         'key',
    325                         'offset' => 1,
    326                         'group'  => '',
    327                     ),
    328                     'wp_cache_flush'                     => array(),
    329                     'wp_cache_flush_runtime'             => array(),
    330                     'wp_cache_close'                     => array(),
    331                     'wp_cache_add_global_groups'         => array( 'groups' ),
    332                     'wp_cache_add_non_persistent_groups' => array( 'groups' ),
    333                     'wp_cache_switch_to_blog'            => array( 'blog_id' ),
    334                     'wp_cache_reset'                     => array(),
    335                 )
    336             );
    337         }
    338 
    339         return $signatures;
    340     }
    341 
    342     /**
    343      * @ticket 28020
    344      */
    345     public function test_get_user_by_should_return_same_instance_as_wp_get_current_user() {
    346         // Create a test user.
    347         $new_user = self::factory()->user->create( array( 'role' => 'subscriber' ) );
    348 
    349         // Set the test user as the current user.
    350         $current_user = wp_set_current_user( $new_user );
    351 
    352         // Get the test user using get_user_by().
    353         $from_get_user_by = get_user_by( 'id', $new_user );
    354 
    355         $this->assertSame( $current_user, $from_get_user_by );
    356     }
    357 
    358     /**
    359      * Tests that wp_rand() returns zero when `$min` and `$max` are zero.
    360      *
    361      * @ticket 55194
    362      * @dataProvider data_wp_rand_should_return_zero_when_min_and_max_are_zero
    363      * @covers ::wp_rand
    364      *
    365      * @param mixed $min Lower limit for the generated number.
    366      * @param mixed $max Upper limit for the generated number.
    367      */
    368     public function test_wp_rand_should_return_zero_when_min_and_max_are_zero( $min, $max ) {
    369         $this->assertSame( 0, wp_rand( $min, $max ) );
    370     }
    371 
    372     /**
    373      * Data provider.
    374      *
    375      * @return array
    376      */
    377     public function data_wp_rand_should_return_zero_when_min_and_max_are_zero() {
    378         return array(
    379             'min and max as 0'      => array(
    380                 'min' => 0,
    381                 'max' => 0,
    382             ),
    383             'min and max as 0.0'    => array(
    384                 'min' => 0.0,
    385                 'max' => 0.0,
    386             ),
    387             'min as null, max as 0' => array(
    388                 'min' => null,
    389                 'max' => 0,
    390             ),
    391         );
    392     }
     7class Tests_Pluggable_wpRand extends WP_UnitTestCase {
    3938
    3949    /**
     
    39712     * @ticket 55194
    39813     * @dataProvider data_wp_rand_should_return_a_positive_integer
    399      * @covers ::wp_rand
    40014     *
    40115     * @param int $min Lower limit for the generated number.
     
    44963        );
    45064    }
     65
     66    /**
     67     * Tests that wp_rand() returns zero when `$min` and `$max` are zero.
     68     *
     69     * @ticket 55194
     70     * @dataProvider data_wp_rand_should_return_zero_when_min_and_max_are_zero
     71     *
     72     * @param mixed $min Lower limit for the generated number.
     73     * @param mixed $max Upper limit for the generated number.
     74     */
     75    public function test_wp_rand_should_return_zero_when_min_and_max_are_zero( $min, $max ) {
     76        $this->assertSame( 0, wp_rand( $min, $max ) );
     77    }
     78
     79    /**
     80     * Data provider.
     81     *
     82     * @return array
     83     */
     84    public function data_wp_rand_should_return_zero_when_min_and_max_are_zero() {
     85        return array(
     86            'min and max as 0'      => array(
     87                'min' => 0,
     88                'max' => 0,
     89            ),
     90            'min and max as 0.0'    => array(
     91                'min' => 0.0,
     92                'max' => 0.0,
     93            ),
     94            'min as null, max as 0' => array(
     95                'min' => null,
     96                'max' => 0,
     97            ),
     98        );
     99    }
    451100}
Note: See TracChangeset for help on using the changeset viewer.