From 25e25a177f92332eafa8c81dbc78b70d86d8a6f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=20Andr=C3=A9?= Date: Thu, 22 Oct 2020 18:33:53 +0200 Subject: [PATCH] Update how block to render is tracked (#26356) --- lib/class-wp-block-supports.php | 42 +- lib/class-wp-block.php | 12 +- lib/compat.php | 37 - phpunit/class-block-supported-styles-test.php | 776 ------------------ 4 files changed, 39 insertions(+), 828 deletions(-) delete mode 100644 phpunit/class-block-supported-styles-test.php diff --git a/lib/class-wp-block-supports.php b/lib/class-wp-block-supports.php index 8a65dc7464074..45b6bd018920a 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 d7788c1d614dc..cd02905074566 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 5779460ec61da..e63a7a5af514a 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 19765f6a2b661..0000000000000 --- 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