Issue #2726837 by tim.plunkett, dipakmdhrm, dawehner: \Drupal\Core\Plugin\DefaultSingleLazyPluginCollection::addInstanceId should set $this->instanceId

8.2.x
Alex Pott 2016-05-27 11:11:48 +01:00
parent d27d90ce8a
commit 7c0adf9e29
2 changed files with 54 additions and 3 deletions

View File

@ -82,11 +82,11 @@ class DefaultSingleLazyPluginCollection extends LazyPluginCollection {
* {@inheritdoc}
*/
public function setConfiguration($configuration) {
$this->configuration = $configuration;
$plugin = $this->get($this->instanceId);
if ($plugin instanceof ConfigurablePluginInterface) {
$plugin->setConfiguration($configuration);
}
$this->configuration = $configuration;
return $this;
}
@ -94,6 +94,7 @@ class DefaultSingleLazyPluginCollection extends LazyPluginCollection {
* {@inheritdoc}
*/
public function addInstanceId($id, $configuration = NULL) {
$this->instanceId = $id;
parent::addInstanceId($id, $configuration);
if ($configuration !== NULL) {
$this->setConfiguration($configuration);

View File

@ -2,6 +2,8 @@
namespace Drupal\Tests\Core\Plugin;
use Drupal\Component\Plugin\ConfigurablePluginInterface;
use Drupal\Component\Plugin\PluginBase;
use Drupal\Core\Plugin\DefaultSingleLazyPluginCollection;
/**
@ -15,11 +17,15 @@ class DefaultSingleLazyPluginCollectionTest extends LazyPluginCollectionTestBase
*/
protected function setupPluginCollection(\PHPUnit_Framework_MockObject_Matcher_InvokedRecorder $create_count = NULL) {
$definitions = $this->getPluginDefinitions();
$this->pluginInstances['apple'] = $this->getPluginMock('apple', $definitions['apple']);
$this->pluginInstances['apple'] = new ConfigurablePlugin(['id' => 'apple', 'key' => 'value'], 'apple', $definitions['apple']);
$this->pluginInstances['banana'] = new ConfigurablePlugin(['id' => 'banana', 'key' => 'other_value'], 'banana', $definitions['banana']);
$create_count = $create_count ?: $this->never();
$this->pluginManager->expects($create_count)
->method('createInstance')
->will($this->returnValue($this->pluginInstances['apple']));
->willReturnCallback(function ($id) {
return $this->pluginInstances[$id];
});
$this->defaultPluginCollection = new DefaultSingleLazyPluginCollection($this->pluginManager, 'apple', array('id' => 'apple', 'key' => 'value'));
}
@ -34,4 +40,48 @@ class DefaultSingleLazyPluginCollectionTest extends LazyPluginCollectionTestBase
$this->assertSame($apple, $this->defaultPluginCollection->get('apple'));
}
/**
* @covers ::addInstanceId
* @covers ::getConfiguration
* @covers ::setConfiguration
*/
public function testAddInstanceId() {
$this->setupPluginCollection($this->any());
$this->assertEquals(['id' => 'apple', 'key' => 'value'], $this->defaultPluginCollection->get('apple')->getConfiguration());
$this->assertEquals(['id' => 'apple', 'key' => 'value'], $this->defaultPluginCollection->getConfiguration());
$this->defaultPluginCollection->addInstanceId('banana', ['id' => 'banana', 'key' => 'other_value']);
$this->assertEquals(['id' => 'apple', 'key' => 'value'], $this->defaultPluginCollection->get('apple')->getConfiguration());
$this->assertEquals(['id' => 'banana', 'key' => 'other_value'], $this->defaultPluginCollection->getConfiguration());
$this->assertEquals(['id' => 'banana', 'key' => 'other_value'], $this->defaultPluginCollection->get('banana')->getConfiguration());
}
}
class ConfigurablePlugin extends PluginBase implements ConfigurablePluginInterface {
public function __construct(array $configuration, $plugin_id, $plugin_definition) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
$this->configuration = $configuration + $this->defaultConfiguration();
}
public function defaultConfiguration() {
return [];
}
public function getConfiguration() {
return $this->configuration;
}
public function setConfiguration(array $configuration) {
$this->configuration = $configuration;
}
public function calculateDependencies() {
return [];
}
}