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)