12 use \Magento\Framework\View\Layout\GeneratorPool;
13 use \Magento\Framework\View\Layout\ScheduledStructure;
14 use \Magento\Framework\View\Layout\Data\Structure as DataStructure;
54 $this->readerContextMock = $this->getMockBuilder(\
Magento\Framework\
View\
Layout\Reader\Context::class)
55 ->disableOriginalConstructor()
58 $this->readerContextMock->expects($this->any())->method(
'getScheduledStructure')
59 ->willReturn($this->scheduledStructure);
62 $this->generatorContextMock = $this->getMockBuilder(\
Magento\Framework\
View\
Layout\Generator\Context::class)
63 ->disableOriginalConstructor()
66 ->disableOriginalConstructor()
67 ->setMethods([
'reorderChildElement'])
69 $this->generatorContextMock->expects($this->any())->method(
'getStructure')
70 ->willReturn($this->structureMock);
73 ->disableOriginalConstructor()
76 $helperObjectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
77 $this->model = $helperObjectManager->getObject(
80 'helper' => $this->helperMock,
91 $firstGenerator = $this->createMock(\
Magento\Framework\
View\
Layout\GeneratorInterface::class);
92 $firstGenerator->expects($this->any())->method(
'getType')->willReturn(
'first_generator');
93 $firstGenerator->expects($this->atLeastOnce())->method(
'process');
95 $secondGenerator = $this->createMock(\
Magento\Framework\
View\
Layout\GeneratorInterface::class);
96 $secondGenerator->expects($this->any())->method(
'getType')->willReturn(
'second_generator');
97 $secondGenerator->expects($this->atLeastOnce())->method(
'process');
98 return [$firstGenerator, $secondGenerator];
107 public function testProcess($schedule, $expectedSchedule)
109 foreach ($schedule[
'structure'] as $structureElement) {
110 $this->scheduledStructure->setStructureElement($structureElement, []);
115 list($parentName, $sibling, $isAfter) = $sort;
116 $this->scheduledStructure->setElementToSortList($parentName,
$elementName, $sibling, $isAfter);
117 $reorderMap[] = [$parentName,
$elementName, $sibling, $isAfter];
120 $this->scheduledStructure->setElementToMove(
$elementName, $move);
121 list($destination, $sibling, $isAfter) = $move;
122 $reorderMap[] = [$destination,
$elementName, $sibling, $isAfter];
124 $invocation = $this->structureMock->expects($this->any())->method(
'reorderChildElement');
125 call_user_func_array([$invocation,
'withConsecutive'], $reorderMap);
127 foreach ($schedule[
'remove'] as $remove) {
128 $this->scheduledStructure->setElementToRemoveList($remove);
131 $this->helperMock->expects($this->atLeastOnce())->method(
'scheduleElement')
132 ->with($this->scheduledStructure, $this->structureMock, $this->anything())
138 $this->assertContains(
$elementName, $schedule[
'structure']);
141 $structure->createStructuralElement(
$elementName,
'block',
'someClass');
144 $this->model->process($this->readerContextMock, $this->generatorContextMock);
145 $this->assertEquals($expectedSchedule, $this->scheduledStructure->getElements());
166 'third.element' => [
'second.element',
'sibling',
false,
'alias'],
168 'remove' => [
'remove.element'],
170 'sort.element' => [
'second.element',
'sibling',
false,
'alias'],
173 'expectedScheduledElements' => [
174 'first.element' => [
'block', []],
175 'second.element' => [
'block', []],
176 'third.element' => [
'block', []],
177 'sort.element' => [
'block', []],