From c111bfced9c9ddeae288b22a8ed55c3b2532d6c2 Mon Sep 17 00:00:00 2001 From: Timon de Groot Date: Tue, 24 Oct 2017 12:39:42 +0200 Subject: [PATCH 1/7] Fix error when generating urn catalog for empty misc.xml --- .../Model/XmlCatalog/Format/PhpStorm.php | 34 ++++++------- .../Format/PhpStorm/DomDocumentFactory.php | 49 +++++++++++++++++++ .../DomDocument/DomDocumentFactory.php | 27 +++++++++- 3 files changed, 89 insertions(+), 21 deletions(-) create mode 100644 app/code/Magento/Developer/Model/XmlCatalog/Format/PhpStorm/DomDocumentFactory.php diff --git a/app/code/Magento/Developer/Model/XmlCatalog/Format/PhpStorm.php b/app/code/Magento/Developer/Model/XmlCatalog/Format/PhpStorm.php index 30684b7177c99..54b7526b0d1a8 100644 --- a/app/code/Magento/Developer/Model/XmlCatalog/Format/PhpStorm.php +++ b/app/code/Magento/Developer/Model/XmlCatalog/Format/PhpStorm.php @@ -6,11 +6,11 @@ namespace Magento\Developer\Model\XmlCatalog\Format; +use Magento\Developer\Model\XmlCatalog\Format\PhpStorm\DomDocumentFactory; use Magento\Framework\Exception\FileSystemException; use Magento\Framework\Filesystem\Directory\ReadFactory; use Magento\Framework\Filesystem\Directory\ReadInterface; -use Magento\Framework\Filesystem\Directory\WriteFactory; -use Magento\Framework\Filesystem\Directory\WriteInterface; +use Magento\Framework\Filesystem\File\WriteFactory as FileWriteFactory; /** * Class PhpStorm generates URN catalog for PhpStorm 9 @@ -23,20 +23,28 @@ class PhpStorm implements FormatInterface private $currentDirRead; /** - * @var \Magento\Framework\Filesystem\File\WriteFactory + * @var FileWriteFactory */ private $fileWriteFactory; + /** + * @var DomDocumentFactory + */ + private $domDocumentFactory; + /** * @param ReadFactory $readFactory - * @param \Magento\Framework\Filesystem\File\WriteFactory $fileWriteFactory + * @param FileWriteFactory $fileWriteFactory + * @param DomDocumentFactory $domDocumentFactory */ public function __construct( ReadFactory $readFactory, - \Magento\Framework\Filesystem\File\WriteFactory $fileWriteFactory + FileWriteFactory $fileWriteFactory, + DomDocumentFactory $domDocumentFactory ) { $this->currentDirRead = $readFactory->create(getcwd()); $this->fileWriteFactory = $fileWriteFactory; + $this->domDocumentFactory = $domDocumentFactory; } /** @@ -57,26 +65,14 @@ public function generateCatalog(array $dictionary, $configFilePath) \Magento\Framework\Filesystem\DriverPool::FILE, 'r' ); - $dom = new \DOMDocument(); - $dom->loadXML($file->readAll()); + $dom = $this->domDocumentFactory->create($file->readAll()); $xpath = new \DOMXPath($dom); $nodeList = $xpath->query('/project'); $projectNode = $nodeList->item(0); $file->close(); } catch (FileSystemException $f) { //create file if does not exists - $dom = new \DOMDocument(); - $projectNode = $dom->createElement('project'); - - //PhpStorm 9 version for component is "4" - $projectNode->setAttribute('version', '4'); - $dom->appendChild($projectNode); - $rootComponentNode = $dom->createElement('component'); - - //PhpStorm 9 version for ProjectRootManager is "2" - $rootComponentNode->setAttribute('version', '2'); - $rootComponentNode->setAttribute('name', 'ProjectRootManager'); - $projectNode->appendChild($rootComponentNode); + $dom = $this->domDocumentFactory->create(); } $xpath = new \DOMXPath($dom); diff --git a/app/code/Magento/Developer/Model/XmlCatalog/Format/PhpStorm/DomDocumentFactory.php b/app/code/Magento/Developer/Model/XmlCatalog/Format/PhpStorm/DomDocumentFactory.php new file mode 100644 index 0000000000000..3a04b28db8332 --- /dev/null +++ b/app/code/Magento/Developer/Model/XmlCatalog/Format/PhpStorm/DomDocumentFactory.php @@ -0,0 +1,49 @@ +initializeDocument($dom); + } + + return $dom; + } + + /** + * Initialize document to be used as 'misc.xml' + * + * @param DOMDocument $document + * @return DOMDocument + */ + private function initializeDocument(DOMDocument $document) + { + $document->xmlVersion = '1.0'; + $projectNode = $document->createElement('project'); + + //PhpStorm 9 version for component is "4" + $projectNode->setAttribute('version', '4'); + $document->appendChild($projectNode); + $rootComponentNode = $document->createElement('component'); + + //PhpStorm 9 version for ProjectRootManager is "2" + $rootComponentNode->setAttribute('version', '2'); + $rootComponentNode->setAttribute('name', 'ProjectRootManager'); + $projectNode->appendChild($rootComponentNode); + + return $document; + } +} diff --git a/lib/internal/Magento/Framework/DomDocument/DomDocumentFactory.php b/lib/internal/Magento/Framework/DomDocument/DomDocumentFactory.php index 677e4d654e52c..1f365d6defdac 100644 --- a/lib/internal/Magento/Framework/DomDocument/DomDocumentFactory.php +++ b/lib/internal/Magento/Framework/DomDocument/DomDocumentFactory.php @@ -3,6 +3,7 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ + namespace Magento\Framework\DomDocument; /** @@ -10,13 +11,35 @@ */ class DomDocumentFactory { + /** + * @var \Magento\Framework\ObjectManagerInterface + */ + private $objectManager; + + /** + * DomDocumentFactory constructor. + * @param \Magento\Framework\ObjectManagerInterface $objectManager + */ + public function __construct(\Magento\Framework\ObjectManagerInterface $objectManager) + { + $this->objectManager = $objectManager; + } + /** * Create empty DOM document instance. * + * @param string $data the data to be loaded into the object + * * @return \DOMDocument */ - public function create() + public function create($data = null) { - return new \DOMDocument(); + $dom = $this->objectManager->create('DOMDocument'); + + if (!empty($data) && is_string($data)) { + $dom->loadXML($data); + } + + return $dom; } } From aa82c578ad14de3208564f8f7f4a9bf9d22ad34d Mon Sep 17 00:00:00 2001 From: Timon de Groot Date: Tue, 24 Oct 2017 14:00:05 +0200 Subject: [PATCH 2/7] Add unit test for \Magento\Framework\DomDocument\DomDocumentFactory --- .../DomDocument/DomDocumentFactory.php | 6 +- .../DomDocument/DomDocumentFactoryTest.php | 95 +++++++++++++++++++ 2 files changed, 99 insertions(+), 2 deletions(-) create mode 100644 lib/internal/Magento/Framework/Test/Unit/DomDocument/DomDocumentFactoryTest.php diff --git a/lib/internal/Magento/Framework/DomDocument/DomDocumentFactory.php b/lib/internal/Magento/Framework/DomDocument/DomDocumentFactory.php index 1f365d6defdac..91c1f91577cbc 100644 --- a/lib/internal/Magento/Framework/DomDocument/DomDocumentFactory.php +++ b/lib/internal/Magento/Framework/DomDocument/DomDocumentFactory.php @@ -6,6 +6,8 @@ namespace Magento\Framework\DomDocument; +use DOMDocument; + /** * DOM document factory */ @@ -30,11 +32,11 @@ public function __construct(\Magento\Framework\ObjectManagerInterface $objectMan * * @param string $data the data to be loaded into the object * - * @return \DOMDocument + * @return DOMDocument */ public function create($data = null) { - $dom = $this->objectManager->create('DOMDocument'); + $dom = $this->objectManager->create(DOMDocument::class); if (!empty($data) && is_string($data)) { $dom->loadXML($data); diff --git a/lib/internal/Magento/Framework/Test/Unit/DomDocument/DomDocumentFactoryTest.php b/lib/internal/Magento/Framework/Test/Unit/DomDocument/DomDocumentFactoryTest.php new file mode 100644 index 0000000000000..d04a9be97306a --- /dev/null +++ b/lib/internal/Magento/Framework/Test/Unit/DomDocument/DomDocumentFactoryTest.php @@ -0,0 +1,95 @@ + + + +EOT; + + /** + * {@inheritdoc} + */ + protected function setUp() + { + $this->objectManagerHelper = new ObjectManagerHelper($this); + $this->objectManagerMock = $this->createMock(ObjectManagerInterface::class); + $this->domDocumentMock = $this->createMock(DOMDocument::class); + $this->domDocumentFactory = $this->objectManagerHelper->getObject( + DomDocumentFactory::class, + [ + 'objectManager' => $this->objectManagerMock + ] + ); + } + + /** + * @dataProvider createDataProvider + */ + public function testCreate($data = null) + { + $this->objectManagerMock->expects($this->once()) + ->method('create') + ->with(DOMDocument::class) + ->willReturn($this->domDocumentMock); + + if (empty($data) || !is_string($data)) { + $this->domDocumentMock->expects($this->never()) + ->method('loadXML'); + } else { + $this->domDocumentMock->expects($this->once()) + ->method('loadXML') + ->with($data) + ->willReturn(true); + } + + $this->domDocumentFactory->create($data); + } + + /** + * @return array + */ + public function createDataProvider(): array + { + return [ + [null], + [''], + [$this->xmlSample] + ]; + } +} From 0cb5b0fb84267d193d999911e48cdcf89ffde2dc Mon Sep 17 00:00:00 2001 From: Timon de Groot Date: Sat, 11 Nov 2017 11:56:37 +0100 Subject: [PATCH 3/7] Add backwards compatibility to XmlCatalog PhpStorm changes --- .../Model/XmlCatalog/Format/PhpStorm.php | 13 ++++++------ .../Format/PhpStorm/DomDocumentFactory.php | 20 ++++++++++++++++--- .../DomDocument/DomDocumentFactory.php | 5 +++-- .../DomDocument/DomDocumentFactoryTest.php | 8 ++++---- 4 files changed, 31 insertions(+), 15 deletions(-) diff --git a/app/code/Magento/Developer/Model/XmlCatalog/Format/PhpStorm.php b/app/code/Magento/Developer/Model/XmlCatalog/Format/PhpStorm.php index 54b7526b0d1a8..669af0145b53c 100644 --- a/app/code/Magento/Developer/Model/XmlCatalog/Format/PhpStorm.php +++ b/app/code/Magento/Developer/Model/XmlCatalog/Format/PhpStorm.php @@ -7,10 +7,11 @@ namespace Magento\Developer\Model\XmlCatalog\Format; use Magento\Developer\Model\XmlCatalog\Format\PhpStorm\DomDocumentFactory; +use Magento\Framework\App\ObjectManager; use Magento\Framework\Exception\FileSystemException; use Magento\Framework\Filesystem\Directory\ReadFactory; use Magento\Framework\Filesystem\Directory\ReadInterface; -use Magento\Framework\Filesystem\File\WriteFactory as FileWriteFactory; +use Magento\Framework\Filesystem\File\WriteFactory; /** * Class PhpStorm generates URN catalog for PhpStorm 9 @@ -23,7 +24,7 @@ class PhpStorm implements FormatInterface private $currentDirRead; /** - * @var FileWriteFactory + * @var WriteFactory */ private $fileWriteFactory; @@ -34,17 +35,17 @@ class PhpStorm implements FormatInterface /** * @param ReadFactory $readFactory - * @param FileWriteFactory $fileWriteFactory + * @param WriteFactory $fileWriteFactory * @param DomDocumentFactory $domDocumentFactory */ public function __construct( ReadFactory $readFactory, - FileWriteFactory $fileWriteFactory, - DomDocumentFactory $domDocumentFactory + WriteFactory $fileWriteFactory, + DomDocumentFactory $domDocumentFactory = null ) { $this->currentDirRead = $readFactory->create(getcwd()); $this->fileWriteFactory = $fileWriteFactory; - $this->domDocumentFactory = $domDocumentFactory; + $this->domDocumentFactory = $domDocumentFactory ?: ObjectManager::getInstance()->get(DomDocumentFactory::class); } /** diff --git a/app/code/Magento/Developer/Model/XmlCatalog/Format/PhpStorm/DomDocumentFactory.php b/app/code/Magento/Developer/Model/XmlCatalog/Format/PhpStorm/DomDocumentFactory.php index 3a04b28db8332..3363f05ac4a3c 100644 --- a/app/code/Magento/Developer/Model/XmlCatalog/Format/PhpStorm/DomDocumentFactory.php +++ b/app/code/Magento/Developer/Model/XmlCatalog/Format/PhpStorm/DomDocumentFactory.php @@ -7,14 +7,28 @@ use DOMDocument; -class DomDocumentFactory extends \Magento\Framework\DomDocument\DomDocumentFactory +class DomDocumentFactory { + /** + * @var \Magento\Framework\DomDocument\DomDocumentFactory + */ + private $documentFactory; + + /** + * DomDocumentFactory constructor. + * @param \Magento\Framework\DomDocument\DomDocumentFactory $documentFactory + */ + public function __construct(\Magento\Framework\DomDocument\DomDocumentFactory $documentFactory) + { + $this->documentFactory = $documentFactory; + } + /** * {@inheritdoc} */ - public function create($data = null) + public function create(string $data = null) { - $dom = parent::create($data); + $dom = $this->documentFactory->create($data); if (empty($data)) { $this->initializeDocument($dom); diff --git a/lib/internal/Magento/Framework/DomDocument/DomDocumentFactory.php b/lib/internal/Magento/Framework/DomDocument/DomDocumentFactory.php index 91c1f91577cbc..d70b0d6071034 100644 --- a/lib/internal/Magento/Framework/DomDocument/DomDocumentFactory.php +++ b/lib/internal/Magento/Framework/DomDocument/DomDocumentFactory.php @@ -34,11 +34,12 @@ public function __construct(\Magento\Framework\ObjectManagerInterface $objectMan * * @return DOMDocument */ - public function create($data = null) + public function create(string $data = null) { + /** @var DOMDocument $dom */ $dom = $this->objectManager->create(DOMDocument::class); - if (!empty($data) && is_string($data)) { + if (!empty($data)) { $dom->loadXML($data); } diff --git a/lib/internal/Magento/Framework/Test/Unit/DomDocument/DomDocumentFactoryTest.php b/lib/internal/Magento/Framework/Test/Unit/DomDocument/DomDocumentFactoryTest.php index d04a9be97306a..c5590d5712d30 100644 --- a/lib/internal/Magento/Framework/Test/Unit/DomDocument/DomDocumentFactoryTest.php +++ b/lib/internal/Magento/Framework/Test/Unit/DomDocument/DomDocumentFactoryTest.php @@ -68,14 +68,14 @@ public function testCreate($data = null) ->with(DOMDocument::class) ->willReturn($this->domDocumentMock); - if (empty($data) || !is_string($data)) { - $this->domDocumentMock->expects($this->never()) - ->method('loadXML'); - } else { + if (!empty($data)) { $this->domDocumentMock->expects($this->once()) ->method('loadXML') ->with($data) ->willReturn(true); + } else { + $this->domDocumentMock->expects($this->never()) + ->method('loadXML'); } $this->domDocumentFactory->create($data); From ef188c165173328fa51b4a17eaa332fe076e57d3 Mon Sep 17 00:00:00 2001 From: David Manners Date: Wed, 20 Dec 2017 11:29:11 +0000 Subject: [PATCH 4/7] magento/magento2#5188: Revert the loading of xml from the factory back into the phpstorm specific file --- .../Model/XmlCatalog/Format/PhpStorm.php | 31 +++++++++++++++++-- .../DomDocument/DomDocumentFactory.php | 31 ++----------------- 2 files changed, 32 insertions(+), 30 deletions(-) diff --git a/app/code/Magento/Developer/Model/XmlCatalog/Format/PhpStorm.php b/app/code/Magento/Developer/Model/XmlCatalog/Format/PhpStorm.php index 669af0145b53c..c56dc3dea7765 100644 --- a/app/code/Magento/Developer/Model/XmlCatalog/Format/PhpStorm.php +++ b/app/code/Magento/Developer/Model/XmlCatalog/Format/PhpStorm.php @@ -6,8 +6,8 @@ namespace Magento\Developer\Model\XmlCatalog\Format; -use Magento\Developer\Model\XmlCatalog\Format\PhpStorm\DomDocumentFactory; use Magento\Framework\App\ObjectManager; +use Magento\Framework\DomDocument\DomDocumentFactory; use Magento\Framework\Exception\FileSystemException; use Magento\Framework\Filesystem\Directory\ReadFactory; use Magento\Framework\Filesystem\Directory\ReadInterface; @@ -66,7 +66,23 @@ public function generateCatalog(array $dictionary, $configFilePath) \Magento\Framework\Filesystem\DriverPool::FILE, 'r' ); - $dom = $this->domDocumentFactory->create($file->readAll()); + $dom = $this->domDocumentFactory->create(); + $fileContent = $file->readAll(); + if (!empty($fileContent)) { + $dom->loadXML($fileContent); + } else { + $projectNode = $dom->createElement('project'); + + //PhpStorm 9 version for component is "4" + $projectNode->setAttribute('version', '4'); + $dom->appendChild($projectNode); + $rootComponentNode = $dom->createElement('component'); + + //PhpStorm 9 version for ProjectRootManager is "2" + $rootComponentNode->setAttribute('version', '2'); + $rootComponentNode->setAttribute('name', 'ProjectRootManager'); + $projectNode->appendChild($rootComponentNode); + } $xpath = new \DOMXPath($dom); $nodeList = $xpath->query('/project'); $projectNode = $nodeList->item(0); @@ -74,6 +90,17 @@ public function generateCatalog(array $dictionary, $configFilePath) } catch (FileSystemException $f) { //create file if does not exists $dom = $this->domDocumentFactory->create(); + $projectNode = $dom->createElement('project'); + + //PhpStorm 9 version for component is "4" + $projectNode->setAttribute('version', '4'); + $dom->appendChild($projectNode); + $rootComponentNode = $dom->createElement('component'); + + //PhpStorm 9 version for ProjectRootManager is "2" + $rootComponentNode->setAttribute('version', '2'); + $rootComponentNode->setAttribute('name', 'ProjectRootManager'); + $projectNode->appendChild($rootComponentNode); } $xpath = new \DOMXPath($dom); diff --git a/lib/internal/Magento/Framework/DomDocument/DomDocumentFactory.php b/lib/internal/Magento/Framework/DomDocument/DomDocumentFactory.php index d70b0d6071034..d2e16700bc904 100644 --- a/lib/internal/Magento/Framework/DomDocument/DomDocumentFactory.php +++ b/lib/internal/Magento/Framework/DomDocument/DomDocumentFactory.php @@ -6,43 +6,18 @@ namespace Magento\Framework\DomDocument; -use DOMDocument; - /** * DOM document factory */ class DomDocumentFactory { - /** - * @var \Magento\Framework\ObjectManagerInterface - */ - private $objectManager; - - /** - * DomDocumentFactory constructor. - * @param \Magento\Framework\ObjectManagerInterface $objectManager - */ - public function __construct(\Magento\Framework\ObjectManagerInterface $objectManager) - { - $this->objectManager = $objectManager; - } - /** * Create empty DOM document instance. * - * @param string $data the data to be loaded into the object - * - * @return DOMDocument + * @return \DOMDocument */ - public function create(string $data = null) + public function create() { - /** @var DOMDocument $dom */ - $dom = $this->objectManager->create(DOMDocument::class); - - if (!empty($data)) { - $dom->loadXML($data); - } - - return $dom; + return new \DOMDocument(); } } From 7118f2d5537aa2854215a9f0fee85a467de7af93 Mon Sep 17 00:00:00 2001 From: David Manners Date: Wed, 20 Dec 2017 11:33:15 +0000 Subject: [PATCH 5/7] magento/magento2#5188: Refactor the basic file setup into it's own method --- .../Model/XmlCatalog/Format/PhpStorm.php | 46 ++++++++++--------- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/app/code/Magento/Developer/Model/XmlCatalog/Format/PhpStorm.php b/app/code/Magento/Developer/Model/XmlCatalog/Format/PhpStorm.php index c56dc3dea7765..1ced906cce763 100644 --- a/app/code/Magento/Developer/Model/XmlCatalog/Format/PhpStorm.php +++ b/app/code/Magento/Developer/Model/XmlCatalog/Format/PhpStorm.php @@ -71,17 +71,7 @@ public function generateCatalog(array $dictionary, $configFilePath) if (!empty($fileContent)) { $dom->loadXML($fileContent); } else { - $projectNode = $dom->createElement('project'); - - //PhpStorm 9 version for component is "4" - $projectNode->setAttribute('version', '4'); - $dom->appendChild($projectNode); - $rootComponentNode = $dom->createElement('component'); - - //PhpStorm 9 version for ProjectRootManager is "2" - $rootComponentNode->setAttribute('version', '2'); - $rootComponentNode->setAttribute('name', 'ProjectRootManager'); - $projectNode->appendChild($rootComponentNode); + $this->initEmptyFile($dom); } $xpath = new \DOMXPath($dom); $nodeList = $xpath->query('/project'); @@ -90,17 +80,7 @@ public function generateCatalog(array $dictionary, $configFilePath) } catch (FileSystemException $f) { //create file if does not exists $dom = $this->domDocumentFactory->create(); - $projectNode = $dom->createElement('project'); - - //PhpStorm 9 version for component is "4" - $projectNode->setAttribute('version', '4'); - $dom->appendChild($projectNode); - $rootComponentNode = $dom->createElement('component'); - - //PhpStorm 9 version for ProjectRootManager is "2" - $rootComponentNode->setAttribute('version', '2'); - $rootComponentNode->setAttribute('name', 'ProjectRootManager'); - $projectNode->appendChild($rootComponentNode); + $projectNode = $this->initEmptyFile($dom); } $xpath = new \DOMXPath($dom); @@ -127,4 +107,26 @@ public function generateCatalog(array $dictionary, $configFilePath) $file->write($dom->saveXML()); $file->close(); } + + /** + * Setup basic empty dom elements + * + * @param \DOMDocument $dom + * @return \DOMElement + */ + private function initEmptyFile(\DOMDocument $dom) + { + $projectNode = $dom->createElement('project'); + + //PhpStorm 9 version for component is "4" + $projectNode->setAttribute('version', '4'); + $dom->appendChild($projectNode); + $rootComponentNode = $dom->createElement('component'); + + //PhpStorm 9 version for ProjectRootManager is "2" + $rootComponentNode->setAttribute('version', '2'); + $rootComponentNode->setAttribute('name', 'ProjectRootManager'); + $projectNode->appendChild($rootComponentNode); + return $projectNode; + } } From 42417f3a0f432a7b92321b87beae962679ad3566 Mon Sep 17 00:00:00 2001 From: David Manners Date: Wed, 20 Dec 2017 11:36:54 +0000 Subject: [PATCH 6/7] magento/magento2#5188: Remove the no longer needed xml catalog domfactory class --- .../Format/PhpStorm/DomDocumentFactory.php | 63 ------------------- 1 file changed, 63 deletions(-) delete mode 100644 app/code/Magento/Developer/Model/XmlCatalog/Format/PhpStorm/DomDocumentFactory.php diff --git a/app/code/Magento/Developer/Model/XmlCatalog/Format/PhpStorm/DomDocumentFactory.php b/app/code/Magento/Developer/Model/XmlCatalog/Format/PhpStorm/DomDocumentFactory.php deleted file mode 100644 index 3363f05ac4a3c..0000000000000 --- a/app/code/Magento/Developer/Model/XmlCatalog/Format/PhpStorm/DomDocumentFactory.php +++ /dev/null @@ -1,63 +0,0 @@ -documentFactory = $documentFactory; - } - - /** - * {@inheritdoc} - */ - public function create(string $data = null) - { - $dom = $this->documentFactory->create($data); - - if (empty($data)) { - $this->initializeDocument($dom); - } - - return $dom; - } - - /** - * Initialize document to be used as 'misc.xml' - * - * @param DOMDocument $document - * @return DOMDocument - */ - private function initializeDocument(DOMDocument $document) - { - $document->xmlVersion = '1.0'; - $projectNode = $document->createElement('project'); - - //PhpStorm 9 version for component is "4" - $projectNode->setAttribute('version', '4'); - $document->appendChild($projectNode); - $rootComponentNode = $document->createElement('component'); - - //PhpStorm 9 version for ProjectRootManager is "2" - $rootComponentNode->setAttribute('version', '2'); - $rootComponentNode->setAttribute('name', 'ProjectRootManager'); - $projectNode->appendChild($rootComponentNode); - - return $document; - } -} From dcacdbc50ef952f2544e28762746c68d453dec7e Mon Sep 17 00:00:00 2001 From: David Manners Date: Wed, 20 Dec 2017 11:39:31 +0000 Subject: [PATCH 7/7] magento/magento2#5188: Update DomDocumentFactoryTest to check that create returns the expected type of object --- .../DomDocument/DomDocumentFactoryTest.php | 84 ++----------------- 1 file changed, 5 insertions(+), 79 deletions(-) diff --git a/lib/internal/Magento/Framework/Test/Unit/DomDocument/DomDocumentFactoryTest.php b/lib/internal/Magento/Framework/Test/Unit/DomDocument/DomDocumentFactoryTest.php index c5590d5712d30..e3ea74339e043 100644 --- a/lib/internal/Magento/Framework/Test/Unit/DomDocument/DomDocumentFactoryTest.php +++ b/lib/internal/Magento/Framework/Test/Unit/DomDocument/DomDocumentFactoryTest.php @@ -6,90 +6,16 @@ namespace Magento\Framework\Test\Unit\DomDocument; -use DOMDocument; use Magento\Framework\DomDocument\DomDocumentFactory; -use Magento\Framework\ObjectManagerInterface; -use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper; class DomDocumentFactoryTest extends \PHPUnit\Framework\TestCase { - /** - * @var ObjectManagerHelper - */ - private $objectManagerHelper; - - /** - * @var ObjectManagerInterface|\PHPUnit_Framework_MockObject_MockObject - */ - private $objectManagerMock; - - /** - * @var DOMDocument|\PHPUnit_Framework_MockObject_MockObject - */ - private $domDocumentMock; - - /** - * @var DomDocumentFactory - */ - private $domDocumentFactory; - - /** - * @var string - */ - private $xmlSample = << - - -EOT; - - /** - * {@inheritdoc} - */ - protected function setUp() + public function testCreateReturnsDomDocument() { - $this->objectManagerHelper = new ObjectManagerHelper($this); - $this->objectManagerMock = $this->createMock(ObjectManagerInterface::class); - $this->domDocumentMock = $this->createMock(DOMDocument::class); - $this->domDocumentFactory = $this->objectManagerHelper->getObject( - DomDocumentFactory::class, - [ - 'objectManager' => $this->objectManagerMock - ] + $domDocumentFactory = new DomDocumentFactory(); + $this->assertInstanceOf( + \DOMDocument::class, + $domDocumentFactory->create() ); } - - /** - * @dataProvider createDataProvider - */ - public function testCreate($data = null) - { - $this->objectManagerMock->expects($this->once()) - ->method('create') - ->with(DOMDocument::class) - ->willReturn($this->domDocumentMock); - - if (!empty($data)) { - $this->domDocumentMock->expects($this->once()) - ->method('loadXML') - ->with($data) - ->willReturn(true); - } else { - $this->domDocumentMock->expects($this->never()) - ->method('loadXML'); - } - - $this->domDocumentFactory->create($data); - } - - /** - * @return array - */ - public function createDataProvider(): array - { - return [ - [null], - [''], - [$this->xmlSample] - ]; - } }