Make WordPress Core

Changeset 61397


Ignore:
Timestamp:
12/22/2025 12:54:50 AM (3 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="https://core.trac.wordpress.org/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="https://core.trac.wordpress.org/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="https://core.trac.wordpress.org/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="https://core.trac.wordpress.org/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.