diff --git a/lib/class-wp-block-supports.php b/lib/class-wp-block-supports.php
index 8a65dc74640749..45b6bd018920a8 100644
--- a/lib/class-wp-block-supports.php
+++ b/lib/class-wp-block-supports.php
@@ -19,6 +19,13 @@ class WP_Block_Supports {
*/
private $block_supports = array();
+ /**
+ * Tracks the current block to be rendered.
+ *
+ * @var array
+ */
+ public static $block_to_render = null;
+
/**
* Container for the main instance of the class.
*
@@ -67,13 +74,12 @@ public function register( $block_support_name, $block_support_config ) {
* Generates an array of HTML attributes, such as classes, by applying to
* the given block all of the features that the block supports.
*
- * @param array $parsed_block Block as parsed from content.
* @return array Array of HTML attributes.
*/
- public function apply_block_supports( $parsed_block ) {
- $block_attributes = $parsed_block['attrs'];
+ public function apply_block_supports() {
+ $block_attributes = self::$block_to_render['attrs'];
$block_type = WP_Block_Type_Registry::get_instance()->get_registered(
- $parsed_block['blockName']
+ self::$block_to_render['blockName']
);
// If no render_callback, assume styles have been previously handled.
@@ -144,8 +150,7 @@ private function register_attributes() {
* @return string String of HTML classes.
*/
function get_block_wrapper_attributes( $extra_attributes = array() ) {
- global $current_parsed_block;
- $new_attributes = WP_Block_Supports::get_instance()->apply_block_supports( $current_parsed_block );
+ $new_attributes = WP_Block_Supports::get_instance()->apply_block_supports();
if ( empty( $new_attributes ) && empty( $extra_attributes ) ) {
return '';
@@ -191,4 +196,29 @@ function get_block_wrapper_attributes( $extra_attributes = array() ) {
return implode( ' ', $normalized_attributes );
}
+/**
+ * Callback hooked to the register_block_type_args filter.
+ *
+ * This hooks into block registration to wrap the render_callback
+ * of dynamic blocks with a closure that keeps track of the
+ * current block to be rendered.
+ *
+ * @param array $args Block attributes.
+ * @return array Block attributes.
+ */
+function wp_block_supports_track_block_to_render( $args ) {
+ if ( null !== $args['render_callback'] ) {
+ $block_render_callback = $args['render_callback'];
+ $args['render_callback'] = function( $attributes, $content, $block ) use ( $block_render_callback ) {
+ $parent_block = WP_Block_Supports::$block_to_render;
+ WP_Block_Supports::$block_to_render = $block->parsed_block;
+ $result = $block_render_callback( $attributes, $content, $block );
+ WP_Block_Supports::$block_to_render = $parent_block;
+ return $result;
+ };
+ }
+ return $args;
+}
+
add_action( 'init', array( 'WP_Block_Supports', 'init' ), 22 );
+add_filter( 'register_block_type_args', 'wp_block_supports_track_block_to_render' );
diff --git a/lib/class-wp-block.php b/lib/class-wp-block.php
index d7788c1d614dc5..cd029050745660 100644
--- a/lib/class-wp-block.php
+++ b/lib/class-wp-block.php
@@ -203,7 +203,6 @@ public function __get( $name ) {
*/
public function render( $options = array() ) {
global $post;
- global $current_parsed_block;
$options = array_replace(
array(
'dynamic' => true,
@@ -217,14 +216,9 @@ public function render( $options = array() ) {
if ( ! $options['dynamic'] || empty( $this->block_type->skip_inner_blocks ) ) {
$index = 0;
foreach ( $this->inner_content as $chunk ) {
- if ( is_string( $chunk ) ) {
- $block_content .= $chunk;
- } else {
- $parent_parsed_block = $current_parsed_block;
- $current_parsed_block = $this->inner_blocks[ $index ]->parsed_block;
- $block_content .= $this->inner_blocks[ $index++ ]->render();
- $current_parsed_block = $parent_parsed_block;
- }
+ $block_content .= is_string( $chunk ) ?
+ $chunk :
+ $this->inner_blocks[ $index++ ]->render();
}
}
diff --git a/lib/compat.php b/lib/compat.php
index 5779460ec61da5..e63a7a5af514ad 100644
--- a/lib/compat.php
+++ b/lib/compat.php
@@ -508,40 +508,3 @@ function gutenberg_override_reusable_block_post_type_labels() {
);
}
add_filter( 'post_type_labels_wp_block', 'gutenberg_override_reusable_block_post_type_labels', 10, 0 );
-
-global $current_parsed_block;
-$current_parsed_block = array(
- 'blockName' => null,
- 'attributes' => null,
-);
-
-/**
- * Wraps the render_callback of dynamic blocks to keep track
- * of the current block being rendered via a global variable
- * called $current_parsed_block.
- *
- * This is for get_block_wrapper_attributes to get access
- * to the runtime data of the block being rendered.
- *
- * This shim can be removed when the plugin requires WordPress 5.6.
- *
- * @since 9.2.1
- *
- * @param array $args Block attributes.
- * @return array Block attributes.
- */
-function gutenberg_current_parsed_block_tracking( $args ) {
- if ( null !== $args['render_callback'] ) {
- $block_render_callback = $args['render_callback'];
- $args['render_callback'] = function( $attributes, $content, $block ) use ( $block_render_callback ) {
- global $current_parsed_block;
- $parent_parsed_block = $current_parsed_block;
- $current_parsed_block = $block->parsed_block;
- $result = $block_render_callback( $attributes, $content, $block );
- $current_parsed_block = $parent_parsed_block;
- return $result;
- };
- }
- return $args;
-}
-add_filter( 'register_block_type_args', 'gutenberg_current_parsed_block_tracking' );
diff --git a/phpunit/class-block-supported-styles-test.php b/phpunit/class-block-supported-styles-test.php
deleted file mode 100644
index 19765f6a2b6611..00000000000000
--- a/phpunit/class-block-supported-styles-test.php
+++ /dev/null
@@ -1,776 +0,0 @@
-registered_block_names ) ) {
- $block_name = array_pop( $this->registered_block_names );
- unregister_block_type( $block_name );
- }
- }
-
- /**
- * Registers a block type.
- *
- * @param string|WP_Block_Type $name Block type name including namespace, or alternatively a
- * complete WP_Block_Type instance. In case a WP_Block_Type
- * is provided, the $args parameter will be ignored.
- * @param array $args {
- * Optional. Array of block type arguments. Any arguments may be defined, however the
- * ones described below are supported by default. Default empty array.
- *
- * @type callable $render_callback Callback used to render blocks of this block type.
- * }
- */
- protected function register_block_type( $name, $args ) {
- register_block_type( $name, $args );
-
- $this->registered_block_names[] = $name;
- }
-
- /**
- * Retrieves attribute such as 'class' or 'style' from the rendered block string.
- *
- * @param string $attribute Name of attribute to get.
- * @param string $block String of rendered block to check.
- */
- private function get_attribute_from_block( $attribute, $block ) {
- $start_index = strpos( $block, $attribute . '="' ) + strlen( $attribute ) + 2;
- $split_arr = substr( $block, $start_index );
- $end_index = strpos( $split_arr, '"' );
- return substr( $split_arr, 0, $end_index );
- }
-
- /**
- * Retrieves block content from the rendered block string
- * (i.e. what's wrapped by the block wrapper `
`).
- *
- * @param string $block String of rendered block to check.
- */
- private function get_content_from_block( $block ) {
- $start_index = strpos( $block, '>' ) + 1; // First occurrence of '>'.
- $split_arr = substr( $block, $start_index );
- $end_index = strrpos( $split_arr, '<' ); // Last occurrence of '<'.
- return substr( $split_arr, 0, $end_index ); // String between first '>' and last '<'.
- }
-
- /**
- * Block content to test with (i.e. what's wrapped by the block wrapper ``).
- *
- * @var string
- */
- const BLOCK_CONTENT = '
- Test
- äöü
- ß
- 系の家庭に
- Example <p>Test!</p>
- ';
-
- /**
- * Returns the rendered output for the current block.
- *
- * @param array $block Block to render.
- */
- private function render_example_block( $block ) {
- global $current_parsed_block;
- $current_parsed_block = $block;
- $wrapper_attributes = get_block_wrapper_attributes(
- array(
- 'class' => 'foo-bar-class',
- 'style' => 'test: style;',
- )
- );
- return '' . self::BLOCK_CONTENT . '
';
- }
-
- /**
- * Runs assertions that the rendered output has expected class/style attrs.
- *
- * @param array $block Block to render.
- * @param string $expected_classes Expected output class attr string.
- * @param string $expected_styles Expected output styles attr string.
- */
- private function assert_styles_and_classes_match( $block, $expected_classes, $expected_styles ) {
- $styled_block = $this->render_example_block( $block );
- $class_list = $this->get_attribute_from_block( 'class', $styled_block );
- $style_list = $this->get_attribute_from_block( 'style', $styled_block );
-
- $this->assertEquals( $expected_classes, $class_list );
- $this->assertEquals( $expected_styles, $style_list );
- }
-
- /**
- * Runs assertions that the rendered output has expected content and class/style attrs.
- *
- * @param array $block Block to render.
- * @param string $expected_classes Expected output class attr string.
- * @param string $expected_styles Expected output styles attr string.
- */
- private function assert_content_and_styles_and_classes_match( $block, $expected_classes, $expected_styles ) {
- $styled_block = $this->render_example_block( $block );
-
- // Ensure blocks to not add extra whitespace.
- $this->assertEquals( $styled_block, trim( $styled_block ) );
-
- $content = $this->get_content_from_block( $styled_block );
- $class_list = $this->get_attribute_from_block( 'class', $styled_block );
- $style_list = $this->get_attribute_from_block( 'style', $styled_block );
-
- $this->assertEquals( self::BLOCK_CONTENT, $content );
- $this->assertEqualSets(
- explode( ' ', $expected_classes ),
- explode( ' ', $class_list )
- );
- $this->assertEquals(
- array_map( 'trim', explode( ';', $expected_styles ) ),
- array_map( 'trim', explode( ';', $style_list ) )
- );
- }
-
- /**
- * Tests color support for named color support for named colors.
- */
- function test_named_color_support() {
- $block_type_settings = array(
- 'attributes' => array(),
- 'supports' => array(
- 'color' => true,
- ),
- 'render_callback' => true,
- );
- $this->register_block_type( 'core/example', $block_type_settings );
-
- $block = array(
- 'blockName' => 'core/example',
- 'attrs' => array(
- 'textColor' => 'red',
- 'backgroundColor' => 'black',
- // The following should not be applied (subcatagories of color support).
- 'gradient' => 'some-gradient',
- ),
- 'innerBlock' => array(),
- 'innerContent' => array(),
- 'innerHTML' => array(),
- );
-
- $expected_classes = 'foo-bar-class wp-block-example has-text-color has-red-color has-background has-black-background-color';
- $expected_styles = 'test: style;';
-
- $this->assert_content_and_styles_and_classes_match( $block, $expected_classes, $expected_styles );
- }
-
- /**
- * Tests color support for custom colors.
- */
- function test_custom_color_support() {
- $block_type_settings = array(
- 'attributes' => array(),
- 'supports' => array(
- 'color' => true,
- ),
- 'render_callback' => true,
- );
- $this->register_block_type( 'core/example', $block_type_settings );
-
- $block = array(
- 'blockName' => 'core/example',
- 'attrs' => array(
- 'style' => array(
- 'color' => array(
- 'text' => '#000',
- 'background' => '#fff',
- // The following should not be applied (subcatagories of color support).
- 'gradient' => 'some-gradient',
- 'style' => array( 'color' => array( 'link' => '#fff' ) ),
- ),
- ),
- ),
- 'innerBlock' => array(),
- 'innerContent' => array(),
- 'innerHTML' => array(),
- );
-
- $expected_styles = 'test: style; color: #000; background-color: #fff;';
- $expected_classes = 'foo-bar-class wp-block-example has-text-color has-background';
-
- $this->assert_content_and_styles_and_classes_match( $block, $expected_classes, $expected_styles );
- }
-
- /**
- * Tests link color support for named colors.
- */
- function test_named_link_color_support() {
- $block_type_settings = array(
- 'attributes' => array(),
- 'supports' => array(
- 'color' => array(
- 'link' => true,
- ),
- ),
- 'render_callback' => true,
- );
- $this->register_block_type( 'core/example', $block_type_settings );
-
- $block = array(
- 'blockName' => 'core/example',
- 'attrs' => array(
- 'style' => array( 'color' => array( 'link' => 'var:preset|color|red' ) ),
- ),
- 'innerBlock' => array(),
- 'innerContent' => array(),
- 'innerHTML' => array(),
- );
-
- $expected_classes = 'foo-bar-class wp-block-example has-link-color';
- $expected_styles = 'test: style; --wp--style--color--link: var(--wp--preset--color--red);';
-
- $this->assert_content_and_styles_and_classes_match( $block, $expected_classes, $expected_styles );
- }
-
- /**
- * Tests link color support for custom colors.
- */
- function test_custom_link_color_support() {
- $block_type_settings = array(
- 'attributes' => array(),
- 'supports' => array(
- 'color' => array(
- 'link' => true,
- ),
- ),
- 'render_callback' => true,
- );
- $this->register_block_type( 'core/example', $block_type_settings );
-
- $block = array(
- 'blockName' => 'core/example',
- 'attrs' => array(
- 'style' => array( 'color' => array( 'link' => '#fff' ) ),
- ),
- 'innerBlock' => array(),
- 'innerContent' => array(),
- 'innerHTML' => array(),
- );
-
- $expected_classes = 'foo-bar-class wp-block-example has-link-color';
- $expected_styles = 'test: style; --wp--style--color--link: #fff;';
-
- $this->assert_content_and_styles_and_classes_match( $block, $expected_classes, $expected_styles );
- }
-
- /**
- * Tests gradient color support for named gradients.
- */
- function test_named_gradient_support() {
- $block_type_settings = array(
- 'attributes' => array(),
- 'supports' => array(
- 'color' => array(
- 'gradients' => true,
- ),
- ),
- 'render_callback' => true,
- );
- $this->register_block_type( 'core/example', $block_type_settings );
-
- $block = array(
- 'blockName' => 'core/example',
- 'attrs' => array(
- 'gradient' => 'red',
- ),
- 'innerBlock' => array(),
- 'innerContent' => array(),
- 'innerHTML' => array(),
- );
-
- $expected_classes = 'foo-bar-class wp-block-example has-background has-red-gradient-background';
- $expected_styles = 'test: style;';
-
- $this->assert_content_and_styles_and_classes_match( $block, $expected_classes, $expected_styles );
- }
-
- /**
- * Tests gradient color support for custom gradients.
- */
- function test_custom_gradient_support() {
- $block_type_settings = array(
- 'attributes' => array(),
- 'supports' => array(
- 'color' => array(
- 'gradients' => true,
- ),
- ),
- 'render_callback' => true,
- );
- $this->register_block_type( 'core/example', $block_type_settings );
-
- $block = array(
- 'blockName' => 'core/example',
- 'attrs' => array(
- 'style' => array( 'color' => array( 'gradient' => 'some-gradient-style' ) ),
- ),
- 'innerBlock' => array(),
- 'innerContent' => array(),
- 'innerHTML' => array(),
- );
-
- $expected_classes = 'foo-bar-class wp-block-example has-background';
- $expected_styles = 'test: style; background: some-gradient-style;';
-
- $this->assert_content_and_styles_and_classes_match( $block, $expected_classes, $expected_styles );
- }
-
- /**
- * Tests that style attributes for colors are not applied without the support flag.
- */
- function test_color_unsupported() {
- $block_type_settings = array(
- 'attributes' => array(),
- 'supports' => array(),
- 'render_callback' => true,
- );
- $this->register_block_type( 'core/example', $block_type_settings );
-
- $block = array(
- 'blockName' => 'core/example',
- 'attrs' => array(
- 'textColor' => 'red',
- 'backgroundColor' => 'black',
- 'style' => array(
- 'color' => array(
- 'text' => '#000',
- 'background' => '#fff',
- 'link' => '#ggg',
- 'gradient' => 'some-gradient',
- ),
- ),
- ),
- 'innerBlock' => array(),
- 'innerContent' => array(),
- 'innerHTML' => array(),
- );
-
- $expected_classes = 'foo-bar-class wp-block-example';
- $expected_styles = 'test: style;';
-
- $this->assert_content_and_styles_and_classes_match( $block, $expected_classes, $expected_styles );
- }
-
- /**
- * Tests support for named font sizes.
- */
- function test_named_font_size() {
- $block_type_settings = array(
- 'attributes' => array(),
- 'supports' => array(
- 'fontSize' => true,
- ),
- );
- $this->register_block_type( 'core/example', $block_type_settings );
-
- $block = array(
- 'blockName' => 'core/example',
- 'attrs' => array(
- 'fontSize' => 'large',
- ),
- 'innerBlock' => array(),
- 'innerContent' => array(),
- 'innerHTML' => array(),
- );
-
- $expected_classes = 'foo-bar-class wp-block-example has-large-font-size';
- $expected_styles = 'test: style;';
-
- $this->assert_content_and_styles_and_classes_match( $block, $expected_classes, $expected_styles );
- }
-
- /**
- * Tests support for custom font sizes.
- */
- function test_custom_font_size() {
- $block_type_settings = array(
- 'attributes' => array(),
- 'supports' => array(
- 'fontSize' => true,
- ),
- );
- $this->register_block_type( 'core/example', $block_type_settings );
-
- $block = array(
- 'blockName' => 'core/example',
- 'attrs' => array(
- 'style' => array( 'typography' => array( 'fontSize' => '10' ) ),
- ),
- 'innerBlock' => array(),
- 'innerContent' => array(),
- 'innerHTML' => array(),
- );
-
- $expected_classes = 'foo-bar-class wp-block-example';
- $expected_styles = 'test: style; font-size: 10px;';
-
- $this->assert_content_and_styles_and_classes_match( $block, $expected_classes, $expected_styles );
- }
-
- /**
- * Tests that font size attributes are not applied without support flag.
- */
- function test_font_size_unsupported() {
- $block_type_settings = array(
- 'attributes' => array(),
- 'supports' => array(),
- );
- $this->register_block_type( 'core/example', $block_type_settings );
-
- $block = array(
- 'blockName' => 'core/example',
- 'attrs' => array(
- 'fontSize' => 'large',
- 'style' => array( 'typography' => array( 'fontSize' => '10' ) ),
- ),
- 'innerBlock' => array(),
- 'innerContent' => array(),
- 'innerHTML' => array(),
- );
-
- $expected_classes = 'foo-bar-class wp-block-example';
- $expected_styles = 'test: style;';
-
- $this->assert_content_and_styles_and_classes_match( $block, $expected_classes, $expected_styles );
- }
-
- /**
- * Tests line height support.
- */
- function test_line_height() {
- $block_type_settings = array(
- 'attributes' => array(),
- 'supports' => array(
- 'lineHeight' => true,
- ),
- );
- $this->register_block_type( 'core/example', $block_type_settings );
-
- $block = array(
- 'blockName' => 'core/example',
- 'attrs' => array(
- 'style' => array( 'typography' => array( 'lineHeight' => '10' ) ),
- ),
- 'innerBlock' => array(),
- 'innerContent' => array(),
- 'innerHTML' => array(),
- );
-
- $expected_classes = 'foo-bar-class wp-block-example';
- $expected_styles = 'test: style; line-height: 10;';
-
- $this->assert_content_and_styles_and_classes_match( $block, $expected_classes, $expected_styles );
- }
-
- /**
- * Tests line height not applied without support flag.
- */
- function test_line_height_unsupported() {
- $block_type_settings = array(
- 'attributes' => array(),
- 'supports' => array(),
- );
- $this->register_block_type( 'core/example', $block_type_settings );
-
- $block = array(
- 'blockName' => 'core/example',
- 'attrs' => array(
- 'style' => array( 'typography' => array( 'lineHeight' => '10' ) ),
- ),
- 'innerBlock' => array(),
- 'innerContent' => array(),
- 'innerHTML' => array(),
- );
-
- $expected_classes = 'foo-bar-class wp-block-example';
- $expected_styles = 'test: style;';
-
- $this->assert_content_and_styles_and_classes_match( $block, $expected_classes, $expected_styles );
- }
-
- /**
- * Tests support for block alignment.
- */
- function test_block_alignment() {
- $block_type_settings = array(
- 'attributes' => array(),
- 'supports' => array(
- 'align' => true,
- ),
- );
- $this->register_block_type( 'core/example', $block_type_settings );
-
- $block = array(
- 'blockName' => 'core/example',
- 'attrs' => array(
- 'align' => 'wide',
- ),
- 'innerBlock' => array(),
- 'innerContent' => array(),
- 'innerHTML' => array(),
- );
-
- $expected_classes = 'foo-bar-class wp-block-example alignwide';
- $expected_styles = 'test: style;';
-
- $this->assert_content_and_styles_and_classes_match( $block, $expected_classes, $expected_styles );
- }
-
- /**
- * Tests block alignment requires support to be added.
- */
- function test_block_alignment_unsupported() {
- $block_type_settings = array(
- 'attributes' => array(),
- 'supports' => array(),
- );
- $this->register_block_type( 'core/example', $block_type_settings );
-
- $block = array(
- 'blockName' => 'core/example',
- 'attrs' => array(
- 'align' => 'wide',
- ),
- 'innerBlock' => array(),
- 'innerContent' => array(),
- 'innerHTML' => array(),
- );
-
- $expected_classes = 'foo-bar-class wp-block-example';
- $expected_styles = 'test: style;';
-
- $this->assert_content_and_styles_and_classes_match( $block, $expected_classes, $expected_styles );
- }
-
- /**
- * Tests all support flags together to ensure they work together as expected.
- */
- function test_all_supported() {
- $block_type_settings = array(
- 'attributes' => array(),
- 'supports' => array(
- 'color' => array(
- 'gradients' => true,
- 'link' => true,
- ),
- 'fontSize' => true,
- 'lineHeight' => true,
- 'align' => true,
- ),
- );
- $this->register_block_type( 'core/example', $block_type_settings );
-
- $block = array(
- 'blockName' => 'core/example',
- 'attrs' => array(
- 'align' => 'wide',
- 'style' => array(
- 'color' => array(
- 'text' => '#000',
- 'background' => '#fff',
- 'style' => array( 'color' => array( 'link' => '#fff' ) ),
- ),
- 'typography' => array(
- 'lineHeight' => '20',
- 'fontSize' => '10',
- ),
- ),
- ),
- 'innerBlock' => array(),
- 'innerContent' => array(),
- 'innerHTML' => array(),
- );
-
- $expected_classes = 'foo-bar-class wp-block-example has-text-color has-background alignwide';
- $expected_styles = 'test: style; color: #000; background-color: #fff; font-size: 10px; line-height: 20;';
-
- $this->assert_content_and_styles_and_classes_match( $block, $expected_classes, $expected_styles );
- }
-
- /**
- * Tests that only styles for the supported flag are added.
- * Verify one support enabled does not imply multiple supports enabled.
- */
- function test_one_supported() {
- $block_type_settings = array(
- 'attributes' => array(),
- 'supports' => array(
- 'fontSize' => true,
- ),
- );
- $this->register_block_type( 'core/example', $block_type_settings );
-
- $block = array(
- 'blockName' => 'core/example',
- 'attrs' => array(
- 'align' => 'wide',
- 'style' => array(
- 'color' => array(
- 'text' => '#000',
- 'background' => '#fff',
- 'gradient' => 'some-gradient',
- 'style' => array( 'color' => array( 'link' => '#fff' ) ),
- ),
- 'typography' => array(
- 'lineHeight' => '20',
- 'fontSize' => '10',
- ),
- ),
- ),
- 'innerBlock' => array(),
- 'innerContent' => array(),
- 'innerHTML' => array(),
- );
-
- $expected_classes = 'foo-bar-class wp-block-example';
- $expected_styles = 'test: style; font-size: 10px;';
-
- $this->assert_content_and_styles_and_classes_match( $block, $expected_classes, $expected_styles );
- }
-
- /**
- * Tests custom classname server-side block support.
- */
- function test_custom_classnames_support() {
- $block_type_settings = array(
- 'attributes' => array(),
- 'supports' => array(),
- );
- $this->register_block_type( 'core/example', $block_type_settings );
-
- $block = array(
- 'blockName' => 'core/example',
- 'attrs' => array(
- 'className' => 'my-custom-classname',
- ),
- 'innerBlock' => array(),
- 'innerContent' => array(),
- 'innerHTML' => array(),
- );
-
- $expected_styles = 'test: style;';
- $expected_classes = 'foo-bar-class wp-block-example my-custom-classname';
-
- $this->assert_content_and_styles_and_classes_match( $block, $expected_classes, $expected_styles );
- }
-
- /**
- * Tests custom classname server-side block support opt-out.
- */
- function test_custom_classnames_support_opt_out() {
- $block_type_settings = array(
- 'attributes' => array(),
- 'supports' => array(
- 'customClassName' => false,
- ),
- );
- $this->register_block_type( 'core/example', $block_type_settings );
-
- $block = array(
- 'blockName' => 'core/example',
- 'attrs' => array(
- 'className' => 'my-custom-classname',
- ),
- 'innerBlock' => array(),
- 'innerContent' => array(),
- 'innerHTML' => array(),
- );
-
- $expected_styles = 'test: style;';
- $expected_classes = 'foo-bar-class wp-block-example';
-
- $this->assert_content_and_styles_and_classes_match( $block, $expected_classes, $expected_styles );
- }
-
- /**
- * Tests generated classname server-side block support opt-out.
- */
- function test_generatted_classnames_support_opt_out() {
- $block_type_settings = array(
- 'attributes' => array(),
- 'supports' => array(
- 'className' => false,
- ),
- );
- $this->register_block_type( 'core/example', $block_type_settings );
-
- $block = array(
- 'blockName' => 'core/example',
- 'attrs' => array(),
- 'innerBlock' => array(),
- 'innerContent' => array(),
- 'innerHTML' => array(),
- );
-
- $expected_styles = 'test: style;';
- $expected_classes = 'foo-bar-class';
-
- $this->assert_content_and_styles_and_classes_match( $block, $expected_classes, $expected_styles );
- }
-
- /**
- * Ensures libxml_internal_errors is being used instead of @ warning suppression
- */
- public function test_render_block_suppresses_warnings_without_at_suppression() {
- $block_type_settings = array(
- 'attributes' => array(),
- 'supports' => array(),
- );
- $this->register_block_type( 'core/example', $block_type_settings );
-
- $block = array(
- 'blockName' => 'core/example',
- 'attrs' => array(),
- 'innerBlock' => array(),
- 'innerContent' => array(),
- 'innerHTML' => array(),
- );
-
- // Custom error handler's see Warnings even if they are suppressed by the @ symbol.
- $errors = array();
- set_error_handler(
- function ( $errno = 0, $errstr = '' ) use ( &$errors ) {
- $errors[] = $errstr;
- return false;
- }
- );
-
- // HTML5 elements like