Editor: Backport block support changes from the Gutenberg plugin

Migrate spacing, border, color, dimensions, elements and typography and associated tests for block supports in the block editor.

Related changes in Gutenberg:
- Include individual serialization changes from 6de16981c7
- Skip Style Engine integration from 44925a947f%60

Props ramonopoly, aaronrobertshaw.
See #55505.



git-svn-id: https://develop.svn.wordpress.org/trunk@53076 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Greg Ziółkowski
2022-04-05 12:06:48 +00:00
parent 639e3180d3
commit 3a9abc810a
12 changed files with 542 additions and 79 deletions

View File

@@ -0,0 +1,148 @@
<?php
/**
* @group block-supports
*/
class Test_Block_Supports_Border extends WP_UnitTestCase {
/**
* @ticket 55505
*/
function test_border_color_slug_with_numbers_is_kebab_cased_properly() {
$block_name = 'test/border-color-slug-with-numbers-is-kebab-cased-properly';
register_block_type(
$block_name,
array(
'api_version' => 2,
'attributes' => array(
'borderColor' => array(
'type' => 'string',
),
'style' => array(
'type' => 'object',
),
),
'supports' => array(
'__experimentalBorder' => array(
'color' => true,
'radius' => true,
'width' => true,
'style' => true,
),
),
)
);
$registry = WP_Block_Type_Registry::get_instance();
$block_type = $registry->get_registered( $block_name );
$block_atts = array(
'borderColor' => 'red',
'style' => array(
'border' => array(
'radius' => '10px',
'width' => '1px',
'style' => 'dashed',
),
),
);
$actual = wp_apply_border_support( $block_type, $block_atts );
$expected = array(
'class' => 'has-border-color has-red-border-color',
'style' => 'border-radius: 10px; border-style: dashed; border-width: 1px;',
);
$this->assertSame( $expected, $actual );
unregister_block_type( $block_name );
}
/**
* @ticket 55505
*/
function test_border_with_skipped_serialization_block_supports() {
$block_name = 'test/border-with-skipped-serialization-block-supports';
register_block_type(
$block_name,
array(
'api_version' => 2,
'attributes' => array(
'style' => array(
'type' => 'object',
),
),
'supports' => array(
'__experimentalBorder' => array(
'color' => true,
'radius' => true,
'width' => true,
'style' => true,
'__experimentalSkipSerialization' => true,
),
),
)
);
$registry = WP_Block_Type_Registry::get_instance();
$block_type = $registry->get_registered( $block_name );
$block_atts = array(
'style' => array(
'border' => array(
'color' => '#eeeeee',
'width' => '1px',
'style' => 'dotted',
'radius' => '10px',
),
),
);
$actual = wp_apply_border_support( $block_type, $block_atts );
$expected = array();
$this->assertSame( $expected, $actual );
unregister_block_type( $block_name );
}
/**
* @ticket 55505
*/
function test_radius_with_individual_skipped_serialization_block_supports() {
$block_name = 'test/radius-with-individual-skipped-serialization-block-supports';
register_block_type(
$block_name,
array(
'api_version' => 2,
'attributes' => array(
'style' => array(
'type' => 'object',
),
),
'supports' => array(
'__experimentalBorder' => array(
'color' => true,
'radius' => true,
'width' => true,
'style' => true,
'__experimentalSkipSerialization' => array( 'radius', 'color' ),
),
),
)
);
$registry = WP_Block_Type_Registry::get_instance();
$block_type = $registry->get_registered( $block_name );
$block_atts = array(
'style' => array(
'border' => array(
'color' => '#eeeeee',
'width' => '1px',
'style' => 'dotted',
'radius' => '10px',
),
),
);
$actual = wp_apply_border_support( $block_type, $block_atts );
$expected = array(
'style' => 'border-style: dotted; border-width: 1px;',
);
$this->assertSame( $expected, $actual );
unregister_block_type( $block_name );
}
}

View File

@@ -44,4 +44,90 @@ class Tests_Block_Supports_Colors extends WP_UnitTestCase {
$this->assertSame( $expected, $actual );
unregister_block_type( 'test/color-slug-with-numbers' );
}
/**
* @ticket 55505
*/
function test_color_with_skipped_serialization_block_supports() {
$block_name = 'test/color-with-skipped-serialization-block-supports';
register_block_type(
$block_name,
array(
'api_version' => 2,
'attributes' => array(
'style' => array(
'type' => 'object',
),
),
'supports' => array(
'color' => array(
'text' => true,
'gradients' => true,
'__experimentalSkipSerialization' => true,
),
),
)
);
$registry = WP_Block_Type_Registry::get_instance();
$block_type = $registry->get_registered( $block_name );
$block_atts = array(
'style' => array(
'color' => array(
'text' => '#d92828',
'gradient' => 'linear-gradient(135deg,rgb(6,147,227) 0%,rgb(223,13,13) 46%,rgb(155,81,224) 100%)',
),
),
);
$actual = wp_apply_colors_support( $block_type, $block_atts );
$expected = array();
$this->assertSame( $expected, $actual );
unregister_block_type( $block_name );
}
/**
* @ticket 55505
*/
function test_gradient_with_individual_skipped_serialization_block_supports() {
$block_name = 'test/gradient-with-individual-skipped-serialization-block-support';
register_block_type(
$block_name,
array(
'api_version' => 2,
'attributes' => array(
'style' => array(
'type' => 'object',
),
),
'supports' => array(
'color' => array(
'text' => true,
'gradients' => true,
'__experimentalSkipSerialization' => array( 'gradients' ),
),
),
)
);
$registry = WP_Block_Type_Registry::get_instance();
$block_type = $registry->get_registered( $block_name );
$block_atts = array(
'style' => array(
'color' => array(
'text' => '#d92828',
),
),
);
$actual = wp_apply_colors_support( $block_type, $block_atts );
$expected = array(
'class' => 'has-text-color',
'style' => 'color: #d92828;',
);
$this->assertSame( $expected, $actual );
unregister_block_type( $block_name );
}
}

View File

@@ -0,0 +1,153 @@
<?php
/**
* @group block-supports
*/
class Test_Block_Supports_Spacing extends WP_UnitTestCase {
/**
* @ticket 55505
*/
function test_spacing_style_is_applied() {
$block_name = 'test/spacing-style-is-applied';
register_block_type(
$block_name,
array(
'api_version' => 2,
'attributes' => array(
'style' => array(
'type' => 'object',
),
),
'supports' => array(
'spacing' => array(
'margin' => true,
'padding' => true,
'blockGap' => true,
),
),
)
);
$registry = WP_Block_Type_Registry::get_instance();
$block_type = $registry->get_registered( $block_name );
$block_atts = array(
'style' => array(
'spacing' => array(
'margin' => array(
'top' => '1px',
'right' => '2px',
'bottom' => '3px',
'left' => '4px',
),
'padding' => '111px',
'blockGap' => '2em',
),
),
);
$actual = wp_apply_spacing_support( $block_type, $block_atts );
$expected = array(
'style' => 'padding: 111px; margin-top: 1px; margin-right: 2px; margin-bottom: 3px; margin-left: 4px;',
);
$this->assertSame( $expected, $actual );
unregister_block_type( $block_name );
}
/**
* @ticket 55505
*/
function test_spacing_with_skipped_serialization_block_supports() {
$block_name = 'test/spacing-with-skipped-serialization-block-supports';
register_block_type(
$block_name,
array(
'api_version' => 2,
'attributes' => array(
'style' => array(
'type' => 'object',
),
),
'supports' => array(
'spacing' => array(
'margin' => true,
'padding' => true,
'blockGap' => true,
'__experimentalSkipSerialization' => true,
),
),
)
);
$registry = WP_Block_Type_Registry::get_instance();
$block_type = $registry->get_registered( $block_name );
$block_atts = array(
'style' => array(
'spacing' => array(
'margin' => array(
'top' => '1px',
'right' => '2px',
'bottom' => '3px',
'left' => '4px',
),
'padding' => '111px',
'blockGap' => '2em',
),
),
);
$actual = wp_apply_spacing_support( $block_type, $block_atts );
$expected = array();
$this->assertSame( $expected, $actual );
unregister_block_type( $block_name );
}
/**
* @ticket 55505
*/
function test_margin_with_individual_skipped_serialization_block_supports() {
$block_name = 'test/margin-with-individual-skipped-serialization-block-supports';
register_block_type(
$block_name,
array(
'api_version' => 2,
'attributes' => array(
'style' => array(
'type' => 'object',
),
),
'supports' => array(
'spacing' => array(
'margin' => true,
'padding' => true,
'blockGap' => true,
'__experimentalSkipSerialization' => array( 'margin' ),
),
),
)
);
$registry = WP_Block_Type_Registry::get_instance();
$block_type = $registry->get_registered( $block_name );
$block_atts = array(
'style' => array(
'spacing' => array(
'padding' => array(
'top' => '1px',
'right' => '2px',
'bottom' => '3px',
'left' => '4px',
),
'margin' => '111px',
'blockGap' => '2em',
),
),
);
$actual = wp_apply_spacing_support( $block_type, $block_atts );
$expected = array(
'style' => 'padding-top: 1px; padding-right: 2px; padding-bottom: 3px; padding-left: 4px;',
);
$this->assertSame( $expected, $actual );
unregister_block_type( $block_name );
}
}

View File

@@ -62,6 +62,86 @@ class Tests_Block_Supports_Typography extends WP_UnitTestCase {
unregister_block_type( $block_name );
}
/**
* @ticket 55505
*/
function test_typography_with_skipped_serialization_block_supports() {
$block_name = 'test/typography-with-skipped-serialization-block-supports';
register_block_type(
$block_name,
array(
'api_version' => 2,
'attributes' => array(
'style' => array(
'type' => 'object',
),
),
'supports' => array(
'typography' => array(
'fontSize' => true,
'lineHeight' => true,
'__experimentalFontFamily' => true,
'__experimentalLetterSpacing' => true,
'__experimentalSkipSerialization' => true,
),
),
)
);
$registry = WP_Block_Type_Registry::get_instance();
$block_type = $registry->get_registered( $block_name );
$block_atts = array(
'style' => array(
'typography' => array(
'fontSize' => 'serif',
'lineHeight' => 'serif',
'fontFamily' => '22px',
'letterSpacing' => '22px',
),
),
);
$actual = wp_apply_typography_support( $block_type, $block_atts );
$expected = array();
$this->assertSame( $expected, $actual );
unregister_block_type( $block_name );
}
/**
* @ticket 55505
*/
function test_letter_spacing_with_individual_skipped_serialization_block_supports() {
$block_name = 'test/letter-spacing-with-individua-skipped-serialization-block-supports';
register_block_type(
$block_name,
array(
'api_version' => 2,
'attributes' => array(
'style' => array(
'type' => 'object',
),
),
'supports' => array(
'typography' => array(
'__experimentalLetterSpacing' => true,
'__experimentalSkipSerialization' => array(
'letterSpacing',
),
),
),
)
);
$registry = WP_Block_Type_Registry::get_instance();
$block_type = $registry->get_registered( $block_name );
$block_atts = array( 'style' => array( 'typography' => array( 'letterSpacing' => '22px' ) ) );
$actual = wp_apply_typography_support( $block_type, $block_atts );
$expected = array();
$this->assertSame( $expected, $actual );
unregister_block_type( $block_name );
}
function test_font_family_with_legacy_inline_styles_using_a_css_var() {
$block_name = 'test/font-family-with-inline-styles-using-css-var';
register_block_type(