BuilderTest.php 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Framework\View\Test\Unit\Layout;
  7. use Magento\Framework\App\Request\Http;
  8. use Magento\Framework\Event\ManagerInterface;
  9. use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
  10. use Magento\Framework\View\Layout;
  11. use Magento\Framework\View\Layout\ProcessorInterface;
  12. /**
  13. * Class BuilderTest
  14. * @covers \Magento\Framework\View\Layout\Builder
  15. */
  16. class BuilderTest extends \PHPUnit\Framework\TestCase
  17. {
  18. const CLASS_NAME = \Magento\Framework\View\Layout\Builder::class;
  19. /**
  20. * @covers \Magento\Framework\View\Layout\Builder::build()
  21. */
  22. public function testBuild()
  23. {
  24. $fullActionName = 'route_controller_action';
  25. /** @var Http|\PHPUnit_Framework_MockObject_MockObject */
  26. $request = $this->createMock(\Magento\Framework\App\Request\Http::class);
  27. $request->expects($this->exactly(3))->method('getFullActionName')->will($this->returnValue($fullActionName));
  28. /** @var ProcessorInterface|\PHPUnit_Framework_MockObject_MockObject $processor */
  29. $processor = $this->createMock(\Magento\Framework\View\Layout\ProcessorInterface::class);
  30. $processor->expects($this->once())->method('load');
  31. /** @var Layout|\PHPUnit_Framework_MockObject_MockObject */
  32. $layout = $this->createPartialMock(
  33. \Magento\Framework\View\Layout::class,
  34. $this->getLayoutMockMethods()
  35. );
  36. $layout->expects($this->atLeastOnce())->method('getUpdate')->will($this->returnValue($processor));
  37. $layout->expects($this->atLeastOnce())->method('generateXml')->will($this->returnValue($processor));
  38. $layout->expects($this->atLeastOnce())->method('generateElements')->will($this->returnValue($processor));
  39. $data = ['full_action_name' => $fullActionName, 'layout' => $layout];
  40. /** @var ManagerInterface|\PHPUnit_Framework_MockObject_MockObject $eventManager */
  41. $eventManager = $this->createMock(\Magento\Framework\Event\ManagerInterface::class);
  42. $eventManager->expects($this->at(0))->method('dispatch')->with('layout_load_before', $data);
  43. $eventManager->expects($this->at(1))->method('dispatch')->with('layout_generate_blocks_before', $data);
  44. $eventManager->expects($this->at(2))->method('dispatch')->with('layout_generate_blocks_after', $data);
  45. $builder = $this->getBuilder(['eventManager' => $eventManager, 'request' => $request, 'layout' => $layout]);
  46. $builder->build();
  47. }
  48. /**
  49. * @return array
  50. */
  51. protected function getLayoutMockMethods()
  52. {
  53. return ['setBuilder', 'getUpdate', 'generateXml', 'generateElements'];
  54. }
  55. /**
  56. * @param array $arguments
  57. * @return \Magento\Framework\View\Layout\Builder
  58. */
  59. protected function getBuilder($arguments)
  60. {
  61. return (new ObjectManager($this))->getObject(static::CLASS_NAME, $arguments);
  62. }
  63. }