function NavigationMenuBlockTest::testHtmlMarkup
Tests the generated HTML markup.
File
-
core/
modules/ navigation/ tests/ src/ Kernel/ NavigationMenuBlockTest.php, line 373
Class
Namespace
Drupal\Tests\navigation\KernelCode
public function testHtmlMarkup() : void {
$block = $this->blockManager
->createInstance('navigation_menu:' . $this->menu
->id(), [
'region' => 'content',
'id' => 'machine_name',
'label' => 'Menu Name',
'level' => 1,
'depth' => NavigationMenuBlock::NAVIGATION_MAX_DEPTH - 1,
]);
$block_build = $block->build();
$render = \Drupal::service('renderer')->renderRoot($block_build);
// The error flags need to be added to avoid errors when parsing HTML5 tags,
// like nav. This trick could be replaced with
// Dom\HTMLDocument::createFromString(), introduced in PHP 8.4 once PHP 8.3
// support is dropped.
$dom = new \DOMDocument();
// cspell:disable-next-line
$dom->loadHTML((string) $render, LIBXML_NOWARNING | LIBXML_NOERROR);
$xpath = new \DOMXPath($dom);
$items_query = [
"//li[contains(@class,'toolbar-block__list-item')]/span/span[text()='title 1']",
"//li[contains(@class,'toolbar-block__list-item')]/button/span[text()='title 2']",
"//li[contains(@class,'toolbar-menu__item--level-1')]/button/span[text()='title 3']",
"//li[contains(@class,'toolbar-menu__item--level-2')]/a[text()='title 4']",
"//li[contains(@class,'toolbar-block__list-item')]/button/span[text()='title 5']",
"//li[contains(@class,'toolbar-block__list-item')]/a/span[text()='title 6']",
"//li[contains(@class,'toolbar-block__list-item')]/a[contains(@class, 'external-link')]",
"//li[contains(@class,'toolbar-block__list-item')]/a[contains(@class, 'external-link')]",
"//li[contains(@class,'toolbar-block__list-item')]/a[@target='_blank']",
"//li[contains(@class,'toolbar-menu__item--level-1')]/button/span[text()='title 7']",
"//li[contains(@class,'toolbar-block__list-item')]/button/span[text()='title 8']",
"//li[contains(@class,'toolbar-menu__item--level-2')]/span[text()='title 10']",
"//li[contains(@class,'toolbar-menu__item--level-1')]/button/span[text()='title 11']",
"//li[contains(@class,'toolbar-menu__item--level-2')]/button[text()='title 12']",
"//li[contains(@class,'toolbar-block__list-item')]/button/span[text()='title 13']",
"//li[contains(@class,'toolbar-menu__item--level-1')]/button/span[text()='title 14']",
"//li[contains(@class,'toolbar-menu__item--level-2')]/a[text()='Overview']",
"//li[contains(@class,'toolbar-menu__item--level-1')]/button/span[text()='title 17']",
];
foreach ($items_query as $query) {
$span = $xpath->query($query);
$this->assertEquals(1, $span->length, $query);
}
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.