From ae32aaae81a92118f6de995831919e87e77daa03 Mon Sep 17 00:00:00 2001
From: Alex Pott <alex.a.pott@googlemail.com>
Date: Thu, 16 Jul 2015 13:34:09 +0100
Subject: [PATCH] Issue #2151103 by twistor, kerby70, ParisLiakos, cilefen:
 Zend feed plugins are incorrectly registered

---
 core/core.services.yml                        | 25 +++++++++++++++++--
 .../aggregator/src/Tests/FeedParserTest.php   | 14 +++++++----
 .../aggregator_test/aggregator_test_atom.xml  |  8 ++++++
 3 files changed, 40 insertions(+), 7 deletions(-)

diff --git a/core/core.services.yml b/core/core.services.yml
index f9d7cc8aaca9..09494a117fe3 100644
--- a/core/core.services.yml
+++ b/core/core.services.yml
@@ -1191,50 +1191,71 @@ services:
     calls:
       - [setContainer, ['@service_container']]
     arguments: ['feed.writer.']
-# Zend Feed reader plugins
+# Zend Feed reader plugins. Plugins should be set as prototype scope.
   feed.reader.dublincoreentry:
     class: Zend\Feed\Reader\Extension\DublinCore\Entry
+    scope: prototype
   feed.reader.dublincorefeed:
     class: Zend\Feed\Reader\Extension\DublinCore\Feed
+    scope: prototype
   feed.reader.contententry:
     class: Zend\Feed\Reader\Extension\Content\Entry
+    scope: prototype
   feed.reader.atomentry:
     class: Zend\Feed\Reader\Extension\Atom\Entry
+    scope: prototype
   feed.reader.atomfeed:
     class: Zend\Feed\Reader\Extension\Atom\Feed
+    scope: prototype
   feed.reader.slashentry:
     class: Zend\Feed\Reader\Extension\Slash\Entry
+    scope: prototype
   feed.reader.wellformedwebentry:
     class: Zend\Feed\Reader\Extension\WellFormedWeb\Entry
+    scope: prototype
   feed.reader.threadentry:
     class: Zend\Feed\Reader\Extension\Thread\Entry
+    scope: prototype
   feed.reader.podcastentry:
     class: Zend\Feed\Reader\Extension\Podcast\Entry
+    scope: prototype
   feed.reader.podcastfeed:
     class: Zend\Feed\Reader\Extension\Podcast\Feed
-# Zend Feed writer plugins
+    scope: prototype
+# Zend Feed writer plugins. Plugins should be set as prototype scope.
   feed.writer.atomrendererfeed:
     class: Zend\Feed\Writer\Extension\Atom\Renderer\Feed
+    scope: prototype
   feed.writer.contentrendererentry:
     class: Zend\Feed\Writer\Extension\Content\Renderer\Entry
+    scope: prototype
   feed.writer.dublincorerendererentry:
     class: Zend\Feed\Writer\Extension\DublinCore\Renderer\Entry
+    scope: prototype
   feed.writer.dublincorerendererfeed:
     class: Zend\Feed\Writer\Extension\DublinCore\Renderer\Feed
+    scope: prototype
   feed.writer.itunesentry:
     class: Zend\Feed\Writer\Extension\ITunes\Entry
+    scope: prototype
   feed.writer.itunesfeed:
     class: Zend\Feed\Writer\Extension\ITunes\Feed
+    scope: prototype
   feed.writer.itunesrendererentry:
     class: Zend\Feed\Writer\Extension\ITunes\Renderer\Entry
+    scope: prototype
   feed.writer.itunesrendererfeed:
     class: Zend\Feed\Writer\Extension\ITunes\Renderer\Feed
+    scope: prototype
   feed.writer.slashrendererentry:
     class: Zend\Feed\Writer\Extension\Slash\Renderer\Entry
+    scope: prototype
   feed.writer.threadingrendererentry:
     class: Zend\Feed\Writer\Extension\Threading\Renderer\Entry
+    scope: prototype
   feed.writer.wellformedwebrendererentry:
     class: Zend\Feed\Writer\Extension\WellFormedWeb\Renderer\Entry
+    scope: prototype
   theme.manager:
     class: Drupal\Core\Theme\ThemeManager
     arguments: ['@app.root', '@theme.negotiator', '@theme.initialization', '@request_stack', '@module_handler']
diff --git a/core/modules/aggregator/src/Tests/FeedParserTest.php b/core/modules/aggregator/src/Tests/FeedParserTest.php
index df8c9bf7cb1a..6da2ec8eb3d2 100644
--- a/core/modules/aggregator/src/Tests/FeedParserTest.php
+++ b/core/modules/aggregator/src/Tests/FeedParserTest.php
@@ -26,11 +26,6 @@ protected function setUp() {
     // feeds have hardcoded dates in them (which may be expired when this test
     // is run).
     $this->config('aggregator.settings')->set('items.expire', AGGREGATOR_CLEAR_NEVER)->save();
-    // Reset any reader cache between tests.
-    Reader::reset();
-    // Set our bridge extension manager to Zend Feed.
-    $bridge = $this->container->get('feed.bridge.reader');
-    Reader::setExtensionManager($bridge);
   }
 
   /**
@@ -68,6 +63,15 @@ public function testAtomSample() {
     $this->assertLinkByHref('http://example.org/2003/12/13/atom03');
     $this->assertText('Some text.');
     $this->assertEqual('urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a', db_query('SELECT guid FROM {aggregator_item} WHERE link = :link', array(':link' => 'http://example.org/2003/12/13/atom03'))->fetchField(), 'Atom entry id element is parsed correctly.');
+
+    // Check for second feed entry.
+    $this->assertText('We tried to stop them, but we failed.');
+    $this->assertLinkByHref('http://example.org/2003/12/14/atom03');
+    $this->assertText('Some other text.');
+    $db_guid = db_query('SELECT guid FROM {aggregator_item} WHERE link = :link', array(
+      ':link' => 'http://example.org/2003/12/14/atom03',
+    ))->fetchField();
+    $this->assertEqual('urn:uuid:1225c695-cfb8-4ebb-bbbb-80da344efa6a', $db_guid, 'Atom entry id element is parsed correctly.');
   }
 
   /**
diff --git a/core/modules/aggregator/tests/modules/aggregator_test/aggregator_test_atom.xml b/core/modules/aggregator/tests/modules/aggregator_test/aggregator_test_atom.xml
index 357b2e5a1565..379420267724 100644
--- a/core/modules/aggregator/tests/modules/aggregator_test/aggregator_test_atom.xml
+++ b/core/modules/aggregator/tests/modules/aggregator_test/aggregator_test_atom.xml
@@ -17,4 +17,12 @@
     <summary>Some text.</summary>
   </entry>
 
+  <entry>
+    <title>We tried to stop them, but we failed.</title>
+    <link href="http://example.org/2003/12/14/atom03" />
+    <id>urn:uuid:1225c695-cfb8-4ebb-bbbb-80da344efa6a</id>
+    <updated>2003-12-14T16:30:02Z</updated>
+    <summary>Some other text.</summary>
+  </entry>
+
 </feed>
-- 
GitLab