diff --git a/core/lib/Drupal/Core/Breadcrumb/BreadcrumbManager.php b/core/lib/Drupal/Core/Breadcrumb/BreadcrumbManager.php index 45de662bfb5..9e6f9b7ee90 100644 --- a/core/lib/Drupal/Core/Breadcrumb/BreadcrumbManager.php +++ b/core/lib/Drupal/Core/Breadcrumb/BreadcrumbManager.php @@ -7,6 +7,7 @@ namespace Drupal\Core\Breadcrumb; +use Drupal\Component\Utility\String; use Drupal\Core\Extension\ModuleHandlerInterface; /** @@ -85,7 +86,7 @@ class BreadcrumbManager implements BreadcrumbBuilderInterface { break; } else { - throw new \UnexpectedValueException(format_string('Invalid breadcrumb returned by !class::build().', array('!class' => get_class($builder)))); + throw new \UnexpectedValueException(String::format('Invalid breadcrumb returned by !class::build().', array('!class' => get_class($builder)))); } } // Allow modules to alter the breadcrumb. diff --git a/core/tests/Drupal/Tests/Core/Breadcrumb/BreadcrumbManagerTest.php b/core/tests/Drupal/Tests/Core/Breadcrumb/BreadcrumbManagerTest.php new file mode 100644 index 00000000000..f3ac82abe29 --- /dev/null +++ b/core/tests/Drupal/Tests/Core/Breadcrumb/BreadcrumbManagerTest.php @@ -0,0 +1,157 @@ +moduleHandler = $this->getMock('Drupal\Core\Extension\ModuleHandlerInterface'); + $this->breadcrumbManager = new BreadcrumbManager($this->moduleHandler); + } + + /** + * {@inheritdoc} + */ + public static function getInfo() { + return array( + 'name' => 'Breadcrumb manager', + 'description' => 'Tests the breadcrumb manager.', + 'group' => 'Menu' + ); + } + + /** + * Tests the breadcrumb manager without any set breadcrumb. + */ + public function testBuildWithoutBuilder() { + $result = $this->breadcrumbManager->build(array()); + $this->assertEquals(array(), $result); + } + + /** + * Tests the build method with a single breadcrumb builder. + */ + public function testBuildWithSingleBuilder() { + $builder = $this->getMock('Drupal\Core\Breadcrumb\BreadcrumbBuilderInterface'); + $breadcrumb = array('Test'); + + $attributes = array('key' => 'value'); + + $builder->expects($this->once()) + ->method('build') + ->will($this->returnValue($breadcrumb)); + + $this->moduleHandler->expects($this->once()) + ->method('alter') + ->with('system_breadcrumb', $breadcrumb, $attributes, array('builder' => $builder)); + + $this->breadcrumbManager->addBuilder($builder, 0); + + $result = $this->breadcrumbManager->build($attributes); + $this->assertEquals($breadcrumb, $result); + } + + /** + * Tests multiple breadcrumb builder with different priority. + */ + public function testBuildWithMultipleApplyingBuilders() { + $builder1 = $this->getMock('Drupal\Core\Breadcrumb\BreadcrumbBuilderInterface'); + $builder1->expects($this->never()) + ->method('build'); + + $builder2 = $this->getMock('Drupal\Core\Breadcrumb\BreadcrumbBuilderInterface'); + $breadcrumb2 = array('Test2'); + $builder2->expects($this->once()) + ->method('build') + ->will($this->returnValue($breadcrumb2)); + + $attributes = array('key' => 'value'); + + $this->moduleHandler->expects($this->once()) + ->method('alter') + ->with('system_breadcrumb', $breadcrumb2, $attributes, array('builder' => $builder2)); + + $this->breadcrumbManager->addBuilder($builder1, 0); + $this->breadcrumbManager->addBuilder($builder2, 10); + + $result = $this->breadcrumbManager->build($attributes); + $this->assertEquals($breadcrumb2, $result); + } + + /** + * Tests multiple breadcrumb builders of which one returns NULL. + */ + public function testBuildWithOneNotApplyingBuilders() { + $builder1 = $this->getMock('Drupal\Core\Breadcrumb\BreadcrumbBuilderInterface'); + $builder1->expects($this->once()) + ->method('build') + ->will($this->returnValue(NULL)); + + $builder2 = $this->getMock('Drupal\Core\Breadcrumb\BreadcrumbBuilderInterface'); + $breadcrumb2 = array('Test2'); + $builder2->expects($this->once()) + ->method('build') + ->will($this->returnValue($breadcrumb2)); + + $attributes = array('key' => 'value'); + + $this->moduleHandler->expects($this->once()) + ->method('alter') + ->with('system_breadcrumb', $breadcrumb2, $attributes, array('builder' => $builder2)); + + $this->breadcrumbManager->addBuilder($builder1, 10); + $this->breadcrumbManager->addBuilder($builder2, 0); + + $result = $this->breadcrumbManager->build($attributes); + $this->assertEquals($breadcrumb2, $result); + } + + /** + * Tests a breadcrumb builder with a bad return value. + * + * @expectedException \UnexpectedValueException + */ + public function testBuildWithInvalidBreadcrumbResult() { + $builder = $this->getMock('Drupal\Core\Breadcrumb\BreadcrumbBuilderInterface'); + $builder->expects($this->once()) + ->method('build') + ->will($this->returnValue('invalid_result')); + + $this->breadcrumbManager->addBuilder($builder, 0); + $this->breadcrumbManager->build(array()); + } + +}