diff --git a/core/lib/Drupal/Core/Config/Entity/ConfigEntityBase.php b/core/lib/Drupal/Core/Config/Entity/ConfigEntityBase.php index 1bef225..f196b3b 100644 --- a/core/lib/Drupal/Core/Config/Entity/ConfigEntityBase.php +++ b/core/lib/Drupal/Core/Config/Entity/ConfigEntityBase.php @@ -382,6 +382,31 @@ protected function addDependency($type, $name) { } /** + * Adds multiple dependencies. + * + * @param array $dependencies. + * An array of dependencies keyed by the type of dependency. One example: + * @code + * array( + * 'module' => array( + * 'node', + * 'field', + * 'image' + * ), + * ); + * @endcode + * + * @see ::addDependency + */ + protected function addDependencies(array $dependencies) { + foreach ($dependencies as $dependency_type => $list) { + foreach ($list as $name) { + $this->addDependency($dependency_type, $name); + } + } + } + + /** * {@inheritdoc} */ public function getConfigDependencyName() { diff --git a/core/modules/views/lib/Drupal/views/Entity/View.php b/core/modules/views/lib/Drupal/views/Entity/View.php index b0a14c4..33a4e9c 100644 --- a/core/modules/views/lib/Drupal/views/Entity/View.php +++ b/core/modules/views/lib/Drupal/views/Entity/View.php @@ -276,7 +276,7 @@ public function calculateDependencies() { $this->addDependency('module', $this->module); // Ensure that the view is dependant on the module that provides the schema // for the base table. - $schema = drupal_get_schema($this->base_table); + $schema = $this->drupalGetSchema($this->base_table); if ($this->module != $schema['module']) { $this->addDependency('module', $schema['module']); } @@ -297,9 +297,7 @@ public function calculateDependencies() { } // Add the additional dependencies from the handler configuration. if (isset($handler['dependencies'])) { - foreach ($handler['dependencies'] as $type => $name) { - $this->addDependency($type, $name); - } + $this->addDependencies($handler['dependencies']); } } } @@ -308,9 +306,7 @@ public function calculateDependencies() { // Collect all dependencies of plugins. foreach ($plugin_types as $plugin_type) { if (isset($display['display_options'][$plugin_type]['options']['dependencies'])) { - foreach ($display['display_options'][$plugin_type]['options']['dependencies'] as $type => $name) { - $this->addDependency($type, $name); - } + $this->addDependencies($display['display_options'][$plugin_type]['options']['dependencies']); } } } @@ -416,4 +412,11 @@ public function mergeDefaultDisplaysOptions() { $this->set('display', $displays); } + /** + * Wraps drupal_get_schema(). + */ + protected function drupalGetSchema($table = NULL, $rebuild = FALSE) { + return drupal_get_schema($table, $rebuild); + } + } diff --git a/core/modules/views/tests/Drupal/views/Tests/Entity/ViewTest.php b/core/modules/views/tests/Drupal/views/Tests/Entity/ViewTest.php index 0ed2e2d..81aebfb 100644 --- a/core/modules/views/tests/Drupal/views/Tests/Entity/ViewTest.php +++ b/core/modules/views/tests/Drupal/views/Tests/Entity/ViewTest.php @@ -1,4 +1,5 @@ 'view')); + $entity_manager = $this->getMock('Drupal\Core\Entity\EntityManagerInterface'); + $entity_manager->expects($this->any()) + ->method('getDefinition') + ->will($this->returnValue($entity_definition)); + $container_builder = new ContainerBuilder(); + $container_builder->set('entity.manager', $entity_manager); + + // Setup the string translation. + $string_translation = $this->getStringTranslationStub(); + $container_builder->set('string_translation', $string_translation); + \Drupal::setContainer($container_builder); + } + + /** + * Tests calculating dependencies. * - * @covers ::getDependencies + * @covers ::calculateDependencies */ - public function testGetDependenciesWithNoDependencies() { + public function testCalculateDependenciesWithNoDependencies() { $values = array(); - $view = new View($values, 'view'); - $this->assertEquals(array(), $view->getDependencies()); + $view = new TestView($values, 'view'); + $this->assertEquals(array('module' => array('node', 'views')), $view->calculateDependencies()); } /** - * Tests getting dependencies defined on some handlers. + * Tests calculating dependencies defined on some handlers. + * + * @covers ::calculateDependencies */ - public function testGetDependenciesOnHandlers() { + public function testCalculateDependenciesOnHandlers() { $values = array(); $values['display']['default']['display_options']['fields']['example']['dependencies'] = array(); - $values['display']['default']['display_options']['fields']['example2']['dependencies'] = array('views', 'field'); - $values['display']['default']['display_options']['fields']['example3']['dependencies'] = array('views', 'image'); + $values['display']['default']['display_options']['fields']['example2']['dependencies']['module'] = array('views', 'field'); + $values['display']['default']['display_options']['fields']['example3']['dependencies']['module'] = array('views', 'image'); - $view = new View($values, 'view'); - $this->assertEquals(array('views', 'field', 'image'), $view->getDependencies()); + $view = new TestView($values, 'view'); + $this->assertEquals(array('module' => array('field', 'image', 'node', 'views')), $view->calculateDependencies()); } /** - * Tests getting dependencies defined on some plugins. + * Tests calculating dependencies defined on some plugins. + * + * @covers ::calculateDependencies */ - public function testGetDependenciesOnPlugins() { + public function testCalculateDependenciesOnPlugins() { $values = array(); $values['display']['default']['display_options']['access']['options']['dependencies'] = array(); - $values['display']['default']['display_options']['row']['options']['dependencies'] = array('views', 'field'); - $values['display']['default']['display_options']['style']['options']['dependencies'] = array('views', 'image'); + $values['display']['default']['display_options']['row']['options']['dependencies']['module'] = array('views', 'field'); + $values['display']['default']['display_options']['style']['options']['dependencies']['module'] = array('views', 'image'); + + $view = new TestView($values, 'view'); + $this->assertEquals(array('module' => array('field', 'image', 'node', 'views')), $view->calculateDependencies()); + } + +} + +class TestView extends View { - $view = new View($values, 'view'); - $this->assertEquals(array('views', 'field', 'image'), $view->getDependencies()); + /** + * {@inheritdoc} + */ + protected function drupalGetSchema($table = NULL, $rebuild = FALSE) { + $result = array(); + if ($table == 'node') { + $result['module'] = 'node'; + } + return $result; } }