Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 3 |
CRAP | |
0.00% |
0 / 47 |
AssertBreadcrumbTrait | |
0.00% |
0 / 1 |
|
0.00% |
0 / 3 |
272 | |
0.00% |
0 / 47 |
assertBreadcrumb | |
0.00% |
0 / 1 |
20 | |
0.00% |
0 / 11 |
|||
assertBreadcrumbParts | |
0.00% |
0 / 1 |
90 | |
0.00% |
0 / 23 |
|||
getBreadcrumbParts | |
0.00% |
0 / 1 |
12 | |
0.00% |
0 / 13 |
<?php | |
/** | |
* @file | |
* Contains \Drupal\system\Tests\Menu\AssertBreadcrumbTrait. | |
*/ | |
namespace Drupal\system\Tests\Menu; | |
use Drupal\Component\Utility\Html; | |
use Drupal\Core\Url; | |
/** | |
* Provides test assertions for verifying breadcrumbs. | |
*/ | |
trait AssertBreadcrumbTrait { | |
use AssertMenuActiveTrailTrait; | |
/** | |
* Assert that a given path shows certain breadcrumb links. | |
* | |
* @param \Drupal\Core\Url|string $goto | |
* (optional) A path or URL to pass to | |
* Drupal\simpletest\WebTestBase::drupalGet(). | |
* @param array $trail | |
* An associative array whose keys are expected breadcrumb link paths and | |
* whose values are expected breadcrumb link texts (not sanitized). | |
* @param string $page_title | |
* (optional) A page title to additionally assert via | |
* Drupal\simpletest\WebTestBase::assertTitle(). Without site name suffix. | |
* @param array $tree | |
* (optional) An associative array whose keys are link paths and whose | |
* values are link titles (not sanitized) of an expected active trail in a | |
* menu tree output on the page. | |
* @param $last_active | |
* (optional) Whether the last link in $tree is expected to be active (TRUE) | |
* or just to be in the active trail (FALSE). | |
*/ | |
protected function assertBreadcrumb($goto, array $trail, $page_title = NULL, array $tree = array(), $last_active = TRUE) { | |
if (isset($goto)) { | |
$this->drupalGet($goto); | |
} | |
$this->assertBreadcrumbParts($trail); | |
// Additionally assert page title, if given. | |
if (isset($page_title)) { | |
$this->assertTitle(strtr('@title | Drupal', array('@title' => $page_title))); | |
} | |
// Additionally assert active trail in a menu tree output, if given. | |
if ($tree) { | |
$this->assertMenuActiveTrail($tree, $last_active); | |
} | |
} | |
/** | |
* Assert that a trail exists in the internal browser. | |
* | |
* @param array $trail | |
* An associative array whose keys are expected breadcrumb link paths and | |
* whose values are expected breadcrumb link texts (not sanitized). | |
*/ | |
protected function assertBreadcrumbParts($trail) { | |
// Compare paths with actual breadcrumb. | |
$parts = $this->getBreadcrumbParts(); | |
$pass = TRUE; | |
// There may be more than one breadcrumb on the page. If $trail is empty | |
// this test would go into an infinite loop, so we need to check that too. | |
while ($trail && !empty($parts)) { | |
foreach ($trail as $path => $title) { | |
// If the path is empty, generate the path from the <front> route. If | |
// the path does not start with a leading slash, then run it through | |
// Url::fromUri('base:')->toString() to get the correct base | |
// prepended. | |
if ($path == '') { | |
$url = Url::fromRoute('<front>')->toString(); | |
} | |
elseif ($path[0] != '/') { | |
$url = Url::fromUri('base:' . $path)->toString(); | |
} | |
else { | |
$url = $path; | |
} | |
$part = array_shift($parts); | |
$pass = ($pass && $part['href'] === $url && $part['text'] === Html::escape($title)); | |
} | |
} | |
// No parts must be left, or an expected "Home" will always pass. | |
$pass = ($pass && empty($parts)); | |
$this->assertTrue($pass, format_string('Breadcrumb %parts found on @path.', array( | |
'%parts' => implode(' ยป ', $trail), | |
'@path' => $this->getUrl(), | |
))); | |
} | |
/** | |
* Returns the breadcrumb contents of the current page in the internal browser. | |
*/ | |
protected function getBreadcrumbParts() { | |
$parts = array(); | |
$elements = $this->xpath('//nav[@class="breadcrumb"]/ol/li/a'); | |
if (!empty($elements)) { | |
foreach ($elements as $element) { | |
$parts[] = array( | |
'text' => (string) $element, | |
'href' => (string) $element['href'], | |
'title' => (string) $element['title'], | |
); | |
} | |
} | |
return $parts; | |
} | |
} |