Editor: Ensure block style name does not contain spaces before creating the class.

This change adds a check to ensure there is no spaces in block style variation names before generating the class. Returns `false` and a `_doing_it_wrong()` message if a space is detected.

Props amustaque97, costdev, hellofromtonya, pbiron, SergeyBiryukov, afragen.
Fixes #54296.


git-svn-id: https://develop.svn.wordpress.org/trunk@52261 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Jb Audras 2021-11-28 13:51:23 +00:00
parent 8de99e840f
commit 5fb4b61339
2 changed files with 67 additions and 1 deletions

View File

@ -62,6 +62,15 @@ final class WP_Block_Styles_Registry {
return false;
}
if ( str_contains( $style_properties['name'], ' ' ) ) {
_doing_it_wrong(
__METHOD__,
__( 'Block style name must not contain any spaces.' ),
'5.9.0'
);
return false;
}
$block_style_name = $style_properties['name'];
if ( ! isset( $this->registered_block_styles[ $block_name ] ) ) {

View File

@ -8,7 +8,7 @@
*/
/**
* Tests for register_block_type(), unregister_block_type(), get_dynamic_block_names().
* Tests for register_block_type(), unregister_block_type(), get_dynamic_block_names() and register_block_style().
*
* @since 5.0.0
*
@ -559,4 +559,61 @@ class Tests_Blocks_Register extends WP_UnitTestCase {
$this->assertSame( 3, $result->api_version );
}
/**
* Test case to validate `_doing_it_wrong()` when block style name attribute
* contains one or more spaces.
*
* @dataProvider data_register_block_style_name_contain_spaces
*
* @ticket 54296
*
* @covers ::register_block_style
*
* @expectedIncorrectUsage WP_Block_Styles_Registry::register
* @param array $block_styles Array of block styles to test.
*/
public function test_register_block_style_name_contain_spaces( array $block_styles ) {
register_block_style( 'core/query', $block_styles );
}
/**
* Data provider.
*
* @return array
*/
public function data_register_block_style_name_contain_spaces() {
return array(
'multiple spaces' => array(
array(
'name' => 'style-class-1 style-class-2',
'label' => 'Custom Style Label',
),
),
'single space' => array(
array(
'name' => 'style-class-1 style-class-2',
'label' => 'Custom Style Label',
),
),
);
}
/**
* Test case to validate no `_doing_it_wrong()` happens when there is
* no empty space.
*
* @ticket 54296
*
* @covers ::register_block_style
*/
public function test_register_block_style_name_without_spaces() {
$block_styles = array(
'name' => 'style-class-1',
'label' => 'Custom Style Label',
);
$actual = register_block_style( 'core/query', $block_styles );
$this->assertTrue( $actual );
}
}