/**
  * @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());
 }
Example #2
0
 /**
  * @covers \Magento\Framework\View\Layout\ScheduledStructure::flushScheduledStructure
  */
 public function testFlushScheduledStructure()
 {
     $this->assertNotEmpty($this->_model->getPaths());
     $this->assertNotEmpty($this->_model->getElements());
     $this->assertNotEmpty($this->_model->getStructure());
     $this->_model->flushScheduledStructure();
     $this->assertEmpty($this->_model->getPaths());
     $this->assertEmpty($this->_model->getElements());
     $this->assertEmpty($this->_model->getStructure());
 }
Example #3
0
 /**
  * Delete elements that have "acl" attribute but value is "not allowed"
  * In any case, the "acl" attribute will be unset
  *
  * @param ScheduledStructure $scheduledStructure
  * @param Structure $structure
  */
 public function filterAclElements(ScheduledStructure $scheduledStructure, Structure $structure)
 {
     foreach ($scheduledStructure->getElements() as $name => $data) {
         list(, $data) = $data;
         if (isset($data['attributes']['acl']) && $data['attributes']['acl']) {
             if (!$this->authorization->isAllowed($data['attributes']['acl'])) {
                 $this->removeElement($scheduledStructure, $structure, $name);
             }
         }
     }
 }
Example #4
0
 /**
  * Create structure of elements from the loaded XML configuration
  *
  * @return void
  * @SuppressWarnings(PHPMD.UnusedLocalVariable)
  */
 public function generateElements()
 {
     \Magento\Framework\Profiler::start(__CLASS__ . '::' . __METHOD__);
     \Magento\Framework\Profiler::start('build_structure');
     $this->_scheduledStructure->flushScheduledStructure();
     $this->_readStructure($this->getNode());
     $this->_addToOutputRootContainers($this->getNode());
     while (false === $this->_scheduledStructure->isStructureEmpty()) {
         $this->_scheduleElement(key($this->_scheduledStructure->getStructure()));
     }
     $this->_scheduledStructure->flushPaths();
     foreach ($this->_scheduledStructure->getListToMove() as $elementToMove) {
         $this->_moveElementInStructure($elementToMove);
     }
     foreach ($this->_scheduledStructure->getListToRemove() as $elementToRemove) {
         $this->_removeElement($elementToRemove);
     }
     \Magento\Framework\Profiler::stop('build_structure');
     \Magento\Framework\Profiler::start('generate_elements');
     while (false === $this->_scheduledStructure->isElementsEmpty()) {
         list($type, $node, $actions, $args, $attributes) = current($this->_scheduledStructure->getElements());
         $elementName = key($this->_scheduledStructure->getElements());
         if ($type == Element::TYPE_BLOCK) {
             $this->_generateBlock($elementName);
         } else {
             $this->_generateContainer($elementName, (string) $node[Element::CONTAINER_OPT_LABEL], $attributes);
             $this->_scheduledStructure->unsetElement($elementName);
         }
     }
     \Magento\Framework\Profiler::stop('generate_elements');
     \Magento\Framework\Profiler::stop(__CLASS__ . '::' . __METHOD__);
 }