diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Test/Config/ActionGroupDomTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Test/Config/ActionGroupDomTest.php index 8d0bc19ca..5d1dd7878 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/Test/Config/ActionGroupDomTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Test/Config/ActionGroupDomTest.php @@ -6,6 +6,7 @@ namespace Tests\unit\Magento\FunctionalTestFramework\Test\Config; use Magento\FunctionalTestingFramework\Exceptions\Collector\ExceptionCollector; +use Magento\FunctionalTestingFramework\Config\Dom\ValidationException; use Magento\FunctionalTestingFramework\Test\Config\ActionGroupDom; use Magento\FunctionalTestingFramework\Util\MagentoTestCase; @@ -29,4 +30,21 @@ public function testActionGroupDomStepKeyValidation() $this->expectException(\Exception::class); $exceptionCollector->throwException(); } + + /** + * Test Action Group invalid XML + */ + public function testActionGroupDomInvalidXmlValidation() + { + $sampleXml = " + + + + "; + + $exceptionCollector = new ExceptionCollector(); + $this->expectException(ValidationException::class); + $this->expectExceptionMessage("XML Parse Error: invalid.xml\n"); + new ActionGroupDom($sampleXml, 'invalid.xml', $exceptionCollector); + } } diff --git a/src/Magento/FunctionalTestingFramework/Config/Dom.php b/src/Magento/FunctionalTestingFramework/Config/Dom.php index 1305574cc..566fbd5b3 100644 --- a/src/Magento/FunctionalTestingFramework/Config/Dom.php +++ b/src/Magento/FunctionalTestingFramework/Config/Dom.php @@ -6,6 +6,8 @@ namespace Magento\FunctionalTestingFramework\Config; +use Magento\FunctionalTestingFramework\Config\Dom\ValidationException; + /** * Magento configuration XML DOM utility */ @@ -354,13 +356,21 @@ public function getDom() * Create DOM document based on $xml parameter * * @param string $xml + * @param string $filename * @return \DOMDocument * @throws \Magento\FunctionalTestingFramework\Config\Dom\ValidationException */ - protected function initDom($xml) + protected function initDom($xml, $filename = null) { $dom = new \DOMDocument(); - $dom->loadXML($xml); + try { + $domSuccess = $dom->loadXML($xml); + if (!$domSuccess) { + throw new \Exception(); + } + } catch (\Exception $exception) { + throw new ValidationException("XML Parse Error: $filename\n"); + } if ($this->schemaFile) { $errors = self::validateDomDocument($dom, $this->schemaFile, $this->errorFormat); if (count($errors)) { diff --git a/src/Magento/FunctionalTestingFramework/DataGenerator/Config/Dom.php b/src/Magento/FunctionalTestingFramework/DataGenerator/Config/Dom.php index 1da3e9c0e..abef7390a 100644 --- a/src/Magento/FunctionalTestingFramework/DataGenerator/Config/Dom.php +++ b/src/Magento/FunctionalTestingFramework/DataGenerator/Config/Dom.php @@ -65,7 +65,7 @@ public function __construct( */ public function initDom($xml, $filename = null) { - $dom = parent::initDom($xml); + $dom = parent::initDom($xml, $filename); if (strpos($filename, self::DATA_FILE_NAME_ENDING)) { $entityNodes = $dom->getElementsByTagName('entity'); diff --git a/src/Magento/FunctionalTestingFramework/DataGenerator/Config/OperationDom.php b/src/Magento/FunctionalTestingFramework/DataGenerator/Config/OperationDom.php index f4617c61e..98694ea47 100644 --- a/src/Magento/FunctionalTestingFramework/DataGenerator/Config/OperationDom.php +++ b/src/Magento/FunctionalTestingFramework/DataGenerator/Config/OperationDom.php @@ -65,7 +65,7 @@ public function __construct( */ public function initDom($xml, $filename = null) { - $dom = parent::initDom($xml); + $dom = parent::initDom($xml, $filename); if (strpos($filename, self::METADATA_FILE_NAME_ENDING)) { $operationNodes = $dom->getElementsByTagName('operation'); diff --git a/src/Magento/FunctionalTestingFramework/Page/Config/Dom.php b/src/Magento/FunctionalTestingFramework/Page/Config/Dom.php index 0226a286a..0d8739636 100644 --- a/src/Magento/FunctionalTestingFramework/Page/Config/Dom.php +++ b/src/Magento/FunctionalTestingFramework/Page/Config/Dom.php @@ -76,7 +76,7 @@ public function __construct( */ public function initDom($xml, $filename = null) { - $dom = parent::initDom($xml); + $dom = parent::initDom($xml, $filename); $pagesNode = $dom->getElementsByTagName('pages')->item(0); $this->validationUtil->validateChildUniqueness($pagesNode, $filename); diff --git a/src/Magento/FunctionalTestingFramework/Page/Config/SectionDom.php b/src/Magento/FunctionalTestingFramework/Page/Config/SectionDom.php index 7115adb34..c3476e7dd 100644 --- a/src/Magento/FunctionalTestingFramework/Page/Config/SectionDom.php +++ b/src/Magento/FunctionalTestingFramework/Page/Config/SectionDom.php @@ -67,7 +67,7 @@ public function __construct( */ public function initDom($xml, $filename = null) { - $dom = parent::initDom($xml); + $dom = parent::initDom($xml, $filename); $sectionNodes = $dom->getElementsByTagName('section'); foreach ($sectionNodes as $sectionNode) { $sectionNode->setAttribute(self::SECTION_META_FILENAME_ATTRIBUTE, $filename); diff --git a/src/Magento/FunctionalTestingFramework/Test/Config/ActionGroupDom.php b/src/Magento/FunctionalTestingFramework/Test/Config/ActionGroupDom.php index ab8bc66f5..36f7a4384 100644 --- a/src/Magento/FunctionalTestingFramework/Test/Config/ActionGroupDom.php +++ b/src/Magento/FunctionalTestingFramework/Test/Config/ActionGroupDom.php @@ -26,7 +26,7 @@ class ActionGroupDom extends Dom */ public function initDom($xml, $filename = null) { - $dom = parent::initDom($xml); + $dom = parent::initDom($xml, $filename); if (strpos($filename, self::ACTION_GROUP_FILE_NAME_ENDING)) { $actionGroupNodes = $dom->getElementsByTagName('actionGroup'); diff --git a/src/Magento/FunctionalTestingFramework/Test/Config/Dom.php b/src/Magento/FunctionalTestingFramework/Test/Config/Dom.php index ae301b5b1..828586b3c 100644 --- a/src/Magento/FunctionalTestingFramework/Test/Config/Dom.php +++ b/src/Magento/FunctionalTestingFramework/Test/Config/Dom.php @@ -79,7 +79,7 @@ public function __construct( */ public function initDom($xml, $filename = null) { - $dom = parent::initDom($xml); + $dom = parent::initDom($xml, $filename); if (strpos($filename, self::TEST_FILE_NAME_ENDING)) { $testNodes = $dom->getElementsByTagName('test');