Skip to content

Commit 8689706

Browse files
committed
Add tests for View\Layout\Reader\Block and slight refactoring
The refactoring only matches the return type of the interpret() method to the return type of the Layout\ReaderInterface interface declaration.
1 parent e4b6347 commit 8689706

File tree

4 files changed

+122
-2
lines changed

4 files changed

+122
-2
lines changed
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
<?php
2+
3+
namespace Magento\Framework\View\Layout\Reader;
4+
5+
class BlockTest extends \PHPUnit_Framework_TestCase
6+
{
7+
const IDX_TYPE = 0;
8+
const IDX_PARENT = 2;
9+
10+
/**
11+
* @var Block
12+
*/
13+
private $block;
14+
15+
/**
16+
* @var Context
17+
*/
18+
private $readerContext;
19+
20+
private $blockName = 'test.block';
21+
private $childBlockName = 'test.child.block';
22+
23+
public function setUp()
24+
{
25+
$this->block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
26+
'Magento\Framework\View\Layout\Reader\Block'
27+
);
28+
29+
$this->readerContext = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
30+
'Magento\Framework\View\Layout\Reader\Context'
31+
);
32+
}
33+
34+
public function testInterpretBlockDirective()
35+
{
36+
$pageXml = new \Magento\Framework\View\Layout\Element(__DIR__ . '/_files/_layout_update_block.xml', 0, true);
37+
$parentElement = new \Magento\Framework\View\Layout\Element('<page></page>');
38+
39+
foreach ($pageXml->xpath('body/block') as $blockElement) {
40+
$this->assertTrue(in_array($blockElement->getName(), $this->block->getSupportedNodes()));
41+
42+
$this->block->interpret($this->readerContext, $blockElement, $parentElement);
43+
}
44+
45+
$structure = $this->readerContext->getScheduledStructure();
46+
$this->assertArrayHasKey($this->blockName, $structure->getStructure());
47+
$this->assertEquals('block', $structure->getStructure()[$this->blockName][self::IDX_TYPE]);
48+
49+
$resultElementData = $structure->getStructureElementData($this->blockName);
50+
51+
$this->assertEquals(
52+
['group' => 'test.group', 'class' => 'Dummy\Class', 'template' => 'test.phtml', 'ttl' => 3],
53+
$resultElementData['attributes']
54+
);
55+
$this->assertEquals(
56+
['test_arg' => ['name' => 'test_arg', 'xsi:type' => 'string', 'value' => 'test-argument-value']],
57+
$resultElementData['arguments']
58+
);
59+
60+
$this->assertEquals('block', $structure->getStructure()[$this->childBlockName][self::IDX_TYPE]);
61+
$this->assertEquals($this->blockName, $structure->getStructure()[$this->childBlockName][self::IDX_PARENT]);
62+
}
63+
64+
/**
65+
* @depends testInterpretBlockDirective
66+
*/
67+
public function testInterpretReferenceBlockDirective()
68+
{
69+
$pageXml = new \Magento\Framework\View\Layout\Element(
70+
__DIR__ . '/_files/_layout_update_reference.xml', 0, true
71+
);
72+
$parentElement = new \Magento\Framework\View\Layout\Element('<page></page>');
73+
74+
foreach ($pageXml->xpath('body/*') as $element) {
75+
$this->assertTrue(in_array($element->getName(), $this->block->getSupportedNodes()));
76+
77+
$this->block->interpret($this->readerContext, $element, $parentElement);
78+
}
79+
80+
$structure = $this->readerContext->getScheduledStructure();
81+
$this->assertArrayHasKey($this->blockName, $structure->getStructure());
82+
$this->assertEquals('block', $structure->getStructure()[$this->blockName][self::IDX_TYPE]);
83+
84+
$resultElementData = $structure->getStructureElementData($this->blockName);
85+
86+
$this->assertEquals(
87+
['test_arg' => ['name' => 'test_arg', 'xsi:type' => 'string', 'value' => 'test-argument-value']],
88+
$resultElementData['arguments']
89+
);
90+
}
91+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<?xml version="1.0"?>
2+
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3+
xsi:noNamespaceSchemaLocation="../../../../../../../../../../lib/internal/Magento/Framework/View/Layout/etc/page_configuration.xsd">
4+
<body>
5+
<block class="Dummy\Class"
6+
name="test.block"
7+
group="test.group"
8+
template="test.phtml"
9+
ttl="3">
10+
<arguments>
11+
<argument name="test_arg" xsi:type="string">test-argument-value</argument>
12+
</arguments>
13+
<block class="Dummy\Class" name="test.child.block"/>
14+
</block>
15+
</body>
16+
</page>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?xml version="1.0"?>
2+
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3+
xsi:noNamespaceSchemaLocation="../../../../../../../../../../lib/internal/Magento/Framework/View/Layout/etc/page_configuration.xsd">
4+
<body>
5+
<block class="Dummy\Class" name="test.block"/>
6+
<referenceBlock name="test.block">
7+
<arguments>
8+
<argument name="test_arg" xsi:type="string">test-argument-value</argument>
9+
</arguments>
10+
</referenceBlock>
11+
</body>
12+
</page>

lib/internal/Magento/Framework/View/Layout/Reader/Block.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,8 @@ public function interpret(Context $readerContext, Layout\Element $currentElement
120120
default:
121121
break;
122122
}
123-
return $this->readerPool->interpret($readerContext, $currentElement);
123+
$this->readerPool->interpret($readerContext, $currentElement);
124+
return $this;
124125
}
125126

126127
/**
@@ -173,7 +174,7 @@ protected function scheduleReference(
173174
* Update data for scheduled element
174175
*
175176
* @param Layout\Element $currentElement
176-
* @param array $data
177+
* @param array &$data
177178
* @return array
178179
*/
179180
protected function updateScheduledData($currentElement, array &$data)

0 commit comments

Comments
 (0)