* * @group widgets */ class BreadcrumbsTest extends \yiiunit\TestCase { private $breadcrumbs; protected function setUp() { parent::setUp(); // dirty way to have Request object not throwing exception when running testHomeLinkNull() $_SERVER['SCRIPT_FILENAME'] = "/index.php"; $_SERVER['SCRIPT_NAME'] = "/index.php"; $this->mockWebApplication(); $this->breadcrumbs = new Breadcrumbs(); } public function testHomeLinkNull() { $this->breadcrumbs->homeLink = null; $this->breadcrumbs->links = ['label' => 'My Home Page', 'url' => 'http://my.example.com/yii2/link/page']; $expectedHtml = ""; ob_start(); $this->breadcrumbs->run(); $actualHtml = ob_get_contents(); ob_end_clean(); $this->assertEquals($expectedHtml, $actualHtml); } public function testEmptyLinks() { $this->assertNull($this->breadcrumbs->run()); } public function testHomeLinkFalse() { $this->breadcrumbs->homeLink = false; $this->breadcrumbs->links = ['label' => 'My Home Page', 'url' => 'http://my.example.com/yii2/link/page']; $expectedHtml = ""; ob_start(); $this->breadcrumbs->run(); $actualHtml = ob_get_contents(); ob_end_clean(); $this->assertEquals($expectedHtml, $actualHtml); } public function testHomeLink() { $this->breadcrumbs->homeLink = ['label' => 'home-link']; $this->breadcrumbs->links = ['label' => 'My Home Page', 'url' => 'http://my.example.com/yii2/link/page']; $expectedHtml = ""; ob_start(); $this->breadcrumbs->run(); $actualHtml = ob_get_contents(); ob_end_clean(); $this->assertEquals($expectedHtml, $actualHtml); } public function testRenderItemException() { $link = ['url' => 'http://localhost/yii2']; $method = $this->reflectMethod(); $this->setExpectedException('yii\base\InvalidConfigException'); $method->invoke($this->breadcrumbs, $link, $this->breadcrumbs->itemTemplate); } public function testRenderItemLabelOnly() { $link = ['label' => 'My-
Test-Label']; $method = $this->reflectMethod(); $encodedValue = $method->invoke($this->breadcrumbs, $link, $this->breadcrumbs->itemTemplate); $this->assertEquals("
  • My-<br>Test-Label
  • \n", $encodedValue); //without encodeLabels $this->breadcrumbs->encodeLabels = false; $unencodedValue = $method->invoke($this->breadcrumbs, $link, $this->breadcrumbs->itemTemplate); $this->assertEquals("
  • My-
    Test-Label
  • \n", $unencodedValue); } public function testEncodeOverride() { $link = ['label' => 'My-
    Test-Label', 'encode' => false]; $method = $this->reflectMethod(); $result = $method->invoke($this->breadcrumbs, $link, $this->breadcrumbs->itemTemplate); $this->assertEquals("
  • My-
    Test-Label
  • \n", $result); //without encodeLabels $this->breadcrumbs->encodeLabels = false; $unencodedValue = $method->invoke($this->breadcrumbs, $link, $this->breadcrumbs->itemTemplate); $this->assertEquals("
  • My-
    Test-Label
  • \n", $unencodedValue); } public function testRenderItemWithLabelAndUrl() { $link = ['label' => 'My-
    Test-Label', 'url' => 'http://localhost/yii2']; $method = $this->reflectMethod(); $encodedValue = $method->invoke($this->breadcrumbs, $link, $this->breadcrumbs->itemTemplate); $this->assertEquals("
  • My-<br>Test-Label
  • \n", $encodedValue); // without encodeLabels $this->breadcrumbs->encodeLabels = false; $unencodedValue = $method->invoke($this->breadcrumbs, $link, $this->breadcrumbs->itemTemplate); $this->assertEquals("
  • My-
    Test-Label
  • \n", $unencodedValue); } public function testRenderItemTemplate() { $link = ['label' => 'My-
    Test-Label', 'url' => 'http://localhost/yii2', 'template' => "{link}\n"]; $method = $this->reflectMethod(); $encodedValue = $method->invoke($this->breadcrumbs, $link, $this->breadcrumbs->itemTemplate); $this->assertEquals("My-<br>Test-Label\n", $encodedValue); // without encodeLabels $this->breadcrumbs->encodeLabels = false; $unencodedValue = $method->invoke($this->breadcrumbs, $link, $this->breadcrumbs->itemTemplate); $this->assertEquals("My-
    Test-Label
    \n", $unencodedValue); } public function testExtraOptions() { $link = [ 'label' => 'demo', 'url' => 'http://example.com', 'class' => 'external', ]; $method = $this->reflectMethod(); $result = $method->invoke($this->breadcrumbs, $link, $this->breadcrumbs->itemTemplate); $this->assertEquals('
  • demo
  • ' . "\n", $result); } public function testTag() { $this->breadcrumbs->homeLink = ['label' => 'home-link']; $this->breadcrumbs->links = ['label' => 'My Home Page', 'url' => 'http://my.example.com/yii2/link/page']; $this->breadcrumbs->itemTemplate = "{link}\n"; $this->breadcrumbs->activeItemTemplate = "{link}\n"; $this->breadcrumbs->tag = false; $expectedHtml = "home-link\n" . "My Home Page\n" . "http://my.example.com/yii2/link/page\n"; ob_start(); $this->breadcrumbs->run(); $actualHtml = ob_get_contents(); ob_end_clean(); $this->assertEquals($expectedHtml, $actualHtml); } /** * Helper methods */ protected function reflectMethod($class = '\yii\widgets\Breadcrumbs', $method = 'renderItem') { $value = new \ReflectionMethod($class, $method); $value->setAccessible(true); return $value; } }