1 layout.test | LayoutInterfaceTest::testLayoutChange() |
Tests switching between different layouts, ensuring block copying.
File
- core/
modules/ layout/ tests/ layout.test, line 1742 - Tests for the Layout module.
Class
- LayoutInterfaceTest
- Tests the interface for adding, removing, and moving blocks.
Code
function testLayoutChange() {
// Add blocks to the default layout for checking.
$default_layout = layout_load('default');
$default_layout->addBlock('layout_test', 'foo', 'content');
$default_layout->addBlock('layout_test', 'foo', 'sidebar');
$default_layout->save();
// Create a layout should inherit all the blocks. Since the default layout
// also two columns, all blocks should be copied over.
$layout_name = strtolower($this->randomName());
$layout_path = $layout_name;
$edit = array(
'name' => $layout_name,
'title' => $layout_name,
'path' => $layout_path,
'layout_template' => 'moscone_flipped',
);
$this->backdropPost('admin/structure/layouts/add', $edit, t('Create layout'));
layout_reset_caches();
$layout = layout_load($layout_name);
$this->assertBlocksMatch($layout, $default_layout);
// Change the layout to the test layout, which has identical regions.
$edit = array(
'layout_template' => 'layout_test_layout',
);
$this->backdropPost('admin/structure/layouts/manage/' . $layout_name . '/configure', $edit, t('Save layout'));
layout_reset_caches();
$layout = layout_load($layout_name);
$this->assertBlocksMatch($layout, $default_layout);
// Change the layout to the boxton layout, eliminating the sidebar.
$edit = array(
'layout_template' => 'boxton',
);
$this->backdropPost('admin/structure/layouts/manage/' . $layout_name . '/configure', $edit, t('Save layout'));
$orphaned_uuids = $default_layout->positions['sidebar'];
$this->orphaned_blocks = !empty($orphaned_uuids);
layout_reset_caches();
$layout = layout_load($layout_name);
$this->assertBlocksMatch($layout, $default_layout);
$this->assertFalse(isset($layout->positions['sidebar']), 'Sidebar region blocks moved out when changing layout to single column.');
$intersection = array_intersect(array_keys($layout->content), $orphaned_uuids);
$this->assertEqual($intersection, array(), 'The sidebar blocks have been removed from the layout content array.');
// Check that the sidebar and content region blocks in the old layout are
// the same number of blocks in the content region of the new layout.
$default_layout_sidebar_content_regions_count = count($default_layout->positions['sidebar']) + count($default_layout->positions['content']);
$new_content_region_count = count($layout->positions['content']);
// Count the system main block separately since it doesn't exist in the
// new layout.
if ($default_layout->positions['content'][0] == 'default') {
$new_content_region_count++;
}
$this->assertTrue($default_layout_sidebar_content_regions_count == $new_content_region_count, 'The blocks from the Sidebar and Default regions in the old layout all exist in the Default region of the new layout.');
// Make sure the moved block is part of the module we expect.
$moved_block_uuid = $layout->positions['content'][1];
$moved_block = $layout->content[$moved_block_uuid];
$this->assertTrue($moved_block->module == 'layout_test', 'The moved block is from the layout_test module.');
}