/**
  * @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());
 }
Esempio n. 2
0
 /**
  * Schedule reference data
  *
  * @param Layout\ScheduledStructure $scheduledStructure
  * @param Layout\Element $currentElement
  * @return void
  */
 protected function scheduleReference(Layout\ScheduledStructure $scheduledStructure, Layout\Element $currentElement)
 {
     $elementName = $currentElement->getAttribute('name');
     $elementRemove = filter_var($currentElement->getAttribute('remove'), FILTER_VALIDATE_BOOLEAN);
     if ($elementRemove) {
         $scheduledStructure->setElementToRemoveList($elementName);
     } else {
         $data = $scheduledStructure->getStructureElementData($elementName, []);
         $data['attributes'] = $this->mergeBlockAttributes($data, $currentElement);
         $this->updateScheduledData($currentElement, $data);
         $this->evaluateArguments($currentElement, $data);
         $scheduledStructure->setStructureElementData($elementName, $data);
     }
 }
Esempio n. 3
0
 /**
  * Handling reference of container
  *
  * If attribute remove="true" then add the element to list remove,
  * else merge container attributes
  *
  * @param Layout\ScheduledStructure $scheduledStructure
  * @param Layout\Element $currentElement
  * @return void
  */
 protected function containerReference(Layout\ScheduledStructure $scheduledStructure, Layout\Element $currentElement)
 {
     $containerName = $currentElement->getAttribute('name');
     $containerRemove = filter_var($currentElement->getAttribute('remove'), FILTER_VALIDATE_BOOLEAN);
     if ($containerRemove) {
         $scheduledStructure->setElementToRemoveList($containerName);
     } else {
         $this->mergeContainerAttributes($scheduledStructure, $currentElement);
     }
 }
Esempio n. 4
0
 /**
  * @covers \Magento\Framework\View\Layout\ScheduledStructure::setElementToRemoveList
  */
 public function testSetElementToRemoveList()
 {
     $this->assertNotContains('element1', $this->_model->getListToRemove());
     $this->_model->setElementToRemoveList('element1');
     $this->assertContains('element1', $this->_model->getListToRemove());
 }
Esempio n. 5
0
 /**
  * Traverse through all elements of specified XML-node and schedule structural elements of it
  *
  * @param \Magento\Framework\View\Layout\Element $parent
  * @return void
  * @SuppressWarnings(PHPMD.CyclomaticComplexity)
  */
 protected function _readStructure($parent)
 {
     foreach ($parent as $node) {
         /** @var $node \Magento\Framework\View\Layout\Element */
         switch ($node->getName()) {
             case Element::TYPE_CONTAINER:
                 $this->_scheduleStructure($node, $parent);
                 $this->_mergeContainerAttributes($node);
                 $this->_readStructure($node);
                 break;
             case Element::TYPE_BLOCK:
                 $this->_scheduleStructure($node, $parent);
                 $this->_readStructure($node);
                 break;
             case Element::TYPE_REFERENCE_CONTAINER:
                 $this->_mergeContainerAttributes($node);
                 $this->_readStructure($node);
                 break;
             case Element::TYPE_REFERENCE_BLOCK:
                 $this->_readStructure($node);
                 break;
             case Element::TYPE_ACTION:
                 $referenceName = $parent->getAttribute('name');
                 $element = $this->_scheduledStructure->getStructureElement($referenceName, array());
                 $element['actions'][] = array($node, $parent);
                 $this->_scheduledStructure->setStructureElement($referenceName, $element);
                 break;
             case Element::TYPE_ARGUMENTS:
                 $referenceName = $parent->getAttribute('name');
                 $element = $this->_scheduledStructure->getStructureElement($referenceName, array());
                 $args = $this->_parseArguments($node);
                 $element['arguments'] = $this->_mergeArguments($element, $args);
                 $this->_scheduledStructure->setStructureElement($referenceName, $element);
                 break;
             case Element::TYPE_MOVE:
                 $this->_scheduleMove($node);
                 break;
             case Element::TYPE_REMOVE:
                 $this->_scheduledStructure->setElementToRemoveList((string) $node->getAttribute('name'));
                 break;
             default:
                 break;
         }
     }
 }