WordPress.org

Make WordPress Core

Ticket #36392: 36392.batch.2.patch

File 36392.batch.2.patch, 21.8 KB (added by gitlost, 4 years ago)

A more convincing version of the "batch" demo, plus extra tests.

  • src/wp-includes/class.wp-scripts.php

     
    5555        public $in_footer = array();
    5656
    5757        /**
    58          * Holds a list of script handles which will be concatenated.
     58         * If concatenating, holds arrays of data batched in dependency order.
     59         * 'concat' holds the handles to concatenate (comma-separated),
     60         * 'print_code' the extra script (enclosed in '<script>' tags),
     61         * 'before' & 'after' the before and after inline code (not enclosed).
    5962         *
    60          * @since 2.8.0
     63         * @since 4.5
    6164         * @access public
    62          * @var string
     65         * @var array
    6366         */
    64         public $concat = '';
     67        public $concats = array( array( 'concat' => '', 'print_code' => '', 'before' => '', 'after' => '' ) );
    6568
    6669        /**
    6770         * Holds a string which contains script handles and their version.
     
    8386        public $do_concat = false;
    8487
    8588        /**
    86          * Holds HTML markup of scripts and additional data if concatenation
    87          * is enabled.
    88          *
    89          * @since 2.8.0
    90          * @access public
    91          * @var string
    92          */
    93         public $print_html = '';
    94 
    95         /**
    96          * HTML to print before the script handle.
    97          *
    98          * @since 4.5.0
    99          * @access public
    100          * @var string
    101          */
    102         public $print_html_before = '';
    103 
    104         /**
    105          * Holds inline code if concatenation is enabled.
    106          *
    107          * @since 2.8.0
    108          * @access public
    109          * @var string
    110          */
    111         public $print_code = '';
    112 
    113         /**
    11489         * Holds a list of script handles which are not in the default directory
    11590         * if concatenation is enabled.
    11691         *
     
    304279                         */
    305280                        $srce = apply_filters( 'script_loader_src', $src, $handle );
    306281
    307                         if ( $before_handle && ! $conditional ) {
    308                                 $this->print_html_before .= $before_handle;
    309                         }
     282                        $in_default_dir = $this->in_default_dir( $srce );
    310283
    311                         if ( $this->in_default_dir( $srce ) && ! $conditional && ! $after_handle ) {
    312                                 $this->print_code .= $this->print_extra_script( $handle, false );
    313                                 $this->concat .= "$handle,";
     284                        if ( $in_default_dir && ! $conditional ) {
     285                                $concat_idx = count( $this->concats ) - 1;
     286                                $this->concats[$concat_idx]['print_code'] .= $this->print_extra_script( $handle, false );
     287                                $this->concats[$concat_idx]['concat'] .= "$handle,";
     288                                $this->concats[$concat_idx]['before'] .= $before_handle;
     289                                $this->concats[$concat_idx]['after'] .= $after_handle;
    314290                                $this->concat_version .= "$handle$ver";
    315291                                return true;
    316292                        } else {
     
    363339                $tag = apply_filters( 'script_loader_tag', $tag, $handle, $src );
    364340
    365341                if ( $this->do_concat ) {
    366                         if ( $after_handle ) {
    367                                 $this->print_html_before .= $tag;
    368                         } else {
    369                                 $this->print_html .= $tag;
     342                        $concat_idx = count( $this->concats ) - 1;
     343                        $this->concats[$concat_idx]['after'] .= $tag;
     344                        // To maintain dependency order, need to bump batch to next level if wasn't concatenated above.
     345                        if ( ! $in_default_dir || $conditional ) {
     346                                $this->concats[] = array( 'concat' => '', 'print_code' => '', 'before' => '', 'after' => '' );
    370347                        }
    371348                } else {
    372349                        echo $tag;
     
    588565         */
    589566        public function reset() {
    590567                $this->do_concat = false;
    591                 $this->print_code = '';
    592                 $this->concat = '';
     568                $this->concats = array( array( 'concat' => '', 'print_code' => '', 'before' => '', 'after' => '' ) );
    593569                $this->concat_version = '';
    594                 $this->print_html = '';
    595                 $this->print_html_before = '';
    596570                $this->ext_version = '';
    597571                $this->ext_handles = '';
    598572        }
  • src/wp-includes/script-loader.php

     
    988988        if ( $zip && defined('ENFORCE_GZIP') && ENFORCE_GZIP )
    989989                $zip = 'gzip';
    990990
    991         if ( $concat = trim( $wp_scripts->concat, ', ' ) ) {
     991        foreach ( $wp_scripts->concats as $concat_entry ) {
    992992
    993                 if ( !empty($wp_scripts->print_code) ) {
     993                if ( '' !== $concat_entry['print_code'] ) {
    994994                        echo "\n<script type='text/javascript'>\n";
    995995                        echo "/* <![CDATA[ */\n"; // not needed in HTML 5
    996                         echo $wp_scripts->print_code;
     996                        echo $concat_entry['print_code'];
    997997                        echo "/* ]]> */\n";
    998998                        echo "</script>\n";
    999999                }
    10001000
    1001                 if ( ! empty( $wp_scripts->print_html_before ) ) {
    1002                         echo $wp_scripts->print_html_before;
     1001                if ( '' !== $concat_entry['before'] ) {
     1002                        echo $concat_entry['before'];
    10031003                }
    10041004
    1005                 $concat = str_split( $concat, 128 );
    1006                 $concat = 'load%5B%5D=' . implode( '&load%5B%5D=', $concat );
     1005                $concat = trim( $concat_entry['concat'], ', ' );
    10071006
    1008                 $src = $wp_scripts->base_url . "/wp-admin/load-scripts.php?c={$zip}&" . $concat . '&ver=' . $wp_scripts->default_version;
    1009                 echo "<script type='text/javascript' src='" . esc_attr($src) . "'></script>\n";
     1007                if ( '' !== $concat ) {
     1008
     1009                        $concat = str_split( $concat, 128 );
     1010                        $concat = 'load%5B%5D=' . implode( '&load%5B%5D=', $concat );
     1011
     1012                        $src = $wp_scripts->base_url . "/wp-admin/load-scripts.php?c={$zip}&" . $concat . '&ver=' . $wp_scripts->default_version;
     1013                        echo "<script type='text/javascript' src='" . esc_attr($src) . "'></script>\n";
     1014                }
     1015
     1016                if ( '' !== $concat_entry['after'] ) {
     1017                        echo $concat_entry['after'];
     1018                }
    10101019        }
    1011 
    1012         if ( !empty($wp_scripts->print_html) )
    1013                 echo $wp_scripts->print_html;
    10141020}
    10151021
    10161022/**
  • tests/phpunit/tests/dependencies/scripts.php

     
    463463        /**
    464464         * @ticket 14853
    465465         */
     466        public function test_wp_add_inline_script_before_with_concat_dependency() {
     467                global $wp_scripts;
     468
     469                $wp_scripts->do_concat = true;
     470                $wp_scripts->default_dirs = array( '/directory/' );
     471
     472                wp_enqueue_script( 'one', '/directory/one.js' );
     473                wp_enqueue_script( 'two', '/directory/two.js' );
     474                wp_enqueue_script( 'three', '/directory/three.js', array( 'one' ) );
     475
     476                wp_add_inline_script( 'one', 'console.log("before one");', 'before' );
     477
     478                wp_print_scripts();
     479                $print_scripts = get_echo( '_print_scripts' );
     480
     481                $ver = get_bloginfo( 'version' );
     482                $expected  = "<script type='text/javascript'>\nconsole.log(\"before one\");\n</script>\n";
     483                $expected .= "<script type='text/javascript' src='/wp-admin/load-scripts.php?c=0&amp;load%5B%5D=one,two,three&amp;ver={$ver}'></script>\n";
     484
     485                $this->assertEquals( $expected, $print_scripts );
     486        }
     487
     488        /**
     489         * @ticket 14853
     490         */
     491        public function test_wp_add_inline_script_after_with_concat_dependency() {
     492                global $wp_scripts;
     493
     494                $wp_scripts->do_concat = true;
     495                $wp_scripts->default_dirs = array( '/directory/' );
     496
     497                wp_enqueue_script( 'one', '/directory/one.js', array( 'three' ) );
     498                wp_enqueue_script( 'two', '/directory/two.js' );
     499                wp_enqueue_script( 'three', '/directory/three.js' );
     500
     501                wp_add_inline_script( 'one', 'console.log("after one");', 'after' );
     502
     503                wp_print_scripts();
     504                $print_scripts = get_echo( '_print_scripts' );
     505
     506                $ver = get_bloginfo( 'version' );
     507                $expected  = "<script type='text/javascript' src='/wp-admin/load-scripts.php?c=0&amp;load%5B%5D=three,one,two&amp;ver={$ver}'></script>\n";
     508                $expected .= "<script type='text/javascript'>\nconsole.log(\"after one\");\n</script>\n";
     509
     510                $this->assertEquals( $expected, $print_scripts );
     511        }
     512
     513        /**
     514         * @ticket 14853
     515         */
    466516        public function test_wp_add_inline_script_after_with_concat() {
    467517                global $wp_scripts;
    468518
     
    472522                wp_enqueue_script( 'one', '/directory/one.js' );
    473523                wp_enqueue_script( 'two', '/directory/two.js' );
    474524                wp_enqueue_script( 'three', '/directory/three.js' );
    475                 wp_enqueue_script( 'four', '/directory/four.js' );
     525                wp_enqueue_script( 'four', '/directory/four.js', array( 'two' ) );
    476526
    477527                wp_add_inline_script( 'two', 'console.log("after two");' );
    478528                wp_add_inline_script( 'three', 'console.log("after three");' );
     
    481531                $print_scripts = get_echo( '_print_scripts' );
    482532
    483533                $ver = get_bloginfo( 'version' );
    484                 $expected  = "<script type='text/javascript' src='/directory/two.js?ver={$ver}'></script>\n";
     534                $expected  = "<script type='text/javascript' src='/wp-admin/load-scripts.php?c=0&amp;load%5B%5D=one,two,three,four&amp;ver={$ver}'></script>\n";
    485535                $expected .= "<script type='text/javascript'>\nconsole.log(\"after two\");\n</script>\n";
    486                 $expected .= "<script type='text/javascript' src='/directory/three.js?ver={$ver}'></script>\n";
    487536                $expected .= "<script type='text/javascript'>\nconsole.log(\"after three\");\n</script>\n";
    488                 $expected .= "<script type='text/javascript' src='/wp-admin/load-scripts.php?c=0&amp;load%5B%5D=one,four&amp;ver={$ver}'></script>\n";
    489537
    490538                $this->assertEquals( $expected, $print_scripts );
    491539        }
     
    516564                wp_script_add_data( 'test-example', 'conditional', 'gte IE 9' );
    517565
    518566                $this->assertEquals( $expected_localized, get_echo( 'wp_print_scripts' ) );
    519                 $this->assertEquals( $expected, $wp_scripts->print_html_before );
    520                 $this->assertEquals( '', $wp_scripts->print_html );
     567                $this->assertEquals( $expected, implode( '', wp_list_pluck( $wp_scripts->concats, 'after' ) ) ); // Conditional stuff goes into 'after'.
    521568        }
    522569
     570        /**
     571         * Original issue with concat.
     572         *
     573         * @ticket 36392
     574         */
     575        public function test_wp_add_inline_script_customize_dependency_concat() {
     576                global $wp_scripts;
     577
     578                wp_default_scripts( $wp_scripts );
     579
     580                $wp_scripts->base_url = '';
     581                $wp_scripts->do_concat = true;
     582
     583                $ver = get_bloginfo( 'version' );
     584
     585                $expected_tail  = "/* ]]> */\n</script>\n";
     586                $expected_tail .= "<script type='text/javascript' src='/wp-admin/load-scripts.php?c=0&amp;load%5B%5D=underscore,customize-base,wp-a11y,customize-controls&amp;ver={$ver}'></script>\n";
     587                $expected_tail .= "<script type='text/javascript' src='/customize-dependency.js'></script>\n";
     588                $expected_tail .= "<script type='text/javascript'>\n";
     589                $expected_tail .= "tryCustomizeDependency()\n";
     590                $expected_tail .= "</script>\n";
     591
     592                $handle = 'customize-dependency';
     593                wp_enqueue_script( $handle, '/customize-dependency.js', array( 'customize-controls' ), null );
     594                wp_add_inline_script( $handle, 'tryCustomizeDependency()' );
     595
     596                wp_print_scripts();
     597                $print_scripts = get_echo( '_print_scripts' );
     598
     599                $tail = substr( $print_scripts, strrpos( $print_scripts, "/* ]]> */" ) );
     600                $this->assertEquals( $expected_tail, $tail );
     601        }
     602
     603        /**
     604         * Original issue without concat.
     605         *
     606         * @ticket 36392
     607         */
     608        public function test_wp_add_inline_script_customize_dependency_noconcat() {
     609                global $wp_scripts;
     610
     611                wp_default_scripts( $wp_scripts );
     612
     613                $wp_scripts->base_url = '';
     614                $wp_scripts->do_concat = false;
     615
     616                $ver = get_bloginfo( 'version' );
     617
     618                $expected_tail  = "/* ]]> */\n</script>\n";
     619                $expected_tail .= "<script type='text/javascript' src='/wp-admin/js/customize-controls.js?ver={$ver}'></script>\n";
     620                $expected_tail .= "<script type='text/javascript' src='/customize-dependency.js'></script>\n";
     621                $expected_tail .= "<script type='text/javascript'>\n";
     622                $expected_tail .= "tryCustomizeDependency()\n";
     623                $expected_tail .= "</script>\n";
     624
     625                $handle = 'customize-dependency';
     626                wp_enqueue_script( $handle, '/customize-dependency.js', array( 'customize-controls' ), null );
     627                wp_add_inline_script( $handle, 'tryCustomizeDependency()' );
     628
     629                $print_scripts = get_echo( 'wp_print_scripts' );
     630
     631                $tail = substr( $print_scripts, strrpos( $print_scripts, "/* ]]> */" ) );
     632                $this->assertEquals( $expected_tail, $tail );
     633        }
     634
     635        /**
     636         * @ticket 36392
     637         */
     638        public function test_wp_add_inline_script_concat_with_core_dependency() {
     639                global $wp_scripts;
     640
     641                wp_default_scripts( $wp_scripts );
     642
     643                $wp_scripts->base_url = '';
     644                $wp_scripts->do_concat = true;
     645
     646                $ver = get_bloginfo( 'version' );
     647                $expected  = "<script type='text/javascript' src='/wp-admin/load-scripts.php?c=0&amp;load%5B%5D=jquery-core,jquery-migrate&amp;ver={$ver}'></script>\n";
     648                $expected .= "<script type='text/javascript' src='http://example.com'></script>\n";
     649                $expected .= "<script type='text/javascript'>\nconsole.log(\"after\");\n</script>\n";
     650
     651                wp_enqueue_script( 'test-example', 'http://example.com', array( 'jquery' ), null );
     652                wp_add_inline_script( 'test-example', 'console.log("after");' );
     653
     654                wp_print_scripts();
     655                $print_scripts = get_echo( '_print_scripts' );
     656
     657                $this->assertEquals( $expected, $print_scripts );
     658        }
     659
     660        /**
     661         * @ticket 36392
     662         */
     663        public function test_wp_add_inline_script_noconcat_with_core_dependency() {
     664                global $wp_scripts;
     665
     666                wp_default_scripts( $wp_scripts );
     667
     668                $wp_scripts->base_url = '';
     669                $wp_scripts->do_concat = false;
     670
     671                $js_ver = $wp_scripts->registered['jquery']->ver;
     672                $js_migrate_ver = $wp_scripts->registered['jquery-migrate']->ver;
     673
     674                $expected  = "<script type='text/javascript' src='/wp-includes/js/jquery/jquery.js?ver={$js_ver}'></script>\n";
     675                $expected .= "<script type='text/javascript' src='/wp-includes/js/jquery/jquery-migrate.js?ver={$js_migrate_ver}'></script>\n";
     676                $expected .= "<script type='text/javascript' src='http://example.com'></script>\n";
     677                $expected .= "<script type='text/javascript'>\nconsole.log(\"after\");\n</script>\n";
     678
     679                wp_enqueue_script( 'test-example', 'http://example.com', array( 'jquery' ), null );
     680                wp_add_inline_script( 'test-example', 'console.log("after");' );
     681
     682                $print_scripts = get_echo( 'wp_print_scripts' );
     683
     684                $this->assertEquals( $expected, $print_scripts );
     685        }
     686
     687        /**
     688         * @ticket 36392
     689         */
     690        public function test_wp_add_inline_script_concat_with_conditional_and_core_dependency() {
     691                global $wp_scripts;
     692
     693                wp_default_scripts( $wp_scripts );
     694
     695                $wp_scripts->base_url = '';
     696                $wp_scripts->do_concat = true;
     697
     698                $ver = get_bloginfo( 'version' );
     699                $expected  = "<script type='text/javascript' src='/wp-admin/load-scripts.php?c=0&amp;load%5B%5D=jquery-core,jquery-migrate&amp;ver={$ver}'></script>\n";
     700                $expected .= "<!--[if gte IE 9]>\n";
     701                $expected .= "<script type='text/javascript' src='http://example.com'></script>\n";
     702                $expected .= "<script type='text/javascript'>\nconsole.log(\"after\");\n</script>\n";
     703                $expected .= "<![endif]-->\n";
     704
     705                wp_enqueue_script( 'test-example', 'http://example.com', array( 'jquery' ), null );
     706                wp_add_inline_script( 'test-example', 'console.log("after");' );
     707                wp_script_add_data( 'test-example', 'conditional', 'gte IE 9' );
     708
     709                wp_print_scripts();
     710                $print_scripts = get_echo( '_print_scripts' );
     711
     712                $this->assertEquals( $expected, $print_scripts );
     713        }
     714
     715        /**
     716         * @ticket 36392
     717         */
     718        public function test_wp_add_inline_script_before_concat_with_core_dependency() {
     719                global $wp_scripts;
     720
     721                wp_default_scripts( $wp_scripts );
     722
     723                $wp_scripts->base_url = '';
     724                $wp_scripts->do_concat = true;
     725
     726                $ver = get_bloginfo( 'version' );
     727                $expected  = "<script type='text/javascript' src='/wp-admin/load-scripts.php?c=0&amp;load%5B%5D=jquery-core,jquery-migrate&amp;ver={$ver}'></script>\n";
     728                $expected .= "<script type='text/javascript'>\nconsole.log(\"before\");\n</script>\n";
     729                $expected .= "<script type='text/javascript' src='http://example.com'></script>\n";
     730
     731                wp_enqueue_script( 'test-example', 'http://example.com', array( 'jquery' ), null );
     732                wp_add_inline_script( 'test-example', 'console.log("before");', 'before' );
     733
     734                wp_print_scripts();
     735                $print_scripts = get_echo( '_print_scripts' );
     736
     737                $this->assertEquals( $expected, $print_scripts );
     738        }
     739
     740        /**
     741         * @ticket 36392
     742         */
     743        public function test_wp_add_inline_script_before_after_concat_with_core_dependency() {
     744                global $wp_scripts;
     745
     746                wp_default_scripts( $wp_scripts );
     747
     748                $wp_scripts->base_url = '';
     749                $wp_scripts->do_concat = true;
     750
     751                $ver = get_bloginfo( 'version' );
     752                $expected  = "<script type='text/javascript' src='/wp-admin/load-scripts.php?c=0&amp;load%5B%5D=jquery-core,jquery-migrate&amp;ver={$ver}'></script>\n";
     753                $expected .= "<script type='text/javascript'>\nconsole.log(\"before\");\n</script>\n";
     754                $expected .= "<script type='text/javascript' src='http://example.com'></script>\n";
     755                $expected .= "<script type='text/javascript' src='/wp-admin/load-scripts.php?c=0&amp;load%5B%5D=wp-a11y&amp;ver={$ver}'></script>\n";
     756                $expected .= "<script type='text/javascript' src='http://example2.com'></script>\n";
     757                $expected .= "<script type='text/javascript'>\nconsole.log(\"after\");\n</script>\n";
     758
     759                wp_enqueue_script( 'test-example', 'http://example.com', array( 'jquery' ), null );
     760                wp_add_inline_script( 'test-example', 'console.log("before");', 'before' );
     761                wp_enqueue_script( 'test-example2', 'http://example2.com', array( 'wp-a11y' ), null );
     762                wp_add_inline_script( 'test-example2', 'console.log("after");', 'after' );
     763
     764                wp_print_scripts();
     765                $print_scripts = get_echo( '_print_scripts' );
     766
     767                $this->assertEquals( $expected, $print_scripts );
     768        }
     769
     770        /**
     771         * @ticket 36392
     772         */
     773        public function test_wp_add_inline_script_before_after_concat_with_core_dependency_default_dirs() {
     774                global $wp_scripts;
     775
     776                wp_default_scripts( $wp_scripts );
     777
     778                $wp_scripts->base_url = '';
     779                $wp_scripts->do_concat = true;
     780                $wp_scripts->default_dirs = array('/wp-admin/js/', '/wp-includes/js/'); // Default dirs as in wp-includes/script-loader.php
     781
     782                $ver = get_bloginfo( 'version' );
     783                $expected  = "<script type='text/javascript'>\nconsole.log(\"before\");\n</script>\n";
     784                $expected .= "<script type='text/javascript' src='/wp-admin/load-scripts.php?c=0&amp;load%5B%5D=jquery-core,jquery-migrate,test-example,wp-a11y,test-example2&amp;ver={$ver}'></script>\n";
     785                $expected .= "<script type='text/javascript'>\nconsole.log(\"after\");\n</script>\n";
     786
     787                wp_enqueue_script( 'test-example', '/wp-admin/js/example.js', array( 'jquery' ), null );
     788                wp_add_inline_script( 'test-example', 'console.log("before");', 'before' );
     789                wp_enqueue_script( 'test-example2', '/wp-includes/js/example2.js', array( 'wp-a11y' ), null );
     790                wp_add_inline_script( 'test-example2', 'console.log("after");', 'after' );
     791
     792                wp_print_scripts();
     793                $print_scripts = get_echo( '_print_scripts' );
     794
     795                $this->assertEquals( $expected, $print_scripts );
     796        }
     797
     798        /**
     799         * @ticket 36392
     800         */
     801        public function test_wp_script_conditional_concat_dependency() {
     802                global $wp_scripts;
     803
     804                $wp_scripts->do_concat = true;
     805                $wp_scripts->default_dirs = array( '/directory/' );
     806
     807                wp_enqueue_script( 'one', '/directory/one.js' );
     808                wp_enqueue_script( 'two', '/directory/two.js' );
     809                wp_enqueue_script( 'three', '/directory/three.js', array( 'one' ) );
     810
     811                wp_script_add_data( 'one', 'conditional', 'blah' );
     812
     813                wp_print_scripts();
     814                $print_scripts = get_echo( '_print_scripts' );
     815
     816                $ver = get_bloginfo( 'version' );
     817
     818                $expected  = "<!--[if blah]>\n";
     819                $expected .= "<script type='text/javascript' src='/directory/one.js?ver={$ver}'></script>\n";
     820                $expected .= "<![endif]-->\n";
     821                $expected .= "<script type='text/javascript' src='/wp-admin/load-scripts.php?c=0&amp;load%5B%5D=two,three&amp;ver={$ver}'></script>\n";
     822
     823                $this->assertEquals( $expected, $print_scripts );
     824        }
     825
     826        /**
     827         * @ticket 36392
     828         */
     829        public function test_wp_script_conditional_noconcat_dependency() {
     830                global $wp_scripts;
     831
     832                $wp_scripts->do_concat = false;
     833                $wp_scripts->default_dirs = array( '/directory/' );
     834
     835                wp_enqueue_script( 'one', '/directory/one.js' );
     836                wp_enqueue_script( 'two', '/directory/two.js' );
     837                wp_enqueue_script( 'three', '/directory/three.js', array( 'one' ) );
     838
     839                wp_script_add_data( 'one', 'conditional', 'blah' );
     840
     841                $print_scripts = get_echo( 'wp_print_scripts' );
     842
     843                $ver = get_bloginfo( 'version' );
     844
     845                $expected  = "<!--[if blah]>\n";
     846                $expected .= "<script type='text/javascript' src='/directory/one.js?ver={$ver}'></script>\n";
     847                $expected .= "<![endif]-->\n";
     848                $expected .= "<script type='text/javascript' src='/directory/two.js?ver={$ver}'></script>\n";
     849                $expected .= "<script type='text/javascript' src='/directory/three.js?ver={$ver}'></script>\n";
     850
     851                $this->assertEquals( $expected, $print_scripts );
     852        }
     853
     854        /**
     855         * @ticket 36392
     856         */
     857        public function test_wp_script_conditional_before_after_concat_dependency_diff_include_dirs() {
     858                global $wp_scripts;
     859
     860                $wp_scripts->do_concat = true;
     861                $wp_scripts->default_dirs = array( '/directory/' );
     862
     863                wp_enqueue_script( 'one', '/directory/one.js' );
     864                wp_enqueue_script( 'two', '/directory2/two.js' ); // Not in_default_dirs().
     865                wp_enqueue_script( 'three', '/directory/three.js', array( 'one' ) );
     866                wp_enqueue_script( 'four', '/directory/four.js' );
     867
     868                wp_script_add_data( 'one', 'conditional', 'blah' );
     869                wp_add_inline_script( 'one', 'console.log("before1");', 'before' );
     870
     871                wp_add_inline_script( 'two', 'console.log("before2");', 'before' );
     872                wp_add_inline_script( 'two', 'console.log("after2");', 'after' );
     873
     874                wp_add_inline_script( 'three', 'console.log("before3");', 'before' );
     875                wp_add_inline_script( 'three', 'console.log("after3");', 'after' );
     876
     877                wp_add_inline_script( 'four', 'console.log("before4");', 'before' );
     878                wp_add_inline_script( 'four', 'console.log("after4");', 'after' );
     879
     880                wp_print_scripts();
     881                $print_scripts = get_echo( '_print_scripts' );
     882
     883                $ver = get_bloginfo( 'version' );
     884
     885                $expected  = "<!--[if blah]>\n";
     886                $expected .= "<script type='text/javascript'>\nconsole.log(\"before1\");\n</script>\n";
     887                $expected .= "<script type='text/javascript' src='/directory/one.js?ver={$ver}'></script>\n";
     888                $expected .= "<![endif]-->\n";
     889                $expected .= "<script type='text/javascript'>\nconsole.log(\"before2\");\n</script>\n";
     890                $expected .= "<script type='text/javascript' src='/directory2/two.js?ver={$ver}'></script>\n";
     891                $expected .= "<script type='text/javascript'>\nconsole.log(\"after2\");\n</script>\n";
     892                $expected .= "<script type='text/javascript'>\nconsole.log(\"before3\");\n</script>\n";
     893                $expected .= "<script type='text/javascript'>\nconsole.log(\"before4\");\n</script>\n";
     894                $expected .= "<script type='text/javascript' src='/wp-admin/load-scripts.php?c=0&amp;load%5B%5D=three,four&amp;ver={$ver}'></script>\n";
     895                $expected .= "<script type='text/javascript'>\nconsole.log(\"after3\");\n</script>\n";
     896                $expected .= "<script type='text/javascript'>\nconsole.log(\"after4\");\n</script>\n";
     897
     898                $this->assertEquals( $expected, $print_scripts );
     899        }
    523900}