/**
  * @param array $schedule
  * @param array $expectedSchedule
  * @return void
  * @dataProvider processDataProvider
  */
 public function testProcess($schedule, $expectedSchedule)
 {
     foreach ($schedule['structure'] as $structureElement) {
         $this->scheduledStructure->setStructureElement($structureElement, []);
     }
     $moveMap = [];
     foreach ($schedule['move'] as $elementName => $move) {
         $this->scheduledStructure->setElementToMove($elementName, $move);
         list($destination, $sibling, $isAfter) = $move;
         $moveMap[] = [$destination, $elementName, $sibling, $isAfter];
     }
     $invocation = $this->structureMock->expects($this->any())->method('reorderChildElement');
     call_user_func_array([$invocation, 'withConsecutive'], $moveMap);
     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 Data\Structure */
         $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
 /**
  * @covers \Magento\Framework\View\Layout\ScheduledStructure::setElementToMove
  */
 public function testSetElementToMove()
 {
     $data = ['some', 'new', 'data', 'element', 'to', 'move'];
     /** Test add new element */
     $this->assertFalse($this->_model->hasElement('new_element'));
     $this->_model->setElementToMove('new_element', $data);
     $this->assertEquals($data, $this->_model->getElementToMove('new_element'));
     /** Test override existing element */
     $this->assertNotEquals($data, $this->_model->getElementToMove('element1'));
     $this->_model->setElementToMove('element1', $data);
     $this->assertEquals($data, $this->_model->getElementToMove('element1'));
 }
Esempio n. 3
0
 /**
  * Schedule structural changes for move directive
  *
  * @param \Magento\Framework\View\Layout\ScheduledStructure $scheduledStructure
  * @param \Magento\Framework\View\Layout\Element $currentElement
  * @throws \Magento\Framework\Exception\LocalizedException
  * @return $this
  */
 protected function scheduleMove(Layout\ScheduledStructure $scheduledStructure, Layout\Element $currentElement)
 {
     $elementName = (string) $currentElement->getAttribute('element');
     $destination = (string) $currentElement->getAttribute('destination');
     $alias = (string) $currentElement->getAttribute('as') ?: '';
     if ($elementName && $destination) {
         list($siblingName, $isAfter) = $this->beforeAfterToSibling($currentElement);
         $scheduledStructure->setElementToMove($elementName, [$destination, $siblingName, $isAfter, $alias]);
     } else {
         throw new \Magento\Framework\Exception\LocalizedException(new \Magento\Framework\Phrase('Element name and destination must be specified.'));
     }
     return $this;
 }
Esempio n. 4
0
 /**
  * Schedule structural changes for move directive
  *
  * @param \Magento\Framework\View\Layout\Element $node
  * @throws \Magento\Framework\Exception
  * @return $this
  */
 protected function _scheduleMove($node)
 {
     $elementName = (string) $node->getAttribute('element');
     $destination = (string) $node->getAttribute('destination');
     $alias = (string) $node->getAttribute('as') ?: '';
     if ($elementName && $destination) {
         list($siblingName, $isAfter) = $this->_beforeAfterToSibling($node);
         $this->_scheduledStructure->setElementToMove($elementName, array($destination, $siblingName, $isAfter, $alias));
     } else {
         throw new \Magento\Framework\Exception('Element name and destination must be specified.');
     }
     return $this;
 }