ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
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 {
31 $ilias_ini_path = __DIR__ . "/../../../ilias.ini.php";
32
33 if (!is_file($ilias_ini_path)) {
34 return false;
35 }
36 require_once './Services/Init/classes/class.ilIniFile.php';
37 $ilias_ini = new ilIniFile($ilias_ini_path);
38 $ilias_ini->read();
39 $client_data_path = $ilias_ini->readVariable("server", "absolute_path") . "/" . $ilias_ini->readVariable("clients", "path");
40
41 if (!is_dir($client_data_path)) {
42 return false;
43 }
44
45 include_once($ilias_ini->readVariable("server", "absolute_path") . "/Services/PHPUnit/config/cfg.phpunit.php");
46
47 if (!isset($_GET["client_id"])) {
48 return false;
49 }
50
51 $phpunit_client = $_GET["client_id"];
52
53 if (!$phpunit_client) {
54 return false;
55 }
56
57 if (!is_file($client_data_path . "/" . $phpunit_client . "/client.ini.php")) {
58 return false;
59 }
60
61 return true;
62 }
63
64 public static function suite()
65 {
66 $suite = new ilGlobalSuite();
67 echo "ILIAS PHPUnit-Tests need installed dev-requirements, please install using 'composer install' in ./libs/composer \n";
68 echo "\n";
69
70 // scan Modules and Services directories
71 $basedirs = array("Services", "Modules");
72
73 foreach ($basedirs as $basedir) {
74 // read current directory
75 $dir = opendir($basedir);
76
77 while ($file = readdir($dir)) {
78 if ($file != "." && $file != ".." && is_dir($basedir . "/" . $file)) {
79 $suite_path =
80 $basedir . "/" . $file . "/test/il" . $basedir . $file . "Suite.php";
81 if (is_file($suite_path)) {
82 include_once($suite_path);
83
84 $name = "il" . $basedir . $file . "Suite";
85 $s = $name::suite();
86 echo "Adding Suite: " . $name . "\n";
87 $suite->addTest($s);
88 //$suite->addTestSuite("ilSettingTest");
89 }
90 }
91 }
92 }
93
95
96 echo "\n";
97
98 if (!$suite->hasInstalledILIAS()) {
99 echo "Removing tests requiring an installed ILIAS.\n";
100 $ff = new PHPUnit_Runner_Filter_Factory();
101 $ff->addFilter(
102 new ReflectionClass("PHPUnit_Runner_Filter_Group_Exclude"),
103 array(self::PHPUNIT_GROUP_FOR_TESTS_REQUIRING_INSTALLED_ILIAS)
104 );
105 $suite->injectFilter($ff);
106 } else {
107 echo "Found installed ILIAS, running all tests.\n";
108 }
109
110 return $suite;
111 }
112
119 protected static function addTestFolderToSuite(ilGlobalSuite $suite)
120 {
121 $test_directories = array("tests");
122 while ($aux_dir = current($test_directories)) {
123 if ($handle = opendir($aux_dir)) {
124 $aux_dir .= DIRECTORY_SEPARATOR;
125 while (false !== ($entry = readdir($handle))) {
126 if ($entry === '.' || $entry === '..') {
127 continue;
128 }
129 if (is_dir($aux_dir . $entry)) {
130 $test_directories[] = $aux_dir . $entry;
131 } else {
132 if (1 === preg_match(self::REGEX_TEST_FILENAME, $entry)) {
133 $ref_declared_classes = get_declared_classes();
134 require_once $aux_dir . "/" . $entry;
135 $new_declared_classes = array_diff(get_declared_classes(), $ref_declared_classes);
136 foreach ($new_declared_classes as $entry_class) {
137 $reflection = new ReflectionClass($entry_class);
138 if (!$reflection->isAbstract() && $reflection->isSubclassOf(self::PHP_UNIT_PARENT_CLASS)) {
139 echo "Adding Test-Suite: " . $entry_class . "\n";
140 $suite->addTestSuite($entry_class);
141 }
142 }
143 }
144 }
145 }
146 }
147 next($test_directories);
148 }
149 return $suite;
150 }
151}
$suite
$_GET["client_id"]
An exception for terminatinating execution or to throw for unit testing.
This is the global ILIAS test suite.
static suite()
const PHP_UNIT_PARENT_CLASS
static addTestFolderToSuite(ilGlobalSuite $suite)
Find and add all testSuits beneath ILIAS_ROOL/tests - folder.
const PHPUNIT_GROUP_FOR_TESTS_REQUIRING_INSTALLED_ILIAS
hasInstalledILIAS()
Check if there is an installed ILIAS to run tests on.
const REGEX_TEST_FILENAME
INIFile Parser.
$s
Definition: pwgen.php:45