Make WordPress Core


Ignore:
Timestamp:
02/12/2024 11:40:49 AM (11 months ago)
Author:
gziolo
Message:

Blocks: Allow reading the script handle from asset files

In the [documentation for WPDefinedAsset definition](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-metadata/#wpdefinedasset) for block metadata there is a note about the handle. That was missing in WordPress core.

Props gziolo, jsnajdr, youknowriad.
Fixes #60485.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tests/phpunit/tests/blocks/register.php

    r57565 r57590  
    5353     */
    5454    public function tear_down() {
    55         $registry = WP_Block_Type_Registry::get_instance();
    56 
    57         foreach ( array( 'core/test-static', 'core/test-dynamic', 'tests/notice' ) as $block_name ) {
    58             if ( $registry->is_registered( $block_name ) ) {
    59                 $registry->unregister( $block_name );
     55        // Removes test block types registered by test cases.
     56        $block_types = WP_Block_Type_Registry::get_instance()->get_all_registered();
     57        foreach ( $block_types as $block_type ) {
     58            $block_name = $block_type->name;
     59            if ( str_starts_with( $block_name, 'tests/' ) ) {
     60                unregister_block_type( $block_name );
    6061            }
    6162        }
    6263
    6364        foreach ( wp_scripts()->registered as $script_handle => $script ) {
    64             if ( str_starts_with( $script_handle, 'unit-tests-' ) ) {
     65            if ( str_starts_with( $script_handle, 'tests-' ) ) {
    6566                wp_deregister_script( $script_handle );
    6667            }
     
    8384     */
    8485    public function test_register_affects_main_registry() {
    85         $name     = 'core/test-static';
     86        $name     = 'tests/static';
    8687        $settings = array(
    8788            'icon' => 'text',
     
    9899     */
    99100    public function test_unregister_affects_main_registry() {
    100         $name     = 'core/test-static';
     101        $name     = 'tests/static';
    101102        $settings = array(
    102103            'icon' => 'text',
     
    142143     */
    143144    public function test_generate_block_asset_handle() {
    144         $block_name = 'unit-tests/my-block';
    145 
    146         $this->assertSame(
    147             'unit-tests-my-block-editor-script',
     145        $block_name = 'tests/my-block';
     146
     147        $this->assertSame(
     148            'tests-my-block-editor-script',
    148149            generate_block_asset_handle( $block_name, 'editorScript' )
    149150        );
    150151        $this->assertSame(
    151             'unit-tests-my-block-script',
     152            'tests-my-block-script',
    152153            generate_block_asset_handle( $block_name, 'script', 0 )
    153154        );
    154155        $this->assertSame(
    155             'unit-tests-my-block-view-script-100',
     156            'tests-my-block-view-script-100',
    156157            generate_block_asset_handle( $block_name, 'viewScript', 99 )
    157158        );
    158159        $this->assertSame(
    159             'unit-tests-my-block-view-script-module',
     160            'tests-my-block-view-script-module',
    160161            generate_block_asset_handle( $block_name, 'viewScriptModule' )
    161162        );
    162163        $this->assertSame(
    163             'unit-tests-my-block-view-script-module-2',
     164            'tests-my-block-view-script-module-2',
    164165            generate_block_asset_handle( $block_name, 'viewScriptModule', 1 )
    165166        );
    166167        $this->assertSame(
    167             'unit-tests-my-block-view-script-module-100',
     168            'tests-my-block-view-script-module-100',
    168169            generate_block_asset_handle( $block_name, 'viewScriptModule', 99 )
    169170        );
    170171        $this->assertSame(
    171             'unit-tests-my-block-editor-style-2',
     172            'tests-my-block-editor-style-2',
    172173            generate_block_asset_handle( $block_name, 'editorStyle', 1 )
    173174        );
    174175        $this->assertSame(
    175             'unit-tests-my-block-style',
     176            'tests-my-block-style',
    176177            generate_block_asset_handle( $block_name, 'style' )
    177178        );
    178179        // @ticket 59673
    179180        $this->assertSame(
    180             'unit-tests-my-block-view-style',
     181            'tests-my-block-view-style',
    181182            generate_block_asset_handle( $block_name, 'viewStyle' ),
    182183            'asset handle for viewStyle is not generated correctly'
     
    336337        $metadata = array(
    337338            'file'             => __FILE__,
    338             'name'             => 'unit-tests/test-block',
     339            'name'             => 'tests/test-block',
    339340            'viewScriptModule' => 'file:./blocks/notice/missing-asset.js',
    340341        );
    341342        $result   = register_block_script_module_id( $metadata, 'viewScriptModule' );
    342343
    343         $this->assertSame( 'unit-tests-test-block-view-script-module', $result );
     344        $this->assertSame( 'tests-test-block-view-script-module', $result );
    344345    }
    345346
     
    377378        $metadata = array(
    378379            'file'             => DIR_TESTDATA . '/blocks/notice/block.json',
    379             'name'             => 'unit-tests/test-block',
     380            'name'             => 'tests/test-block',
    380381            'viewScriptModule' => 'file:./block.js',
    381382        );
    382383        $result   = register_block_script_module_id( $metadata, 'viewScriptModule' );
    383384
    384         $this->assertSame( 'unit-tests-test-block-view-script-module', $result );
    385 
    386         // Test the behavior directly within the unit test
     385        $this->assertSame( 'tests-test-block-view-script-module', $result );
     386
     387        // Test the behavior directly within the unit test.
    387388        $this->assertFalse(
    388389            strpos(
     
    431432        $metadata = array(
    432433            'file'   => __FILE__,
    433             'name'   => 'unit-tests/test-block',
     434            'name'   => 'tests/test-block',
    434435            'script' => 'file:./blocks/notice/missing-asset.js',
    435436        );
    436437        $result   = register_block_script_handle( $metadata, 'script' );
    437438
    438         $this->assertSame( 'unit-tests-test-block-script', $result );
     439        $this->assertSame( 'tests-test-block-script', $result );
    439440    }
    440441
     
    445446        $metadata = array(
    446447            'file'   => DIR_TESTDATA . '/blocks/notice/block.json',
    447             'name'   => 'unit-tests/test-block',
     448            'name'   => 'tests/test-block',
    448449            'script' => 'file:./block.js',
    449450        );
    450451        $result   = register_block_script_handle( $metadata, 'script' );
    451452
    452         $this->assertSame( 'unit-tests-test-block-script', $result );
    453 
    454         // Test the behavior directly within the unit test
     453        $this->assertSame( 'tests-test-block-script', $result );
     454
     455        // Test the behavior directly within the unit test.
    455456        $this->assertFalse(
    456457            strpos(
     
    465466                trailingslashit( wp_normalize_path( get_stylesheet_directory() ) )
    466467            ) === 0
     468        );
     469    }
     470
     471    /**
     472     * @ticket 60485
     473     */
     474    public function test_success_register_block_script_handle_with_custom_handle_name() {
     475        $custom_script_handle = 'tests-my-shared-script';
     476        $metadata             = array(
     477            'file'   => DIR_TESTDATA . '/blocks/notice/block.json',
     478            'name'   => 'tests/sample-block',
     479            'script' => 'file:./shared-script.js',
     480        );
     481        $result               = register_block_script_handle( $metadata, 'script' );
     482
     483        $this->assertSame( $custom_script_handle, $result );
     484        $this->assertStringEndsWith(
     485            'shared-script.js',
     486            wp_scripts()->registered[ $custom_script_handle ]->src
     487        );
     488    }
     489
     490    /**
     491     * @ticket 60485
     492     */
     493    public function test_reuse_registered_block_script_handle_with_custom_handle_name() {
     494        $custom_script_handle = 'tests-my-shared-script';
     495        $custom_script_src    = 'https://example.com/foo.js';
     496        wp_register_script( $custom_script_handle, $custom_script_src );
     497
     498        $this->assertTrue(
     499            wp_script_is( $custom_script_handle, 'registered' )
     500        );
     501
     502        $metadata = array(
     503            'file'   => DIR_TESTDATA . '/blocks/notice/block.json',
     504            'name'   => 'tests/sample-block',
     505            'script' => 'file:./shared-script.js',
     506        );
     507        $result   = register_block_script_handle( $metadata, 'script' );
     508
     509        $this->assertSame( $custom_script_handle, $result );
     510        $this->assertSame(
     511            $custom_script_src,
     512            wp_scripts()->registered[ $custom_script_handle ]->src
    467513        );
    468514    }
     
    621667        $metadata = array(
    622668            'file'      => DIR_TESTDATA . '/blocks/notice/block.json',
    623             'name'      => 'unit-tests/test-block',
     669            'name'      => 'tests/test-block',
    624670            'style'     => 'file:./block.css',
    625671            'viewStyle' => 'file:./block-view.css',
     
    627673        $result   = register_block_style_handle( $metadata, 'style' );
    628674
    629         $this->assertSame( 'unit-tests-test-block-style', $result );
    630         $this->assertFalse( wp_styles()->get_data( 'unit-tests-test-block-style', 'rtl' ) );
     675        $this->assertSame( 'tests-test-block-style', $result );
     676        $this->assertFalse( wp_styles()->get_data( 'tests-test-block-style', 'rtl' ) );
    631677
    632678        // @ticket 50328
    633679        $this->assertSame(
    634680            wp_normalize_path( realpath( DIR_TESTDATA . '/blocks/notice/block.css' ) ),
    635             wp_normalize_path( wp_styles()->get_data( 'unit-tests-test-block-style', 'path' ) )
     681            wp_normalize_path( wp_styles()->get_data( 'tests-test-block-style', 'path' ) )
    636682        );
    637683
    638684        // Test viewStyle property
    639685        $result = register_block_style_handle( $metadata, 'viewStyle' );
    640         $this->assertSame( 'unit-tests-test-block-view-style', $result );
     686        $this->assertSame( 'tests-test-block-view-style', $result );
    641687
    642688        // @ticket 59673
    643689        $this->assertSame(
    644690            wp_normalize_path( realpath( DIR_TESTDATA . '/blocks/notice/block-view.css' ) ),
    645             wp_normalize_path( wp_styles()->get_data( 'unit-tests-test-block-view-style', 'path' ) ),
     691            wp_normalize_path( wp_styles()->get_data( 'tests-test-block-view-style', 'path' ) ),
    646692            'viewStyle asset path is not correct'
    647693        );
    648694
    649         // Test the behavior directly within the unit test
     695        // Test the behavior directly within the unit test.
    650696        $this->assertFalse(
    651697            strpos(
     
    676722        $metadata = array(
    677723            'file'  => DIR_TESTDATA . '/blocks/notice/block.json',
    678             'name'  => 'unit-tests/test-block-rtl',
     724            'name'  => 'tests/test-block-rtl',
    679725            'style' => 'file:./block.css',
    680726        );
     
    684730
    685731        $handle       = register_block_style_handle( $metadata, 'style' );
    686         $extra_rtl    = wp_styles()->get_data( 'unit-tests-test-block-rtl-style', 'rtl' );
    687         $extra_suffix = wp_styles()->get_data( 'unit-tests-test-block-rtl-style', 'suffix' );
    688         $extra_path   = wp_normalize_path( wp_styles()->get_data( 'unit-tests-test-block-rtl-style', 'path' ) );
     732        $extra_rtl    = wp_styles()->get_data( 'tests-test-block-rtl-style', 'rtl' );
     733        $extra_suffix = wp_styles()->get_data( 'tests-test-block-rtl-style', 'suffix' );
     734        $extra_path   = wp_normalize_path( wp_styles()->get_data( 'tests-test-block-rtl-style', 'path' ) );
    689735
    690736        $wp_locale->text_direction = $orig_text_dir;
    691737
    692738        $this->assertSame(
    693             'unit-tests-test-block-rtl-style',
     739            'tests-test-block-rtl-style',
    694740            $handle,
    695741            'The handle did not match the expected handle.'
     
    721767        $metadata = array(
    722768            'file'  => DIR_TESTDATA . '/blocks/notice/block.json',
    723             'name'  => 'unit-tests/test-block-nonexistent-stylesheet',
     769            'name'  => 'tests/test-block-nonexistent-stylesheet',
    724770            'style' => 'file:./nonexistent.css',
    725771        );
     
    727773
    728774        global $wp_styles;
    729         $this->assertFalse( $wp_styles->registered['unit-tests-test-block-nonexistent-stylesheet-style']->src );
     775        $this->assertFalse( $wp_styles->registered['tests-test-block-nonexistent-stylesheet-style']->src );
    730776    }
    731777
     
    10451091        $this->assertSame(
    10461092            wp_normalize_path( realpath( DIR_TESTDATA . '/blocks/notice/block.css' ) ),
    1047             wp_normalize_path( wp_styles()->get_data( 'unit-tests-test-block-style', 'path' ) )
     1093            wp_normalize_path( wp_styles()->get_data( 'tests-test-block-style', 'path' ) )
    10481094        );
    10491095
     
    10511097        $this->assertSame(
    10521098            wp_normalize_path( realpath( DIR_TESTDATA . '/blocks/notice/block-view.css' ) ),
    1053             wp_normalize_path( wp_styles()->get_data( 'unit-tests-test-block-view-style', 'path' ) ),
     1099            wp_normalize_path( wp_styles()->get_data( 'tests-test-block-view-style', 'path' ) ),
    10541100            'viewStyle asset path is not correct'
    10551101        );
     
    10901136    public function test_register_block_type_accepts_editor_script_array( $editor_script, $expected ) {
    10911137        $settings = array( 'editor_script' => $editor_script );
    1092         register_block_type( 'core/test-static', $settings );
     1138        register_block_type( 'tests/static', $settings );
    10931139
    10941140        $registry   = WP_Block_Type_Registry::get_instance();
    1095         $block_type = $registry->get_registered( 'core/test-static' );
     1141        $block_type = $registry->get_registered( 'tests/static' );
    10961142        $this->assertObjectHasProperty( 'editor_script_handles', $block_type );
    10971143        $actual_script         = $block_type->editor_script;
     
    11561202    public function test_register_block_type_throws_doing_it_wrong( $editor_script, $expected ) {
    11571203        $settings = array( 'editor_script' => $editor_script );
    1158         register_block_type( 'core/test-static', $settings );
     1204        register_block_type( 'tests/static', $settings );
    11591205
    11601206        $registry   = WP_Block_Type_Registry::get_instance();
    1161         $block_type = $registry->get_registered( 'core/test-static' );
     1207        $block_type = $registry->get_registered( 'tests/static' );
    11621208        $this->assertObjectHasProperty( 'editor_script_handles', $block_type );
    11631209        $actual_script         = $block_type->editor_script;
     
    12491295     */
    12501296    public function test_get_dynamic_block_names() {
    1251         register_block_type( 'core/test-static', array() );
    1252         register_block_type( 'core/test-dynamic', array( 'render_callback' => array( $this, 'render_stub' ) ) );
     1297        register_block_type( 'tests/static', array() );
     1298        register_block_type( 'tests/dynamic', array( 'render_callback' => array( $this, 'render_stub' ) ) );
    12531299
    12541300        $dynamic_block_names = get_dynamic_block_names();
    12551301
    1256         $this->assertContains( 'core/test-dynamic', $dynamic_block_names );
    1257         $this->assertNotContains( 'core/test-static', $dynamic_block_names );
     1302        $this->assertContains( 'tests/dynamic', $dynamic_block_names );
     1303        $this->assertNotContains( 'tests/static', $dynamic_block_names );
    12581304    }
    12591305
Note: See TracChangeset for help on using the changeset viewer.