/
githubmirror
/
gutenberg
Обзор
Документация
Войти
/
githubmirror
/
gutenberg
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
trunk
phpunit/blocks/render-block-navigation-submenu-test.php
279 строк
10 KB
Shail Mehta
Docs: Use `gutenberg` instead of `Gutenberg` in package name (#81051)
02 авг 2026, 09:05
Не верифицирован
02 авг 2026, 09:05
9594294
Код
Авторство
О чём код?
<?php /** * Tests server side rendering of core/navigation-submenu * * @package gutenberg * @subpackage block-library */ /** * Tests for various cases in Navigation Submenu rendering */ class Render_Block_Navigation_Submenu_Test extends WP_UnitTestCase { private static $category; private static $page; private static $draft; private static $custom_draft; private static $custom_post; /** * @var array|null */ private $original_block_supports; public static function set_up_before_class() { self::$page = self::factory()->post->create_and_get( array( 'post_type' => 'page', 'post_status' => 'publish', 'post_name' => 'tabby', 'post_title' => 'Tabby cats', 'post_content' => 'Tabby cat content', 'post_excerpt' => 'Tabby cat', ) ); } public function set_up() { parent::set_up(); $this->original_block_supports = WP_Block_Supports::$block_to_render; WP_Block_Supports::$block_to_render = array( 'attrs' => array(), 'blockName' => '', ); } public function tear_down() { WP_Block_Supports::$block_to_render = $this->original_block_supports; parent::tear_down(); } /** * @group submenu-color-inheritance * @covers ::gutenberg_render_block_core_navigation_submenu */ public function test_should_apply_preset_colors_inherited_from_parent_block_via_context() { $page_id = self::$page->ID; $parsed_blocks = parse_blocks( '<!-- wp:navigation-submenu {"label":"Submenu Label","type":"page","id":' . $page_id . ',"url":"http://localhost:8888/?page_id=' . $page_id . '","kind":"post-type"} --> <!-- wp:navigation-link {"label":"Submenu Item Link Label","type":"page","id":' . $page_id . ',"url":"http://localhost:8888/?page_id=' . $page_id . '","kind":"post-type"} /--> <!-- /wp:navigation-submenu -->' ); $this->assertEquals( 1, count( $parsed_blocks ), 'Submenu block not parsable.' ); $block = $parsed_blocks[0]; // Colors inherited from parent Navigation block. $context = array( 'overlayTextColor' => 'purple', 'overlayBackgroundColor' => 'yellow', ); $navigation_submenu_block = new WP_Block( $block, $context ); $rendered_html = gutenberg_render_block_core_navigation_submenu( $navigation_submenu_block->attributes, array(), $navigation_submenu_block ); $tags = new WP_HTML_Tag_Processor( $rendered_html ); $tags->next_tag( array( 'tag_name' => 'ul', 'class_name' => 'wp-block-navigation__submenu-container', ) ); $tags->get_attribute( 'class' ); $this->assertEquals( 'wp-block-navigation__submenu-container has-text-color has-purple-color has-background has-yellow-background-color', $tags->get_attribute( 'class' ), 'Submenu block colors inherited from context not applied correctly' ); } /** * @group submenu-color-inheritance * @covers ::gutenberg_render_block_core_navigation_submenu */ public function test_should_apply_custom_colors_inherited_from_parent_block_via_context() { $page_id = self::$page->ID; $parsed_blocks = parse_blocks( '<!-- wp:navigation-submenu {"label":"Submenu Label","type":"page","id":' . $page_id . ',"url":"http://localhost:8888/?page_id=' . $page_id . '","kind":"post-type"} --> <!-- wp:navigation-link {"label":"Submenu Item Link Label","type":"page","id":' . $page_id . ',"url":"http://localhost:8888/?page_id=' . $page_id . '","kind":"post-type"} /--> <!-- /wp:navigation-submenu -->' ); $this->assertEquals( 1, count( $parsed_blocks ), 'Submenu block not parsable.' ); $block = $parsed_blocks[0]; // Colors inherited from parent Navigation block. $context = array( 'customOverlayTextColor' => '#BCC60A', 'customOverlayBackgroundColor' => '#E10E0E', ); $navigation_submenu_block = new WP_Block( $block, $context ); if ( is_wp_version_compatible( '7.0' ) ) { $this->assertStringContainsString( '<ul style="color:' . $context['customOverlayTextColor'] . ';background-color:' . $context['customOverlayBackgroundColor'] . '" class="wp-block-navigation__submenu-container has-text-color has-background">', gutenberg_render_block_core_navigation_submenu( $navigation_submenu_block->attributes, array(), $navigation_submenu_block ), 'Submenu block colors inherited from context not applied correctly' ); } else { // Block markup for WP 6.9 (semicolon in style attribute) // TODO: Remove the second expected markup after WP 6.9 support is dropped and the old markup is no longer generated. $this->assertStringContainsString( '<ul style="color:' . $context['customOverlayTextColor'] . ';background-color:' . $context['customOverlayBackgroundColor'] . ';" class="wp-block-navigation__submenu-container has-text-color has-background">', gutenberg_render_block_core_navigation_submenu( $navigation_submenu_block->attributes, array(), $navigation_submenu_block ), 'Submenu block colors inherited from context not applied correctly' ); } } /** * @group submenu-color-inheritance * @covers ::gutenberg_render_block_core_navigation_submenu */ public function test_should_apply_mix_of_preset_and_custom_colors_inherited_from_parent_block_via_context() { $page_id = self::$page->ID; $parsed_blocks = parse_blocks( '<!-- wp:navigation-submenu {"label":"Submenu Label","type":"page","id":' . $page_id . ',"url":"http://localhost:8888/?page_id=' . $page_id . '","kind":"post-type"} --> <!-- wp:navigation-link {"label":"Submenu Item Link Label","type":"page","id":' . $page_id . ',"url":"http://localhost:8888/?page_id=' . $page_id . '","kind":"post-type"} /--> <!-- /wp:navigation-submenu -->' ); $this->assertEquals( 1, count( $parsed_blocks ), 'Submenu block not parsable.' ); $block = $parsed_blocks[0]; // Colors inherited from parent Navigation block. $context = array( 'overlayTextColor' => 'purple', 'customOverlayBackgroundColor' => '#E10E0E', ); $navigation_submenu_block = new WP_Block( $block, $context ); if ( is_wp_version_compatible( '7.0' ) ) { $this->assertStringContainsString( '<ul style="background-color:' . $context['customOverlayBackgroundColor'] . '" class="wp-block-navigation__submenu-container has-text-color has-' . $context['overlayTextColor'] . '-color has-background">', gutenberg_render_block_core_navigation_submenu( $navigation_submenu_block->attributes, array(), $navigation_submenu_block ), 'Submenu block colors inherited from context not applied correctly' ); } else { // Block markup for WP 6.9 (semicolon in style attribute) // TODO: Remove the second expected markup after WP 6.9 support is dropped and the old markup is no longer generated. $this->assertStringContainsString( '<ul style="background-color:' . $context['customOverlayBackgroundColor'] . ';" class="wp-block-navigation__submenu-container has-text-color has-' . $context['overlayTextColor'] . '-color has-background">', gutenberg_render_block_core_navigation_submenu( $navigation_submenu_block->attributes, array(), $navigation_submenu_block ), 'Submenu block colors inherited from context not applied correctly' ); } } /** * @group submenu-color-inheritance * @covers ::gutenberg_render_block_core_navigation_submenu */ public function test_should_not_apply_custom_colors_if_missing_from_context() { $page_id = self::$page->ID; $parsed_blocks = parse_blocks( '<!-- wp:navigation-submenu {"label":"Submenu Label","type":"page","id":' . $page_id . ',"url":"http://localhost:8888/?page_id=' . $page_id . '","kind":"post-type"} --> <!-- wp:navigation-link {"label":"Submenu Item Link Label","type":"page","id":' . $page_id . ',"url":"http://localhost:8888/?page_id=' . $page_id . '","kind":"post-type"} /--> <!-- /wp:navigation-submenu -->' ); $this->assertEquals( 1, count( $parsed_blocks ), 'Submenu block not parsable.' ); $block = $parsed_blocks[0]; // Intentionally empty - no colors. $context = array(); $navigation_submenu_block = new WP_Block( $block, $context ); $actual = gutenberg_render_block_core_navigation_submenu( $navigation_submenu_block->attributes, array(), $navigation_submenu_block ); $this->assertStringContainsString( '<ul class="wp-block-navigation__submenu-container">', $actual, 'Submenu block should not apply colors if missing from context' ); $this->assertStringNotContainsString( $actual, 'has-text-color has-background', 'Submenu block should not apply "has-*" color classes if missing from context' ); } /** * Test backward compatibility for blocks saved with legacy openSubmenusOnClick attribute. * * This test verifies that navigation blocks saved with the old openSubmenusOnClick: true * attribute still render correctly with the "open-on-click" class, even though * openSubmenusOnClick was removed from the context pipeline. * * @group submenu-backward-compatibility * @covers ::gutenberg_render_block_core_navigation_submenu */ public function test_should_apply_open_on_click_for_legacy_openSubmenusOnClick_attribute() { $page_id = self::$page->ID; // Test the full rendering pipeline with a Navigation block containing a submenu. // The Navigation block has the legacy openSubmenusOnClick: true attribute. // This tests that the context is correctly passed from parent to child. $markup = '<!-- wp:navigation {"openSubmenusOnClick":true,"overlayMenu":"never"} --> <!-- wp:navigation-submenu {"label":"Submenu Label","type":"page","id":' . $page_id . ',"url":"http://localhost:8888/?page_id=' . $page_id . '","kind":"post-type"} --> <!-- wp:navigation-link {"label":"Submenu Item","type":"page","id":' . $page_id . ',"url":"http://localhost:8888/?page_id=' . $page_id . '","kind":"post-type"} /--> <!-- /wp:navigation-submenu --> <!-- /wp:navigation -->'; $rendered_html = do_blocks( $markup ); // The submenu should have the "open-on-click" class for backward compatibility. $this->assertStringContainsString( 'open-on-click', $rendered_html, 'Submenu should apply "open-on-click" class for blocks saved with legacy openSubmenusOnClick: true attribute' ); // It should NOT have the hover-click class. $this->assertStringNotContainsString( 'open-on-hover-click', $rendered_html, 'Submenu should not have "open-on-hover-click" class when legacy openSubmenusOnClick was true' ); } }