ILIAS  release_9 Revision v9.13-25-g2c18ec4c24f
ilModulesTestSuite.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
23 
24 require_once __DIR__ . "/ilTestBaseTestCase.php";
25 
27 {
28  public static function suite(): ilModulesTestSuite
29  {
30  if (!defined("ILIAS_HTTP_PATH")) {
31  define("ILIAS_HTTP_PATH", "http://localhost");
32  }
33 
34  if (!defined("ILIAS_LOG_ENABLED")) {
35  define("ILIAS_LOG_ENABLED", false);
36  }
37 
38  if (!defined("ROOT_FOLDER_ID")) {
39  define("ROOT_FOLDER_ID", 1);
40  }
41 
42  if (!defined("IL_INST_ID")) {
43  define("IL_INST_ID", 0);
44  }
45  if (!defined("CLIENT_DATA_DIR")) {
46  define("CLIENT_DATA_DIR", "/tmp");
47  }
48 
49  if (!defined("CLIENT_ID")) {
50  define("CLIENT_ID", 1);
51  }
52 
53  if (!defined('ANONYMOUS_USER_ID')) {
54  define('ANONYMOUS_USER_ID', 13);
55  }
56 
57  chdir(dirname(__FILE__));
58  chdir('../../../');
59 
60 
61  $suite = new ilModulesTestSuite();
62 
63  foreach (new RegExIterator(
65  new RecursiveDirectoryIterator(__DIR__, FilesystemIterator::SKIP_DOTS),
66  RecursiveIteratorIterator::LEAVES_ONLY
67  ),
68  '/BaseTest\.php$/'
69  ) as $file) {
71  require_once $file->getPathname();
72  }
73 
74  foreach (new RegExIterator(
76  new RecursiveDirectoryIterator(__DIR__, FilesystemIterator::SKIP_DOTS),
77  RecursiveIteratorIterator::LEAVES_ONLY
78  ),
79  '/(?<!Base)Test\.php$/'
80  ) as $file) {
82  require_once $file->getPathname();
83 
84  $className = preg_replace('/(.*?)(\.php)/', '$1', $file->getBasename());
85  if (!self::addClass($suite, $className)) {
86  $results = [];
87  if (preg_match('/^namespace ([[:alnum:]_\\\\]+);$/m', file_get_contents($file->getPathname()), $results)) {
88  self::addClass($suite, $results[1] . '\\' . $className);
89  }
90  }
91  }
92 
93  return $suite;
94  }
95 
96  private static function addClass(self $suite, string $className): bool
97  {
98  if (!class_exists($className)) {
99  return false;
100  }
101  $reflection = new ReflectionClass($className);
102  if (
103  !$reflection->isAbstract() &&
104  !$reflection->isInterface() &&
105  $reflection->isSubclassOf(TestCase::class)) {
106  $suite->addTestSuite($className);
107  }
108 
109  return true;
110  }
111 }
static addClass(self $suite, string $className)
$results