Issue #2726837 by tim.plunkett, dipakmdhrm, dawehner: \Drupal\Core\Plugin\DefaultSingleLazyPluginCollection::addInstanceId should set $this->instanceId
parent
d27d90ce8a
commit
7c0adf9e29
|
@ -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);
|
||||
|
|
|
@ -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 [];
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue