XmlFilesTest.php 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Test\Integrity\Theme;
  7. use Magento\Framework\Component\ComponentRegistrar;
  8. class XmlFilesTest extends \PHPUnit\Framework\TestCase
  9. {
  10. /**
  11. * @var \Magento\Framework\Config\ValidationStateInterface
  12. */
  13. protected $validationStateMock;
  14. public function setUp()
  15. {
  16. $this->validationStateMock = $this->createMock(\Magento\Framework\Config\ValidationStateInterface::class);
  17. $this->validationStateMock->method('isValidationRequired')
  18. ->willReturn(true);
  19. }
  20. /**
  21. * @param string $file
  22. * @dataProvider viewConfigFileDataProvider
  23. */
  24. public function testViewConfigFile($file)
  25. {
  26. $domConfig = new \Magento\Framework\Config\Dom(
  27. file_get_contents($file),
  28. $this->validationStateMock
  29. );
  30. $errors = [];
  31. $urnResolver = new \Magento\Framework\Config\Dom\UrnResolver();
  32. $result = $domConfig->validate(
  33. $urnResolver->getRealPath('urn:magento:framework:Config/etc/view.xsd'),
  34. $errors
  35. );
  36. $this->assertTrue($result, "Invalid XML-file: {$file}\n" . join("\n", $errors));
  37. }
  38. /**
  39. * @return array
  40. */
  41. public function viewConfigFileDataProvider()
  42. {
  43. $result = [];
  44. /** @var \Magento\Framework\Component\DirSearch $componentDirSearch */
  45. $componentDirSearch = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
  46. ->get(\Magento\Framework\Component\DirSearch::class);
  47. $files = $componentDirSearch->collectFiles(ComponentRegistrar::THEME, 'etc/view.xml');
  48. foreach ($files as $file) {
  49. $result[substr($file, strlen(BP))] = [$file];
  50. }
  51. return $result;
  52. }
  53. /**
  54. * @param string $themeDir
  55. * @dataProvider themeConfigFileExistsDataProvider
  56. */
  57. public function testThemeConfigFileExists($themeDir)
  58. {
  59. $this->assertFileExists($themeDir . '/theme.xml');
  60. }
  61. /**
  62. * @return array
  63. */
  64. public function themeConfigFileExistsDataProvider()
  65. {
  66. $result = [];
  67. /** @var \Magento\Framework\Component\ComponentRegistrar $componentRegistrar */
  68. $componentRegistrar = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
  69. ->get(\Magento\Framework\Component\ComponentRegistrar::class);
  70. foreach ($componentRegistrar->getPaths(ComponentRegistrar::THEME) as $themeDir) {
  71. $result[substr($themeDir, strlen(BP))] = [$themeDir];
  72. }
  73. return $result;
  74. }
  75. /**
  76. * @param string $file
  77. * @dataProvider themeConfigFileDataProvider
  78. */
  79. public function testThemeConfigFileSchema($file)
  80. {
  81. $domConfig = new \Magento\Framework\Config\Dom(file_get_contents($file), $this->validationStateMock);
  82. $errors = [];
  83. $result = $domConfig->validate('urn:magento:framework:Config/etc/theme.xsd', $errors);
  84. $this->assertTrue($result, "Invalid XML-file: {$file}\n" . join("\n", $errors));
  85. }
  86. /**
  87. * Configuration should declare a single package/theme that corresponds to the file system directories
  88. *
  89. * @param string $file
  90. * @dataProvider themeConfigFileDataProvider
  91. */
  92. public function testThemeConfigFileHasSingleTheme($file)
  93. {
  94. /** @var $configXml \SimpleXMLElement */
  95. $configXml = simplexml_load_file($file);
  96. $actualThemes = $configXml->xpath('/theme');
  97. $this->assertCount(1, $actualThemes, 'Single theme declaration is expected.');
  98. }
  99. /**
  100. * @return array
  101. */
  102. public function themeConfigFileDataProvider()
  103. {
  104. $result = [];
  105. /** @var \Magento\Framework\Component\DirSearch $componentDirSearch */
  106. $componentDirSearch = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
  107. ->get(\Magento\Framework\Component\DirSearch::class);
  108. $files = $componentDirSearch->collectFiles(ComponentRegistrar::THEME, 'theme.xml');
  109. foreach ($files as $file) {
  110. $result[substr($file, strlen(BP))] = [$file];
  111. }
  112. return $result;
  113. }
  114. }