Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
80 changes: 80 additions & 0 deletions tests/phpunit/tests/block-supports/layout.php
Original file line number Diff line number Diff line change
Expand Up @@ -637,4 +637,84 @@ public function data_layout_support_flag_renders_consistent_container_hash() {
),
);
}

/**
* Tests that custom blocks include namespace in layout classnames.
*
* When layout support is enabled for custom blocks, the generated
* layout classname should include the full block namespace to ensure
* that CSS selectors match correctly.
*
* @ticket 63839
* @covers ::wp_render_layout_support_flag
*
* @dataProvider data_layout_classname_with_custom_blocks
*/
public function test_layout_classname_includes_namespace_for_custom_blocks( $block_name, $layout_type, $expected_class, $should_not_contain ) {
switch_theme( 'default' );

register_block_type(
$block_name,
array(
'supports' => array(
'layout' => true,
),
)
);

$block_content = '<div class="wp-block-test"><p>Content</p></div>';
$block = array(
'blockName' => $block_name,
'attrs' => array(
'layout' => array(
'type' => $layout_type,
),
),
);

$output = wp_render_layout_support_flag( $block_content, $block );

// Assert that the expected class is present.
$this->assertStringContainsString( $expected_class, $output );

// Assert that the old buggy class is not present.
$this->assertStringNotContainsString( $should_not_contain, $output );

// Clean up the registered block type.
unregister_block_type( $block_name );
}

/**
* Data provider for test_layout_classname_includes_namespace_for_custom_blocks.
*
* @return array
*/
public function data_layout_classname_with_custom_blocks() {
return array(
'custom block with constrained layout' => array(
'block_name' => 'foo/bar',
'layout_type' => 'constrained',
'expected_class' => 'wp-block-foo-bar-is-layout-constrained',
'should_not_contain' => 'wp-block-bar-is-layout-constrained',
),
'custom block with default layout' => array(
'block_name' => 'foo/bar',
'layout_type' => 'default',
'expected_class' => 'wp-block-foo-bar-is-layout-flow',
'should_not_contain' => 'wp-block-bar-is-layout-flow',
),
'custom block with flex layout' => array(
'block_name' => 'foo/bar',
'layout_type' => 'flex',
'expected_class' => 'wp-block-foo-bar-is-layout-flex',
'should_not_contain' => 'wp-block-bar-is-layout-flex',
),
'custom block with grid layout' => array(
'block_name' => 'foo/bar',
'layout_type' => 'grid',
'expected_class' => 'wp-block-foo-bar-is-layout-grid',
'should_not_contain' => 'wp-block-bar-is-layout-grid',
),
);
}
}
Loading