Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
BlocksTest.php
Go to the documentation of this file.
1 <?php
9 
11 
12 class BlocksTest extends \PHPUnit\Framework\TestCase
13 {
17  protected static $_containerAliases = [];
18 
22  protected static $_blockAliases = [];
23 
27  public static function setUpBeforeClass()
28  {
29  foreach (Files::init()->getLayoutFiles([], false) as $file) {
30  $xml = simplexml_load_file($file);
31  $elements = $xml->xpath('/layout//*[self::container or self::block]') ?: [];
33  foreach ($elements as $node) {
34  $alias = (string)$node['as'];
35  if (empty($alias)) {
36  $alias = (string)$node['name'];
37  }
38  if ($node->getName() == 'container') {
39  self::$_containerAliases[$alias]['files'][] = $file;
40  self::$_containerAliases[$alias]['names'][] = (string)$node['name'];
41  } else {
42  self::$_blockAliases[$alias]['files'][] = $file;
43  self::$_blockAliases[$alias]['names'][] = (string)$node['name'];
44  }
45  }
46  }
47  }
48 
49  public function testBlocksNotContainers()
50  {
51  $invoker = new \Magento\Framework\App\Utility\AggregateInvoker($this);
52  $invoker(
60  function ($alias, $file) {
61  if (isset(self::$_containerAliases[$alias])) {
62  if (!isset(self::$_blockAliases[$alias])) {
63  $this->fail(
64  "Element with alias '{$alias}' is used as a block in file '{$file}' " .
65  "via getChildBlock() method," .
66  " while '{$alias}' alias is declared as a container in file(s): " .
67  join(
68  ', ',
69  self::$_containerAliases[$alias]['files']
70  )
71  );
72  } else {
73  $this->markTestIncomplete(
74  "Element with alias '{$alias}' is used as a block in file '{$file}' " .
75  "via getChildBlock() method." .
76  " It's impossible to determine explicitly whether the element is a block or a container, " .
77  "as it is declared as a container in file(s): " .
78  join(
79  ', ',
80  self::$_containerAliases[$alias]['files']
81  ) . " and as a block in file(s): " . join(
82  ', ',
83  self::$_blockAliases[$alias]['files']
84  )
85  );
86  }
87  }
88  },
90  );
91  }
92 
96  public function getChildBlockDataProvider()
97  {
98  $result = [];
99  $collectedFiles = Files::init()->getPhpFiles(
103  );
104  foreach ($collectedFiles as $file) {
106  file_get_contents($file),
107  '/\->getChildBlock\(\'([^\']+)\'\)/x'
108  );
109  foreach ($aliases as $alias) {
110  $result[$file] = [$alias, $file];
111  }
112  }
113  return $result;
114  }
115 }
static getAllMatches($contents, $regex, &$result=[])
Definition: Classes.php:29
if(!trim($html)) $alias
Definition: details.phtml:20