ReadmeTest.php 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. /**
  7. * Test to ensure that readme file present in specified directories
  8. */
  9. namespace Magento\Test\Integrity\Readme;
  10. use Magento\Framework\App\Utility\Files;
  11. class ReadmeTest extends \PHPUnit\Framework\TestCase
  12. {
  13. const README_FILENAME = 'README.md';
  14. const BLACKLIST_FILES_PATTERN = '_files/blacklist/*.txt';
  15. const SCAN_LIST_FILE = '_files/scan_list.txt';
  16. /** @var array Blacklisted files and directories */
  17. private $blacklist = [];
  18. /** @var array */
  19. private $scanList = [];
  20. protected function setUp()
  21. {
  22. $this->blacklist = $this->getPaths(__DIR__ . '/' . self::BLACKLIST_FILES_PATTERN);
  23. $this->scanList = $this->getPaths(__DIR__ . '/' . self::SCAN_LIST_FILE);
  24. }
  25. public function testReadmeFiles()
  26. {
  27. $invoker = new \Magento\Framework\App\Utility\AggregateInvoker($this);
  28. $invoker(
  29. /**
  30. * @param string $dir
  31. */
  32. function ($dir) {
  33. $file = $dir . DIRECTORY_SEPARATOR . self::README_FILENAME;
  34. $this->assertFileExists(
  35. $file,
  36. sprintf('File %s not found in %s', self::README_FILENAME, $dir)
  37. );
  38. },
  39. $this->getDirectories()
  40. );
  41. }
  42. /**
  43. * @return array
  44. */
  45. private function getDirectories()
  46. {
  47. $directories = [];
  48. foreach ($this->scanList as $dir) {
  49. if (!$this->isInBlacklist($dir)) {
  50. $directories[][$dir] = $dir;
  51. }
  52. }
  53. return $directories;
  54. }
  55. /**
  56. * @param $path
  57. * @return bool
  58. */
  59. private function isInBlacklist($path)
  60. {
  61. return in_array($path, $this->blacklist);
  62. }
  63. /**
  64. * Get paths basing on the file with patterns
  65. *
  66. * @param string $patternsFile
  67. * @return array
  68. */
  69. private function getPaths($patternsFile)
  70. {
  71. $result = [];
  72. $files = Files::init()->readLists($patternsFile);
  73. foreach ($files as $file) {
  74. if (is_dir($file)) {
  75. $result[] = rtrim($file, '/');
  76. }
  77. }
  78. return $result;
  79. }
  80. }