ILIAS  release_5-2 Revision v5.2.25-18-g3f80b828510
ilGlobalSuite.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (c) 1998-2009 ILIAS open source, Extended GPL, see docs/LICENSE */
3 
15 {
20  const REGEX_TEST_FILENAME = "#[a-zA-Z]+Test\.php#";
21  const PHP_UNIT_PARENT_CLASS = "PHPUnit_Framework_TestCase";
22 
29  public function hasInstalledILIAS() {
30  $ilias_ini_path = __DIR__."/../../../ilias.ini.php";
31 
32  if(!is_file($ilias_ini_path)) {
33  return false;
34  }
35  require_once './Services/Init/classes/class.ilIniFile.php';
36  $ilias_ini = new ilIniFile($ilias_ini_path);
37  $ilias_ini->read();
38  $client_data_path = $ilias_ini->readVariable("server", "absolute_path")."/".$ilias_ini->readVariable("clients", "path");
39 
40  if(!is_dir($client_data_path)) {
41  return false;
42  }
43 
44  include_once($ilias_ini->readVariable("server", "absolute_path")."/Services/PHPUnit/config/cfg.phpunit.php");
45 
46  if(!isset($_GET["client_id"])) {
47  return false;
48  }
49 
50  $phpunit_client = $_GET["client_id"];
51 
52  if(!$phpunit_client) {
53  return false;
54  }
55 
56  if(!is_file($client_data_path."/".$phpunit_client."/client.ini.php")) {
57  return false;
58  }
59 
60  return true;
61  }
62 
63  public static function suite()
64  {
65  $suite = new ilGlobalSuite();
66  echo "ILIAS PHPUnit-Tests need installed dev-requirements, please install using 'composer install' in ./libs/composer \n";
67  echo "\n";
68 
69  // scan Modules and Services directories
70  $basedirs = array("Services", "Modules");
71 
72  foreach ($basedirs as $basedir)
73  {
74  // read current directory
75  $dir = opendir($basedir);
76 
77  while($file = readdir($dir))
78  {
79  if ($file != "." && $file != ".." && is_dir($basedir."/".$file))
80  {
81  $suite_path =
82  $basedir."/".$file."/test/il".$basedir.$file."Suite.php";
83  if (is_file($suite_path))
84  {
85  include_once($suite_path);
86 
87  $name = "il".$basedir.$file."Suite";
88  $s = $name::suite();
89  echo "Adding Suite: ".$name."\n";
90  $suite->addTest($s);
91  //$suite->addTestSuite("ilSettingTest");
92  }
93  }
94  }
95  }
96 
97  $suite = self::addTestFolderToSuite($suite);
98 
99  echo "\n";
100 
101  if (!$suite->hasInstalledILIAS()) {
102  echo "Removing tests requiring an installed ILIAS.\n";
103  $ff = new PHPUnit_Runner_Filter_Factory();
104  $ff->addFilter
105  ( new ReflectionClass("PHPUnit_Runner_Filter_Group_Exclude")
106  , array(self::PHPUNIT_GROUP_FOR_TESTS_REQUIRING_INSTALLED_ILIAS)
107  );
108  $suite->injectFilter($ff);
109  }
110  else {
111  echo "Found installed ILIAS, running all tests.\n";
112  }
113 
114  return $suite;
115  }
116 
123  protected static function addTestFolderToSuite(ilGlobalSuite $suite) {
124  $test_directories = array("tests");
125  while($aux_dir = current($test_directories)) {
126  if($handle = opendir($aux_dir)) {
127  $aux_dir .= DIRECTORY_SEPARATOR;
128  while (false !== ($entry = readdir($handle))) {
129  if($entry === '.' || $entry === '..') {
130  continue;
131  }
132  if(is_dir($aux_dir.$entry)) {
133  $test_directories[] = $aux_dir.$entry;
134  } else {
135  if(1 === preg_match(self::REGEX_TEST_FILENAME, $entry)) {
136  $ref_declared_classes = get_declared_classes();
137  require_once $aux_dir."/".$entry;
138  $new_declared_classes = array_diff(get_declared_classes(),$ref_declared_classes );
139  foreach ($new_declared_classes as $entry_class) {
140  $reflection = new ReflectionClass($entry_class);
141  if(!$reflection->isAbstract() && $reflection->isSubclassOf(self::PHP_UNIT_PARENT_CLASS)) {
142  echo "Adding Test-Suite: ".$entry_class."\n";
143  $suite->addTestSuite($entry_class);
144  }
145  }
146  }
147  }
148  }
149  }
150  next($test_directories);
151  }
152  return $suite;
153  }
154 }
$suite
const PHPUNIT_GROUP_FOR_TESTS_REQUIRING_INSTALLED_ILIAS
$_GET["client_id"]
const PHP_UNIT_PARENT_CLASS
hasInstalledILIAS()
Check if there is an installed ILIAS to run tests on.
This is the global ILIAS test suite.
const REGEX_TEST_FILENAME
Create styles array
The data for the language used.
static suite()
static addTestFolderToSuite(ilGlobalSuite $suite)
Find and add all testSuits beneath ILIAS_ROOL/tests - folder.
if(!file_exists("$old.txt")) if($old===$new) if(file_exists("$new.txt")) $file
INIFile Parser.