/**
  *
  * @param \Magento\Framework\View\Layout\Element $element
  *
  * @dataProvider interpretDataProvider
  */
 public function testInterpret($element)
 {
     $scheduleStructure = $this->getMock('\\Magento\\Framework\\View\\Layout\\ScheduledStructure', [], [], '', false);
     $this->context->expects($this->any())->method('getScheduledStructure')->will($this->returnValue($scheduleStructure));
     $this->helper->expects($this->any())->method('scheduleStructure')->with($scheduleStructure, $element, $element->getParent())->willReturn($element->getAttribute('name'));
     $scheduleStructure->expects($this->once())->method('setStructureElementData')->with($element->getAttribute('name'), ['attributes' => ['group' => '', 'component' => 'listing']]);
     $scheduleStructure->expects($this->once())->method('setElementToIfconfigList')->with($element->getAttribute('name'), 'config_path', 'scope');
     $this->model->interpret($this->context, $element);
 }
Example #2
0
 /**
  * {@inheritdoc}
  *
  * @param Context $readerContext
  * @param Layout\Element $currentElement
  * @return $this
  */
 public function interpret(Context $readerContext, Layout\Element $currentElement)
 {
     $scheduledStructure = $readerContext->getScheduledStructure();
     $referenceName = $this->layoutHelper->scheduleStructure($readerContext->getScheduledStructure(), $currentElement, $currentElement->getParent(), ['attributes' => $this->getAttributes($currentElement)]);
     $scheduledStructure->setStructureElementData($referenceName, ['attributes' => $this->getAttributes($currentElement)]);
     $configPath = (string) $currentElement->getAttribute('ifconfig');
     if (!empty($configPath)) {
         $scheduledStructure->setElementToIfconfigList($referenceName, $configPath, $this->scopeType);
     }
     return $this;
 }
 /**
  * @param \Magento\Framework\View\Layout\Element $elementCurrent
  * @param string $containerName
  * @param array $structureElement
  * @param array $expectedData
  *
  * @dataProvider processDataProvider
  */
 public function testProcess($elementCurrent, $containerName, $structureElement, $expectedData)
 {
     /** @var ScheduledStructure|\PHPUnit_Framework_MockObject_MockObject $scheduledStructureMock */
     $scheduledStructureMock = $this->getMockBuilder('Magento\\Framework\\View\\Layout\\ScheduledStructure')->disableOriginalConstructor()->getMock();
     $scheduledStructureMock->expects($this->once())->method('getStructureElementData')->with($containerName)->willReturn($structureElement);
     $scheduledStructureMock->expects($this->once())->method('setStructureElementData')->with($containerName, $expectedData)->willReturnSelf();
     /** @var Context|\PHPUnit_Framework_MockObject_MockObject $contextMock */
     $contextMock = $this->getMockBuilder('Magento\\Framework\\View\\Layout\\Reader\\Context')->disableOriginalConstructor()->getMock();
     $contextMock->expects($this->any())->method('getScheduledStructure')->willReturn($scheduledStructureMock);
     $this->helperMock->method('scheduleStructure')->with($scheduledStructureMock, $elementCurrent);
     $this->readerPoolMock->expects($this->once())->method('interpret')->with($contextMock, $elementCurrent)->willReturnSelf();
     $this->container->interpret($contextMock, $elementCurrent);
 }
 /**
  * @param array $schedule
  * @param array $expectedSchedule
  * @return void
  * @dataProvider processDataProvider
  */
 public function testProcess($schedule, $expectedSchedule)
 {
     foreach ($schedule['structure'] as $structureElement) {
         $this->scheduledStructure->setStructureElement($structureElement, []);
     }
     $reorderMap = [];
     foreach ($schedule['sort'] as $elementName => $sort) {
         list($parentName, $sibling, $isAfter) = $sort;
         $this->scheduledStructure->setElementToSortList($parentName, $elementName, $sibling, $isAfter);
         $reorderMap[] = [$parentName, $elementName, $sibling, $isAfter];
     }
     foreach ($schedule['move'] as $elementName => $move) {
         $this->scheduledStructure->setElementToMove($elementName, $move);
         list($destination, $sibling, $isAfter) = $move;
         $reorderMap[] = [$destination, $elementName, $sibling, $isAfter];
     }
     $invocation = $this->structureMock->expects($this->any())->method('reorderChildElement');
     call_user_func_array([$invocation, 'withConsecutive'], $reorderMap);
     foreach ($schedule['remove'] as $remove) {
         $this->scheduledStructure->setElementToRemoveList($remove);
     }
     $this->helperMock->expects($this->atLeastOnce())->method('scheduleElement')->with($this->scheduledStructure, $this->structureMock, $this->anything())->willReturnCallback(function ($scheduledStructure, $structure, $elementName) use($schedule) {
         /**
          * @var $scheduledStructure ScheduledStructure
          * @var $structure DataStructure
          */
         $this->assertContains($elementName, $schedule['structure']);
         $scheduledStructure->unsetStructureElement($elementName);
         $scheduledStructure->setElement($elementName, []);
         $structure->createStructuralElement($elementName, 'block', 'someClass');
     });
     $this->model->process($this->readerContextMock, $this->generatorContextMock);
     $this->assertEquals($expectedSchedule, $this->scheduledStructure->getElements());
 }
 /**
  * {@inheritdoc}
  *
  * @param Context $readerContext
  * @param Layout\Element $currentElement
  * @param Layout\Element $parentElement
  * @return $this
  */
 public function interpret(Context $readerContext, Layout\Element $currentElement)
 {
     switch ($currentElement->getName()) {
         case self::TYPE_CONTAINER:
             $this->helper->scheduleStructure($readerContext->getScheduledStructure(), $currentElement, $currentElement->getParent());
             $this->mergeContainerAttributes($readerContext->getScheduledStructure(), $currentElement);
             break;
         case self::TYPE_REFERENCE_CONTAINER:
             $this->containerReference($readerContext->getScheduledStructure(), $currentElement);
             break;
         default:
             break;
     }
     $this->readerPool->interpret($readerContext, $currentElement);
     return $this;
 }
Example #6
0
 /**
  * Process block element their attributes and children
  *
  * @param Layout\ScheduledStructure $scheduledStructure
  * @param Layout\Element $currentElement
  * @return void
  */
 protected function scheduleBlock(Layout\ScheduledStructure $scheduledStructure, Layout\Element $currentElement)
 {
     $elementName = $this->helper->scheduleStructure($scheduledStructure, $currentElement, $currentElement->getParent());
     $data = $scheduledStructure->getStructureElementData($elementName, []);
     $data['attributes'] = $this->getAttributes($currentElement);
     $this->updateScheduledData($currentElement, $data);
     $this->evaluateArguments($currentElement, $data);
     $scheduledStructure->setStructureElementData($elementName, $data);
     $configPath = (string) $currentElement->getAttribute('ifconfig');
     if (!empty($configPath)) {
         $scheduledStructure->setElementToIfconfigList($elementName, $configPath, $this->scopeType);
     }
 }
Example #7
0
 /**
  * @param bool $hasParent
  * @param int $setAsChild
  * @param int $toRemoveList
  * @param string $siblingName
  * @param bool $isAfter
  * @param int $toSortList
  * @return void
  *
  * @dataProvider scheduleElementDataProvider
  */
 public function testScheduleElement($hasParent, $setAsChild, $toRemoveList, $siblingName, $isAfter, $toSortList)
 {
     $key = 'key';
     $parentName = 'parent';
     $alias = 'alias';
     $block = 'block';
     $data = ['data'];
     $this->scheduledStructureMock->expects($this->any())->method('getStructureElement')->willReturnMap([[$key, null, [Layout\ScheduledStructure\Helper::SCHEDULED_STRUCTURE_INDEX_TYPE => $block, Layout\ScheduledStructure\Helper::SCHEDULED_STRUCTURE_INDEX_ALIAS => $alias, Layout\ScheduledStructure\Helper::SCHEDULED_STRUCTURE_INDEX_PARENT_NAME => $parentName, Layout\ScheduledStructure\Helper::SCHEDULED_STRUCTURE_INDEX_SIBLING_NAME => $siblingName, Layout\ScheduledStructure\Helper::SCHEDULED_STRUCTURE_INDEX_IS_AFTER => $isAfter]], [$parentName, null, []]]);
     $this->scheduledStructureMock->expects($this->any())->method('getStructureElementData')->willReturnMap([[$key, null, $data], [$parentName, null, $data]]);
     $this->scheduledStructureMock->expects($this->any())->method('hasStructureElement')->willReturn(true);
     $this->scheduledStructureMock->expects($this->once())->method('setElement')->with($key, [$block, $data]);
     $this->dataStructureMock->expects($this->once())->method('createElement')->with($key, ['type' => $block]);
     $this->dataStructureMock->expects($this->once())->method('hasElement')->with($parentName)->willReturn($hasParent);
     $this->dataStructureMock->expects($this->exactly($setAsChild))->method('setAsChild')->with($key, $parentName, $alias)->willReturn(true);
     $this->scheduledStructureMock->expects($this->exactly($toRemoveList))->method('setElementToBrokenParentList')->with($key);
     $this->scheduledStructureMock->expects($this->exactly($toSortList))->method('setElementToSortList')->with($parentName, $key, $siblingName, $isAfter);
     $this->helper->scheduleElement($this->scheduledStructureMock, $this->dataStructureMock, $key);
 }