Make WordPress Core

Ticket #35873: 35873.4.patch

File 35873.4.patch, 3.6 KB (added by ocean90, 8 years ago)

Includes tests by @gitlost

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

     
    384384        public function set_group( $handle, $recursion, $group ) {
    385385                $group = (int) $group;
    386386
    387                 if ( $recursion )
    388                         $group = min($this->group, $group);
    389                 else
    390                         $this->group = $group;
     387                if ( $recursion ) {
     388                        $group = min( $this->group, $group );
     389                }
    391390
     391                $this->group = $group;
     392
    392393                if ( isset($this->groups[$handle]) && $this->groups[$handle] <= $group )
    393394                        return false;
    394395
  • tests/phpunit/tests/dependencies/scripts.php

     
    199199                $this->assertContains( home_url( 'bar.js' ), $footer );
    200200                $this->assertContains( home_url( 'baz.js' ), $footer );
    201201        }
     202
     203        /**
     204         * Test mismatch of groups in dependencies outputs all scripts in right order.
     205         *
     206         * @ticket 35873
     207         */
     208        public function test_group_mismatch_in_deps() {
     209                $scripts = new WP_Scripts;
     210                $scripts->add( 'one', 'one', array(), 'v1', 1 );
     211                $scripts->add( 'two', 'two', array( 'one' ) );
     212                $scripts->add( 'three', 'three', array( 'two' ), 'v1', 1 );
     213
     214                $scripts->enqueue( array( 'three' ) );
     215
     216                $this->expectOutputRegex( '/^(?:<script[^>]+><\/script>\\n){7}$/' );
     217
     218                $scripts->do_items( false, 0 );
     219                $this->assertContains( 'one', $scripts->done );
     220                $this->assertContains( 'two', $scripts->done );
     221                $this->assertNotContains( 'three', $scripts->done );
     222
     223                $scripts->do_items( false, 1 );
     224                $this->assertContains( 'one', $scripts->done );
     225                $this->assertContains( 'two', $scripts->done );
     226                $this->assertContains( 'three', $scripts->done );
     227
     228                $scripts = new WP_Scripts;
     229                $scripts->add( 'one', 'one', array(), 'v1', 1 );
     230                $scripts->add( 'two', 'two', array( 'one' ), 'v1', 1 );
     231                $scripts->add( 'three', 'three', array( 'one' ) );
     232                $scripts->add( 'four', 'four', array( 'two', 'three' ), 'v1', 1 );
     233
     234                $scripts->enqueue( array( 'four' ) );
     235
     236                $scripts->do_items( false, 0 );
     237                $this->assertContains( 'one', $scripts->done );
     238                $this->assertNotContains( 'two', $scripts->done );
     239                $this->assertContains( 'three', $scripts->done );
     240                $this->assertNotContains( 'four', $scripts->done );
     241
     242                $scripts->do_items( false, 1 );
     243                $this->assertContains( 'one', $scripts->done );
     244                $this->assertContains( 'two', $scripts->done );
     245                $this->assertContains( 'three', $scripts->done );
     246                $this->assertContains( 'four', $scripts->done );
     247        }
     248
     249        /**
     250         * @ticket 35873
     251         */
     252        function test_wp_register_script_with_dependencies_in_head_and_footer() {
     253                wp_register_script( 'parent', home_url( 'parent.js' ), array( 'child' ), '1', true ); // in footer
     254                wp_register_script( 'child', home_url( 'child.js' ), array( 'grandchild' ), '1', false ); // in head
     255                wp_register_script( 'grandchild', home_url( 'grandchild.js' ), array(), '1', true ); // in footer
     256
     257                wp_enqueue_script( 'parent' );
     258
     259                $header = get_echo( 'wp_print_head_scripts' );
     260                $footer = get_echo( 'wp_print_footer_scripts' );
     261
     262                $expected_header  = "<script type='text/javascript' src='http://example.org/grandchild.js?ver=1'></script>\n";
     263                $expected_header .= "<script type='text/javascript' src='http://example.org/child.js?ver=1'></script>\n";
     264                $expected_footer  = "<script type='text/javascript' src='http://example.org/parent.js?ver=1'></script>\n";
     265
     266                $this->assertEquals( $expected_header, $header );
     267                $this->assertEquals( $expected_footer, $footer );
     268        }
    202269}