/**
  * @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());
 }
Beispiel #2
0
    public function testGenerateElementsWithCache()
    {
        $layoutCacheId = 'layout_cache_id';
        /** @var \Magento\Framework\View\Layout\Element $xml */
        $xml = simplexml_load_string('<layout/>', 'Magento\Framework\View\Layout\Element');
        $this->model->setXml($xml);

        $themeMock = $this->getMockForAbstractClass('Magento\Framework\View\Design\ThemeInterface');
        $this->themeResolverMock->expects($this->once())
            ->method('get')
            ->willReturn($themeMock);
        $this->processorFactoryMock->expects($this->once())
            ->method('create')
            ->with(['theme' => $themeMock])
            ->willReturn($this->processorMock);

        $this->processorMock->expects($this->once())
            ->method('getCacheId')
            ->willReturn($layoutCacheId);

        $readerContextMock = $this->getMockBuilder('Magento\Framework\View\Layout\Reader\Context')
            ->disableOriginalConstructor()
            ->getMock();

        $this->cacheMock->expects($this->once())
            ->method('load')
            ->with('structure_' . $layoutCacheId)
            ->willReturn(serialize($readerContextMock));

        $this->readerPoolMock->expects($this->never())
            ->method('interpret');
        $this->cacheMock->expects($this->never())
            ->method('save');

        $generatorContextMock = $this->getMockBuilder('Magento\Framework\View\Layout\Generator\Context')
            ->disableOriginalConstructor()
            ->getMock();
        $this->generatorContextFactoryMock->expects($this->once())
            ->method('create')
            ->with(['structure' => $this->structureMock, 'layout' => $this->model])
            ->willReturn($generatorContextMock);

        $this->generatorPoolMock->expects($this->once())
            ->method('process')
            ->with($readerContextMock, $generatorContextMock)
            ->willReturn(true);

        $elements = [
            'name_1' => ['type' => '', 'parent' => null],
            'name_2' => ['type' => \Magento\Framework\View\Layout\Element::TYPE_CONTAINER, 'parent' => null],
            'name_3' => ['type' => '', 'parent' => 'parent'],
            'name_4' => ['type' => \Magento\Framework\View\Layout\Element::TYPE_CONTAINER, 'parent' => 'parent'],
        ];

        $this->structureMock->expects($this->once())
            ->method('exportElements')
            ->willReturn($elements);

        $this->model->generateElements();
    }
Beispiel #3
0
 /**
  * Insert container into layout structure
  *
  * @param string $name
  * @param string $label
  * @param array $options
  * @param string $parent
  * @param string $alias
  * @return void
  */
 public function addContainer($name, $label, array $options = [], $parent = '', $alias = '')
 {
     $this->build();
     $name = $this->structure->createStructuralElement($name, Element::TYPE_CONTAINER, $alias);
     $options[Layout\Element::CONTAINER_OPT_LABEL] = $label;
     /** @var \Magento\Framework\View\Layout\Generator\Container $containerGenerator */
     $containerGenerator = $this->generatorPool->getGenerator(Layout\Generator\Container::TYPE);
     $containerGenerator->generateContainer($this->structure, $name, $options);
     if ($parent) {
         $this->structure->setAsChild($name, $parent, $alias);
     }
 }
 /**
  * Build structure that is based on scheduled structure
  *
  * @param ScheduledStructure $scheduledStructure
  * @param Structure $structure
  * @return $this
  */
 protected function buildStructure(ScheduledStructure $scheduledStructure, Structure $structure)
 {
     parent::buildStructure($scheduledStructure, $structure);
     $this->aclFilter->filterAclElements($scheduledStructure, $structure);
     return $this;
 }