From 5387abb58137ee3d932f346c2a92b5d12039fe9b Mon Sep 17 00:00:00 2001 From: Marcus Bointon Date: Fri, 10 Nov 2017 09:04:20 +0100 Subject: [PATCH 01/21] Make $extensions property protected --- src/Reader/StandaloneExtensionManager.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Reader/StandaloneExtensionManager.php b/src/Reader/StandaloneExtensionManager.php index 9d9fcad9..1e18fdea 100644 --- a/src/Reader/StandaloneExtensionManager.php +++ b/src/Reader/StandaloneExtensionManager.php @@ -11,7 +11,7 @@ class StandaloneExtensionManager implements ExtensionManagerInterface { - private $extensions = [ + protected $extensions = [ 'Atom\Entry' => 'Zend\Feed\Reader\Extension\Atom\Entry', 'Atom\Feed' => 'Zend\Feed\Reader\Extension\Atom\Feed', 'Content\Entry' => 'Zend\Feed\Reader\Extension\Content\Entry', From b9f3004ea6044408db3d48d38c5896dec26041ed Mon Sep 17 00:00:00 2001 From: Marcus Bointon Date: Tue, 14 Nov 2017 08:30:43 +0100 Subject: [PATCH 02/21] Switch to making StandaloneExtensionManager configurable --- src/Reader/StandaloneExtensionManager.php | 30 +++++++++++++++++-- .../Reader/StandaloneExtensionManagerTest.php | 14 +++++++++ 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/src/Reader/StandaloneExtensionManager.php b/src/Reader/StandaloneExtensionManager.php index 1e18fdea..a8f7c725 100644 --- a/src/Reader/StandaloneExtensionManager.php +++ b/src/Reader/StandaloneExtensionManager.php @@ -9,9 +9,9 @@ namespace Zend\Feed\Reader; -class StandaloneExtensionManager implements ExtensionManagerInterface +final class StandaloneExtensionManager implements ExtensionManagerInterface { - protected $extensions = [ + private $extensions = [ 'Atom\Entry' => 'Zend\Feed\Reader\Extension\Atom\Entry', 'Atom\Feed' => 'Zend\Feed\Reader\Extension\Atom\Feed', 'Content\Entry' => 'Zend\Feed\Reader\Extension\Content\Entry', @@ -49,4 +49,30 @@ public function get($extension) $class = $this->extensions[$extension]; return new $class(); } + + /** + * Add an extension. + * + * @param string $name + * @param string $class + */ + public function add($name, $class) + { + $this->extensions[$name] = $class; + } + + /** + * Remove an extension. + * + * @param string $name + * @return bool + */ + public function remove($name) + { + if (array_key_exists($name, $this->extensions)) { + unset($this->extensions[$name]); + return true; + } + return false; + } } diff --git a/test/Reader/StandaloneExtensionManagerTest.php b/test/Reader/StandaloneExtensionManagerTest.php index f4dd6dee..f9325e64 100644 --- a/test/Reader/StandaloneExtensionManagerTest.php +++ b/test/Reader/StandaloneExtensionManagerTest.php @@ -80,4 +80,18 @@ public function testEachPluginRetrievalReturnsNewInstance($pluginName, $pluginCl $this->assertInstanceOf($pluginClass, $test); $this->assertNotSame($extension, $test); } + + public function testAddingPlugin() + { + $this->extensions->add('Test/Test', 'mytestextension'); + $this->assertTrue($this->extensions->has('Test/Test')); + } + + public function testRemovingPlugin() + { + $this->extensions->add('Test/Test', 'mytestextension'); + $this->assertTrue($this->extensions->remove('Test/Test')); + $this->assertFalse($this->extensions->has('Test/Test')); + $this->assertFalse($this->extensions->remove('Test/Test')); + } } From 1351b73ad7f3953c84a15a0d572bbeeab840c869 Mon Sep 17 00:00:00 2001 From: Marcus Bointon Date: Tue, 14 Nov 2017 08:43:06 +0100 Subject: [PATCH 03/21] Not final --- src/Reader/StandaloneExtensionManager.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Reader/StandaloneExtensionManager.php b/src/Reader/StandaloneExtensionManager.php index a8f7c725..1861b165 100644 --- a/src/Reader/StandaloneExtensionManager.php +++ b/src/Reader/StandaloneExtensionManager.php @@ -9,7 +9,7 @@ namespace Zend\Feed\Reader; -final class StandaloneExtensionManager implements ExtensionManagerInterface +class StandaloneExtensionManager implements ExtensionManagerInterface { private $extensions = [ 'Atom\Entry' => 'Zend\Feed\Reader\Extension\Atom\Entry', From e09a172f41cb1e69238671e4a09a56915c508e9d Mon Sep 17 00:00:00 2001 From: Marcus Bointon Date: Tue, 14 Nov 2017 09:01:41 +0100 Subject: [PATCH 04/21] Add tests for Writer StandaloneExtensionMananger --- .../Writer/StandaloneExtensionManagerTest.php | 88 +++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 test/Writer/StandaloneExtensionManagerTest.php diff --git a/test/Writer/StandaloneExtensionManagerTest.php b/test/Writer/StandaloneExtensionManagerTest.php new file mode 100644 index 00000000..b14d1683 --- /dev/null +++ b/test/Writer/StandaloneExtensionManagerTest.php @@ -0,0 +1,88 @@ +extensions = new StandaloneExtensionManager(); + } + + public function testIsAnExtensionManagerImplementation() + { + $this->assertInstanceOf(ExtensionManagerInterface::class, $this->extensions); + } + + public function defaultPlugins() + { + return [ + 'Atom\Renderer\Feed' => Extension\Atom\Renderer\Feed::class, + 'Content\Renderer\Entry' => Extension\Content\Renderer\Entry::class, + 'DublinCore\Renderer\Entry' => Extension\DublinCore\Renderer\Entry::class, + 'DublinCore\Renderer\Feed' => Extension\DublinCore\Renderer\Feed::class, + 'ITunes\Entry' => Extension\ITunes\Entry::class, + 'ITunes\Feed' => Extension\ITunes\Feed::class, + 'ITunes\Renderer\Entry' => Extension\ITunes\Renderer\Entry::class, + 'ITunes\Renderer\Feed' => Extension\ITunes\Renderer\Feed::class, + 'Slash\Renderer\Entry' => Extension\Slash\Renderer\Entry::class, + 'Threading\Renderer\Entry' => Extension\Threading\Renderer\Entry::class, + 'WellFormedWeb\Renderer\Entry' => Extension\WellFormedWeb\Renderer\Entry::class, + ]; + } + + /** + * @dataProvider defaultPlugins + */ + public function testHasAllDefaultPlugins($pluginName, $pluginClass) + { + $this->assertTrue($this->extensions->has($pluginName)); + } + + /** + * @dataProvider defaultPlugins + */ + public function testCanRetrieveDefaultPluginInstances($pluginName, $pluginClass) + { + $extension = $this->extensions->get($pluginName); + $this->assertInstanceOf($pluginClass, $extension); + } + + /** + * @dataProvider defaultPlugins + */ + public function testEachPluginRetrievalReturnsNewInstance($pluginName, $pluginClass) + { + $extension = $this->extensions->get($pluginName); + $this->assertInstanceOf($pluginClass, $extension); + + $test = $this->extensions->get($pluginName); + $this->assertInstanceOf($pluginClass, $test); + $this->assertNotSame($extension, $test); + } + + public function testPluginAddRemove() + { + $this->extensions->add('Test/Test', 'mytestextension'); + $this->assertTrue($this->extensions->has('Test/Test')); + $this->extensions->remove('Test/Test'); + $this->assertFalse($this->extensions->has('Test/Test')); + } +} From 7155b5a9c2b42c0302708cb1f4494a3fbe9bebf7 Mon Sep 17 00:00:00 2001 From: Marcus Bointon Date: Tue, 14 Nov 2017 09:02:36 +0100 Subject: [PATCH 05/21] No return value from remove, simplify --- src/Reader/StandaloneExtensionManager.php | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/Reader/StandaloneExtensionManager.php b/src/Reader/StandaloneExtensionManager.php index 1861b165..e09f54a3 100644 --- a/src/Reader/StandaloneExtensionManager.php +++ b/src/Reader/StandaloneExtensionManager.php @@ -65,14 +65,9 @@ public function add($name, $class) * Remove an extension. * * @param string $name - * @return bool */ public function remove($name) { - if (array_key_exists($name, $this->extensions)) { - unset($this->extensions[$name]); - return true; - } - return false; + unset($this->extensions[$name]); } } From c431c49c1111ba7e42280637a6acf59f5781c98b Mon Sep 17 00:00:00 2001 From: Marcus Bointon Date: Tue, 14 Nov 2017 09:03:33 +0100 Subject: [PATCH 06/21] Implement same changes for Writer --- src/Writer/StandaloneExtensionManager.php | 21 +++++++++++++++++++ .../Reader/StandaloneExtensionManagerTest.php | 15 +++++++------ 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/src/Writer/StandaloneExtensionManager.php b/src/Writer/StandaloneExtensionManager.php index c9a88c76..c9f1b3e0 100644 --- a/src/Writer/StandaloneExtensionManager.php +++ b/src/Writer/StandaloneExtensionManager.php @@ -47,4 +47,25 @@ public function get($extension) $class = $this->extensions[$extension]; return new $class(); } + + /** + * Add an extension. + * + * @param string $name + * @param string $class + */ + public function add($name, $class) + { + $this->extensions[$name] = $class; + } + + /** + * Remove an extension. + * + * @param string $name + */ + public function remove($name) + { + unset($this->extensions[$name]); + } } diff --git a/test/Reader/StandaloneExtensionManagerTest.php b/test/Reader/StandaloneExtensionManagerTest.php index f9325e64..e8c09927 100644 --- a/test/Reader/StandaloneExtensionManagerTest.php +++ b/test/Reader/StandaloneExtensionManagerTest.php @@ -16,6 +16,11 @@ class StandaloneExtensionManagerTest extends TestCase { + /** + * @var StandaloneExtensionManager + */ + private $extensions; + public function setUp() { $this->extensions = new StandaloneExtensionManager(); @@ -81,17 +86,11 @@ public function testEachPluginRetrievalReturnsNewInstance($pluginName, $pluginCl $this->assertNotSame($extension, $test); } - public function testAddingPlugin() + public function testPluginAddRemove() { $this->extensions->add('Test/Test', 'mytestextension'); $this->assertTrue($this->extensions->has('Test/Test')); - } - - public function testRemovingPlugin() - { - $this->extensions->add('Test/Test', 'mytestextension'); - $this->assertTrue($this->extensions->remove('Test/Test')); + $this->extensions->remove('Test/Test'); $this->assertFalse($this->extensions->has('Test/Test')); - $this->assertFalse($this->extensions->remove('Test/Test')); } } From 7a91f4fad775d861d5530810d197a3e3dfd6e199 Mon Sep 17 00:00:00 2001 From: Marcus Bointon Date: Tue, 14 Nov 2017 09:05:55 +0100 Subject: [PATCH 07/21] Use class pseudoconstants rather than strings for class names --- src/Reader/StandaloneExtensionManager.php | 26 +++++++++++------------ 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/Reader/StandaloneExtensionManager.php b/src/Reader/StandaloneExtensionManager.php index e09f54a3..7e34a439 100644 --- a/src/Reader/StandaloneExtensionManager.php +++ b/src/Reader/StandaloneExtensionManager.php @@ -12,19 +12,19 @@ class StandaloneExtensionManager implements ExtensionManagerInterface { private $extensions = [ - 'Atom\Entry' => 'Zend\Feed\Reader\Extension\Atom\Entry', - 'Atom\Feed' => 'Zend\Feed\Reader\Extension\Atom\Feed', - 'Content\Entry' => 'Zend\Feed\Reader\Extension\Content\Entry', - 'CreativeCommons\Entry' => 'Zend\Feed\Reader\Extension\CreativeCommons\Entry', - 'CreativeCommons\Feed' => 'Zend\Feed\Reader\Extension\CreativeCommons\Feed', - 'DublinCore\Entry' => 'Zend\Feed\Reader\Extension\DublinCore\Entry', - 'DublinCore\Feed' => 'Zend\Feed\Reader\Extension\DublinCore\Feed', - 'Podcast\Entry' => 'Zend\Feed\Reader\Extension\Podcast\Entry', - 'Podcast\Feed' => 'Zend\Feed\Reader\Extension\Podcast\Feed', - 'Slash\Entry' => 'Zend\Feed\Reader\Extension\Slash\Entry', - 'Syndication\Feed' => 'Zend\Feed\Reader\Extension\Syndication\Feed', - 'Thread\Entry' => 'Zend\Feed\Reader\Extension\Thread\Entry', - 'WellFormedWeb\Entry' => 'Zend\Feed\Reader\Extension\WellFormedWeb\Entry', + 'Atom\Entry' => Zend\Feed\Reader\Extension\Atom\Entry::class, + 'Atom\Feed' => Zend\Feed\Reader\Extension\Atom\Feed::class, + 'Content\Entry' => Zend\Feed\Reader\Extension\Content\Entry::class, + 'CreativeCommons\Entry' => Zend\Feed\Reader\Extension\CreativeCommons\Entry::class, + 'CreativeCommons\Feed' => Zend\Feed\Reader\Extension\CreativeCommons\Feed::class, + 'DublinCore\Entry' => Zend\Feed\Reader\Extension\DublinCore\Entry::class, + 'DublinCore\Feed' => Zend\Feed\Reader\Extension\DublinCore\Feed::class, + 'Podcast\Entry' => Zend\Feed\Reader\Extension\Podcast\Entry::class, + 'Podcast\Feed' => Zend\Feed\Reader\Extension\Podcast\Feed::class, + 'Slash\Entry' => Zend\Feed\Reader\Extension\Slash\Entry::class, + 'Syndication\Feed' => Zend\Feed\Reader\Extension\Syndication\Feed::class, + 'Thread\Entry' => Zend\Feed\Reader\Extension\Thread\Entry::class, + 'WellFormedWeb\Entry' => Zend\Feed\Reader\Extension\WellFormedWeb\Entry::class, ]; /** From 849b55d5fe52a18cc1f6dcd4c6e4903cd92d5f5c Mon Sep 17 00:00:00 2001 From: Marcus Bointon Date: Tue, 14 Nov 2017 09:10:55 +0100 Subject: [PATCH 08/21] Fix namespaced names --- src/Reader/StandaloneExtensionManager.php | 26 +++++++++++------------ 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/Reader/StandaloneExtensionManager.php b/src/Reader/StandaloneExtensionManager.php index 7e34a439..d42f5681 100644 --- a/src/Reader/StandaloneExtensionManager.php +++ b/src/Reader/StandaloneExtensionManager.php @@ -12,19 +12,19 @@ class StandaloneExtensionManager implements ExtensionManagerInterface { private $extensions = [ - 'Atom\Entry' => Zend\Feed\Reader\Extension\Atom\Entry::class, - 'Atom\Feed' => Zend\Feed\Reader\Extension\Atom\Feed::class, - 'Content\Entry' => Zend\Feed\Reader\Extension\Content\Entry::class, - 'CreativeCommons\Entry' => Zend\Feed\Reader\Extension\CreativeCommons\Entry::class, - 'CreativeCommons\Feed' => Zend\Feed\Reader\Extension\CreativeCommons\Feed::class, - 'DublinCore\Entry' => Zend\Feed\Reader\Extension\DublinCore\Entry::class, - 'DublinCore\Feed' => Zend\Feed\Reader\Extension\DublinCore\Feed::class, - 'Podcast\Entry' => Zend\Feed\Reader\Extension\Podcast\Entry::class, - 'Podcast\Feed' => Zend\Feed\Reader\Extension\Podcast\Feed::class, - 'Slash\Entry' => Zend\Feed\Reader\Extension\Slash\Entry::class, - 'Syndication\Feed' => Zend\Feed\Reader\Extension\Syndication\Feed::class, - 'Thread\Entry' => Zend\Feed\Reader\Extension\Thread\Entry::class, - 'WellFormedWeb\Entry' => Zend\Feed\Reader\Extension\WellFormedWeb\Entry::class, + 'Atom\Entry' => Extension\Atom\Entry::class, + 'Atom\Feed' => Extension\Atom\Feed::class, + 'Content\Entry' => Extension\Content\Entry::class, + 'CreativeCommons\Entry' => Extension\CreativeCommons\Entry::class, + 'CreativeCommons\Feed' => Extension\CreativeCommons\Feed::class, + 'DublinCore\Entry' => Extension\DublinCore\Entry::class, + 'DublinCore\Feed' => Extension\DublinCore\Feed::class, + 'Podcast\Entry' => Extension\Podcast\Entry::class, + 'Podcast\Feed' => Extension\Podcast\Feed::class, + 'Slash\Entry' => Extension\Slash\Entry::class, + 'Syndication\Feed' => Extension\Syndication\Feed::class, + 'Thread\Entry' => Extension\Thread\Entry::class, + 'WellFormedWeb\Entry' => Extension\WellFormedWeb\Entry::class, ]; /** From 8c3860fc6eb6ad5f7f162bc5b7aa573472ec5b70 Mon Sep 17 00:00:00 2001 From: Marcus Bointon Date: Tue, 14 Nov 2017 09:22:37 +0100 Subject: [PATCH 09/21] Fix data provider --- .../Writer/StandaloneExtensionManagerTest.php | 26 +++++++++++-------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/test/Writer/StandaloneExtensionManagerTest.php b/test/Writer/StandaloneExtensionManagerTest.php index b14d1683..e5bb4ac4 100644 --- a/test/Writer/StandaloneExtensionManagerTest.php +++ b/test/Writer/StandaloneExtensionManagerTest.php @@ -34,17 +34,21 @@ public function testIsAnExtensionManagerImplementation() public function defaultPlugins() { return [ - 'Atom\Renderer\Feed' => Extension\Atom\Renderer\Feed::class, - 'Content\Renderer\Entry' => Extension\Content\Renderer\Entry::class, - 'DublinCore\Renderer\Entry' => Extension\DublinCore\Renderer\Entry::class, - 'DublinCore\Renderer\Feed' => Extension\DublinCore\Renderer\Feed::class, - 'ITunes\Entry' => Extension\ITunes\Entry::class, - 'ITunes\Feed' => Extension\ITunes\Feed::class, - 'ITunes\Renderer\Entry' => Extension\ITunes\Renderer\Entry::class, - 'ITunes\Renderer\Feed' => Extension\ITunes\Renderer\Feed::class, - 'Slash\Renderer\Entry' => Extension\Slash\Renderer\Entry::class, - 'Threading\Renderer\Entry' => Extension\Threading\Renderer\Entry::class, - 'WellFormedWeb\Renderer\Entry' => Extension\WellFormedWeb\Renderer\Entry::class, + 'Atom\Renderer\Feed' => ['Atom\Renderer\Feed' => Extension\Atom\Renderer\Feed::class], + 'Content\Renderer\Entry' => [ + 'Content\Renderer\Entry' => Extension\Content\Renderer\Entry::class + ], + 'DublinCore\Renderer\Entry' => ['DublinCore\Renderer\Entry' => Extension\DublinCore\Renderer\Entry::class], + 'DublinCore\Renderer\Feed' => ['DublinCore\Renderer\Feed' => Extension\DublinCore\Renderer\Feed::class], + 'ITunes\Entry' => ['ITunes\Entry' => Extension\ITunes\Entry::class], + 'ITunes\Feed' => ['ITunes\Feed' => Extension\ITunes\Feed::class], + 'ITunes\Renderer\Entry' => ['ITunes\Renderer\Entry' => Extension\ITunes\Renderer\Entry::class], + 'ITunes\Renderer\Feed' => ['ITunes\Renderer\Feed' => Extension\ITunes\Renderer\Feed::class], + 'Slash\Renderer\Entry' => ['Slash\Renderer\Entry' => Extension\Slash\Renderer\Entry::class], + 'Threading\Renderer\Entry' => ['Threading\Renderer\Entry' => Extension\Threading\Renderer\Entry::class], + 'WellFormedWeb\Renderer\Entry' => [ + 'WellFormedWeb\Renderer\Entry' => Extension\WellFormedWeb\Renderer\Entry::class + ], ]; } From 223e867ae219b7f903c95a588bf9ec0ca523019a Mon Sep 17 00:00:00 2001 From: Marcus Bointon Date: Tue, 14 Nov 2017 09:28:21 +0100 Subject: [PATCH 10/21] Fix test provider namespaces --- .../Writer/StandaloneExtensionManagerTest.php | 36 +++++++++++++------ 1 file changed, 25 insertions(+), 11 deletions(-) diff --git a/test/Writer/StandaloneExtensionManagerTest.php b/test/Writer/StandaloneExtensionManagerTest.php index e5bb4ac4..446da39a 100644 --- a/test/Writer/StandaloneExtensionManagerTest.php +++ b/test/Writer/StandaloneExtensionManagerTest.php @@ -34,20 +34,34 @@ public function testIsAnExtensionManagerImplementation() public function defaultPlugins() { return [ - 'Atom\Renderer\Feed' => ['Atom\Renderer\Feed' => Extension\Atom\Renderer\Feed::class], + 'Atom\Renderer\Feed' => [ + 'Atom\Renderer\Feed' => \Zend\Feed\Writer\Extension\Atom\Renderer\Feed::class + ], 'Content\Renderer\Entry' => [ - 'Content\Renderer\Entry' => Extension\Content\Renderer\Entry::class + 'Content\Renderer\Entry' => \Zend\Feed\Writer\Extension\Content\Renderer\Entry::class + ], + 'DublinCore\Renderer\Entry' => [ + 'DublinCore\Renderer\Entry' => \Zend\Feed\Writer\Extension\DublinCore\Renderer\Entry::class + ], + 'DublinCore\Renderer\Feed' => [ + 'DublinCore\Renderer\Feed' => \Zend\Feed\Writer\Extension\DublinCore\Renderer\Feed::class + ], + 'ITunes\Entry' => ['ITunes\Entry' => \Zend\Feed\Writer\Extension\ITunes\Entry::class], + 'ITunes\Feed' => ['ITunes\Feed' => \Zend\Feed\Writer\Extension\ITunes\Feed::class], + 'ITunes\Renderer\Entry' => [ + 'ITunes\Renderer\Entry' => \Zend\Feed\Writer\Extension\ITunes\Renderer\Entry::class + ], + 'ITunes\Renderer\Feed' => [ + 'ITunes\Renderer\Feed' => \Zend\Feed\Writer\Extension\ITunes\Renderer\Feed::class + ], + 'Slash\Renderer\Entry' => [ + 'Slash\Renderer\Entry' => \Zend\Feed\Writer\Extension\Slash\Renderer\Entry::class + ], + 'Threading\Renderer\Entry' => [ + 'Threading\Renderer\Entry' => \Zend\Feed\Writer\Extension\Threading\Renderer\Entry::class ], - 'DublinCore\Renderer\Entry' => ['DublinCore\Renderer\Entry' => Extension\DublinCore\Renderer\Entry::class], - 'DublinCore\Renderer\Feed' => ['DublinCore\Renderer\Feed' => Extension\DublinCore\Renderer\Feed::class], - 'ITunes\Entry' => ['ITunes\Entry' => Extension\ITunes\Entry::class], - 'ITunes\Feed' => ['ITunes\Feed' => Extension\ITunes\Feed::class], - 'ITunes\Renderer\Entry' => ['ITunes\Renderer\Entry' => Extension\ITunes\Renderer\Entry::class], - 'ITunes\Renderer\Feed' => ['ITunes\Renderer\Feed' => Extension\ITunes\Renderer\Feed::class], - 'Slash\Renderer\Entry' => ['Slash\Renderer\Entry' => Extension\Slash\Renderer\Entry::class], - 'Threading\Renderer\Entry' => ['Threading\Renderer\Entry' => Extension\Threading\Renderer\Entry::class], 'WellFormedWeb\Renderer\Entry' => [ - 'WellFormedWeb\Renderer\Entry' => Extension\WellFormedWeb\Renderer\Entry::class + 'WellFormedWeb\Renderer\Entry' => \Zend\Feed\Writer\Extension\WellFormedWeb\Renderer\Entry::class ], ]; } From 4e68bee762a85a81b7b5bb456c675062d875b9e5 Mon Sep 17 00:00:00 2001 From: Marcus Bointon Date: Tue, 14 Nov 2017 09:30:51 +0100 Subject: [PATCH 11/21] Writer, not Reader --- test/Writer/StandaloneExtensionManagerTest.php | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/test/Writer/StandaloneExtensionManagerTest.php b/test/Writer/StandaloneExtensionManagerTest.php index 446da39a..f3f0a7ee 100644 --- a/test/Writer/StandaloneExtensionManagerTest.php +++ b/test/Writer/StandaloneExtensionManagerTest.php @@ -9,10 +9,8 @@ namespace ZendTest\Feed\Writer; use PHPUnit\Framework\TestCase; -use Zend\Feed\Reader\StandaloneExtensionManager; -use Zend\Feed\Reader\Extension\WellFormedWeb\Entry; -use Zend\Feed\Reader\Extension\Syndication\Feed; -use Zend\Feed\Reader\ExtensionManagerInterface; +use Zend\Feed\Writer\StandaloneExtensionManager; +use Zend\Feed\Writer\ExtensionManagerInterface; class StandaloneExtensionManagerTest extends TestCase { From f8075262f081e58494d111e7268da598399f85e6 Mon Sep 17 00:00:00 2001 From: Marcus Bointon Date: Tue, 14 Nov 2017 09:44:18 +0100 Subject: [PATCH 12/21] Fix data provider --- .../Writer/StandaloneExtensionManagerTest.php | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/test/Writer/StandaloneExtensionManagerTest.php b/test/Writer/StandaloneExtensionManagerTest.php index f3f0a7ee..6ff458ce 100644 --- a/test/Writer/StandaloneExtensionManagerTest.php +++ b/test/Writer/StandaloneExtensionManagerTest.php @@ -33,33 +33,33 @@ public function defaultPlugins() { return [ 'Atom\Renderer\Feed' => [ - 'Atom\Renderer\Feed' => \Zend\Feed\Writer\Extension\Atom\Renderer\Feed::class + 'Atom\Renderer\Feed', \Zend\Feed\Writer\Extension\Atom\Renderer\Feed::class ], 'Content\Renderer\Entry' => [ - 'Content\Renderer\Entry' => \Zend\Feed\Writer\Extension\Content\Renderer\Entry::class + 'Content\Renderer\Entry', \Zend\Feed\Writer\Extension\Content\Renderer\Entry::class ], 'DublinCore\Renderer\Entry' => [ - 'DublinCore\Renderer\Entry' => \Zend\Feed\Writer\Extension\DublinCore\Renderer\Entry::class + 'DublinCore\Renderer\Entry', \Zend\Feed\Writer\Extension\DublinCore\Renderer\Entry::class ], 'DublinCore\Renderer\Feed' => [ - 'DublinCore\Renderer\Feed' => \Zend\Feed\Writer\Extension\DublinCore\Renderer\Feed::class + 'DublinCore\Renderer\Feed', \Zend\Feed\Writer\Extension\DublinCore\Renderer\Feed::class ], - 'ITunes\Entry' => ['ITunes\Entry' => \Zend\Feed\Writer\Extension\ITunes\Entry::class], - 'ITunes\Feed' => ['ITunes\Feed' => \Zend\Feed\Writer\Extension\ITunes\Feed::class], + 'ITunes\Entry' => ['ITunes\Entry', \Zend\Feed\Writer\Extension\ITunes\Entry::class], + 'ITunes\Feed' => ['ITunes\Feed', \Zend\Feed\Writer\Extension\ITunes\Feed::class], 'ITunes\Renderer\Entry' => [ - 'ITunes\Renderer\Entry' => \Zend\Feed\Writer\Extension\ITunes\Renderer\Entry::class + 'ITunes\Renderer\Entry', \Zend\Feed\Writer\Extension\ITunes\Renderer\Entry::class ], 'ITunes\Renderer\Feed' => [ - 'ITunes\Renderer\Feed' => \Zend\Feed\Writer\Extension\ITunes\Renderer\Feed::class + 'ITunes\Renderer\Feed', \Zend\Feed\Writer\Extension\ITunes\Renderer\Feed::class ], 'Slash\Renderer\Entry' => [ - 'Slash\Renderer\Entry' => \Zend\Feed\Writer\Extension\Slash\Renderer\Entry::class + 'Slash\Renderer\Entry', \Zend\Feed\Writer\Extension\Slash\Renderer\Entry::class ], 'Threading\Renderer\Entry' => [ - 'Threading\Renderer\Entry' => \Zend\Feed\Writer\Extension\Threading\Renderer\Entry::class + 'Threading\Renderer\Entry', \Zend\Feed\Writer\Extension\Threading\Renderer\Entry::class ], 'WellFormedWeb\Renderer\Entry' => [ - 'WellFormedWeb\Renderer\Entry' => \Zend\Feed\Writer\Extension\WellFormedWeb\Renderer\Entry::class + 'WellFormedWeb\Renderer\Entry', \Zend\Feed\Writer\Extension\WellFormedWeb\Renderer\Entry::class ], ]; } From f71a00c1ffc582b2ead42c28a3ffd087b900350c Mon Sep 17 00:00:00 2001 From: Marcus Bointon Date: Tue, 14 Nov 2017 12:59:40 +0100 Subject: [PATCH 13/21] Improve docs a little --- doc/book/reader.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/doc/book/reader.md b/doc/book/reader.md index 9a565a19..11a58eff 100644 --- a/doc/book/reader.md +++ b/doc/book/reader.md @@ -532,9 +532,9 @@ manager". Extension managers must implement `Zend\Feed\Reader\ExtensionManagerIn Three implementations exist: - `Zend\Feed\Reader\StandaloneExtensionManager` is a hard-coded implementation - seeded with all feed and entry implementations. You can extend it to add - extensions, though it's likely easier to copy and paste it, adding your - changes. + seeded with all feed and entry implementations. You can add simple extensions + from it using `add` and `remove` methods. `ExtensionPluginManager` is + recommended for more complex needs. - `Zend\Feed\Reader\ExtensionPluginManager` is a `Zend\ServiceManager\AbstractPluginManager` implementation, `Zend\Feed\Reader\ExtensionManager`; as such, you can extend it to add more extensions, use a `Zend\ServiceManager\ConfigInterface` instance @@ -727,7 +727,8 @@ your extension manager knows about it, and then register the extension with The following example uses `Zend\Feed\Reader\ExtensionPluginManager` to manage extensions, as it provides the ability to register new extensions without -requiring extension of the plugin manager itself. To use it, first intall +requiring extension of the plugin manager itself (note that this example works +with ServiceManager v2, but not v3). To use it, first install zend-servicemanager: ```bash From d4a8efea945cdb91d334da42004a5e94db1e94b5 Mon Sep 17 00:00:00 2001 From: Marcus Bointon Date: Tue, 14 Nov 2017 13:00:10 +0100 Subject: [PATCH 14/21] Add checks when adding extensions --- src/Reader/StandaloneExtensionManager.php | 17 ++++++++++++++++- src/Writer/StandaloneExtensionManager.php | 19 ++++++++++++++++++- .../Reader/StandaloneExtensionManagerTest.php | 8 ++++---- .../Writer/StandaloneExtensionManagerTest.php | 8 ++++---- 4 files changed, 42 insertions(+), 10 deletions(-) diff --git a/src/Reader/StandaloneExtensionManager.php b/src/Reader/StandaloneExtensionManager.php index d42f5681..57d7b7be 100644 --- a/src/Reader/StandaloneExtensionManager.php +++ b/src/Reader/StandaloneExtensionManager.php @@ -9,6 +9,8 @@ namespace Zend\Feed\Reader; +use Zend\ServiceManager\Exception\InvalidServiceException; + class StandaloneExtensionManager implements ExtensionManagerInterface { private $extensions = [ @@ -58,7 +60,20 @@ public function get($extension) */ public function add($name, $class) { - $this->extensions[$name] = $class; + if (is_string($class) && ( + is_a($class, Extension\AbstractEntry::class, true) || + is_a($class, Extension\AbstractFeed::class, true)) + ){ + $this->extensions[$name] = $class; + return; + } + + throw new InvalidServiceException(sprintf( + 'Plugin of type %s is invalid; must implement %2$s\Extension\AbstractFeed ' + . 'or %2$s\Extension\AbstractEntry', + $class, + __NAMESPACE__ + )); } /** diff --git a/src/Writer/StandaloneExtensionManager.php b/src/Writer/StandaloneExtensionManager.php index c9f1b3e0..3a1cb552 100644 --- a/src/Writer/StandaloneExtensionManager.php +++ b/src/Writer/StandaloneExtensionManager.php @@ -9,6 +9,8 @@ namespace Zend\Feed\Writer; +use Zend\ServiceManager\Exception\InvalidServiceException; + class StandaloneExtensionManager implements ExtensionManagerInterface { private $extensions = [ @@ -56,7 +58,22 @@ public function get($extension) */ public function add($name, $class) { - $this->extensions[$name] = $class; + if (is_string($class) && (( + is_a($class, Extension\AbstractRenderer::class, true) || + 'Feed' === substr($class, -4) || + 'Entry' === substr($class, -5) + ))) { + $this->extensions[$name] = $class; + + return; + } + + throw new InvalidServiceException(sprintf( + 'Plugin of type %s is invalid; must implement %s\Extension\RendererInterface ' + . 'or the classname must end in "Feed" or "Entry"', + $class, + __NAMESPACE__ + )); } /** diff --git a/test/Reader/StandaloneExtensionManagerTest.php b/test/Reader/StandaloneExtensionManagerTest.php index e8c09927..86fbba9e 100644 --- a/test/Reader/StandaloneExtensionManagerTest.php +++ b/test/Reader/StandaloneExtensionManagerTest.php @@ -88,9 +88,9 @@ public function testEachPluginRetrievalReturnsNewInstance($pluginName, $pluginCl public function testPluginAddRemove() { - $this->extensions->add('Test/Test', 'mytestextension'); - $this->assertTrue($this->extensions->has('Test/Test')); - $this->extensions->remove('Test/Test'); - $this->assertFalse($this->extensions->has('Test/Test')); + $this->extensions->add('Test/Entry', 'MyTestExtension_Entry'); + $this->assertTrue($this->extensions->has('Test/Entry')); + $this->extensions->remove('Test/Entry'); + $this->assertFalse($this->extensions->has('Test/Entry')); } } diff --git a/test/Writer/StandaloneExtensionManagerTest.php b/test/Writer/StandaloneExtensionManagerTest.php index 6ff458ce..9876ba62 100644 --- a/test/Writer/StandaloneExtensionManagerTest.php +++ b/test/Writer/StandaloneExtensionManagerTest.php @@ -96,9 +96,9 @@ public function testEachPluginRetrievalReturnsNewInstance($pluginName, $pluginCl public function testPluginAddRemove() { - $this->extensions->add('Test/Test', 'mytestextension'); - $this->assertTrue($this->extensions->has('Test/Test')); - $this->extensions->remove('Test/Test'); - $this->assertFalse($this->extensions->has('Test/Test')); + $this->extensions->add('Test/Feed', 'MyTestExtension_Feed'); + $this->assertTrue($this->extensions->has('Test/Feed')); + $this->extensions->remove('Test/Feed'); + $this->assertFalse($this->extensions->has('Test/Feed')); } } From a9a5af4fa5ad003862771f0353b2a057d4201997 Mon Sep 17 00:00:00 2001 From: Marcus Bointon Date: Tue, 14 Nov 2017 14:43:27 +0100 Subject: [PATCH 15/21] Use mock extension --- test/Reader/StandaloneExtensionManagerTest.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/Reader/StandaloneExtensionManagerTest.php b/test/Reader/StandaloneExtensionManagerTest.php index 86fbba9e..62348a00 100644 --- a/test/Reader/StandaloneExtensionManagerTest.php +++ b/test/Reader/StandaloneExtensionManagerTest.php @@ -88,7 +88,8 @@ public function testEachPluginRetrievalReturnsNewInstance($pluginName, $pluginCl public function testPluginAddRemove() { - $this->extensions->add('Test/Entry', 'MyTestExtension_Entry'); + $ext = $this->createMock(\Zend\Feed\Reader\Extension\AbstractEntry::class); + $this->extensions->add('Test/Entry', get_class($ext)); $this->assertTrue($this->extensions->has('Test/Entry')); $this->extensions->remove('Test/Entry'); $this->assertFalse($this->extensions->has('Test/Entry')); From ce6fd8b6a00fecf76af05a38c1c86231dd7bf991 Mon Sep 17 00:00:00 2001 From: Marcus Bointon Date: Tue, 14 Nov 2017 14:51:37 +0100 Subject: [PATCH 16/21] Code style --- src/Reader/StandaloneExtensionManager.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Reader/StandaloneExtensionManager.php b/src/Reader/StandaloneExtensionManager.php index 57d7b7be..2fd62177 100644 --- a/src/Reader/StandaloneExtensionManager.php +++ b/src/Reader/StandaloneExtensionManager.php @@ -63,7 +63,7 @@ public function add($name, $class) if (is_string($class) && ( is_a($class, Extension\AbstractEntry::class, true) || is_a($class, Extension\AbstractFeed::class, true)) - ){ + ) { $this->extensions[$name] = $class; return; } From 3e379f836e8720f235c419f7a83c68aca01e2e89 Mon Sep 17 00:00:00 2001 From: Marcus Bointon Date: Tue, 14 Nov 2017 15:48:31 +0100 Subject: [PATCH 17/21] Fix wrong exceptions Add exceptions to tests --- src/Reader/StandaloneExtensionManager.php | 4 ++-- src/Writer/StandaloneExtensionManager.php | 4 ++-- test/Reader/StandaloneExtensionManagerTest.php | 2 ++ test/Writer/StandaloneExtensionManagerTest.php | 2 ++ 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/Reader/StandaloneExtensionManager.php b/src/Reader/StandaloneExtensionManager.php index 2fd62177..6815fb49 100644 --- a/src/Reader/StandaloneExtensionManager.php +++ b/src/Reader/StandaloneExtensionManager.php @@ -9,7 +9,7 @@ namespace Zend\Feed\Reader; -use Zend\ServiceManager\Exception\InvalidServiceException; +use Zend\Feed\Reader\Exception\InvalidArgumentException; class StandaloneExtensionManager implements ExtensionManagerInterface { @@ -68,7 +68,7 @@ public function add($name, $class) return; } - throw new InvalidServiceException(sprintf( + throw new InvalidArgumentException(sprintf( 'Plugin of type %s is invalid; must implement %2$s\Extension\AbstractFeed ' . 'or %2$s\Extension\AbstractEntry', $class, diff --git a/src/Writer/StandaloneExtensionManager.php b/src/Writer/StandaloneExtensionManager.php index 3a1cb552..3234eba9 100644 --- a/src/Writer/StandaloneExtensionManager.php +++ b/src/Writer/StandaloneExtensionManager.php @@ -9,7 +9,7 @@ namespace Zend\Feed\Writer; -use Zend\ServiceManager\Exception\InvalidServiceException; +use Zend\Feed\Writer\Exception\InvalidArgumentException; class StandaloneExtensionManager implements ExtensionManagerInterface { @@ -68,7 +68,7 @@ public function add($name, $class) return; } - throw new InvalidServiceException(sprintf( + throw new InvalidArgumentException(sprintf( 'Plugin of type %s is invalid; must implement %s\Extension\RendererInterface ' . 'or the classname must end in "Feed" or "Entry"', $class, diff --git a/test/Reader/StandaloneExtensionManagerTest.php b/test/Reader/StandaloneExtensionManagerTest.php index 62348a00..075cf423 100644 --- a/test/Reader/StandaloneExtensionManagerTest.php +++ b/test/Reader/StandaloneExtensionManagerTest.php @@ -93,5 +93,7 @@ public function testPluginAddRemove() $this->assertTrue($this->extensions->has('Test/Entry')); $this->extensions->remove('Test/Entry'); $this->assertFalse($this->extensions->has('Test/Entry')); + $this->expectException(\Zend\Feed\Reader\Exception\InvalidArgumentException::class); + $this->extensions->add('Test/Entry', 'blah'); } } diff --git a/test/Writer/StandaloneExtensionManagerTest.php b/test/Writer/StandaloneExtensionManagerTest.php index 9876ba62..46d776fc 100644 --- a/test/Writer/StandaloneExtensionManagerTest.php +++ b/test/Writer/StandaloneExtensionManagerTest.php @@ -100,5 +100,7 @@ public function testPluginAddRemove() $this->assertTrue($this->extensions->has('Test/Feed')); $this->extensions->remove('Test/Feed'); $this->assertFalse($this->extensions->has('Test/Feed')); + $this->expectException(\Zend\Feed\Reader\Exception\InvalidArgumentException::class); + $this->extensions->add('Test/Feed', 'blah'); } } From 789b4b297ccd38460ef3afe8ebadb39683885e88 Mon Sep 17 00:00:00 2001 From: Marcus Bointon Date: Tue, 14 Nov 2017 15:57:34 +0100 Subject: [PATCH 18/21] Fix wrong exception --- test/Writer/StandaloneExtensionManagerTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Writer/StandaloneExtensionManagerTest.php b/test/Writer/StandaloneExtensionManagerTest.php index 46d776fc..f1174aee 100644 --- a/test/Writer/StandaloneExtensionManagerTest.php +++ b/test/Writer/StandaloneExtensionManagerTest.php @@ -100,7 +100,7 @@ public function testPluginAddRemove() $this->assertTrue($this->extensions->has('Test/Feed')); $this->extensions->remove('Test/Feed'); $this->assertFalse($this->extensions->has('Test/Feed')); - $this->expectException(\Zend\Feed\Reader\Exception\InvalidArgumentException::class); + $this->expectException(\Zend\Feed\Writer\Exception\InvalidArgumentException::class); $this->extensions->add('Test/Feed', 'blah'); } } From 4096b6e9798225bcf86d5269ccc36a5f73a7f2a7 Mon Sep 17 00:00:00 2001 From: Marcus Bointon Date: Tue, 14 Nov 2017 16:24:48 +0100 Subject: [PATCH 19/21] More tests --- test/Reader/StandaloneExtensionManagerTest.php | 6 ++++++ test/Writer/StandaloneExtensionManagerTest.php | 7 +++++++ 2 files changed, 13 insertions(+) diff --git a/test/Reader/StandaloneExtensionManagerTest.php b/test/Reader/StandaloneExtensionManagerTest.php index 075cf423..8bfa0f04 100644 --- a/test/Reader/StandaloneExtensionManagerTest.php +++ b/test/Reader/StandaloneExtensionManagerTest.php @@ -93,6 +93,12 @@ public function testPluginAddRemove() $this->assertTrue($this->extensions->has('Test/Entry')); $this->extensions->remove('Test/Entry'); $this->assertFalse($this->extensions->has('Test/Entry')); + + $ext = $this->createMock(\Zend\Feed\Reader\Extension\AbstractFeed::class); + $this->extensions->add('Test/Feed', get_class($ext)); + $this->assertTrue($this->extensions->has('Test/Feed')); + $this->extensions->remove('Test/Feed'); + $this->expectException(\Zend\Feed\Reader\Exception\InvalidArgumentException::class); $this->extensions->add('Test/Entry', 'blah'); } diff --git a/test/Writer/StandaloneExtensionManagerTest.php b/test/Writer/StandaloneExtensionManagerTest.php index f1174aee..4c991c99 100644 --- a/test/Writer/StandaloneExtensionManagerTest.php +++ b/test/Writer/StandaloneExtensionManagerTest.php @@ -100,6 +100,13 @@ public function testPluginAddRemove() $this->assertTrue($this->extensions->has('Test/Feed')); $this->extensions->remove('Test/Feed'); $this->assertFalse($this->extensions->has('Test/Feed')); + + $ext = $this->createMock(\Zend\Feed\Writer\Extension\AbstractRenderer::class); + $this->extensions->add('Test/Thing', get_class($ext)); + $this->assertTrue($this->extensions->has('Test/Thing')); + $this->extensions->remove('Test/Thing'); + $this->assertFalse($this->extensions->has('Test/Thing')); + $this->expectException(\Zend\Feed\Writer\Exception\InvalidArgumentException::class); $this->extensions->add('Test/Feed', 'blah'); } From 1c80524c6e95eadf9ea4d41a974d57499e8b5173 Mon Sep 17 00:00:00 2001 From: Marcus Bointon Date: Tue, 14 Nov 2017 17:02:07 +0100 Subject: [PATCH 20/21] More tests --- test/Writer/StandaloneExtensionManagerTest.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/test/Writer/StandaloneExtensionManagerTest.php b/test/Writer/StandaloneExtensionManagerTest.php index 4c991c99..8137a27e 100644 --- a/test/Writer/StandaloneExtensionManagerTest.php +++ b/test/Writer/StandaloneExtensionManagerTest.php @@ -101,6 +101,11 @@ public function testPluginAddRemove() $this->extensions->remove('Test/Feed'); $this->assertFalse($this->extensions->has('Test/Feed')); + $this->extensions->add('Test/Entry', 'MyTestExtension_Entry'); + $this->assertTrue($this->extensions->has('Test/Entry')); + $this->extensions->remove('Test/Entry'); + $this->assertFalse($this->extensions->has('Test/Entry')); + $ext = $this->createMock(\Zend\Feed\Writer\Extension\AbstractRenderer::class); $this->extensions->add('Test/Thing', get_class($ext)); $this->assertTrue($this->extensions->has('Test/Thing')); From 32982ff6a0e32761fea4d0d603cd08318c3be217 Mon Sep 17 00:00:00 2001 From: Marcus Bointon Date: Wed, 15 Nov 2017 12:45:46 +0100 Subject: [PATCH 21/21] Break out tests --- .../Reader/StandaloneExtensionManagerTest.php | 18 +++++++++++++----- .../Writer/StandaloneExtensionManagerTest.php | 19 ++++++++++++------- 2 files changed, 25 insertions(+), 12 deletions(-) diff --git a/test/Reader/StandaloneExtensionManagerTest.php b/test/Reader/StandaloneExtensionManagerTest.php index 8bfa0f04..cf8b8d29 100644 --- a/test/Reader/StandaloneExtensionManagerTest.php +++ b/test/Reader/StandaloneExtensionManagerTest.php @@ -86,20 +86,28 @@ public function testEachPluginRetrievalReturnsNewInstance($pluginName, $pluginCl $this->assertNotSame($extension, $test); } - public function testPluginAddRemove() + public function testAddAcceptsValidExtensionClasses() { $ext = $this->createMock(\Zend\Feed\Reader\Extension\AbstractEntry::class); $this->extensions->add('Test/Entry', get_class($ext)); $this->assertTrue($this->extensions->has('Test/Entry')); - $this->extensions->remove('Test/Entry'); - $this->assertFalse($this->extensions->has('Test/Entry')); - $ext = $this->createMock(\Zend\Feed\Reader\Extension\AbstractFeed::class); $this->extensions->add('Test/Feed', get_class($ext)); $this->assertTrue($this->extensions->has('Test/Feed')); - $this->extensions->remove('Test/Feed'); + } + public function testAddRejectsInvalidExtensions() + { $this->expectException(\Zend\Feed\Reader\Exception\InvalidArgumentException::class); $this->extensions->add('Test/Entry', 'blah'); } + + public function testExtensionRemoval() + { + $ext = $this->createMock(\Zend\Feed\Reader\Extension\AbstractEntry::class); + $this->extensions->add('Test/Entry', get_class($ext)); + $this->assertTrue($this->extensions->has('Test/Entry')); + $this->extensions->remove('Test/Entry'); + $this->assertFalse($this->extensions->has('Test/Entry')); + } } diff --git a/test/Writer/StandaloneExtensionManagerTest.php b/test/Writer/StandaloneExtensionManagerTest.php index 8137a27e..f9bc3a35 100644 --- a/test/Writer/StandaloneExtensionManagerTest.php +++ b/test/Writer/StandaloneExtensionManagerTest.php @@ -94,25 +94,30 @@ public function testEachPluginRetrievalReturnsNewInstance($pluginName, $pluginCl $this->assertNotSame($extension, $test); } - public function testPluginAddRemove() + public function testAddAcceptsValidExtensionClasses() { $this->extensions->add('Test/Feed', 'MyTestExtension_Feed'); $this->assertTrue($this->extensions->has('Test/Feed')); - $this->extensions->remove('Test/Feed'); - $this->assertFalse($this->extensions->has('Test/Feed')); $this->extensions->add('Test/Entry', 'MyTestExtension_Entry'); $this->assertTrue($this->extensions->has('Test/Entry')); - $this->extensions->remove('Test/Entry'); - $this->assertFalse($this->extensions->has('Test/Entry')); $ext = $this->createMock(\Zend\Feed\Writer\Extension\AbstractRenderer::class); $this->extensions->add('Test/Thing', get_class($ext)); $this->assertTrue($this->extensions->has('Test/Thing')); - $this->extensions->remove('Test/Thing'); - $this->assertFalse($this->extensions->has('Test/Thing')); + } + public function testAddRejectsInvalidExtensions() + { $this->expectException(\Zend\Feed\Writer\Exception\InvalidArgumentException::class); $this->extensions->add('Test/Feed', 'blah'); } + + public function testExtensionRemoval() + { + $this->extensions->add('Test/Entry', 'MyTestExtension_Entry'); + $this->assertTrue($this->extensions->has('Test/Entry')); + $this->extensions->remove('Test/Entry'); + $this->assertFalse($this->extensions->has('Test/Entry')); + } }