From 417eff2b389f11e3893524325c3c1d815e40022b Mon Sep 17 00:00:00 2001 From: Carlos Bravo <37012961+c4rl0sbr4v0@users.noreply.github.com> Date: Mon, 6 Nov 2023 15:34:35 +0100 Subject: [PATCH] Add Unit testing for duotone enhanced pagination. (#55542) * Add unit testing to duotone CSS declarations * Rename test to include gutenberg prefix * Update tests to be like the ones in Core --- phpunit/class-wp-duotone-test.php | 38 +++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/phpunit/class-wp-duotone-test.php b/phpunit/class-wp-duotone-test.php index 327e88f9728618..57c5540b8a9f1c 100644 --- a/phpunit/class-wp-duotone-test.php +++ b/phpunit/class-wp-duotone-test.php @@ -45,6 +45,44 @@ public function test_gutenberg_render_duotone_support_custom() { $this->assertMatchesRegularExpression( $expected, WP_Duotone_Gutenberg::render_duotone_support( $block_content, $block ) ); } + + /** + * Tests whether the CSS declarations are generated even if the block content is + * empty. This is needed to make the CSS output stable across paginations for + * features like the enhanced pagination of the Query block. + * + * @covers ::render_duotone_support + */ + public function test_gutenberg_css_declarations_are_generated_even_with_empty_block_content() { + $block = array( + 'blockName' => 'core/image', + 'attrs' => array( 'style' => array( 'color' => array( 'duotone' => 'var:preset|duotone|blue-orange' ) ) ), + ); + $wp_block = new WP_Block( $block ); + + /* + * Handling to access the static WP_Duotone::$block_css_declarations property. + * + * Why is an instance needed? + * WP_Duotone is a static class by design, meaning it only contains static properties and methods. + * In production, it should not be instantiated. However, as of PHP 8.3, ReflectionProperty::setValue() + * needs an object. + */ + $wp_duotone = new WP_Duotone_Gutenberg(); + $block_css_declarations_property = new ReflectionProperty( 'WP_Duotone_Gutenberg', 'block_css_declarations' ); + $block_css_declarations_property->setAccessible( true ); + $previous_value = $block_css_declarations_property->getValue(); + $block_css_declarations_property->setValue( $wp_duotone, array() ); + WP_Duotone_Gutenberg::render_duotone_support( '', $block, $wp_block ); + $actual = $block_css_declarations_property->getValue(); + + // Reset the property. + $block_css_declarations_property->setValue( $wp_duotone, $previous_value ); + $block_css_declarations_property->setAccessible( false ); + + $this->assertNotEmpty( $actual ); + } + public function data_get_slug_from_attribute() { return array( 'pipe-slug' => array( 'var:preset|duotone|blue-orange', 'blue-orange' ),