diff --git a/dev/tests/integration/testsuite/Magento/Framework/View/Layout/Reader/BlockTest.php b/dev/tests/integration/testsuite/Magento/Framework/View/Layout/Reader/BlockTest.php new file mode 100644 index 0000000000000..f6cd7b1b6afd9 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Framework/View/Layout/Reader/BlockTest.php @@ -0,0 +1,91 @@ +block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create( + 'Magento\Framework\View\Layout\Reader\Block' + ); + + $this->readerContext = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create( + 'Magento\Framework\View\Layout\Reader\Context' + ); + } + + public function testInterpretBlockDirective() + { + $pageXml = new \Magento\Framework\View\Layout\Element(__DIR__ . '/_files/_layout_update_block.xml', 0, true); + $parentElement = new \Magento\Framework\View\Layout\Element(''); + + foreach ($pageXml->xpath('body/block') as $blockElement) { + $this->assertTrue(in_array($blockElement->getName(), $this->block->getSupportedNodes())); + + $this->block->interpret($this->readerContext, $blockElement, $parentElement); + } + + $structure = $this->readerContext->getScheduledStructure(); + $this->assertArrayHasKey($this->blockName, $structure->getStructure()); + $this->assertEquals('block', $structure->getStructure()[$this->blockName][self::IDX_TYPE]); + + $resultElementData = $structure->getStructureElementData($this->blockName); + + $this->assertEquals( + ['group' => 'test.group', 'class' => 'Dummy\Class', 'template' => 'test.phtml', 'ttl' => 3], + $resultElementData['attributes'] + ); + $this->assertEquals( + ['test_arg' => ['name' => 'test_arg', 'xsi:type' => 'string', 'value' => 'test-argument-value']], + $resultElementData['arguments'] + ); + + $this->assertEquals('block', $structure->getStructure()[$this->childBlockName][self::IDX_TYPE]); + $this->assertEquals($this->blockName, $structure->getStructure()[$this->childBlockName][self::IDX_PARENT]); + } + + /** + * @depends testInterpretBlockDirective + */ + public function testInterpretReferenceBlockDirective() + { + $pageXml = new \Magento\Framework\View\Layout\Element( + __DIR__ . '/_files/_layout_update_reference.xml', 0, true + ); + $parentElement = new \Magento\Framework\View\Layout\Element(''); + + foreach ($pageXml->xpath('body/*') as $element) { + $this->assertTrue(in_array($element->getName(), $this->block->getSupportedNodes())); + + $this->block->interpret($this->readerContext, $element, $parentElement); + } + + $structure = $this->readerContext->getScheduledStructure(); + $this->assertArrayHasKey($this->blockName, $structure->getStructure()); + $this->assertEquals('block', $structure->getStructure()[$this->blockName][self::IDX_TYPE]); + + $resultElementData = $structure->getStructureElementData($this->blockName); + + $this->assertEquals( + ['test_arg' => ['name' => 'test_arg', 'xsi:type' => 'string', 'value' => 'test-argument-value']], + $resultElementData['arguments'] + ); + } +} diff --git a/dev/tests/integration/testsuite/Magento/Framework/View/Layout/Reader/_files/_layout_update_block.xml b/dev/tests/integration/testsuite/Magento/Framework/View/Layout/Reader/_files/_layout_update_block.xml new file mode 100644 index 0000000000000..0a3c9c962ca55 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Framework/View/Layout/Reader/_files/_layout_update_block.xml @@ -0,0 +1,16 @@ + + + + + + test-argument-value + + + + + diff --git a/dev/tests/integration/testsuite/Magento/Framework/View/Layout/Reader/_files/_layout_update_reference.xml b/dev/tests/integration/testsuite/Magento/Framework/View/Layout/Reader/_files/_layout_update_reference.xml new file mode 100644 index 0000000000000..36a01a41bffb5 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Framework/View/Layout/Reader/_files/_layout_update_reference.xml @@ -0,0 +1,12 @@ + + + + + + + test-argument-value + + + + diff --git a/lib/internal/Magento/Framework/View/Layout/Reader/Block.php b/lib/internal/Magento/Framework/View/Layout/Reader/Block.php index d63b4907945c1..213e47b9257d1 100644 --- a/lib/internal/Magento/Framework/View/Layout/Reader/Block.php +++ b/lib/internal/Magento/Framework/View/Layout/Reader/Block.php @@ -120,7 +120,8 @@ public function interpret(Context $readerContext, Layout\Element $currentElement default: break; } - return $this->readerPool->interpret($readerContext, $currentElement); + $this->readerPool->interpret($readerContext, $currentElement); + return $this; } /** @@ -173,7 +174,7 @@ protected function scheduleReference( * Update data for scheduled element * * @param Layout\Element $currentElement - * @param array $data + * @param array &$data * @return array */ protected function updateScheduledData($currentElement, array &$data)