Make WordPress Core


Ignore:
Timestamp:
01/27/2026 11:18:32 AM (8 months ago)
Author:
jonsurrell
Message:

Build/Test Tools: Ensure assertEqualHTML() recognizes whitespace text.

Ensure whitespace text nodes are correctly represented by build_visual_html_tree().

The build_visual_html_tree() function used by assertEqualHTML() would remove some leading whitespace from text nodes. Some whitespace-only text nodes were omitted from the tree.

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

Follow-up to [60295].

Reviewed by wildworks.
Merges [61519] to the 6.9 branch.

Props jonsurrell, dmsnell, bernhard-reiter.
Fixes #64531.

Location:
branches/6.9
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/6.9

  • branches/6.9/tests/phpunit/tests/dependencies/scripts.php

    r61506 r61536  
    248248                $output    = get_echo( 'wp_print_scripts' );
    249249                $expected  = "<script id='dependency-script-a2-js' src='/dependency-script-a2.js' type='text/javascript'></script>\n";
    250                 $expected .= "<script type='text/javascript' src='/main-script-a2.js' id='main-script-a2-js' {$strategy}='{$strategy}' data-wp-strategy='{$strategy}'></script>";
     250                $expected .= "<script type='text/javascript' src='/main-script-a2.js' id='main-script-a2-js' {$strategy}='{$strategy}' data-wp-strategy='{$strategy}'></script>\n";
    251251                $this->assertEqualHTML( $expected, $output, '<body>', 'Dependents of a blocking dependency are free to have any strategy.' );
    252252        }
     
    270270                $output   = get_echo( 'wp_print_scripts' );
    271271                $expected = <<<JS
    272                         <script type='text/javascript' src='/main-script-a3.js' id='main-script-a3-js' data-wp-strategy='{$strategy}'></script>
    273                         <script id="dependent-script-a3-js" src="/dependent-script-a3.js" type="text/javascript"></script>
     272<script type='text/javascript' src='/main-script-a3.js' id='main-script-a3-js' data-wp-strategy='{$strategy}'></script>
     273<script id="dependent-script-a3-js" src="/dependent-script-a3.js" type="text/javascript"></script>
     274
    274275JS;
    275276                $this->assertEqualHTML( $expected, $output, '<body>', 'Blocking dependents must force delayed dependencies to become blocking.' );
     
    13541355                        'enqueue_bajo' => array(
    13551356                                'enqueues' => array( 'bajo' ),
    1356                                 'expected' => '<script fetchpriority="low" id="bajo-js" src="/bajo.js" type="text/javascript"></script>',
     1357                                'expected' => "<script fetchpriority='low' id='bajo-js' src='/bajo.js' type='text/javascript'></script>\n",
    13571358                        ),
    13581359                        'enqueue_auto' => array(
    13591360                                'enqueues' => array( 'auto' ),
    1360                                 'expected' => '
    1361                                         <script type="text/javascript" src="/bajo.js" id="bajo-js" data-wp-fetchpriority="low"></script>
    1362                                         <script type="text/javascript" src="/auto.js" id="auto-js"></script>
    1363                                 ',
     1361                                'expected' =>
     1362                                        "<script type='text/javascript' src='/bajo.js' id='bajo-js' data-wp-fetchpriority='low'></script>\n" .
     1363                                        "<script type='text/javascript' src='/auto.js' id='auto-js'></script>\n",
    13641364                        ),
    13651365                        'enqueue_alto' => array(
    13661366                                'enqueues' => array( 'alto' ),
    1367                                 'expected' => '
    1368                                         <script type="text/javascript" src="/bajo.js" id="bajo-js" fetchpriority="high" data-wp-fetchpriority="low"></script>
    1369                                         <script type="text/javascript" src="/auto.js" id="auto-js" fetchpriority="high" data-wp-fetchpriority="auto"></script>
    1370                                         <script type="text/javascript" src="/alto.js" id="alto-js" fetchpriority="high"></script>
    1371                                 ',
     1367                                'expected' =>
     1368                                        "<script type='text/javascript' src='/bajo.js' id='bajo-js' fetchpriority='high' data-wp-fetchpriority='low'></script>\n" .
     1369                                        "<script type='text/javascript' src='/auto.js' id='auto-js' fetchpriority='high' data-wp-fetchpriority='auto'></script>\n" .
     1370                                        "<script type='text/javascript' src='/alto.js' id='alto-js' fetchpriority='high'></script>\n",
    13721371                        ),
    13731372                );
     
    14231422
    14241423                $actual   = get_echo( 'wp_print_scripts' );
    1425                 $expected = '
    1426                         <script type="text/javascript" src="/z.js" id="z-js" fetchpriority="high" data-wp-fetchpriority="auto"></script>
    1427                         <script type="text/javascript" src="/d.js" id="d-js" fetchpriority="high"></script>
    1428                         <script type="text/javascript" src="/e.js" id="e-js"></script>
    1429                         <script type="text/javascript" src="/c.js" id="c-js"></script>
    1430                         <script type="text/javascript" src="/b.js" id="b-js"></script>
    1431                         <script type="text/javascript" src="/a.js" id="a-js" fetchpriority="low"></script>
    1432                         <script type="text/javascript" src="/y.js" id="y-js" fetchpriority="high" data-wp-fetchpriority="auto"></script>
    1433                         <script type="text/javascript" src="/x.js" id="x-js" fetchpriority="high"></script>
    1434                 ';
     1424                $expected = <<<'HTML'
     1425<script type="text/javascript" src="/z.js" id="z-js" fetchpriority="high" data-wp-fetchpriority="auto"></script>
     1426<script type="text/javascript" src="/d.js" id="d-js" fetchpriority="high"></script>
     1427<script type="text/javascript" src="/e.js" id="e-js"></script>
     1428<script type="text/javascript" src="/c.js" id="c-js"></script>
     1429<script type="text/javascript" src="/b.js" id="b-js"></script>
     1430<script type="text/javascript" src="/a.js" id="a-js" fetchpriority="low"></script>
     1431<script type="text/javascript" src="/y.js" id="y-js" fetchpriority="high" data-wp-fetchpriority="auto"></script>
     1432<script type="text/javascript" src="/x.js" id="x-js" fetchpriority="high"></script>
     1433
     1434HTML;
    14351435                $this->assertEqualHTML( $expected, $actual, '<body>', "Snapshot:\n$actual" );
    14361436        }
     
    14881488                $actual = $this->normalize_markup_for_snapshot( get_echo( array( $wp_scripts, 'print_scripts' ) ) );
    14891489                $this->assertEqualHTML(
    1490                         '<script type="text/javascript" src="/wp-includes/js/comment-reply.js" id="comment-reply-js" async="async" data-wp-strategy="async" fetchpriority="low"></script>',
     1490                        "<script type='text/javascript' src='/wp-includes/js/comment-reply.js' id='comment-reply-js' async='async' data-wp-strategy='async' fetchpriority='low'></script>\n",
    14911491                        $actual,
    14921492                        '<body>',
     
    15251525                $this->assertEqualHTML(
    15261526                        sprintf(
    1527                                 '<script type="text/javascript" src="%s" id="comment-reply-js" async="async" data-wp-strategy="async" fetchpriority="low"></script>',
     1527                                "<script type='text/javascript' src='%s' id='comment-reply-js' async='async' data-wp-strategy='async' fetchpriority='low'></script>\n",
    15281528                                includes_url( 'js/comment-reply.js' )
    15291529                        ),
     
    22842284/* ]]> */
    22852285</script>
     2286
    22862287HTML;
    22872288                $expected .= "<script type='text/javascript' src='http://example.com' id='test-example-js'></script>\n";
     
    23052306/* ]]> */
    23062307</script>
     2308
    23072309HTML;
    23082310
     
    36553657                                },
    36563658                                'expected_header'    => '',
    3657                                 'expected_footer'    => '
    3658                                         <script type="text/javascript" src="https://example.com/script-a.js" id="script-a-js" data-wp-strategy="defer"></script>
    3659                                         <script type="text/javascript" src="https://example.com/script-b.js" id="script-b-js"></script>
    3660                                 ',
     3659                                'expected_footer'    =>
     3660                                        "<script type='text/javascript' src='https://example.com/script-a.js' id='script-a-js' data-wp-strategy='defer'></script>\n" .
     3661                                        "<script type='text/javascript' src='https://example.com/script-b.js' id='script-b-js'></script>\n",
    36613662                                'expected_in_footer' => array(
    36623663                                        'script-a',
     
    36763677                                },
    36773678                                'expected_header'    => '',
    3678                                 'expected_footer'    => '
    3679                                         <script type="text/javascript" src="https://example.com/script-a.js" id="script-a-js" data-wp-strategy="async"></script>
    3680                                         <script type="text/javascript" src="https://example.com/script-b.js" id="script-b-js"></script>
    3681                                 ',
     3679                                'expected_footer'    =>
     3680                                        "<script type='text/javascript' src='https://example.com/script-a.js' id='script-a-js' data-wp-strategy='async'></script>\n" .
     3681                                        "<script type='text/javascript' src='https://example.com/script-b.js' id='script-b-js'></script>\n",
    36823682                                'expected_in_footer' => array(
    36833683                                        'script-a',
     
    36963696                                        wp_enqueue_script( 'script-b', 'https://example.com/script-b.js', array( 'script-a' ), null, array( 'in_footer' => false ) );
    36973697                                },
    3698                                 'expected_header'    => '
    3699                                         <script type="text/javascript" src="https://example.com/script-a.js" id="script-a-js" data-wp-strategy="defer"></script>
    3700                                         <script type="text/javascript" src="https://example.com/script-b.js" id="script-b-js"></script>
    3701                                 ',
     3698                                'expected_header'    =>
     3699                                        "<script type='text/javascript' src='https://example.com/script-a.js' id='script-a-js' data-wp-strategy='defer'></script>\n" .
     3700                                        "<script type='text/javascript' src='https://example.com/script-b.js' id='script-b-js'></script>\n",
    37023701                                'expected_footer'    => '',
    37033702                                'expected_in_footer' => array(),
     
    37233722                                        );
    37243723                                },
    3725                                 'expected_header'    => '
    3726                                         <script type="text/javascript" src="https://example.com/script-a.js" id="script-a-js" defer="defer" data-wp-strategy="defer"></script>
    3727                                 ',
    3728                                 'expected_footer'    => '
    3729                                         <script type="text/javascript" src="https://example.com/script-b.js" id="script-b-js" defer="defer" data-wp-strategy="defer"></script>
    3730                                 ',
     3724                                'expected_header'    =>
     3725                                        "<script type='text/javascript' src='https://example.com/script-a.js' id='script-a-js' defer='defer' data-wp-strategy='defer'></script>\n",
     3726                                'expected_footer'    =>
     3727                                        "<script type='text/javascript' src='https://example.com/script-b.js' id='script-b-js' defer='defer' data-wp-strategy='defer'></script>\n",
    37313728                                'expected_in_footer' => array(
    37323729                                        'script-b',
     
    37733770                                        );
    37743771                                },
    3775                                 'expected_header'    => '
    3776                                         <script type="text/javascript" src="https://example.com/script-a.js" id="script-a-js" defer="defer" data-wp-strategy="defer"></script>
    3777                                         <script type="text/javascript" src="https://example.com/script-b.js" id="script-b-js" defer="defer" data-wp-strategy="defer"></script>
    3778                                 ',
    3779                                 'expected_footer'    => '
    3780                                         <script type="text/javascript" src="https://example.com/script-c.js" id="script-c-js" defer="defer" data-wp-strategy="defer"></script>
    3781                                         <script type="text/javascript" src="https://example.com/script-d.js" id="script-d-js" defer="defer" data-wp-strategy="defer"></script>
    3782                                 ',
     3772                                'expected_header'    =>
     3773                                        "<script type='text/javascript' src='https://example.com/script-a.js' id='script-a-js' defer='defer' data-wp-strategy='defer'></script>\n" .
     3774                                        "<script type='text/javascript' src='https://example.com/script-b.js' id='script-b-js' defer='defer' data-wp-strategy='defer'></script>\n",
     3775                                'expected_footer'    =>
     3776                                        "<script type='text/javascript' src='https://example.com/script-c.js' id='script-c-js' defer='defer' data-wp-strategy='defer'></script>\n" .
     3777                                        "<script type='text/javascript' src='https://example.com/script-d.js' id='script-d-js' defer='defer' data-wp-strategy='defer'></script>\n",
    37833778                                'expected_in_footer' => array(
    37843779                                        'script-c',
     
    38203815                                },
    38213816                                'expected_header'    => '',
    3822                                 'expected_footer'    => '
    3823                                         <script type="text/javascript" src="https://example.com/script-a.js" id="script-a-js" data-wp-strategy="defer"></script>
    3824                                         <script type="text/javascript" src="https://example.com/script-b.js" id="script-b-js" defer="defer" data-wp-strategy="defer"></script>
    3825                                         <script type="text/javascript" src="https://example.com/script-c.js" id="script-c-js"></script>
    3826                                         <script type="text/javascript" src="https://example.com/script-d.js" id="script-d-js" defer="defer" data-wp-strategy="defer"></script>
    3827                                 ',
     3817                                'expected_footer'    =>
     3818                                        "<script type='text/javascript' src='https://example.com/script-a.js' id='script-a-js' data-wp-strategy='defer'></script>\n" .
     3819                                        "<script type='text/javascript' src='https://example.com/script-b.js' id='script-b-js' defer='defer' data-wp-strategy='defer'></script>\n" .
     3820                                        "<script type='text/javascript' src='https://example.com/script-c.js' id='script-c-js'></script>\n" .
     3821                                        "<script type='text/javascript' src='https://example.com/script-d.js' id='script-d-js' defer='defer' data-wp-strategy='defer'></script>\n",
    38283822                                'expected_in_footer' => array(
    38293823                                        'script-a',
     
    38673861                                        );
    38683862                                },
    3869                                 'expected_header'    => '
    3870                                         <script type="text/javascript" src="https://example.com/script-a.js" id="script-a-js" data-wp-strategy="defer"></script>
    3871                                         <script type="text/javascript" src="https://example.com/script-b.js" id="script-b-js" defer="defer" data-wp-strategy="defer"></script>
    3872                                 ',
    3873                                 'expected_footer'    => '
    3874                                         <script type="text/javascript" src="https://example.com/script-c.js" id="script-c-js"></script>
    3875                                         <script type="text/javascript" src="https://example.com/script-d.js" id="script-d-js" defer="defer" data-wp-strategy="defer"></script>
    3876                                 ',
     3863                                'expected_header'    =>
     3864                                        "<script type='text/javascript' src='https://example.com/script-a.js' id='script-a-js' data-wp-strategy='defer'></script>\n" .
     3865                                        "<script type='text/javascript' src='https://example.com/script-b.js' id='script-b-js' defer='defer' data-wp-strategy='defer'></script>\n",
     3866                                'expected_footer'    =>
     3867                                        "<script type='text/javascript' src='https://example.com/script-c.js' id='script-c-js'></script>\n" .
     3868                                        "<script type='text/javascript' src='https://example.com/script-d.js' id='script-d-js' defer='defer' data-wp-strategy='defer'></script>\n",
    38773869                                'expected_in_footer' => array(
    38783870                                        'script-c',
     
    40884080
    40894081                $expected = <<<HTML
     4082
    40904083<script>
    40914084/* <![CDATA[ */
Note: See TracChangeset for help on using the changeset viewer.