Skip to content
Snippets Groups Projects
Verified Commit 55463c9e authored by Dave Long's avatar Dave Long
Browse files

Issue #3445950 by alexpott, tim.plunkett:...

Issue #3445950 by alexpott, tim.plunkett: \Drupal\Core\Plugin\DefaultLazyPluginCollection::setInstanceConfiguration() assumes that $configuration results in the same plugin instance

(cherry picked from commit 926d069c)
parent 8a7586f8
No related branches found
No related tags found
41 merge requests!10663Issue #3495778: Update phpdoc in FileSaveHtaccessLoggingTest,!10451Issue #3472458 by watergate, smustgrave: CKEditor 5 show blocks label is not translated,!103032838547 Fix punctuation rules for inline label suffix colon with CSS only,!10150Issue #3467294 by quietone, nod_, smustgrave, catch, longwave: Change string...,!10130Resolve #3480321 "Second level menu",!9936Issue #3483087: Check the module:// prefix in the translation server path and replace it with the actual module path,!9933Issue #3394728 by ankondrat4: Undefined array key "#prefix" and deprecated function: explode() in Drupal\file\Element\ManagedFile::uploadAjaxCallback(),!9914Issue #3451136 by quietone, gapple, ghost of drupal past: Improve...,!9882Draft: Issue #3481777 In bulk_form ensure the triggering element is the bulk_form button,!9839Issue #3445469 by pooja_sharma, smustgrave: Add additional test coverage for...,!9815Issue #3480025: There is no way to remove entity cache items,!9757Issue #3478869 Add "All" or overview links to parent links,!9752Issue #3439910 by pooja_sharma, vensires: Fix Toolbar tests that rely on UID1's super user behavior,!9749Issue #3439910 by pooja_sharma, vensires: Fix Toolbar tests that rely on UID1's super user behavior,!9678Issue #3465132 by catch, Spokje, nod_: Show test run time by class in run-tests.sh output,!9578Issue #3304746 by scott_euser, casey, smustgrave: BigPipe cannot handle (GET)...,!9449Issue #3344041: Allow textarea widgets to be used for text (formatted) fields,!8945🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥...,!8893Resolve #3444391 "Navigation center sm logo",!8772Issue #3445909 by seanB, smustgrave, alexpott, catch: Add static caching to...,!8723Make dblog entities,!8708Filter out disabled display extenders on save,!8691#3459116 - Update Manager Settings: Validate same email address added multiple times,!8665Issue #3449743 by catch: Try to optimize test ordering when run-tests.sh is...,!8598Draft: Issue #3458215: Migrate Toolbar button to SDC,!8572Reorder checkboxes on "Development settings" page,!8538Issue #3457009: Fixing xxception message thrown.,!8516Update file EntityReferenceItem.php,!8505Issue #3456528: _node_mass_update_batch_process fails during user cancel when revision is deleted,!8494Issue #3452511: Convert ProviderRepositoryTest to a kernel test,!8482Resolve #3456202 "Phpunit tests support",!8463Prevent re-install if site already exists,!8392Issue #3454196: Filter placeholders without arguments are not replaced when HTML corrector filter applied afterwards,!8384Issue #3446403 by edutrul, jnicola, mradcliffe: [name]: This field is missing for example recipe,!8304Issue #2990766 by camilledavis, Gauravvvv, mgifford: Location of "Skip to...,!8178Issue #3439909 by SolimanHarkas, vensires: Fix Taxonomy tests that rely on...,!8138Remove inactive initiatives from maintainers list,!8078Issue #3439909 by SolimanHarkas, vensires: Fix Taxonomy tests that rely on...,!8065Adds Default Content and Recipes Subsystems,!8047Issue #3439909 by SolimanHarkas, vensires: Fix Taxonomy tests that rely on...,!5829Porting tabledrag CSS refactor from D10 branch
Pipeline #169835 passed
Pipeline: drupal

#169857

    Pipeline: drupal

    #169847

      Pipeline: drupal

      #169841

        ...@@ -156,6 +156,17 @@ public function setConfiguration(array $configuration) { ...@@ -156,6 +156,17 @@ public function setConfiguration(array $configuration) {
        * The plugin configuration to set. * The plugin configuration to set.
        */ */
        public function setInstanceConfiguration($instance_id, array $configuration) { public function setInstanceConfiguration($instance_id, array $configuration) {
        if (
        isset($this->pluginInstances[$instance_id]) &&
        isset($configuration[$this->pluginKey]) &&
        isset($this->configurations[$instance_id][$this->pluginKey]) &&
        $configuration[$this->pluginKey] !== $this->configurations[$instance_id][$this->pluginKey]
        ) {
        // If the plugin has already been instantiated by the configuration was
        // for a different plugin then we need to unset the instantiated plugin.
        unset($this->pluginInstances[$instance_id]);
        }
        $this->configurations[$instance_id] = $configuration; $this->configurations[$instance_id] = $configuration;
        $instance = $this->get($instance_id); $instance = $this->get($instance_id);
        if ($instance instanceof ConfigurableInterface) { if ($instance instanceof ConfigurableInterface) {
        ......
        ...@@ -168,6 +168,37 @@ public function testSetInstanceConfiguration() { ...@@ -168,6 +168,37 @@ public function testSetInstanceConfiguration() {
        $this->assertSame($expected, $config['cherry']); $this->assertSame($expected, $config['cherry']);
        } }
        /**
        * Tests plugin instances are changed if the configuration plugin key changes.
        *
        * @covers ::setInstanceConfiguration
        */
        public function testSetInstanceConfigurationPluginChange() {
        $configurable_plugin = $this->prophesize(ConfigurableInterface::class);
        $configurable_config = ['id' => 'configurable', 'foo' => 'bar'];
        $configurable_plugin->getConfiguration()->willReturn($configurable_config);
        $nonconfigurable_plugin = $this->prophesize(PluginInspectionInterface::class);
        $nonconfigurable_config = ['id' => 'non-configurable', 'baz' => 'qux'];
        $nonconfigurable_plugin->configuration = $nonconfigurable_config;
        $configurations = [
        'instance' => $configurable_config,
        ];
        $plugin_manager = $this->prophesize(PluginManagerInterface::class);
        $plugin_manager->createInstance('configurable', $configurable_config)->willReturn($configurable_plugin->reveal());
        $plugin_manager->createInstance('non-configurable', $nonconfigurable_config)->willReturn($nonconfigurable_plugin->reveal());
        $collection = new DefaultLazyPluginCollection($plugin_manager->reveal(), $configurations);
        $this->assertInstanceOf(ConfigurableInterface::class, $collection->get('instance'));
        // Ensure changing the instance to a different plugin via
        // setInstanceConfiguration() results in a different plugin instance.
        $collection->setInstanceConfiguration('instance', $nonconfigurable_config);
        $this->assertNotInstanceOf(ConfigurableInterface::class, $collection->get('instance'));
        }
        /** /**
        * @covers ::count * @covers ::count
        */ */
        ......
        0% Loading or .
        You are about to add 0 people to the discussion. Proceed with caution.
        Finish editing this message first!
        Please register or to comment