Make WordPress Core

Changeset 61397


Ignore:
Timestamp:
12/22/2025 12:54:50 AM (8 months ago)
Author:
westonruter
Message:

Script Loader: Fix adding default version to script/style URL when args are supplied via enqueued handle.

Also fixes phpdoc for some member variables of WP_Scripts and WP_Styles.

Developed in https://github.com/WordPress/wordpress-develop/pull/10608

Follow-up to [61358].

Props westonruter, peterwilsoncc.
See #64224, #64238.
Fixes #64372.

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/class-wp-scripts.php

    r61358 r61397  
    2323         *
    2424         * @since 2.6.0
    25          * @var string
     25         * @see wp_default_scripts()
     26         * @var string|null
    2627         */
    2728        public $base_url;
     
    3132         *
    3233         * @since 2.8.0
    33          * @var string
     34         * @see wp_default_scripts()
     35         * @var string|null
    3436         */
    3537        public $content_url;
     
    3941         *
    4042         * @since 2.6.0
    41          * @var string
     43         * @see wp_default_scripts()
     44         * @var string|null
    4245         */
    4346        public $default_version;
     
    119122         *
    120123         * @since 2.8.0
     124         * @see wp_default_scripts()
    121125         * @var string[]|null
    122126         */
     
    414418                }
    415419
    416                 if ( ! empty( $ver ) ) {
    417                         $src = add_query_arg( 'ver', $ver, $src );
    418                 }
     420                $query_args = array();
     421                if ( empty( $obj->ver ) && null !== $obj->ver && is_string( $this->default_version ) ) {
     422                        $query_args['ver'] = $this->default_version;
     423                } elseif ( is_scalar( $obj->ver ) ) {
     424                        $query_args['ver'] = (string) $obj->ver;
     425                }
     426                if ( isset( $this->args[ $handle ] ) ) {
     427                        parse_str( $this->args[ $handle ], $parsed_args );
     428                        if ( $parsed_args ) {
     429                                $query_args = array_merge( $query_args, $parsed_args );
     430                        }
     431                }
     432                $src = add_query_arg( rawurlencode_deep( $query_args ), $src );
    419433
    420434                /** This filter is documented in wp-includes/class-wp-scripts.php */
  • trunk/src/wp-includes/class-wp-styles.php

    r61389 r61397  
    2323         *
    2424         * @since 2.6.0
    25          * @var string
     25         * @see wp_default_styles()
     26         * @var string|null
    2627         */
    2728        public $base_url;
     
    3132         *
    3233         * @since 2.8.0
    33          * @var string
     34         * @see wp_default_styles()
     35         * @var string|null
    3436         */
    3537        public $content_url;
     
    3941         *
    4042         * @since 2.6.0
    41          * @var string
     43         * @see wp_default_styles()
     44         * @var string|null
    4245         */
    4346        public $default_version;
     
    4750         *
    4851         * @since 2.6.0
     52         * @see wp_default_styles()
    4953         * @var string
    5054         */
     
    97101         *
    98102         * @since 2.8.0
     103         * @see wp_default_styles()
    99104         * @var string[]|null
    100105         */
     
    219224                }
    220225
    221                 $href = $this->_css_href( $src, $ver, $handle );
     226                $href = $this->_css_href( $src, $obj->ver, $handle );
    222227                if ( ! $href ) {
    223228                        return true;
     
    426431         * @since 2.6.0
    427432         *
    428          * @param string $src    The source of the enqueued style.
    429          * @param string $ver    The version of the enqueued style.
    430          * @param string $handle The style's registered handle.
     433         * @param string            $src    The source of the enqueued style.
     434         * @param string|false|null $ver    The version of the enqueued style.
     435         * @param string            $handle The style's registered handle.
    431436         * @return string Style's fully-qualified URL.
    432437         */
     
    436441                }
    437442
    438                 if ( ! empty( $ver ) ) {
    439                         $src = add_query_arg( 'ver', $ver, $src );
    440                 }
     443                $query_args = array();
     444                if ( empty( $ver ) && null !== $ver && is_string( $this->default_version ) ) {
     445                        $query_args['ver'] = $this->default_version;
     446                } elseif ( is_scalar( $ver ) ) {
     447                        $query_args['ver'] = (string) $ver;
     448                }
     449                if ( isset( $this->args[ $handle ] ) ) {
     450                        parse_str( $this->args[ $handle ], $parsed_args );
     451                        if ( $parsed_args ) {
     452                                $query_args = array_merge( $query_args, $parsed_args );
     453                        }
     454                }
     455                $src = add_query_arg( rawurlencode_deep( $query_args ), $src );
    441456
    442457                /**
  • trunk/tests/phpunit/tests/dependencies/scripts.php

    r61394 r61397  
    112112         *
    113113         * @ticket 11315
     114         * @ticket 64372
    114115         */
    115116        public function test_wp_enqueue_script() {
     
    118119                wp_enqueue_script( 'no-deps-no-version', 'example.com', array() );
    119120                wp_enqueue_script( 'empty-deps-no-version', 'example.com' );
    120                 wp_enqueue_script( 'empty-deps-version', 'example.com', array(), 1.2 );
     121                wp_enqueue_script( 'empty-deps-version', 'example.com', array(), '1.2' );
    121122                wp_enqueue_script( 'empty-deps-null-version', 'example.com', array(), null );
     123                wp_enqueue_script( 'empty-deps-arg-in-handle-with-ver?arg1=foo&arg2=bar', 'https://example.com/test.js', array(), '2.0' );
     124                wp_enqueue_script( 'empty-deps-arg-in-handle-without-ver?arg1=foo&arg2=bar', 'https://example.com/test.js', array(), null );
     125                wp_register_script( 'registered-no-qs-handle-null-version-enqueued-with-qs', 'https://example.com/test.js' );
     126                wp_enqueue_script( 'registered-no-qs-handle-null-version-enqueued-with-qs?arg1=foo&arg2=bar' );
    122127
    123128                $expected  = "<script type='text/javascript' src='http://example.com?ver={$wp_version}' id='no-deps-no-version-js'></script>\n";
     
    125130                $expected .= "<script type='text/javascript' src='http://example.com?ver=1.2' id='empty-deps-version-js'></script>\n";
    126131                $expected .= "<script type='text/javascript' src='http://example.com' id='empty-deps-null-version-js'></script>\n";
     132                $expected .= "<script type='text/javascript' src='https://example.com/test.js?ver=2.0&amp;arg1=foo&amp;arg2=bar' id='empty-deps-arg-in-handle-with-ver-js'></script>\n";
     133                $expected .= "<script type='text/javascript' src='https://example.com/test.js?arg1=foo&amp;arg2=bar' id='empty-deps-arg-in-handle-without-ver-js'></script>\n";
     134                $expected .= "<script type='text/javascript' src='https://example.com/test.js?ver={$wp_version}&amp;arg1=foo&amp;arg2=bar' id='registered-no-qs-handle-null-version-enqueued-with-qs-js'></script>\n";
    127135
    128136                $this->assertEqualHTML( $expected, get_echo( 'wp_print_scripts' ) );
     
    565573/* ]]> */
    566574</script>
    567 <script type='text/javascript' src='https://example.com/external.js?script_event_log=blocking-not-async-without-dependency:%20script' id='blocking-not-async-without-dependency-js'></script>
     575<script type='text/javascript' src='https://example.com/external.js?script_event_log=blocking-not-async-without-dependency%3A+script' id='blocking-not-async-without-dependency-js'></script>
    568576<script id="blocking-not-async-without-dependency-js-after" type="text/javascript">
    569577/* <![CDATA[ */
     
    578586/* ]]> */
    579587</script>
    580 <script type='text/javascript' src='https://example.com/external.js?script_event_log=async-with-blocking-dependency:%20script' id='async-with-blocking-dependency-js' data-wp-strategy='async'></script>
     588<script type='text/javascript' src='https://example.com/external.js?script_event_log=async-with-blocking-dependency%3A+script' id='async-with-blocking-dependency-js' data-wp-strategy='async'></script>
    581589<script id="async-with-blocking-dependency-js-after" type="text/javascript">
    582590/* <![CDATA[ */
     
    614622/* ]]> */
    615623</script>
    616 <script type='text/javascript' src='https://example.com/external.js?script_event_log=async-no-dependency:%20script' id='async-no-dependency-js' data-wp-strategy='async'></script>
     624<script type='text/javascript' src='https://example.com/external.js?script_event_log=async-no-dependency%3A+script' id='async-no-dependency-js' data-wp-strategy='async'></script>
    617625<script id="async-no-dependency-js-after" type="text/javascript">
    618626/* <![CDATA[ */
     
    627635/* ]]> */
    628636</script>
    629 <script type='text/javascript' src='https://example.com/external.js?script_event_log=async-one-async-dependency:%20script' id='async-one-async-dependency-js' data-wp-strategy='async'></script>
     637<script type='text/javascript' src='https://example.com/external.js?script_event_log=async-one-async-dependency%3A+script' id='async-one-async-dependency-js' data-wp-strategy='async'></script>
    630638<script id="async-one-async-dependency-js-after" type="text/javascript">
    631639/* <![CDATA[ */
     
    640648/* ]]> */
    641649</script>
    642 <script type='text/javascript' src='https://example.com/external.js?script_event_log=async-two-async-dependencies:%20script' id='async-two-async-dependencies-js' data-wp-strategy='async'></script>
     650<script type='text/javascript' src='https://example.com/external.js?script_event_log=async-two-async-dependencies%3A+script' id='async-two-async-dependencies-js' data-wp-strategy='async'></script>
    643651<script id="async-two-async-dependencies-js-after" type="text/javascript">
    644652/* <![CDATA[ */
     
    668676/* ]]> */
    669677</script>
    670 <script type='text/javascript' src='https://example.com/external.js?script_event_log=async-with-blocking-dependent:%20script' id='async-with-blocking-dependent-js' data-wp-strategy='async'></script>
     678<script type='text/javascript' src='https://example.com/external.js?script_event_log=async-with-blocking-dependent%3A+script' id='async-with-blocking-dependent-js' data-wp-strategy='async'></script>
    671679<script id="async-with-blocking-dependent-js-after" type="text/javascript">
    672680/* <![CDATA[ */
     
    681689/* ]]> */
    682690</script>
    683 <script type='text/javascript' src='https://example.com/external.js?script_event_log=blocking-dependent-of-async:%20script' id='blocking-dependent-of-async-js'></script>
     691<script type='text/javascript' src='https://example.com/external.js?script_event_log=blocking-dependent-of-async%3A+script' id='blocking-dependent-of-async-js'></script>
    684692<script id="blocking-dependent-of-async-js-after" type="text/javascript">
    685693/* <![CDATA[ */
     
    709717/* ]]> */
    710718</script>
    711 <script type='text/javascript' src='https://example.com/external.js?script_event_log=async-with-defer-dependent:%20script' id='async-with-defer-dependent-js' data-wp-strategy='async'></script>
     719<script type='text/javascript' src='https://example.com/external.js?script_event_log=async-with-defer-dependent%3A+script' id='async-with-defer-dependent-js' data-wp-strategy='async'></script>
    712720<script id="async-with-defer-dependent-js-after" type="text/javascript">
    713721/* <![CDATA[ */
     
    722730/* ]]> */
    723731</script>
    724 <script type='text/javascript' src='https://example.com/external.js?script_event_log=defer-dependent-of-async:%20script' id='defer-dependent-of-async-js' data-wp-strategy='defer'></script>
     732<script type='text/javascript' src='https://example.com/external.js?script_event_log=defer-dependent-of-async%3A+script' id='defer-dependent-of-async-js' data-wp-strategy='defer'></script>
    725733<script id="defer-dependent-of-async-js-after" type="text/javascript">
    726734/* <![CDATA[ */
     
    765773/* ]]> */
    766774</script>
    767 <script type='text/javascript' src='https://example.com/external.js?script_event_log=defer-dependent-of-blocking-bundle-of-none:%20script' id='defer-dependent-of-blocking-bundle-of-none-js' data-wp-strategy='defer'></script>
     775<script type='text/javascript' src='https://example.com/external.js?script_event_log=defer-dependent-of-blocking-bundle-of-none%3A+script' id='defer-dependent-of-blocking-bundle-of-none-js' data-wp-strategy='defer'></script>
    768776<script id="defer-dependent-of-blocking-bundle-of-none-js-after" type="text/javascript">
    769777/* <![CDATA[ */
     
    799807/* ]]> */
    800808</script>
    801 <script type='text/javascript' src='https://example.com/external.js?script_event_log=blocking-bundle-member-one:%20script' id='blocking-bundle-member-one-js'></script>
     809<script type='text/javascript' src='https://example.com/external.js?script_event_log=blocking-bundle-member-one%3A+script' id='blocking-bundle-member-one-js'></script>
    802810<script id="blocking-bundle-member-one-js-after" type="text/javascript">
    803811/* <![CDATA[ */
     
    812820/* ]]> */
    813821</script>
    814 <script type='text/javascript' src='https://example.com/external.js?script_event_log=blocking-bundle-member-two:%20script' id='blocking-bundle-member-two-js'></script>
     822<script type='text/javascript' src='https://example.com/external.js?script_event_log=blocking-bundle-member-two%3A+script' id='blocking-bundle-member-two-js'></script>
    815823<script id="blocking-bundle-member-two-js-after" type="text/javascript">
    816824/* <![CDATA[ */
     
    825833/* ]]> */
    826834</script>
    827 <script type='text/javascript' src='https://example.com/external.js?script_event_log=defer-dependent-of-blocking-bundle-of-two:%20script' id='defer-dependent-of-blocking-bundle-of-two-js' data-wp-strategy='defer'></script>
     835<script type='text/javascript' src='https://example.com/external.js?script_event_log=defer-dependent-of-blocking-bundle-of-two%3A+script' id='defer-dependent-of-blocking-bundle-of-two-js' data-wp-strategy='defer'></script>
    828836<script id="defer-dependent-of-blocking-bundle-of-two-js-after" type="text/javascript">
    829837/* <![CDATA[ */
     
    870878/* ]]> */
    871879</script>
    872 <script type='text/javascript' src='https://example.com/external.js?script_event_log=defer-dependent-of-defer-bundle-of-none:%20script' id='defer-dependent-of-defer-bundle-of-none-js' data-wp-strategy='defer'></script>
     880<script type='text/javascript' src='https://example.com/external.js?script_event_log=defer-dependent-of-defer-bundle-of-none%3A+script' id='defer-dependent-of-defer-bundle-of-none-js' data-wp-strategy='defer'></script>
    873881<script id="defer-dependent-of-defer-bundle-of-none-js-after" type="text/javascript">
    874882/* <![CDATA[ */
     
    901909/* ]]> */
    902910</script>
    903 <script type='text/javascript' src='https://example.com/external.js?script_event_log=blocking-dependency-with-defer-following-dependency:%20script' id='blocking-dependency-with-defer-following-dependency-js'></script>
     911<script type='text/javascript' src='https://example.com/external.js?script_event_log=blocking-dependency-with-defer-following-dependency%3A+script' id='blocking-dependency-with-defer-following-dependency-js'></script>
    904912<script id="blocking-dependency-with-defer-following-dependency-js-after" type="text/javascript">
    905913/* <![CDATA[ */
     
    914922/* ]]> */
    915923</script>
    916 <script type='text/javascript' src='https://example.com/external.js?script_event_log=defer-dependency-with-blocking-preceding-dependency:%20script' id='defer-dependency-with-blocking-preceding-dependency-js' data-wp-strategy='defer'></script>
     924<script type='text/javascript' src='https://example.com/external.js?script_event_log=defer-dependency-with-blocking-preceding-dependency%3A+script' id='defer-dependency-with-blocking-preceding-dependency-js' data-wp-strategy='defer'></script>
    917925<script id="defer-dependency-with-blocking-preceding-dependency-js-after" type="text/javascript">
    918926/* <![CDATA[ */
     
    927935/* ]]> */
    928936</script>
    929 <script type='text/javascript' src='https://example.com/external.js?script_event_log=defer-dependent-of-blocking-and-defer-dependencies:%20script' id='defer-dependent-of-blocking-and-defer-dependencies-js' data-wp-strategy='defer'></script>
     937<script type='text/javascript' src='https://example.com/external.js?script_event_log=defer-dependent-of-blocking-and-defer-dependencies%3A+script' id='defer-dependent-of-blocking-and-defer-dependencies-js' data-wp-strategy='defer'></script>
    930938<script id="defer-dependent-of-blocking-and-defer-dependencies-js-after" type="text/javascript">
    931939/* <![CDATA[ */
     
    958966/* ]]> */
    959967</script>
    960 <script type='text/javascript' src='https://example.com/external.js?script_event_log=defer-dependency-with-blocking-following-dependency:%20script' id='defer-dependency-with-blocking-following-dependency-js' data-wp-strategy='defer'></script>
     968<script type='text/javascript' src='https://example.com/external.js?script_event_log=defer-dependency-with-blocking-following-dependency%3A+script' id='defer-dependency-with-blocking-following-dependency-js' data-wp-strategy='defer'></script>
    961969<script id="defer-dependency-with-blocking-following-dependency-js-after" type="text/javascript">
    962970/* <![CDATA[ */
     
    971979/* ]]> */
    972980</script>
    973 <script type='text/javascript' src='https://example.com/external.js?script_event_log=blocking-dependency-with-defer-preceding-dependency:%20script' id='blocking-dependency-with-defer-preceding-dependency-js'></script>
     981<script type='text/javascript' src='https://example.com/external.js?script_event_log=blocking-dependency-with-defer-preceding-dependency%3A+script' id='blocking-dependency-with-defer-preceding-dependency-js'></script>
    974982<script id="blocking-dependency-with-defer-preceding-dependency-js-after" type="text/javascript">
    975983/* <![CDATA[ */
     
    984992/* ]]> */
    985993</script>
    986 <script type='text/javascript' src='https://example.com/external.js?script_event_log=defer-dependent-of-defer-and-blocking-dependencies:%20script' id='defer-dependent-of-defer-and-blocking-dependencies-js' data-wp-strategy='defer'></script>
     994<script type='text/javascript' src='https://example.com/external.js?script_event_log=defer-dependent-of-defer-and-blocking-dependencies%3A+script' id='defer-dependent-of-defer-and-blocking-dependencies-js' data-wp-strategy='defer'></script>
    987995<script id="defer-dependent-of-defer-and-blocking-dependencies-js-after" type="text/javascript">
    988996/* <![CDATA[ */
     
    10121020/* ]]> */
    10131021</script>
    1014 <script type='text/javascript' src='https://example.com/external.js?script_event_log=defer-with-async-dependent:%20script' id='defer-with-async-dependent-js' data-wp-strategy='defer'></script>
     1022<script type='text/javascript' src='https://example.com/external.js?script_event_log=defer-with-async-dependent%3A+script' id='defer-with-async-dependent-js' data-wp-strategy='defer'></script>
    10151023<script id="defer-with-async-dependent-js-after" type="text/javascript">
    10161024/* <![CDATA[ */
     
    10251033/* ]]> */
    10261034</script>
    1027 <script type='text/javascript' src='https://example.com/external.js?script_event_log=async-dependent-of-defer:%20script' id='async-dependent-of-defer-js' data-wp-strategy='async'></script>
     1035<script type='text/javascript' src='https://example.com/external.js?script_event_log=async-dependent-of-defer%3A+script' id='async-dependent-of-defer-js' data-wp-strategy='async'></script>
    10281036<script id="async-dependent-of-defer-js-after" type="text/javascript">
    10291037/* <![CDATA[ */
     
    10491057/* ]]> */
    10501058</script>
    1051 <script type='text/javascript' src='https://example.com/external.js?script_event_log=defer-with-before-inline:%20script' id='defer-with-before-inline-js' defer='defer' data-wp-strategy='defer'></script>
     1059<script type='text/javascript' src='https://example.com/external.js?script_event_log=defer-with-before-inline%3A+script' id='defer-with-before-inline-js' defer='defer' data-wp-strategy='defer'></script>
    10521060HTML
    10531061                                ,
     
    10611069                                },
    10621070                                'expected_markup' => <<<HTML
    1063 <script type='text/javascript' src='https://example.com/external.js?script_event_log=defer-with-after-inline:%20script' id='defer-with-after-inline-js' data-wp-strategy='defer'></script>
     1071<script type='text/javascript' src='https://example.com/external.js?script_event_log=defer-with-after-inline%3A+script' id='defer-with-after-inline-js' data-wp-strategy='defer'></script>
    10641072<script id="defer-with-after-inline-js-after" type="text/javascript">
    10651073/* <![CDATA[ */
     
    11071115                                },
    11081116                                'expected_markup' => <<<HTML
    1109 <script type='text/javascript' src='https://example.com/external.js?script_event_log=inner-bundle-member-one:%20script' id='inner-bundle-member-one-js' data-wp-strategy='defer'></script>
    1110 <script type='text/javascript' src='https://example.com/external.js?script_event_log=inner-bundle-member-two:%20script' id='inner-bundle-member-two-js' data-wp-strategy='defer'></script>
    1111 <script type='text/javascript' src='https://example.com/external.js?script_event_log=outer-bundle-leaf-member:%20script' id='outer-bundle-leaf-member-js'></script>
     1117<script type='text/javascript' src='https://example.com/external.js?script_event_log=inner-bundle-member-one%3A+script' id='inner-bundle-member-one-js' data-wp-strategy='defer'></script>
     1118<script type='text/javascript' src='https://example.com/external.js?script_event_log=inner-bundle-member-two%3A+script' id='inner-bundle-member-two-js' data-wp-strategy='defer'></script>
     1119<script type='text/javascript' src='https://example.com/external.js?script_event_log=outer-bundle-leaf-member%3A+script' id='outer-bundle-leaf-member-js'></script>
    11121120<script id="defer-dependent-of-nested-aliases-js-before" type="text/javascript">
    11131121/* <![CDATA[ */
     
    11161124/* ]]> */
    11171125</script>
    1118 <script type='text/javascript' src='https://example.com/external.js?script_event_log=defer-dependent-of-nested-aliases:%20script' id='defer-dependent-of-nested-aliases-js' data-wp-strategy='defer'></script>
     1126<script type='text/javascript' src='https://example.com/external.js?script_event_log=defer-dependent-of-nested-aliases%3A+script' id='defer-dependent-of-nested-aliases-js' data-wp-strategy='defer'></script>
    11191127<script id="defer-dependent-of-nested-aliases-js-after" type="text/javascript">
    11201128/* <![CDATA[ */
     
    11401148                                },
    11411149                                'expected_markup' => <<<HTML
    1142 <script type='text/javascript' src='https://example.com/external.js?script_event_log=async1:%20script' id='async1-js' defer='defer' data-wp-strategy='async'></script>
    1143 <script type='text/javascript' src='https://example.com/external.js?script_event_log=async2:%20script' id='async2-js' defer='defer' data-wp-strategy='async'></script>
    1144 <script type='text/javascript' src='https://example.com/external.js?script_event_log=defer-dependent-of-async-aliases:%20script' id='defer-dependent-of-async-aliases-js' defer='defer' data-wp-strategy='defer'></script>
     1150<script type='text/javascript' src='https://example.com/external.js?script_event_log=async1%3A+script' id='async1-js' defer='defer' data-wp-strategy='async'></script>
     1151<script type='text/javascript' src='https://example.com/external.js?script_event_log=async2%3A+script' id='async2-js' defer='defer' data-wp-strategy='async'></script>
     1152<script type='text/javascript' src='https://example.com/external.js?script_event_log=defer-dependent-of-async-aliases%3A+script' id='defer-dependent-of-async-aliases-js' defer='defer' data-wp-strategy='defer'></script>
    11451153HTML
    11461154                                ,
     
    41584166                );
    41594167        }
     4168
     4169        /**
     4170         * Test query string on handle when enqueuing script directly.
     4171         *
     4172         * @ticket 64372
     4173         *
     4174         * @covers WP_Scripts::do_item
     4175         *
     4176         * @dataProvider data_varying_versions_handle_args
     4177         *
     4178         * @param mixed  $version               Version to pass when enqueuing.
     4179         * @param string $expected_query_string Expected query string portion of the script src URL.
     4180         */
     4181        public function test_varying_versions_added_to_handle_args_enqueued_scripts( $version, $expected_query_string ) {
     4182                wp_enqueue_script( 'test-script?qs1=q1&qs2=q2', '/test-script.js', array(), $version );
     4183                $markup = get_echo( 'wp_print_scripts' );
     4184
     4185                $expected = "<script type='text/javascript' src='/test-script.js?{$expected_query_string}' id='test-script-js'></script>";
     4186                $this->assertEqualHTML( $expected, $markup, '<body>', 'Expected equal snapshot for wp_print_scripts() with version ' . var_export( $version, true ) . ":\n$markup" );
     4187        }
     4188
     4189        /**
     4190         * Test query string on handle when registering then enqueuing script.
     4191         *
     4192         * @ticket 64372
     4193         *
     4194         * @covers WP_Scripts::do_item
     4195         *
     4196         * @dataProvider data_varying_versions_handle_args
     4197         *
     4198         * @param mixed  $version               Version to pass when enqueuing.
     4199         * @param string $expected_query_string Expected query string portion of the script src URL.
     4200         */
     4201        public function test_varying_versions_added_to_handle_args_registered_then_enqueued_scripts( $version, $expected_query_string ) {
     4202                wp_register_script( 'test-script', '/test-script.js', array(), $version );
     4203                wp_enqueue_script( 'test-script?qs1=q1&qs2=q2' );
     4204                $markup = get_echo( 'wp_print_scripts' );
     4205
     4206                $expected = "<script type='text/javascript' src='/test-script.js?{$expected_query_string}' id='test-script-js'></script>";
     4207                $this->assertEqualHTML( $expected, $markup, '<body>', 'Expected equal snapshot for wp_print_scripts() with version ' . var_export( $version, true ) . ":\n$markup" );
     4208        }
     4209
     4210        /**
     4211         * Data provider for:
     4212         * - test_varying_versions_added_to_handle_args_enqueued_scripts
     4213         * - test_varying_versions_added_to_handle_args_registered_then_enqueued_scripts
     4214         *
     4215         * @return array[] Data provider.
     4216         */
     4217        public function data_varying_versions_handle_args() {
     4218                $default_version = get_bloginfo( 'version' );
     4219
     4220                return array(
     4221                        'string'       => array(
     4222                                '1.0.0',
     4223                                'ver=1.0.0&amp;qs1=q1&amp;qs2=q2',
     4224                        ),
     4225                        'null'         => array(
     4226                                null,
     4227                                'qs1=q1&amp;qs2=q2',
     4228                        ),
     4229                        'false'        => array(
     4230                                false,
     4231                                "ver={$default_version}&amp;qs1=q1&amp;qs2=q2",
     4232                        ),
     4233                        'empty-string' => array(
     4234                                '',
     4235                                "ver={$default_version}&amp;qs1=q1&amp;qs2=q2",
     4236                        ),
     4237                        'zero-string'  => array(
     4238                                '0',
     4239                                "ver={$default_version}&amp;qs1=q1&amp;qs2=q2",
     4240                        ),
     4241                        'integer'      => array(
     4242                                123,
     4243                                'ver=123&amp;qs1=q1&amp;qs2=q2',
     4244                        ),
     4245                        'zero-integer' => array(
     4246                                0,
     4247                                "ver={$default_version}&amp;qs1=q1&amp;qs2=q2",
     4248                        ),
     4249                        'float'        => array(
     4250                                1.23,
     4251                                'ver=1.23&amp;qs1=q1&amp;qs2=q2',
     4252                        ),
     4253                        'zero-float'   => array(
     4254                                0.0,
     4255                                "ver={$default_version}&amp;qs1=q1&amp;qs2=q2",
     4256                        ),
     4257                );
     4258        }
    41604259}
  • trunk/tests/phpunit/tests/dependencies/styles.php

    r61392 r61397  
    5656         *
    5757         * @ticket 11315
     58         * @ticket 64372
    5859         */
    5960        public function test_wp_enqueue_style() {
    6061                wp_enqueue_style( 'no-deps-no-version', 'example.com' );
    61                 wp_enqueue_style( 'no-deps-version', 'example.com', array(), 1.2 );
     62                wp_enqueue_style( 'no-deps-version', 'example.com', array(), '1.2' );
    6263                wp_enqueue_style( 'no-deps-null-version', 'example.com', array(), null );
    6364                wp_enqueue_style( 'no-deps-null-version-print-media', 'example.com', array(), null, 'print' );
     65                wp_enqueue_style( 'no-deps-arg-in-handle-with-ver?arg1=foo&arg2=bar', 'https://example.com/test.css', array(), '2.0' );
     66                wp_enqueue_style( 'no-deps-arg-in-handle-without-ver?arg1=foo&arg2=bar', 'https://example.com/test.css', array(), null );
     67                wp_register_style( 'registered-no-qs-handle-null-version-enqueued-with-qs', 'https://example.com/test.css' );
     68                wp_enqueue_style( 'registered-no-qs-handle-null-version-enqueued-with-qs?arg1=foo&arg2=bar' );
    6469
    6570                $ver       = get_bloginfo( 'version' );
     
    6873                $expected .= "<link rel='stylesheet' id='no-deps-null-version-css' href='http://example.com' type='text/css' media='all' />\n";
    6974                $expected .= "<link rel='stylesheet' id='no-deps-null-version-print-media-css' href='http://example.com' type='text/css' media='print' />\n";
     75                $expected .= "<link rel='stylesheet' id='no-deps-arg-in-handle-with-ver-css' href='https://example.com/test.css?ver=2.0&#038;arg1=foo&#038;arg2=bar' type='text/css' media='all' />\n";
     76                $expected .= "<link rel='stylesheet' id='no-deps-arg-in-handle-without-ver-css' href='https://example.com/test.css?arg1=foo&#038;arg2=bar' type='text/css' media='all' />\n";
     77                $expected .= "<link rel='stylesheet' id='registered-no-qs-handle-null-version-enqueued-with-qs-css' href='https://example.com/test.css?ver={$ver}&#038;arg1=foo&#038;arg2=bar' type='text/css' media='all' />\n";
    7078
    7179                $this->assertEqualHTML( $expected, get_echo( 'wp_print_styles' ) );
     
    845853                );
    846854        }
     855
     856        /**
     857         * Test query string on handle when enqueuing styles directly.
     858         *
     859         * @ticket 64372
     860         *
     861         * @covers WP_Styles::do_item
     862         *
     863         * @dataProvider data_varying_versions_handle_args
     864         *
     865         * @param mixed  $version               Version to pass when enqueuing.
     866         * @param string $expected_query_string Expected query string portion of the style sheet URL.
     867         */
     868        public function test_varying_versions_added_to_handle_args_enqueued_styles( $version, $expected_query_string ) {
     869                wp_enqueue_style( 'test-style?qs1=q1&qs2=q2', '/test-style.css', array(), $version );
     870                $markup = get_echo( 'wp_print_styles' );
     871
     872                $expected = "<link rel='stylesheet' href='/test-style.css?{$expected_query_string}' id='test-style-css' type='text/css' media='all' />";
     873                $this->assertEqualHTML( $expected, $markup, '<body>', 'Expected equal snapshot for wp_print_styles() with version ' . var_export( $version, true ) . ":\n$markup" );
     874        }
     875
     876        /**
     877         * Test query string on handle when registering then enqueuing styles.
     878         *
     879         * @ticket 64372
     880         *
     881         * @covers WP_Styles::do_item
     882         *
     883         * @dataProvider data_varying_versions_handle_args
     884         *
     885         * @param mixed  $version               Version to pass when enqueuing.
     886         * @param string $expected_query_string Expected query string portion of the style sheet URL.
     887         */
     888        public function test_varying_versions_added_to_handle_args_registered_then_enqueued_styles( $version, $expected_query_string ) {
     889                wp_register_style( 'test-style', '/test-style.css', array(), $version );
     890                wp_enqueue_style( 'test-style?qs1=q1&qs2=q2' );
     891                $markup = get_echo( 'wp_print_styles' );
     892
     893                $expected = "<link rel='stylesheet' href='/test-style.css?{$expected_query_string}' id='test-style-css' type='text/css' media='all' />";
     894                $this->assertEqualHTML( $expected, $markup, '<body>', 'Expected equal snapshot for wp_print_styles() with version ' . var_export( $version, true ) . ":\n$markup" );
     895        }
     896
     897        /**
     898         * Data provider for:
     899         * - test_varying_versions_added_to_handle_args_enqueued_styles
     900         * - test_varying_versions_added_to_handle_args_registered_then_enqueued_styles
     901         *
     902         * @return array[] Data provider.
     903         */
     904        public function data_varying_versions_handle_args() {
     905                $default_version = get_bloginfo( 'version' );
     906
     907                return array(
     908                        'string'       => array(
     909                                '1.0.0',
     910                                'ver=1.0.0&amp;qs1=q1&amp;qs2=q2',
     911                        ),
     912                        'null'         => array(
     913                                null,
     914                                'qs1=q1&amp;qs2=q2',
     915                        ),
     916                        'false'        => array(
     917                                false,
     918                                "ver={$default_version}&amp;qs1=q1&amp;qs2=q2",
     919                        ),
     920                        'empty-string' => array(
     921                                '',
     922                                "ver={$default_version}&amp;qs1=q1&amp;qs2=q2",
     923                        ),
     924                        'zero-string'  => array(
     925                                '0',
     926                                "ver={$default_version}&amp;qs1=q1&amp;qs2=q2",
     927                        ),
     928                        'integer'      => array(
     929                                123,
     930                                'ver=123&amp;qs1=q1&amp;qs2=q2',
     931                        ),
     932                        'zero-integer' => array(
     933                                0,
     934                                "ver={$default_version}&amp;qs1=q1&amp;qs2=q2",
     935                        ),
     936                        'float'        => array(
     937                                1.23,
     938                                'ver=1.23&amp;qs1=q1&amp;qs2=q2',
     939                        ),
     940                        'zero-float'   => array(
     941                                0.0,
     942                                "ver={$default_version}&amp;qs1=q1&amp;qs2=q2",
     943                        ),
     944                );
     945        }
    847946}
Note: See TracChangeset for help on using the changeset viewer.