Changeset 60295
- Timestamp:
- 06/10/2025 10:23:38 AM (6 months ago)
- Location:
- trunk/tests/phpunit
- Files:
-
- 2 added
- 2 edited
-
includes/abstract-testcase.php (modified) (3 diffs)
-
includes/build-visual-html-tree.php (added)
-
tests/build-visual-html-tree.php (added)
-
tests/dependencies/scripts.php (modified) (86 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/tests/phpunit/includes/abstract-testcase.php
r59896 r60295 1 1 <?php 2 2 3 require_once __DIR__ . '/build-visual-html-tree.php'; 3 4 require_once __DIR__ . '/factory.php'; 4 5 require_once __DIR__ . '/trac.php'; … … 14 15 */ 15 16 abstract class WP_UnitTestCase_Base extends PHPUnit_Adapter_TestCase { 16 17 17 protected static $forced_tickets = array(); 18 18 protected $expected_deprecated = array(); … … 1182 1182 1183 1183 /** 1184 * Check HTML markup (including blocks) for semantic equivalence. 1185 * 1186 * Given two markup strings, assert that they translate to the same semantic HTML tree, 1187 * normalizing tag names, attribute names, and attribute order. Furthermore, attributes 1188 * and class names are sorted and deduplicated, and whitespace in style attributes 1189 * is normalized. Finally, block delimiter comments are recognized and normalized, 1190 * applying the same principles. 1191 * 1192 * @since 6.9.0 1193 * 1194 * @param string $expected The expected HTML. 1195 * @param string $actual The actual HTML. 1196 * @param string|null $fragment_context Optional. The fragment context, for example "<td>" expected HTML 1197 * must occur within "<table><tr>" fragment context. Default "<body>". 1198 * Only "<body>" or `null` are supported at this time. 1199 * Set to `null` to parse a full HTML document. 1200 * @param string|null $message Optional. The assertion error message. 1201 */ 1202 public function assertEqualHTML( string $expected, string $actual, ?string $fragment_context = '<body>', $message = 'HTML markup was not equivalent.' ): void { 1203 try { 1204 $tree_expected = build_visual_html_tree( $expected, $fragment_context ); 1205 $tree_actual = build_visual_html_tree( $actual, $fragment_context ); 1206 } catch ( Exception $e ) { 1207 // For PHP 8.4+, we can retry, using the built-in DOM\HTMLDocument parser. 1208 if ( class_exists( 'DOM\HtmlDocument' ) ) { 1209 $dom_expected = DOM\HtmlDocument::createFromString( $expected, LIBXML_NOERROR ); 1210 $tree_expected = build_visual_html_tree( $dom_expected->saveHtml(), $fragment_context ); 1211 $dom_actual = DOM\HtmlDocument::createFromString( $actual, LIBXML_NOERROR ); 1212 $tree_actual = build_visual_html_tree( $dom_actual->saveHtml(), $fragment_context ); 1213 } else { 1214 throw $e; 1215 } 1216 } 1217 1218 $this->assertSame( $tree_expected, $tree_actual, $message ); 1219 } 1220 1221 /** 1184 1222 * Helper function to convert a single-level array containing text strings to a named data provider. 1185 1223 * -
trunk/tests/phpunit/tests/dependencies/scripts.php
r59906 r60295 80 80 $expected .= "<script type='text/javascript' src='http://example.com' id='empty-deps-null-version-js'></script>\n"; 81 81 82 $this->assertEqual Markup( $expected, get_echo( 'wp_print_scripts' ) );82 $this->assertEqualHTML( $expected, get_echo( 'wp_print_scripts' ) ); 83 83 84 84 // No scripts left to print. … … 126 126 ) 127 127 ); 128 $this->assertEqual Markup( $expected, $output, 'Inline scripts in the "after" position, that are attached to a deferred main script, are failing to print/execute.' );128 $this->assertEqualHTML( $expected, $output, '<body>', 'Inline scripts in the "after" position, that are attached to a deferred main script, are failing to print/execute.' ); 129 129 } 130 130 … … 155 155 ); 156 156 157 $this->assertEqual Markup( $expected, $output, 'Inline scripts in the "after" position, that are attached to a blocking main script, are failing to print/execute.' );157 $this->assertEqualHTML( $expected, $output, '<body>', 'Inline scripts in the "after" position, that are attached to a blocking main script, are failing to print/execute.' ); 158 158 } 159 159 … … 188 188 ) 189 189 ); 190 $expected .= "<script type='text/javascript' src='http://example.org/ds-i1-1.js' id='ds-i1-1-js' $strategydata-wp-strategy='{$strategy}'></script>\n";191 $expected .= "<script type='text/javascript' src='http://example.org/ds-i1-2.js' id='ds-i1-2-js' $strategydata-wp-strategy='{$strategy}'></script>\n";192 $expected .= "<script type='text/javascript' src='http://example.org/ds-i1-3.js' id='ds-i1-3-js' $strategydata-wp-strategy='{$strategy}'></script>\n";190 $expected .= "<script type='text/javascript' src='http://example.org/ds-i1-1.js' id='ds-i1-1-js' {$strategy}='{$strategy}' data-wp-strategy='{$strategy}'></script>\n"; 191 $expected .= "<script type='text/javascript' src='http://example.org/ds-i1-2.js' id='ds-i1-2-js' {$strategy}='{$strategy}' data-wp-strategy='{$strategy}'></script>\n"; 192 $expected .= "<script type='text/javascript' src='http://example.org/ds-i1-3.js' id='ds-i1-3-js' {$strategy}='{$strategy}' data-wp-strategy='{$strategy}'></script>\n"; 193 193 $expected .= wp_get_inline_script_tag( 194 194 'console.log("before last");', … … 198 198 ) 199 199 ); 200 $expected .= "<script type='text/javascript' src='http://example.org/ms-i1-1.js' id='ms-i1-1-js' {$strategy} data-wp-strategy='{$strategy}'></script>\n";201 202 $this->assertEqual Markup( $expected, $output, 'Inline scripts in the "before" position, that are attached to a deferred main script, are failing to print/execute.' );200 $expected .= "<script type='text/javascript' src='http://example.org/ms-i1-1.js' id='ms-i1-1-js' {$strategy}='{$strategy}' data-wp-strategy='{$strategy}'></script>\n"; 201 202 $this->assertEqualHTML( $expected, $output, '<body>', 'Inline scripts in the "before" position, that are attached to a deferred main script, are failing to print/execute.' ); 203 203 } 204 204 … … 217 217 wp_enqueue_script( 'main-script-a1', '/main-script-a1.js', array(), null, array( 'strategy' => 'async' ) ); 218 218 $output = get_echo( 'wp_print_scripts' ); 219 $expected = "<script type='text/javascript' src='/main-script-a1.js' id='main-script-a1-js' async data-wp-strategy='async'></script>\n";220 $this->assertEqual Markup( $expected, $output, 'Scripts enqueued with an async loading strategy are failing to have the async attribute applied to the script handle when being printed.' );219 $expected = "<script type='text/javascript' src='/main-script-a1.js' id='main-script-a1-js' async='async' data-wp-strategy='async'></script>\n"; 220 $this->assertEqualHTML( $expected, $output, '<body>', 'Scripts enqueued with an async loading strategy are failing to have the async attribute applied to the script handle when being printed.' ); 221 221 } 222 222 … … 239 239 wp_enqueue_script( 'main-script-a2', '/main-script-a2.js', array( 'dependency-script-a2' ), null, compact( 'strategy' ) ); 240 240 $output = get_echo( 'wp_print_scripts' ); 241 $expected = "<script id='dependency-script-a2-js' src='/dependency-script-a2.js' ></script>\n";242 $expected .= "<script type='text/javascript' src='/main-script-a2.js' id='main-script-a2-js' {$strategy} data-wp-strategy='{$strategy}'></script>";243 $this->assertEqual Markup( $expected, $output, 'Dependents of a blocking dependency are free to have any strategy.' );241 $expected = "<script id='dependency-script-a2-js' src='/dependency-script-a2.js' type='text/javascript'></script>\n"; 242 $expected .= "<script type='text/javascript' src='/main-script-a2.js' id='main-script-a2-js' {$strategy}='{$strategy}' data-wp-strategy='{$strategy}'></script>"; 243 $this->assertEqualHTML( $expected, $output, '<body>', 'Dependents of a blocking dependency are free to have any strategy.' ); 244 244 } 245 245 … … 265 265 <script id="dependent-script-a3-js" src="/dependent-script-a3.js" type="text/javascript"></script> 266 266 JS; 267 $this->assertEqual Markup( $expected, $output, 'Blocking dependents must force delayed dependencies to become blocking.' );267 $this->assertEqualHTML( $expected, $output, '<body>', 'Blocking dependents must force delayed dependencies to become blocking.' ); 268 268 } 269 269 … … 512 512 'expected_markup' => <<<HTML 513 513 <script id="blocking-not-async-without-dependency-js-before" type="text/javascript"> 514 /* <![CDATA[ */ 514 515 scriptEventLog.push( "blocking-not-async-without-dependency: before inline" ) 516 /* ]]> */ 515 517 </script> 516 518 <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> 517 519 <script id="blocking-not-async-without-dependency-js-after" type="text/javascript"> 520 /* <![CDATA[ */ 518 521 scriptEventLog.push( "blocking-not-async-without-dependency: after inline" ) 522 /* ]]> */ 519 523 </script> 520 524 <script id="async-with-blocking-dependency-js-before" type="text/javascript"> 525 /* <![CDATA[ */ 521 526 scriptEventLog.push( "async-with-blocking-dependency: before inline" ) 527 /* ]]> */ 522 528 </script> 523 529 <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> 524 530 <script id="async-with-blocking-dependency-js-after" type="text/javascript"> 531 /* <![CDATA[ */ 525 532 scriptEventLog.push( "async-with-blocking-dependency: after inline" ) 533 /* ]]> */ 526 534 </script> 527 535 HTML … … 549 557 'expected_markup' => <<<HTML 550 558 <script id="async-no-dependency-js-before" type="text/javascript"> 559 /* <![CDATA[ */ 551 560 scriptEventLog.push( "async-no-dependency: before inline" ) 561 /* ]]> */ 552 562 </script> 553 563 <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> 554 564 <script id="async-no-dependency-js-after" type="text/javascript"> 565 /* <![CDATA[ */ 555 566 scriptEventLog.push( "async-no-dependency: after inline" ) 567 /* ]]> */ 556 568 </script> 557 569 <script id="async-one-async-dependency-js-before" type="text/javascript"> 570 /* <![CDATA[ */ 558 571 scriptEventLog.push( "async-one-async-dependency: before inline" ) 572 /* ]]> */ 559 573 </script> 560 574 <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> 561 575 <script id="async-one-async-dependency-js-after" type="text/javascript"> 576 /* <![CDATA[ */ 562 577 scriptEventLog.push( "async-one-async-dependency: after inline" ) 578 /* ]]> */ 563 579 </script> 564 580 <script id="async-two-async-dependencies-js-before" type="text/javascript"> 581 /* <![CDATA[ */ 565 582 scriptEventLog.push( "async-two-async-dependencies: before inline" ) 583 /* ]]> */ 566 584 </script> 567 585 <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> 568 586 <script id="async-two-async-dependencies-js-after" type="text/javascript"> 587 /* <![CDATA[ */ 569 588 scriptEventLog.push( "async-two-async-dependencies: after inline" ) 589 /* ]]> */ 570 590 </script> 571 591 HTML … … 585 605 'expected_markup' => <<<HTML 586 606 <script id="async-with-blocking-dependent-js-before" type="text/javascript"> 607 /* <![CDATA[ */ 587 608 scriptEventLog.push( "async-with-blocking-dependent: before inline" ) 609 /* ]]> */ 588 610 </script> 589 611 <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> 590 612 <script id="async-with-blocking-dependent-js-after" type="text/javascript"> 613 /* <![CDATA[ */ 591 614 scriptEventLog.push( "async-with-blocking-dependent: after inline" ) 615 /* ]]> */ 592 616 </script> 593 617 <script id="blocking-dependent-of-async-js-before" type="text/javascript"> 618 /* <![CDATA[ */ 594 619 scriptEventLog.push( "blocking-dependent-of-async: before inline" ) 620 /* ]]> */ 595 621 </script> 596 622 <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> 597 623 <script id="blocking-dependent-of-async-js-after" type="text/javascript"> 624 /* <![CDATA[ */ 598 625 scriptEventLog.push( "blocking-dependent-of-async: after inline" ) 626 /* ]]> */ 599 627 </script> 600 628 HTML … … 614 642 'expected_markup' => <<<HTML 615 643 <script id="async-with-defer-dependent-js-before" type="text/javascript"> 644 /* <![CDATA[ */ 616 645 scriptEventLog.push( "async-with-defer-dependent: before inline" ) 646 /* ]]> */ 617 647 </script> 618 648 <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> 619 649 <script id="async-with-defer-dependent-js-after" type="text/javascript"> 650 /* <![CDATA[ */ 620 651 scriptEventLog.push( "async-with-defer-dependent: after inline" ) 652 /* ]]> */ 621 653 </script> 622 654 <script id="defer-dependent-of-async-js-before" type="text/javascript"> 655 /* <![CDATA[ */ 623 656 scriptEventLog.push( "defer-dependent-of-async: before inline" ) 657 /* ]]> */ 624 658 </script> 625 659 <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> 626 660 <script id="defer-dependent-of-async-js-after" type="text/javascript"> 661 /* <![CDATA[ */ 627 662 scriptEventLog.push( "defer-dependent-of-async: after inline" ) 663 /* ]]> */ 628 664 </script> 629 665 HTML … … 646 682 'expected_markup' => <<<HTML 647 683 <script id="blocking-bundle-of-none-js-before" type="text/javascript"> 684 /* <![CDATA[ */ 648 685 scriptEventLog.push( "blocking-bundle-of-none: before inline" ) 686 /* ]]> */ 649 687 </script> 650 688 <script id="blocking-bundle-of-none-js-after" type="text/javascript"> 689 /* <![CDATA[ */ 651 690 scriptEventLog.push( "blocking-bundle-of-none: after inline" ) 691 /* ]]> */ 652 692 </script> 653 693 <script id="defer-dependent-of-blocking-bundle-of-none-js-before" type="text/javascript"> 694 /* <![CDATA[ */ 654 695 scriptEventLog.push( "defer-dependent-of-blocking-bundle-of-none: before inline" ) 696 /* ]]> */ 655 697 </script> 656 698 <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> 657 699 <script id="defer-dependent-of-blocking-bundle-of-none-js-after" type="text/javascript"> 700 /* <![CDATA[ */ 658 701 scriptEventLog.push( "defer-dependent-of-blocking-bundle-of-none: after inline" ) 702 /* ]]> */ 659 703 </script> 660 704 HTML … … 680 724 'expected_markup' => <<<HTML 681 725 <script id="blocking-bundle-member-one-js-before" type="text/javascript"> 726 /* <![CDATA[ */ 682 727 scriptEventLog.push( "blocking-bundle-member-one: before inline" ) 728 /* ]]> */ 683 729 </script> 684 730 <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> 685 731 <script id="blocking-bundle-member-one-js-after" type="text/javascript"> 732 /* <![CDATA[ */ 686 733 scriptEventLog.push( "blocking-bundle-member-one: after inline" ) 734 /* ]]> */ 687 735 </script> 688 736 <script id="blocking-bundle-member-two-js-before" type="text/javascript"> 737 /* <![CDATA[ */ 689 738 scriptEventLog.push( "blocking-bundle-member-two: before inline" ) 739 /* ]]> */ 690 740 </script> 691 741 <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> 692 742 <script id="blocking-bundle-member-two-js-after" type="text/javascript"> 743 /* <![CDATA[ */ 693 744 scriptEventLog.push( "blocking-bundle-member-two: after inline" ) 745 /* ]]> */ 694 746 </script> 695 747 <script id="defer-dependent-of-blocking-bundle-of-two-js-before" type="text/javascript"> 748 /* <![CDATA[ */ 696 749 scriptEventLog.push( "defer-dependent-of-blocking-bundle-of-two: before inline" ) 750 /* ]]> */ 697 751 </script> 698 752 <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> 699 753 <script id="defer-dependent-of-blocking-bundle-of-two-js-after" type="text/javascript"> 754 /* <![CDATA[ */ 700 755 scriptEventLog.push( "defer-dependent-of-blocking-bundle-of-two: after inline" ) 756 /* ]]> */ 701 757 </script> 702 758 HTML … … 721 777 'expected_markup' => <<<HTML 722 778 <script id="defer-bundle-of-none-js-before" type="text/javascript"> 779 /* <![CDATA[ */ 723 780 scriptEventLog.push( "defer-bundle-of-none: before inline" ) 781 /* ]]> */ 724 782 </script> 725 783 <script id="defer-bundle-of-none-js-after" type="text/javascript"> 784 /* <![CDATA[ */ 726 785 scriptEventLog.push( "defer-bundle-of-none: after inline" ) 786 /* ]]> */ 727 787 </script> 728 788 <script id="defer-dependent-of-defer-bundle-of-none-js-before" type="text/javascript"> 789 /* <![CDATA[ */ 729 790 scriptEventLog.push( "defer-dependent-of-defer-bundle-of-none: before inline" ) 791 /* ]]> */ 730 792 </script> 731 793 <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> 732 794 <script id="defer-dependent-of-defer-bundle-of-none-js-after" type="text/javascript"> 795 /* <![CDATA[ */ 733 796 scriptEventLog.push( "defer-dependent-of-defer-bundle-of-none: after inline" ) 797 /* ]]> */ 734 798 </script> 735 799 HTML … … 752 816 'expected_markup' => <<<HTML 753 817 <script id="blocking-dependency-with-defer-following-dependency-js-before" type="text/javascript"> 818 /* <![CDATA[ */ 754 819 scriptEventLog.push( "blocking-dependency-with-defer-following-dependency: before inline" ) 820 /* ]]> */ 755 821 </script> 756 822 <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> 757 823 <script id="blocking-dependency-with-defer-following-dependency-js-after" type="text/javascript"> 824 /* <![CDATA[ */ 758 825 scriptEventLog.push( "blocking-dependency-with-defer-following-dependency: after inline" ) 826 /* ]]> */ 759 827 </script> 760 828 <script id="defer-dependency-with-blocking-preceding-dependency-js-before" type="text/javascript"> 829 /* <![CDATA[ */ 761 830 scriptEventLog.push( "defer-dependency-with-blocking-preceding-dependency: before inline" ) 831 /* ]]> */ 762 832 </script> 763 833 <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> 764 834 <script id="defer-dependency-with-blocking-preceding-dependency-js-after" type="text/javascript"> 835 /* <![CDATA[ */ 765 836 scriptEventLog.push( "defer-dependency-with-blocking-preceding-dependency: after inline" ) 837 /* ]]> */ 766 838 </script> 767 839 <script id="defer-dependent-of-blocking-and-defer-dependencies-js-before" type="text/javascript"> 840 /* <![CDATA[ */ 768 841 scriptEventLog.push( "defer-dependent-of-blocking-and-defer-dependencies: before inline" ) 842 /* ]]> */ 769 843 </script> 770 844 <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> 771 845 <script id="defer-dependent-of-blocking-and-defer-dependencies-js-after" type="text/javascript"> 846 /* <![CDATA[ */ 772 847 scriptEventLog.push( "defer-dependent-of-blocking-and-defer-dependencies: after inline" ) 848 /* ]]> */ 773 849 </script> 774 850 HTML … … 791 867 'expected_markup' => <<<HTML 792 868 <script id="defer-dependency-with-blocking-following-dependency-js-before" type="text/javascript"> 869 /* <![CDATA[ */ 793 870 scriptEventLog.push( "defer-dependency-with-blocking-following-dependency: before inline" ) 871 /* ]]> */ 794 872 </script> 795 873 <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> 796 874 <script id="defer-dependency-with-blocking-following-dependency-js-after" type="text/javascript"> 875 /* <![CDATA[ */ 797 876 scriptEventLog.push( "defer-dependency-with-blocking-following-dependency: after inline" ) 877 /* ]]> */ 798 878 </script> 799 879 <script id="blocking-dependency-with-defer-preceding-dependency-js-before" type="text/javascript"> 880 /* <![CDATA[ */ 800 881 scriptEventLog.push( "blocking-dependency-with-defer-preceding-dependency: before inline" ) 882 /* ]]> */ 801 883 </script> 802 884 <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> 803 885 <script id="blocking-dependency-with-defer-preceding-dependency-js-after" type="text/javascript"> 886 /* <![CDATA[ */ 804 887 scriptEventLog.push( "blocking-dependency-with-defer-preceding-dependency: after inline" ) 888 /* ]]> */ 805 889 </script> 806 890 <script id="defer-dependent-of-defer-and-blocking-dependencies-js-before" type="text/javascript"> 891 /* <![CDATA[ */ 807 892 scriptEventLog.push( "defer-dependent-of-defer-and-blocking-dependencies: before inline" ) 893 /* ]]> */ 808 894 </script> 809 895 <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> 810 896 <script id="defer-dependent-of-defer-and-blocking-dependencies-js-after" type="text/javascript"> 897 /* <![CDATA[ */ 811 898 scriptEventLog.push( "defer-dependent-of-defer-and-blocking-dependencies: after inline" ) 899 /* ]]> */ 812 900 </script> 813 901 HTML … … 827 915 'expected_markup' => <<<HTML 828 916 <script id="defer-with-async-dependent-js-before" type="text/javascript"> 917 /* <![CDATA[ */ 829 918 scriptEventLog.push( "defer-with-async-dependent: before inline" ) 919 /* ]]> */ 830 920 </script> 831 921 <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> 832 922 <script id="defer-with-async-dependent-js-after" type="text/javascript"> 923 /* <![CDATA[ */ 833 924 scriptEventLog.push( "defer-with-async-dependent: after inline" ) 925 /* ]]> */ 834 926 </script> 835 927 <script id="async-dependent-of-defer-js-before" type="text/javascript"> 928 /* <![CDATA[ */ 836 929 scriptEventLog.push( "async-dependent-of-defer: before inline" ) 930 /* ]]> */ 837 931 </script> 838 932 <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> 839 933 <script id="async-dependent-of-defer-js-after" type="text/javascript"> 934 /* <![CDATA[ */ 840 935 scriptEventLog.push( "async-dependent-of-defer: after inline" ) 936 /* ]]> */ 841 937 </script> 842 938 HTML … … 852 948 'expected_markup' => <<<HTML 853 949 <script id="defer-with-before-inline-js-before" type="text/javascript"> 950 /* <![CDATA[ */ 854 951 scriptEventLog.push( "defer-with-before-inline: before inline" ) 855 </script> 856 <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 data-wp-strategy='defer'></script> 952 /* ]]> */ 953 </script> 954 <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> 857 955 HTML 858 956 , … … 868 966 <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> 869 967 <script id="defer-with-after-inline-js-after" type="text/javascript"> 968 /* <![CDATA[ */ 870 969 scriptEventLog.push( "defer-with-after-inline: after inline" ) 970 /* ]]> */ 871 971 </script> 872 972 HTML … … 884 984 }, 885 985 'expected_markup' => <<<HTML 886 <script type='text/javascript' src='http://$wp_tests_domain/wp-includes/js/jquery/jquery.js' id='jquery-core-js' defer data-wp-strategy='defer'></script>887 <script type='text/javascript' src='http://$wp_tests_domain/wp-includes/js/jquery/jquery-migrate.js' id='jquery-migrate-js' defer data-wp-strategy='defer'></script>888 <script type='text/javascript' src='https://example.com/theme-functions.js' id='theme-functions-js' defer data-wp-strategy='defer'></script>986 <script type='text/javascript' src='http://$wp_tests_domain/wp-includes/js/jquery/jquery.js' id='jquery-core-js' defer='defer' data-wp-strategy='defer'></script> 987 <script type='text/javascript' src='http://$wp_tests_domain/wp-includes/js/jquery/jquery-migrate.js' id='jquery-migrate-js' defer='defer' data-wp-strategy='defer'></script> 988 <script type='text/javascript' src='https://example.com/theme-functions.js' id='theme-functions-js' defer='defer' data-wp-strategy='defer'></script> 889 989 HTML 890 990 , … … 913 1013 <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> 914 1014 <script id="defer-dependent-of-nested-aliases-js-before" type="text/javascript"> 1015 /* <![CDATA[ */ 915 1016 scriptEventLog.push( "defer-dependent-of-nested-aliases: before inline" ) 1017 /* ]]> */ 916 1018 </script> 917 1019 <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> 918 1020 <script id="defer-dependent-of-nested-aliases-js-after" type="text/javascript"> 1021 /* <![CDATA[ */ 919 1022 scriptEventLog.push( "defer-dependent-of-nested-aliases: after inline" ) 1023 /* ]]> */ 920 1024 </script> 921 1025 HTML … … 936 1040 }, 937 1041 'expected_markup' => <<<HTML 938 <script type='text/javascript' src='https://example.com/external.js?script_event_log=async1:%20script' id='async1-js' defer data-wp-strategy='async'></script>939 <script type='text/javascript' src='https://example.com/external.js?script_event_log=async2:%20script' id='async2-js' defer data-wp-strategy='async'></script>940 <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 data-wp-strategy='defer'></script>1042 <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> 1043 <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> 1044 <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> 941 1045 HTML 942 1046 , … … 961 1065 $set_up(); 962 1066 $actual_markup = get_echo( 'wp_print_scripts' ); 963 $this->assertEqual Markup( trim( $expected_markup ), trim( $actual_markup ), "Actual markup:\n{$actual_markup}" );1067 $this->assertEqualHTML( trim( $expected_markup ), trim( $actual_markup ), '<body>', "Actual markup:\n{$actual_markup}" ); 964 1068 } 965 1069 … … 1037 1141 wp_enqueue_script( 'dependent-script-d4-3', '/dependent-script-d4-3.js', array( 'dependent-script-d4-2' ), null, array( 'strategy' => 'defer' ) ); 1038 1142 $output = get_echo( 'wp_print_scripts' ); 1039 $expected = "<script type='text/javascript' src='/main-script-d4.js' id='main-script-d4-js' defer data-wp-strategy='defer'></script>\n";1040 $expected .= "<script type='text/javascript' src='/dependent-script-d4-1.js' id='dependent-script-d4-1-js' defer data-wp-strategy='defer'></script>\n";1041 $expected .= "<script type='text/javascript' src='/dependent-script-d4-2.js' id='dependent-script-d4-2-js' defer data-wp-strategy='async'></script>\n";1042 $expected .= "<script type='text/javascript' src='/dependent-script-d4-3.js' id='dependent-script-d4-3-js' defer data-wp-strategy='defer'></script>\n";1043 1044 $this->assertEqual Markup( $expected, $output, 'Scripts registered as defer but that have dependents that are async are expected to have said dependents deferred.' );1143 $expected = "<script type='text/javascript' src='/main-script-d4.js' id='main-script-d4-js' defer='defer' data-wp-strategy='defer'></script>\n"; 1144 $expected .= "<script type='text/javascript' src='/dependent-script-d4-1.js' id='dependent-script-d4-1-js' defer='defer' data-wp-strategy='defer'></script>\n"; 1145 $expected .= "<script type='text/javascript' src='/dependent-script-d4-2.js' id='dependent-script-d4-2-js' defer='defer' data-wp-strategy='async'></script>\n"; 1146 $expected .= "<script type='text/javascript' src='/dependent-script-d4-3.js' id='dependent-script-d4-3-js' defer='defer' data-wp-strategy='defer'></script>\n"; 1147 1148 $this->assertEqualHTML( $expected, $output, '<body>', 'Scripts registered as defer but that have dependents that are async are expected to have said dependents deferred.' ); 1045 1149 } 1046 1150 … … 1114 1218 $expected_header .= "<script type='text/javascript' src='/enqueue-header-new.js' id='enqueue-header-new-js'></script>\n"; 1115 1219 1116 $this->assertEqual Markup( $expected_header, $actual_header, 'Scripts registered/enqueued using the older $in_footer parameter or the newer $args parameter should have the same outcome.' );1220 $this->assertEqualHTML( $expected_header, $actual_header, '<body>', 'Scripts registered/enqueued using the older $in_footer parameter or the newer $args parameter should have the same outcome.' ); 1117 1221 $this->assertEmpty( $actual_footer, 'Expected footer to be empty since all scripts were for head.' ); 1118 1222 } … … 1142 1246 1143 1247 $this->assertEmpty( $actual_header, 'Expected header to be empty since all scripts targeted footer.' ); 1144 $this->assertEqual Markup( $expected_footer, $actual_footer, 'Scripts registered/enqueued using the older $in_footer parameter or the newer $args parameter should have the same outcome.' );1248 $this->assertEqualHTML( $expected_footer, $actual_footer, '<body>', 'Scripts registered/enqueued using the older $in_footer parameter or the newer $args parameter should have the same outcome.' ); 1145 1249 } 1146 1250 … … 1261 1365 wp_enqueue_script( 'invalid-strategy' ); 1262 1366 1263 $this->assertEqual Markup(1367 $this->assertEqualHTML( 1264 1368 "<script type='text/javascript' src='/defaults.js' id='invalid-strategy-js'></script>\n", 1265 1369 get_echo( 'wp_print_scripts' ) … … 1286 1390 wp_enqueue_script( 'invalid-strategy' ); 1287 1391 1288 $this->assertEqual Markup(1392 $this->assertEqualHTML( 1289 1393 "<script type='text/javascript' src='/defaults.js' id='invalid-strategy-js'></script>\n", 1290 1394 get_echo( 'wp_print_scripts' ) … … 1307 1411 wp_enqueue_script( 'invalid-strategy', '/defaults.js', array(), null, array( 'strategy' => 'random-strategy' ) ); 1308 1412 1309 $this->assertEqual Markup(1413 $this->assertEqualHTML( 1310 1414 "<script type='text/javascript' src='/defaults.js' id='invalid-strategy-js'></script>\n", 1311 1415 get_echo( 'wp_print_scripts' ) … … 1343 1447 1344 1448 $expected = "<script type='text/javascript' src='/wp-admin/load-scripts.php?c=0&load%5Bchunk_0%5D=one-concat-dep,two-concat-dep,three-concat-dep&ver={$wp_version}'></script>\n"; 1345 $expected .= "<script type='text/javascript' src='/main-script.js' id='main-defer-script-js' defer data-wp-strategy='defer'></script>\n";1346 1347 $this->assertEqual Markup( $expected, $print_scripts, 'Scripts are being incorrectly concatenated when a main script is registered with a "defer" loading strategy. Deferred scripts should not be part of the script concat loading query.' );1449 $expected .= "<script type='text/javascript' src='/main-script.js' id='main-defer-script-js' defer='defer' data-wp-strategy='defer'></script>\n"; 1450 1451 $this->assertEqualHTML( $expected, $print_scripts, '<body>', 'Scripts are being incorrectly concatenated when a main script is registered with a "defer" loading strategy. Deferred scripts should not be part of the script concat loading query.' ); 1348 1452 } 1349 1453 … … 1378 1482 1379 1483 $expected = "<script type='text/javascript' src='/wp-admin/load-scripts.php?c=0&load%5Bchunk_0%5D=one-concat-dep-1,two-concat-dep-1,three-concat-dep-1&ver={$wp_version}'></script>\n"; 1380 $expected .= "<script type='text/javascript' src='/main-script.js' id='main-async-script-1-js' async data-wp-strategy='async'></script>\n";1381 1382 $this->assertEqual Markup( $expected, $print_scripts, 'Scripts are being incorrectly concatenated when a main script is registered with an "async" loading strategy. Async scripts should not be part of the script concat loading query.' );1484 $expected .= "<script type='text/javascript' src='/main-script.js' id='main-async-script-1-js' async='async' data-wp-strategy='async'></script>\n"; 1485 1486 $this->assertEqualHTML( $expected, $print_scripts, '<body>', 'Scripts are being incorrectly concatenated when a main script is registered with an "async" loading strategy. Async scripts should not be part of the script concat loading query.' ); 1383 1487 } 1384 1488 … … 1417 1521 1418 1522 $expected = "<script type='text/javascript' src='/wp-admin/load-scripts.php?c=0&load%5Bchunk_0%5D=one-concat-dep-2,two-concat-dep-2,three-concat-dep-2,four-concat-dep-2,five-concat-dep-2,six-concat-dep-2&ver={$wp_version}'></script>\n"; 1419 $expected .= "<script type='text/javascript' src='/main-script.js' id='deferred-script-2-js' defer data-wp-strategy='defer'></script>\n";1420 1421 $this->assertEqual Markup( $expected, $print_scripts, 'Scripts are being incorrectly concatenated when a main script is registered as deferred after other blocking scripts are registered. Deferred scripts should not be part of the script concat loader query string. ' );1523 $expected .= "<script type='text/javascript' src='/main-script.js' id='deferred-script-2-js' defer='defer' data-wp-strategy='defer'></script>\n"; 1524 1525 $this->assertEqualHTML( $expected, $print_scripts, '<body>', 'Scripts are being incorrectly concatenated when a main script is registered as deferred after other blocking scripts are registered. Deferred scripts should not be part of the script concat loader query string. ' ); 1422 1526 } 1423 1527 … … 1428 1532 global $wp_version; 1429 1533 1534 $this->add_html5_script_theme_support(); 1535 1430 1536 $GLOBALS['wp_scripts'] = new WP_Scripts(); 1431 1537 $GLOBALS['wp_scripts']->default_version = get_bloginfo( 'version' ); … … 1435 1541 $expected = "<script src='http://example.com?ver={$wp_version}' id='empty-deps-no-version-js'></script>\n"; 1436 1542 1437 $this->assertEqual Markup( $expected, get_echo( 'wp_print_scripts' ) );1543 $this->assertEqualHTML( $expected, get_echo( 'wp_print_scripts' ) ); 1438 1544 } 1439 1545 … … 1474 1580 1475 1581 // Go! 1476 $this->assertEqual Markup( $expected, get_echo( 'wp_print_scripts' ) );1582 $this->assertEqualHTML( $expected, get_echo( 'wp_print_scripts' ) ); 1477 1583 1478 1584 // No scripts left to print. … … 1517 1623 1518 1624 // Go! 1519 $this->assertEqual Markup( $expected, get_echo( 'wp_print_scripts' ) );1625 $this->assertEqualHTML( $expected, get_echo( 'wp_print_scripts' ) ); 1520 1626 1521 1627 // No scripts left to print. … … 1532 1638 wp_enqueue_script( 'test-only-conditional', 'example.com', array(), null ); 1533 1639 wp_script_add_data( 'test-only-conditional', 'conditional', 'gt IE 7' ); 1534 $expected = "<!--[if gt IE 7]>\n<script type= 'text/javascript' src='http://example.com' id='test-only-conditional-js'></script>\n<![endif]-->\n";1640 $expected = "<!--[if gt IE 7]>\n<script type=\"text/javascript\" src=\"http://example.com\" id=\"test-only-conditional-js\"></script>\n<![endif]-->\n"; 1535 1641 1536 1642 // Go! 1537 $this->assertEqual Markup( $expected, get_echo( 'wp_print_scripts' ) );1643 $this->assertEqualHTML( $expected, get_echo( 'wp_print_scripts' ) ); 1538 1644 1539 1645 // No scripts left to print. … … 1556 1662 1557 1663 // Go! 1558 $this->assertEqual Markup( $expected, get_echo( 'wp_print_scripts' ) );1664 $this->assertEqualHTML( $expected, get_echo( 'wp_print_scripts' ) ); 1559 1665 1560 1666 // No scripts left to print. … … 1574 1680 1575 1681 // Go! 1576 $this->assertEqual Markup( $expected, get_echo( 'wp_print_scripts' ) );1682 $this->assertEqualHTML( $expected, get_echo( 'wp_print_scripts' ) ); 1577 1683 1578 1684 // No scripts left to print. 1579 $this->assertEqual Markup( '', get_echo( 'wp_print_scripts' ) );1685 $this->assertEqualHTML( '', get_echo( 'wp_print_scripts' ) ); 1580 1686 } 1581 1687 … … 1603 1709 wp_enqueue_script( 'handle-three' ); 1604 1710 1605 $this->assertEqual Markup( $expected, get_echo( 'wp_print_scripts' ) );1711 $this->assertEqualHTML( $expected, get_echo( 'wp_print_scripts' ) ); 1606 1712 } 1607 1713 … … 1691 1797 $expected_footer = "<script type='text/javascript' src='/parent.js' id='parent-js'></script>\n"; 1692 1798 1693 $this->assertEqual Markup( $expected_header, $header, 'Expected same header markup.' );1694 $this->assertEqual Markup( $expected_footer, $footer, 'Expected same footer markup.' );1799 $this->assertEqualHTML( $expected_header, $header, '<body>', 'Expected same header markup.' ); 1800 $this->assertEqualHTML( $expected_footer, $footer, '<body>', 'Expected same footer markup.' ); 1695 1801 } 1696 1802 … … 1712 1818 $expected_footer .= "<script type='text/javascript' src='/parent.js' id='parent-js'></script>\n"; 1713 1819 1714 $this->assertEqual Markup( $expected_header, $header, 'Expected same header markup.' );1715 $this->assertEqual Markup( $expected_footer, $footer, 'Expected same footer markup.' );1820 $this->assertEqualHTML( $expected_header, $header, '<body>', 'Expected same header markup.' ); 1821 $this->assertEqualHTML( $expected_footer, $footer, '<body>', 'Expected same footer markup.' ); 1716 1822 } 1717 1823 … … 1743 1849 $expected_footer .= "<script type='text/javascript' src='/parent-footer.js' id='parent-footer-js'></script>\n"; 1744 1850 1745 $this->assertEqual Markup( $expected_header, $header, 'Expected same header markup.' );1746 $this->assertEqual Markup( $expected_footer, $footer, 'Expected same footer markup.' );1851 $this->assertEqualHTML( $expected_header, $header, '<body>', 'Expected same header markup.' ); 1852 $this->assertEqualHTML( $expected_footer, $footer, '<body>', 'Expected same footer markup.' ); 1747 1853 } 1748 1854 … … 1771 1877 wp_add_inline_script( 'test-example', 'console.log("before");', 'before' ); 1772 1878 1773 $expected = "<script type='text/javascript' id='test-example-js-before'>\nconsole.log(\"before\");\n</script>\n"; 1879 $expected = <<<HTML 1880 <script type='text/javascript' id='test-example-js-before'> 1881 /* <![CDATA[ */ 1882 console.log("before"); 1883 /* ]]> */ 1884 </script> 1885 HTML; 1774 1886 $expected .= "<script type='text/javascript' src='http://example.com' id='test-example-js'></script>\n"; 1775 1887 1776 $this->assertEqual Markup( $expected, get_echo( 'wp_print_scripts' ) );1888 $this->assertEqualHTML( $expected, get_echo( 'wp_print_scripts' ) ); 1777 1889 } 1778 1890 … … 1785 1897 1786 1898 $expected = "<script type='text/javascript' src='http://example.com' id='test-example-js'></script>\n"; 1787 $expected .= "<script type='text/javascript' id='test-example-js-after'>\nconsole.log(\"after\");\n</script>\n"; 1788 1789 $this->assertEqualMarkup( $expected, get_echo( 'wp_print_scripts' ) ); 1899 $expected .= <<<HTML 1900 <script type='text/javascript' id='test-example-js-after'> 1901 /* <![CDATA[ */ 1902 console.log("after"); 1903 /* ]]> */ 1904 </script> 1905 HTML; 1906 1907 $this->assertEqualHTML( $expected, get_echo( 'wp_print_scripts' ) ); 1790 1908 } 1791 1909 … … 1798 1916 wp_add_inline_script( 'test-example', 'console.log("after");' ); 1799 1917 1800 $expected = "<script type='text/javascript' id='test-example-js-before'>\n console.log(\"before\");\n</script>\n";1918 $expected = "<script type='text/javascript' id='test-example-js-before'>\n/* <![CDATA[ */\nconsole.log(\"before\");\n/* ]]> */\n</script>\n"; 1801 1919 $expected .= "<script type='text/javascript' src='http://example.com' id='test-example-js'></script>\n"; 1802 $expected .= "<script type='text/javascript' id='test-example-js-after'>\n console.log(\"after\");\n</script>\n";1803 1804 $this->assertEqual Markup( $expected, get_echo( 'wp_print_scripts' ) );1920 $expected .= "<script type='text/javascript' id='test-example-js-after'>\n/* <![CDATA[ */\nconsole.log(\"after\");\n/* ]]> */\n</script>\n"; 1921 1922 $this->assertEqualHTML( $expected, get_echo( 'wp_print_scripts' ) ); 1805 1923 } 1806 1924 … … 1813 1931 wp_add_inline_script( 'test-example', 'console.log("before");', 'before' ); 1814 1932 1815 $expected = "<script type='text/javascript' id='test-example-js-before'>\n console.log(\"before\");\n</script>\n";1816 1817 $this->assertEqual Markup( $expected, get_echo( 'wp_print_scripts' ) );1933 $expected = "<script type='text/javascript' id='test-example-js-before'>\n/* <![CDATA[ */\nconsole.log(\"before\");\n/* ]]> */\n</script>\n"; 1934 1935 $this->assertEqualHTML( $expected, get_echo( 'wp_print_scripts' ) ); 1818 1936 } 1819 1937 … … 1826 1944 wp_add_inline_script( 'test-example', 'console.log("after");' ); 1827 1945 1828 $expected = "<script type='text/javascript' id='test-example-js-after'>\n console.log(\"after\");\n</script>\n";1829 1830 $this->assertEqual Markup( $expected, get_echo( 'wp_print_scripts' ) );1946 $expected = "<script type='text/javascript' id='test-example-js-after'>\n/* <![CDATA[ */\nconsole.log(\"after\");\n/* ]]> */\n</script>\n"; 1947 1948 $this->assertEqualHTML( $expected, get_echo( 'wp_print_scripts' ) ); 1831 1949 } 1832 1950 … … 1840 1958 wp_add_inline_script( 'test-example', 'console.log("after");' ); 1841 1959 1842 $expected = "<script type='text/javascript' id='test-example-js-before'>\n console.log(\"before\");\n</script>\n";1843 $expected .= "<script type='text/javascript' id='test-example-js-after'>\n console.log(\"after\");\n</script>\n";1844 1845 $this->assertEqual Markup( $expected, get_echo( 'wp_print_scripts' ) );1960 $expected = "<script type='text/javascript' id='test-example-js-before'>\n/* <![CDATA[ */\nconsole.log(\"before\");\n/* ]]> */\n</script>\n"; 1961 $expected .= "<script type='text/javascript' id='test-example-js-after'>\n/* <![CDATA[ */\nconsole.log(\"after\");\n/* ]]> */\n</script>\n"; 1962 1963 $this->assertEqualHTML( $expected, get_echo( 'wp_print_scripts' ) ); 1846 1964 } 1847 1965 … … 1856 1974 wp_add_inline_script( 'test-example', 'console.log("after");' ); 1857 1975 1858 $expected = "<script type='text/javascript' id='test-example-js-before'>\n console.log(\"before\");\nconsole.log(\"before\");\n</script>\n";1976 $expected = "<script type='text/javascript' id='test-example-js-before'>\n/* <![CDATA[ */\nconsole.log(\"before\");\nconsole.log(\"before\");\n/* ]]> */\n</script>\n"; 1859 1977 $expected .= "<script type='text/javascript' src='http://example.com' id='test-example-js'></script>\n"; 1860 $expected .= "<script type='text/javascript' id='test-example-js-after'>\n console.log(\"after\");\nconsole.log(\"after\");\n</script>\n";1861 1862 $this->assertEqual Markup( $expected, get_echo( 'wp_print_scripts' ) );1978 $expected .= "<script type='text/javascript' id='test-example-js-after'>\n/* <![CDATA[ */\nconsole.log(\"after\");\nconsole.log(\"after\");\n/* ]]> */\n</script>\n"; 1979 1980 $this->assertEqualHTML( $expected, get_echo( 'wp_print_scripts' ) ); 1863 1981 } 1864 1982 … … 1873 1991 1874 1992 $expected = "<script type='text/javascript' id='test-example-js-extra'>\n/* <![CDATA[ */\nvar testExample = {\"foo\":\"bar\"};\n/* ]]> */\n</script>\n"; 1875 $expected .= "<script type='text/javascript' id='test-example-js-before'>\n console.log(\"before\");\n</script>\n";1993 $expected .= "<script type='text/javascript' id='test-example-js-before'>\n/* <![CDATA[ */\nconsole.log(\"before\");\n/* ]]> */\n</script>\n"; 1876 1994 $expected .= "<script type='text/javascript' src='http://example.com' id='test-example-js'></script>\n"; 1877 $expected .= "<script type='text/javascript' id='test-example-js-after'>\n console.log(\"after\");\n</script>\n";1878 1879 $this->assertEqual Markup( $expected, get_echo( 'wp_print_scripts' ) );1995 $expected .= "<script type='text/javascript' id='test-example-js-after'>\n/* <![CDATA[ */\nconsole.log(\"after\");\n/* ]]> */\n</script>\n"; 1996 1997 $this->assertEqualHTML( $expected, get_echo( 'wp_print_scripts' ) ); 1880 1998 } 1881 1999 … … 1896 2014 wp_add_inline_script( 'two', 'console.log("before two");', 'before' ); 1897 2015 1898 $expected = "<script type='text/javascript' id='one-js-before'>\n console.log(\"before one\");\n</script>\n";2016 $expected = "<script type='text/javascript' id='one-js-before'>\n/* <![CDATA[ */\nconsole.log(\"before one\");\n/* ]]> */\n</script>\n"; 1899 2017 $expected .= "<script type='text/javascript' src='{$this->default_scripts_dir}one.js?ver={$wp_version}' id='one-js'></script>\n"; 1900 $expected .= "<script type='text/javascript' id='two-js-before'>\n console.log(\"before two\");\n</script>\n";2018 $expected .= "<script type='text/javascript' id='two-js-before'>\n/* <![CDATA[ */\nconsole.log(\"before two\");\n/* ]]> */\n</script>\n"; 1901 2019 $expected .= "<script type='text/javascript' src='{$this->default_scripts_dir}two.js?ver={$wp_version}' id='two-js'></script>\n"; 1902 2020 $expected .= "<script type='text/javascript' src='{$this->default_scripts_dir}three.js?ver={$wp_version}' id='three-js'></script>\n"; 1903 2021 1904 $this->assertEqual Markup( $expected, get_echo( 'wp_print_scripts' ) );2022 $this->assertEqualHTML( $expected, get_echo( 'wp_print_scripts' ) ); 1905 2023 } 1906 2024 … … 1920 2038 wp_add_inline_script( 'one', 'console.log("before one");', 'before' ); 1921 2039 1922 $expected = "<script type='text/javascript' id='one-js-before'>\n console.log(\"before one\");\n</script>\n";2040 $expected = "<script type='text/javascript' id='one-js-before'>\n/* <![CDATA[ */\nconsole.log(\"before one\");\n/* ]]> */\n</script>\n"; 1923 2041 $expected .= "<script type='text/javascript' src='{$this->default_scripts_dir}one.js?ver={$wp_version}' id='one-js'></script>\n"; 1924 2042 $expected .= "<script type='text/javascript' src='{$this->default_scripts_dir}two.js?ver={$wp_version}' id='two-js'></script>\n"; 1925 2043 $expected .= "<script type='text/javascript' src='{$this->default_scripts_dir}three.js?ver={$wp_version}' id='three-js'></script>\n"; 1926 2044 1927 $this->assertEqual Markup( $expected, get_echo( 'wp_print_scripts' ) );2045 $this->assertEqualHTML( $expected, get_echo( 'wp_print_scripts' ) ); 1928 2046 } 1929 2047 … … 1947 2065 $expected = "<script type='text/javascript' src='/wp-admin/load-scripts.php?c=0&load%5Bchunk_0%5D=one&ver={$wp_version}'></script>\n"; 1948 2066 $expected .= "<script type='text/javascript' src='{$this->default_scripts_dir}two.js?ver={$wp_version}' id='two-js'></script>\n"; 1949 $expected .= "<script type='text/javascript' id='two-js-after'>\n console.log(\"after two\");\n</script>\n";2067 $expected .= "<script type='text/javascript' id='two-js-after'>\n/* <![CDATA[ */\nconsole.log(\"after two\");\n/* ]]> */\n</script>\n"; 1950 2068 $expected .= "<script type='text/javascript' src='{$this->default_scripts_dir}three.js?ver={$wp_version}' id='three-js'></script>\n"; 1951 $expected .= "<script type='text/javascript' id='three-js-after'>\n console.log(\"after three\");\n</script>\n";2069 $expected .= "<script type='text/javascript' id='three-js-after'>\n/* <![CDATA[ */\nconsole.log(\"after three\");\n/* ]]> */\n</script>\n"; 1952 2070 $expected .= "<script type='text/javascript' src='{$this->default_scripts_dir}four.js?ver={$wp_version}' id='four-js'></script>\n"; 1953 2071 1954 $this->assertEqual Markup( $expected, get_echo( 'wp_print_scripts' ) );2072 $this->assertEqualHTML( $expected, get_echo( 'wp_print_scripts' ) ); 1955 2073 } 1956 2074 … … 1970 2088 1971 2089 $expected = "<!--[if gte IE 9]>\n"; 1972 $expected .= "<script type='text/javascript' id='test-example-js-before'>\n console.log(\"before\");\n</script>\n";2090 $expected .= "<script type='text/javascript' id='test-example-js-before'>\n/* <![CDATA[ */\nconsole.log(\"before\");\n/* ]]> */\n</script>\n"; 1973 2091 $expected .= "<script type='text/javascript' src='http://example.com' id='test-example-js'></script>\n"; 1974 $expected .= "<script type='text/javascript' id='test-example-js-after'>\n console.log(\"after\");\n</script>\n";2092 $expected .= "<script type='text/javascript' id='test-example-js-after'>\n/* <![CDATA[ */\nconsole.log(\"after\");\n/* ]]> */\n</script>\n"; 1975 2093 $expected .= "<![endif]-->\n"; 1976 2094 $expected = str_replace( "'", '"', $expected ); … … 1983 2101 1984 2102 $this->assertSame( $expected_localized, get_echo( 'wp_print_scripts' ) ); 1985 $this->assertEqual Markup( $expected, $wp_scripts->print_html );2103 $this->assertEqualHTML( $expected, $wp_scripts->print_html ); 1986 2104 $this->assertTrue( $wp_scripts->do_concat ); 1987 2105 } … … 2000 2118 $expected = "<script type='text/javascript' src='/wp-admin/load-scripts.php?c=0&load%5Bchunk_0%5D=jquery-core,jquery-migrate&ver={$wp_version}'></script>\n"; 2001 2119 $expected .= "<script type='text/javascript' src='http://example.com' id='test-example-js'></script>\n"; 2002 $expected .= "<script type='text/javascript' id='test-example-js-after'>\n console.log(\"after\");\n</script>\n";2120 $expected .= "<script type='text/javascript' id='test-example-js-after'>\n/* <![CDATA[ */\nconsole.log(\"after\");\n/* ]]> */\n</script>\n"; 2003 2121 2004 2122 wp_enqueue_script( 'test-example', 'http://example.com', array( 'jquery' ), null ); … … 2008 2126 $print_scripts = get_echo( '_print_scripts' ); 2009 2127 2010 $this->assertEqual Markup( $expected, $print_scripts );2128 $this->assertEqualHTML( $expected, $print_scripts ); 2011 2129 } 2012 2130 … … 2024 2142 $expected = "<script type='text/javascript' src='/wp-admin/load-scripts.php?c=0&load%5Bchunk_0%5D=jquery-core,jquery-migrate&ver={$wp_version}'></script>\n"; 2025 2143 $expected .= "<!--[if gte IE 9]>\n"; 2026 $expected .= "<script type= 'text/javascript' src='http://example.com' id='test-example-js'></script>\n";2027 $expected .= "<script type= 'text/javascript' id='test-example-js-after'>\nconsole.log(\"after\");\n</script>\n";2144 $expected .= "<script type=\"text/javascript\" src=\"http://example.com\" id=\"test-example-js\"></script>\n"; 2145 $expected .= "<script type=\"text/javascript\" id=\"test-example-js-after\">\n/* <![CDATA[ */\nconsole.log(\"after\");\n/* ]]> */\n</script>\n"; 2028 2146 $expected .= "<![endif]-->\n"; 2029 2147 … … 2035 2153 $print_scripts = get_echo( '_print_scripts' ); 2036 2154 2037 $this->assertEqual Markup( $expected, $print_scripts );2155 $this->assertEqualHTML( $expected, $print_scripts ); 2038 2156 } 2039 2157 … … 2051 2169 2052 2170 $expected = "<script type='text/javascript' src='/wp-admin/load-scripts.php?c=0&load%5Bchunk_0%5D=jquery-core,jquery-migrate&ver={$wp_version}'></script>\n"; 2053 $expected .= "<script type='text/javascript' id='test-example-js-before'>\n console.log(\"before\");\n</script>\n";2171 $expected .= "<script type='text/javascript' id='test-example-js-before'>\n/* <![CDATA[ */\nconsole.log(\"before\");\n/* ]]> */\n</script>\n"; 2054 2172 $expected .= "<script type='text/javascript' src='http://example.com' id='test-example-js'></script>\n"; 2055 2173 … … 2060 2178 $print_scripts = get_echo( '_print_scripts' ); 2061 2179 2062 $this->assertEqual Markup( $expected, $print_scripts );2180 $this->assertEqualHTML( $expected, $print_scripts ); 2063 2181 } 2064 2182 … … 2076 2194 2077 2195 $expected = "<script type='text/javascript' src='/wp-admin/load-scripts.php?c=0&load%5Bchunk_0%5D=jquery-core,jquery-migrate,wp-dom-ready,wp-hooks&ver={$wp_version}'></script>\n"; 2078 $expected .= "<script type='text/javascript' id='test-example-js-before'>\n console.log(\"before\");\n</script>\n";2196 $expected .= "<script type='text/javascript' id='test-example-js-before'>\n/* <![CDATA[ */\nconsole.log(\"before\");\n/* ]]> */\n</script>\n"; 2079 2197 $expected .= "<script type='text/javascript' src='http://example.com' id='test-example-js'></script>\n"; 2080 2198 $expected .= "<script type='text/javascript' src='/wp-includes/js/dist/i18n.min.js' id='wp-i18n-js'></script>\n"; 2081 2199 $expected .= "<script type='text/javascript' id='wp-i18n-js-after'>\n"; 2200 $expected .= "/* <![CDATA[ */\n"; 2082 2201 $expected .= "wp.i18n.setLocaleData( { 'text direction\u0004ltr': [ 'ltr' ] } );\n"; 2202 $expected .= "/* ]]> */\n"; 2083 2203 $expected .= "</script>\n"; 2084 2204 $expected .= "<script type='text/javascript' src='/wp-includes/js/dist/a11y.min.js' id='wp-a11y-js'></script>\n"; 2085 2205 $expected .= "<script type='text/javascript' src='http://example2.com' id='test-example2-js'></script>\n"; 2086 $expected .= "<script type='text/javascript' id='test-example2-js-after'>\n console.log(\"after\");\n</script>\n";2206 $expected .= "<script type='text/javascript' id='test-example2-js-after'>\n/* <![CDATA[ */\nconsole.log(\"after\");\n/* ]]> */\n</script>\n"; 2087 2207 2088 2208 wp_enqueue_script( 'test-example', 'http://example.com', array( 'jquery' ), null ); … … 2110 2230 ); 2111 2231 2112 $this->assertEqual Markup( $expected, $print_scripts );2232 $this->assertEqualHTML( $expected, $print_scripts ); 2113 2233 } 2114 2234 … … 2127 2247 $expected_tail = "<script type='text/javascript' src='/customize-dependency.js' id='customize-dependency-js'></script>\n"; 2128 2248 $expected_tail .= "<script type='text/javascript' id='customize-dependency-js-after'>\n"; 2249 $expected_tail .= "/* <![CDATA[ */\n"; 2129 2250 $expected_tail .= "tryCustomizeDependency()\n"; 2251 $expected_tail .= "/* ]]> */\n"; 2130 2252 $expected_tail .= "</script>\n"; 2131 2253 … … 2143 2265 $tail = substr( $print_scripts, strrpos( $print_scripts, '<script type="text/javascript" src="/customize-dependency.js" id="customize-dependency-js">' ) ); 2144 2266 2145 $this->assertEqual Markup( $expected_tail, $tail );2267 $this->assertEqualHTML( $expected_tail, $tail ); 2146 2268 } 2147 2269 … … 2162 2284 2163 2285 $expected = "<script type='text/javascript' src='/wp-includes/js/script.js?ver={$wp_version}' id='one-js'></script>\n"; 2164 $expected .= "<script type='text/javascript' id='one-js-after'>\n console.log(\"after one\");\n</script>\n";2286 $expected .= "<script type='text/javascript' id='one-js-after'>\n/* <![CDATA[ */\nconsole.log(\"after one\");\n/* ]]> */\n</script>\n"; 2165 2287 $expected .= "<script type='text/javascript' src='/wp-includes/js/script2.js?ver={$wp_version}' id='two-js'></script>\n"; 2166 2288 $expected .= "<script type='text/javascript' src='/wp-includes/js/script3.js?ver={$wp_version}' id='three-js'></script>\n"; 2167 2289 $expected .= "<script type='text/javascript' src='/wp-includes/js/script4.js?ver={$wp_version}' id='four-js'></script>\n"; 2168 2290 2169 $this->assertEqual Markup( $expected, get_echo( 'wp_print_scripts' ) );2291 $this->assertEqualHTML( $expected, get_echo( 'wp_print_scripts' ) ); 2170 2292 } 2171 2293 … … 2186 2308 2187 2309 $expected = "<script type='text/javascript' src='/wp-admin/load-scripts.php?c=0&load%5Bchunk_0%5D=one,two&ver={$wp_version}'></script>\n"; 2188 $expected .= "<script type='text/javascript' id='three-js-before'>\n console.log(\"before three\");\n</script>\n";2310 $expected .= "<script type='text/javascript' id='three-js-before'>\n/* <![CDATA[ */\nconsole.log(\"before three\");\n/* ]]> */\n</script>\n"; 2189 2311 $expected .= "<script type='text/javascript' src='/wp-includes/js/script3.js?ver={$wp_version}' id='three-js'></script>\n"; 2190 2312 $expected .= "<script type='text/javascript' src='/wp-includes/js/script4.js?ver={$wp_version}' id='four-js'></script>\n"; 2191 2313 2192 $this->assertEqual Markup( $expected, get_echo( 'wp_print_scripts' ) );2314 $this->assertEqualHTML( $expected, get_echo( 'wp_print_scripts' ) ); 2193 2315 } 2194 2316 … … 2207 2329 'delayed' => false, 2208 2330 'expected_data' => '/*before foo 1*/', 2209 'expected_tag' => "<script id='foo-js-before' type='text/javascript'>\n/* before foo 1*/\n</script>\n",2331 'expected_tag' => "<script id='foo-js-before' type='text/javascript'>\n/* <![CDATA[ */\n/*before foo 1*/\n/* ]]> */\n</script>\n", 2210 2332 ), 2211 2333 'after-blocking' => array( … … 2217 2339 'delayed' => false, 2218 2340 'expected_data' => "/*after foo 1*/\n/*after foo 2*/", 2219 'expected_tag' => "<script id='foo-js-after' type='text/javascript'>\n/* after foo 1*/\n/*after foo 2*/\n</script>\n",2341 'expected_tag' => "<script id='foo-js-after' type='text/javascript'>\n/* <![CDATA[ */\n/*after foo 1*/\n/*after foo 2*/\n/* ]]> */\n</script>\n", 2220 2342 ), 2221 2343 'before-delayed' => array( … … 2226 2348 'delayed' => true, 2227 2349 'expected_data' => '/*before foo 1*/', 2228 'expected_tag' => "<script id='foo-js-before' type='text/javascript'>\n/* before foo 1*/\n</script>\n",2350 'expected_tag' => "<script id='foo-js-before' type='text/javascript'>\n/* <![CDATA[ */\n/*before foo 1*/\n/* ]]> */\n</script>\n", 2229 2351 ), 2230 2352 'after-delayed' => array( … … 2236 2358 'delayed' => true, 2237 2359 'expected_data' => "/*after foo 1*/\n/*after foo 2*/", 2238 'expected_tag' => "<script id='foo-js-after' type='text/javascript'>\n/* after foo 1*/\n/*after foo 2*/\n</script>\n",2360 'expected_tag' => "<script id='foo-js-after' type='text/javascript'>\n/* <![CDATA[ */\n/*after foo 1*/\n/*after foo 2*/\n/* ]]> */\n</script>\n", 2239 2361 ), 2240 2362 ); … … 2288 2410 $this->assertSame( $expected_data, $wp_scripts->get_inline_script_data( $handle, $position ) ); 2289 2411 $this->assertSame( $expected_data, $wp_scripts->print_inline_script( $handle, $position, false ) ); 2290 $this->assertEqual Markup(2412 $this->assertEqualHTML( 2291 2413 $expected_tag, 2292 2414 $wp_scripts->get_inline_script_tag( $handle, $position ) … … 2294 2416 ob_start(); 2295 2417 $output = $wp_scripts->print_inline_script( $handle, $position, true ); 2296 $this->assertEqual Markup( $expected_tag, ob_get_clean() );2418 $this->assertEqualHTML( $expected_tag, ob_get_clean() ); 2297 2419 $this->assertEquals( $expected_data, $output ); 2298 2420 } … … 2322 2444 $expected .= "<script type='text/javascript' src='/wp-includes/js/script.js' id='test-example-js'></script>\n"; 2323 2445 2324 $this->assertEqual Markup( $expected, get_echo( 'wp_print_scripts' ) );2446 $this->assertEqualHTML( $expected, get_echo( 'wp_print_scripts' ) ); 2325 2447 } 2326 2448 … … 2349 2471 $expected .= "<script type='text/javascript' src='/wp-content/plugins/my-plugin/js/script.js' id='plugin-example-js'></script>\n"; 2350 2472 2351 $this->assertEqual Markup( $expected, get_echo( 'wp_print_scripts' ) );2473 $this->assertEqualHTML( $expected, get_echo( 'wp_print_scripts' ) ); 2352 2474 } 2353 2475 … … 2376 2498 $expected .= "<script type='text/javascript' src='/wp-content/themes/my-theme/js/script.js' id='theme-example-js'></script>\n"; 2377 2499 2378 $this->assertEqual Markup( $expected, get_echo( 'wp_print_scripts' ) );2500 $this->assertEqualHTML( $expected, get_echo( 'wp_print_scripts' ) ); 2379 2501 } 2380 2502 … … 2403 2525 $expected .= "<script type='text/javascript' src='/wp-admin/js/script.js' id='script-handle-js'></script>\n"; 2404 2526 2405 $this->assertEqual Markup( $expected, get_echo( 'wp_print_scripts' ) );2527 $this->assertEqualHTML( $expected, get_echo( 'wp_print_scripts' ) ); 2406 2528 } 2407 2529 … … 2433 2555 $expected .= "<script type='text/javascript' src='/wp-admin/js/script.js' id='test-example-js'></script>\n"; 2434 2556 2435 $this->assertEqual Markup( $expected, get_echo( 'wp_print_scripts' ) );2557 $this->assertEqualHTML( $expected, get_echo( 'wp_print_scripts' ) ); 2436 2558 } 2437 2559 … … 2462 2584 $expected .= "<script type='text/javascript' src='/wp-includes/js/script.js' id='test-example-js'></script>\n"; 2463 2585 2464 $this->assertEqual Markup( $expected, get_echo( 'wp_print_scripts' ) );2586 $this->assertEqualHTML( $expected, get_echo( 'wp_print_scripts' ) ); 2465 2587 } 2466 2588 … … 2492 2614 $expected .= "<script type='text/javascript' src='/wp-includes/js/script2.js' id='test-example-js'></script>\n"; 2493 2615 2494 $this->assertEqual Markup( $expected, get_echo( 'wp_print_scripts' ) );2616 $this->assertEqualHTML( $expected, get_echo( 'wp_print_scripts' ) ); 2495 2617 } 2496 2618 … … 2881 3003 $expected .= "<script type='text/javascript' src='http://example.com' id='test-example-js'></script>\n"; 2882 3004 2883 $this->assertEqual Markup( $expected, get_echo( 'wp_print_scripts' ) );3005 $this->assertEqualHTML( $expected, get_echo( 'wp_print_scripts' ) ); 2884 3006 } 2885 3007 … … 2946 3068 $expected .= "<script type='text/javascript' src='/default/common.js' id='common-js'></script>\n"; 2947 3069 2948 $this->assertEqual Markup( $expected, $print_scripts );3070 $this->assertEqualHTML( $expected, $print_scripts ); 2949 3071 } 2950 3072 … … 2979 3101 2980 3102 $this->assertStringContainsString( $strategy, $actual ); 2981 }2982 2983 /**2984 * Parse an HTML markup fragment.2985 *2986 * @param string $markup Markup.2987 * @return DOMDocument Document containing the normalized markup fragment.2988 */2989 protected function parse_markup_fragment( $markup ) {2990 $dom = new DOMDocument();2991 $dom->loadHTML(2992 "<!DOCTYPE html><html><head><meta charset=utf8></head><body>{$markup}</body></html>"2993 );2994 2995 /** @var DOMElement $body */2996 $body = $dom->getElementsByTagName( 'body' )->item( 0 );2997 2998 // Trim whitespace nodes added before/after which can be added when parsing.2999 foreach ( array( $body->firstChild, $body->lastChild ) as $node ) {3000 if ( $node instanceof DOMText && '' === trim( $node->data ) ) {3001 $body->removeChild( $node );3002 }3003 }3004 3005 // Normalize other whitespace nodes.3006 $xpath = new DOMXPath( $dom );3007 foreach ( $xpath->query( '//text()' ) as $node ) {3008 /** @var DOMText $node */3009 if ( preg_match( '/^\s+$/', $node->nodeValue ) ) {3010 $node->nodeValue = ' ';3011 }3012 }3013 3014 return $dom;3015 }3016 3017 /**3018 * Assert markup is equal after normalizing script tags.3019 *3020 * @param string $expected Expected markup.3021 * @param string $actual Actual markup.3022 * @param string $message Message.3023 */3024 protected function assertEqualMarkup( $expected, $actual, $message = '' ) {3025 $expected_dom = $this->parse_markup_fragment( $expected );3026 $actual_dom = $this->parse_markup_fragment( $actual );3027 foreach ( array( $expected_dom, $actual_dom ) as $dom ) {3028 $xpath = new DOMXPath( $dom );3029 /** @var DOMElement $script */3030 3031 // Normalize type attribute. When missing, it defaults to text/javascript.3032 foreach ( $xpath->query( '//script[ not( @type ) ]' ) as $script ) {3033 $script->setAttribute( 'type', 'text/javascript' );3034 }3035 3036 // Normalize script contents to remove CDATA wrapper.3037 foreach ( $xpath->query( '//script[ contains( text(), "<![CDATA[" ) ]' ) as $script ) {3038 $script->textContent = str_replace(3039 array(3040 "/* <![CDATA[ */\n",3041 "\n/* ]]> */",3042 ),3043 '',3044 $script->textContent3045 );3046 }3047 3048 // Normalize XHTML-compatible boolean attributes to HTML5 ones.3049 foreach ( array( 'async', 'defer' ) as $attribute ) {3050 foreach ( iterator_to_array( $xpath->query( "//script[ @{$attribute} = '{$attribute}' ]" ) ) as $script ) {3051 $script->removeAttribute( $attribute );3052 $script->setAttributeNode( $dom->createAttribute( $attribute ) );3053 }3054 }3055 }3056 3057 $this->assertEquals(3058 $expected_dom->getElementsByTagName( 'body' )->item( 0 ),3059 $actual_dom->getElementsByTagName( 'body' )->item( 0 ),3060 $message3061 );3062 3103 } 3063 3104 … … 3101 3142 $footer = ob_get_clean(); 3102 3143 3103 $this->assertEqual Markup( $expected_header, $header, 'Expected header script markup to match.' );3104 $this->assertEqual Markup( $expected_footer, $footer, 'Expected footer script markup to match.' );3144 $this->assertEqualHTML( $expected_header, $header, '<body>', 'Expected header script markup to match.' ); 3145 $this->assertEqualHTML( $expected_footer, $footer, '<body>', 'Expected footer script markup to match.' ); 3105 3146 $this->assertEqualSets( $expected_in_footer, wp_scripts()->in_footer, 'Expected to have the same handles for in_footer.' ); 3106 3147 $this->assertEquals( $expected_groups, wp_scripts()->groups, 'Expected groups to match.' );
Note: See TracChangeset
for help on using the changeset viewer.