Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
DiConfigFilesTest.php
Go to the documentation of this file.
1 <?php
7 
9 
13 class DiConfigFilesTest extends \PHPUnit\Framework\TestCase
14 {
19  protected static $_primaryFiles = [];
20 
25  protected static $_moduleGlobalFiles = [];
26 
31  protected static $_moduleAreaFiles = [];
32 
33  protected function _prepareFiles()
34  {
35  //init primary configs
38  $filesystem = $objectManager->get(\Magento\Framework\Filesystem::class);
39  $configDirectory = $filesystem->getDirectoryRead(DirectoryList::CONFIG);
40  $fileIteratorFactory = $objectManager->get(\Magento\Framework\Config\FileIteratorFactory::class);
41  $search = [];
42  foreach ($configDirectory->search('{*/di.xml,di.xml}') as $path) {
43  $search[] = $configDirectory->getAbsolutePath($path);
44  }
45  self::$_primaryFiles = $fileIteratorFactory->create($search);
46  //init module global configs
49  ->get(\Magento\Framework\Module\Dir\Reader::class);
50  self::$_moduleGlobalFiles = $modulesReader->getConfigurationFiles('di.xml');
51 
52  //init module area configs
53  $areas = ['adminhtml', 'frontend'];
54  foreach ($areas as $area) {
55  $moduleAreaFiles = $modulesReader->getConfigurationFiles($area . '/di.xml');
56  self::$_moduleAreaFiles[$area] = $moduleAreaFiles;
57  }
58  }
59 
66  public function testDiConfigFileWithoutMerging($filePath, $xml)
67  {
70  \Magento\Framework\ObjectManager\Config\SchemaLocator::class
71  );
72 
73  $dom = new \DOMDocument();
74  $dom->loadXML($xml);
75 
76  libxml_use_internal_errors(true);
77  $result = \Magento\Framework\Config\Dom::validateDomDocument($dom, $schemaLocator->getSchema());
78  libxml_use_internal_errors(false);
79 
80  if (!empty($result)) {
81  $this->fail(
82  'File ' . $filePath . ' has invalid xml structure. '
83  . implode("\n", $result)
84  );
85  }
86  }
87 
88  public function linearFilesProvider()
89  {
90  if (empty(self::$_primaryFiles)) {
91  $this->_prepareFiles();
92  }
93 
94  $common = array_merge(self::$_primaryFiles->toArray(), self::$_moduleGlobalFiles->toArray());
95 
96  foreach (self::$_moduleAreaFiles as $files) {
97  $common = array_merge($common, $files->toArray());
98  }
99 
100  $output = [];
101  foreach ($common as $path => $content) {
102  $output[] = [substr($path, strlen(BP)), $content];
103  }
104 
105  return $output;
106  }
107 
112  public function testMergedDiConfig(array $files)
113  {
114  $mapperMock = $this->createMock(\Magento\Framework\ObjectManager\Config\Mapper\Dom::class);
115  $fileResolverMock = $this->getMockBuilder(\Magento\Framework\Config\FileResolverInterface::class)
116  ->setMethods(['read'])
117  ->getMockForAbstractClass();
118  $fileResolverMock->expects($this->any())->method('read')->will($this->returnValue($files));
119  $validationStateMock = $this->createPartialMock(
120  \Magento\Framework\Config\ValidationStateInterface::class,
121  ['isValidationRequired']
122  );
123  $validationStateMock->expects($this->any())->method('isValidationRequired')->will($this->returnValue(true));
124 
127  \Magento\Framework\ObjectManager\Config\SchemaLocator::class
128  );
129 
130  new \Magento\Framework\ObjectManager\Config\Reader\Dom(
131  $fileResolverMock,
132  $mapperMock,
133  $schemaLocator,
134  $validationStateMock
135  );
136  }
137 
138  public function mixedFilesProvider()
139  {
140  if (empty(self::$_primaryFiles)) {
141  $this->_prepareFiles();
142  }
143  foreach (self::$_primaryFiles->toArray() as $file) {
144  $primaryFiles[] = [[$file]];
145  }
146  $primaryFiles['all primary config files'] = [self::$_primaryFiles->toArray()];
147 
148  foreach (self::$_moduleGlobalFiles->toArray() as $file) {
149  $moduleFiles[] = [[$file]];
150  }
151  $moduleFiles['all module global config files'] = [self::$_moduleGlobalFiles->toArray()];
152 
153  $areaFiles = [];
154  foreach (self::$_moduleAreaFiles as $area => $files) {
155  foreach ($files->toArray() as $file) {
156  $areaFiles[] = [[$file]];
157  }
158  $areaFiles["all {$area} config files"] = [self::$_moduleAreaFiles[$area]->toArray()];
159  }
160 
161  return $primaryFiles + $moduleFiles + $areaFiles;
162  }
163 }
$objectManager
Definition: bootstrap.php:17
static validateDomDocument(\DOMDocument $dom, $schema, $errorFormat=self::ERROR_FORMAT_DEFAULT)
Definition: Dom.php:301
const BP
Definition: autoload.php:14
$filesystem
foreach($appDirs as $dir) $files