diff --git a/admin/tool/phpunit/cli/init.bat b/admin/tool/phpunit/cli/init.bat deleted file mode 100644 index d57029f72f3..00000000000 --- a/admin/tool/phpunit/cli/init.bat +++ /dev/null @@ -1,22 +0,0 @@ -@ECHO OFF -ECHO Initialising Moodle PHPUnit test environment... - -CALL php %~dp0\util.php --diag > NUL 2>&1 - -IF ERRORLEVEL 133 GOTO drop -IF ERRORLEVEL 132 GOTO install -IF ERRORLEVEL 1 GOTO unknown -GOTO done - -:drop -CALL php %~dp0\util.php --drop -IF ERRORLEVEL 1 GOTO done - -:install -CALL php %~dp0\util.php --install -GOTO done - -:unknown -CALL php %~dp0\util.php --diag - -:done diff --git a/admin/tool/phpunit/cli/init.php b/admin/tool/phpunit/cli/init.php index f091a9f8d36..ca00d564934 100644 --- a/admin/tool/phpunit/cli/init.php +++ b/admin/tool/phpunit/cli/init.php @@ -43,13 +43,13 @@ exec("php util.php --diag", $output, $code); if ($code == 0) { // everything is ready -} else if ($code == 132) { +} else if ($code == PHPUNIT_EXITCODE_INSTALL) { passthru("php util.php --install", $code); if ($code != 0) { exit($code); } -} else if ($code == 133) { +} else if ($code == PHPUNIT_EXITCODE_REINSTALL) { passthru("php util.php --drop", $code); passthru("php util.php --install", $code); if ($code != 0) { diff --git a/admin/tool/phpunit/cli/init.sh b/admin/tool/phpunit/cli/init.sh deleted file mode 100755 index b3616ee722c..00000000000 --- a/admin/tool/phpunit/cli/init.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/bash - -SOURCE="${BASH_SOURCE[0]}" -while [ -h "$SOURCE" ] ; do SOURCE="$(readlink "$SOURCE")"; done -CLIDIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )" - -UTIL="$CLIDIR/util.php" - -echo "Initialising Moodle PHPUnit test environment..." - -DIGERROR=`php $UTIL --diag` -DIAG=$? -if [ $DIAG -eq 132 ] ; then - php $UTIL --install -else - if [ $DIAG -eq 133 ] ; then - php $UTIL --drop - RESULT=$? - if [ $RESULT -gt 0 ] ; then - exit $RESULT - fi - php $UTIL --install - else - if [ $DIAG -gt 0 ] ; then - echo $DIGERROR - exit $DIAG - fi - fi -fi - -php $UTIL --buildconfig diff --git a/admin/tool/phpunit/cli/util.php b/admin/tool/phpunit/cli/util.php index 0ab46c012d9..2c92b0615ef 100644 --- a/admin/tool/phpunit/cli/util.php +++ b/admin/tool/phpunit/cli/util.php @@ -17,14 +17,7 @@ /** * PHPUnit related utilities. * - * Exit codes: - * 0 - success - * 1 - general error - * 130 - missing PHPUnit library error - * 131 - configuration problem - * 132 - install new test database - * 133 - drop existing data before installing - * 134 - can not create main phpunit.xml + * Exit codes: {@see phpunit_bootstrap_error()} * * @package tool_phpunit * @copyright 2012 Petr Skoda {@link http://skodak.org} @@ -73,11 +66,7 @@ if ($options['phpunitdir']) { // verify PHPUnit libs are loaded if (!@include_once('PHPUnit/Autoload.php')) { - phpunit_bootstrap_error(130); -} - -if (!@include_once('PHPUnit/Extensions/Database/Autoload.php')) { - phpunit_bootstrap_error(130); + phpunit_bootstrap_error(PHPUNIT_EXITCODE_PHPUNITMISSING); } if ($options['run']) { @@ -147,7 +136,7 @@ if ($diag) { if (phpunit_util::build_config_file()) { exit(0); } else { - phpunit_bootstrap_error(134); + phpunit_bootstrap_error(PHPUNIT_EXITCODE_CONFIGWARNING, 'Can not create phpunit.xml configuration file, verify dirroot permissions'); } } else if ($drop) { diff --git a/admin/tool/phpunit/webrunner.php b/admin/tool/phpunit/webrunner.php index ef5168534d3..f697f7ee085 100644 --- a/admin/tool/phpunit/webrunner.php +++ b/admin/tool/phpunit/webrunner.php @@ -67,7 +67,7 @@ if ($execute) { if ($code == 0) { // everything is ready - } else if ($code == 132) { + } else if ($code == PHPUNIT_EXITCODE_INSTALL) { tool_phpunit_header(); echo $OUTPUT->box_start('generalbox'); echo '
';
@@ -87,7 +87,7 @@ if ($execute) {
echo $OUTPUT->footer();
die();
- } else if ($code == 133) {
+ } else if ($code == PHPUNIT_EXITCODE_REINSTALL) {
tool_phpunit_header();
echo $OUTPUT->box_start('generalbox');
echo '';
diff --git a/lib/phpunit/bootstrap.php b/lib/phpunit/bootstrap.php
index f6ac22f4bb9..e9a046caad7 100644
--- a/lib/phpunit/bootstrap.php
+++ b/lib/phpunit/bootstrap.php
@@ -18,13 +18,7 @@
* Prepares PHPUnit environment, the phpunit.xml configuration
* must specify this file as bootstrap.
*
- * Exit codes:
- * 0 - success
- * 1 - general error
- * 130 - missing PHPUnit library error
- * 131 - configuration problem
- * 132 - install new test database
- * 133 - drop existing data before installing
+ * Exit codes: {@see phpunit_bootstrap_error()}
*
* @package core
* @category phpunit
@@ -63,10 +57,14 @@ $phpunitversion = PHPUnit_Runner_Version::id();
if ($phpunitversion === '@package_version@') {
// library checked out from git, let's hope dev knows that 3.6.0 is required
} else if (version_compare($phpunitversion, '3.6.0', 'lt')) {
- phpunit_bootstrap_error(129, $phpunitversion);
+ phpunit_bootstrap_error(PHPUNIT_EXITCODE_PHPUNITWRONG, $phpunitversion);
}
unset($phpunitversion);
+if (!@include_once('PHPUnit/Extensions/Database/Autoload.php')) {
+ phpunit_bootstrap_error(PHPUNIT_EXITCODE_PHPUNITEXTMISSING, 'phpunit/DbUnit');
+}
+
define('NO_OUTPUT_BUFFERING', true);
// only load CFG from config.php, stop ASAP in lib/setup.php
@@ -93,16 +91,16 @@ if (isset($CFG->phpunit_directorypermissions)) {
}
$CFG->filepermissions = ($CFG->directorypermissions & 0666);
if (!isset($CFG->phpunit_dataroot)) {
- phpunit_bootstrap_error(131, 'Missing $CFG->phpunit_dataroot in config.php, can not run tests!');
+ phpunit_bootstrap_error(PHPUNIT_EXITCODE_CONFIGERROR, 'Missing $CFG->phpunit_dataroot in config.php, can not run tests!');
}
if (isset($CFG->dataroot) and $CFG->phpunit_dataroot === $CFG->dataroot) {
- phpunit_bootstrap_error(131, '$CFG->dataroot and $CFG->phpunit_dataroot must not be identical, can not run tests!');
+ phpunit_bootstrap_error(PHPUNIT_EXITCODE_CONFIGERROR, '$CFG->dataroot and $CFG->phpunit_dataroot must not be identical, can not run tests!');
}
if (!file_exists($CFG->phpunit_dataroot)) {
mkdir($CFG->phpunit_dataroot, $CFG->directorypermissions);
}
if (!is_dir($CFG->phpunit_dataroot)) {
- phpunit_bootstrap_error(131, '$CFG->phpunit_dataroot directory can not be created, can not run tests!');
+ phpunit_bootstrap_error(PHPUNIT_EXITCODE_CONFIGERROR, '$CFG->phpunit_dataroot directory can not be created, can not run tests!');
}
if (!is_writable($CFG->phpunit_dataroot)) {
@@ -115,7 +113,7 @@ if (!is_writable($CFG->phpunit_dataroot)) {
}
}
if (!is_writable($CFG->phpunit_dataroot)) {
- phpunit_bootstrap_error(131, '$CFG->phpunit_dataroot directory is not writable, can not run tests!');
+ phpunit_bootstrap_error(PHPUNIT_EXITCODE_CONFIGERROR, '$CFG->phpunit_dataroot directory is not writable, can not run tests!');
}
}
if (!file_exists("$CFG->phpunit_dataroot/phpunittestdir.txt")) {
@@ -124,7 +122,7 @@ if (!file_exists("$CFG->phpunit_dataroot/phpunittestdir.txt")) {
if ($file === 'phpunit' or $file === '.' or $file === '..' or $file === '.DS_Store') {
continue;
}
- phpunit_bootstrap_error(131, '$CFG->phpunit_dataroot directory is not empty, can not run tests! Is it used for anything else?');
+ phpunit_bootstrap_error(PHPUNIT_EXITCODE_CONFIGERROR, '$CFG->phpunit_dataroot directory is not empty, can not run tests! Is it used for anything else?');
}
closedir($dh);
unset($dh);
@@ -137,13 +135,13 @@ if (!file_exists("$CFG->phpunit_dataroot/phpunittestdir.txt")) {
// verify db prefix
if (!isset($CFG->phpunit_prefix)) {
- phpunit_bootstrap_error(131, 'Missing $CFG->phpunit_prefix in config.php, can not run tests!');
+ phpunit_bootstrap_error(PHPUNIT_EXITCODE_CONFIGERROR, 'Missing $CFG->phpunit_prefix in config.php, can not run tests!');
}
if ($CFG->phpunit_prefix === '') {
- phpunit_bootstrap_error(131, '$CFG->phpunit_prefix can not be empty, can not run tests!');
+ phpunit_bootstrap_error(PHPUNIT_EXITCODE_CONFIGERROR, '$CFG->phpunit_prefix can not be empty, can not run tests!');
}
if (isset($CFG->prefix) and $CFG->prefix === $CFG->phpunit_prefix) {
- phpunit_bootstrap_error(131, '$CFG->prefix and $CFG->phpunit_prefix must not be identical, can not run tests!');
+ phpunit_bootstrap_error(PHPUNIT_EXITCODE_CONFIGERROR, '$CFG->prefix and $CFG->phpunit_prefix must not be identical, can not run tests!');
}
// override CFG settings if necessary and throw away extra CFG settings
diff --git a/lib/phpunit/bootstraplib.php b/lib/phpunit/bootstraplib.php
index d87c23f2898..3c191dc5370 100644
--- a/lib/phpunit/bootstraplib.php
+++ b/lib/phpunit/bootstraplib.php
@@ -25,6 +25,14 @@
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
+define('PHPUNIT_EXITCODE_PHPUNITMISSING', 129);
+define('PHPUNIT_EXITCODE_PHPUNITWRONG', 130);
+define('PHPUNIT_EXITCODE_PHPUNITEXTMISSING', 131);
+define('PHPUNIT_EXITCODE_CONFIGERROR', 135);
+define('PHPUNIT_EXITCODE_CONFIGWARNING', 136);
+define('PHPUNIT_EXITCODE_INSTALL', 140);
+define('PHPUNIT_EXITCODE_REINSTALL', 141);
+
/**
* Print error and stop execution
* @param int $errorcode The exit error code
@@ -39,35 +47,35 @@ function phpunit_bootstrap_error($errorcode, $text = '') {
case 1:
$text = 'Error: '.$text;
break;
- case 129:
+ case PHPUNIT_EXITCODE_PHPUNITMISSING:
+ $text = "Moodle can not find PHPUnit PEAR library";
+ break;
+ case PHPUNIT_EXITCODE_PHPUNITWRONG:
$text = 'Moodle requires PHPUnit 3.6.x, '.$text.' is not compatible';
break;
- case 130:
- $text = 'Moodle can not find PHPUnit PEAR library or necessary PHPUnit extension';
+ case PHPUNIT_EXITCODE_PHPUNITEXTMISSING:
+ $text = 'Moodle can not find required PHPUnit extension '.$text;
break;
- case 131:
- $text = 'Moodle configuration problem: '.$text;
+ case PHPUNIT_EXITCODE_CONFIGERROR:
+ $text = "Moodle PHPUnit environment configuration error:\n".$text;
break;
- case 132:
- $text = "Moodle PHPUnit environment is not initialised, please use:\n php admin/tool/phpunit/cli/util.php --install";
+ case PHPUNIT_EXITCODE_CONFIGWARNING:
+ $text = "Moodle PHPUnit environment configuration warning:\n".$text;
break;
- case 133:
- $text = "Moodle PHPUnit environment was initialised for different version, please use:\n php admin/tool/phpunit/cli/util.php --drop\n php admin/tool/phpunit/cli/util.php --install";
+ case PHPUNIT_EXITCODE_INSTALL:
+ $text = "Moodle PHPUnit environment is not initialised, please use:\n php admin/tool/phpunit/cli/init.php";
break;
- case 134:
- $text = 'Moodle can not create PHPUnit configuration file, please verify dirroot permissions';
+ case PHPUNIT_EXITCODE_REINSTALL:
+ $text = "Moodle PHPUnit environment was initialised for different version, please use:\n php admin/tool/phpunit/cli/init.php";
break;
default:
$text = empty($text) ? '' : ': '.$text;
$text = 'Unknown error '.$errorcode.$text;
break;
}
- if (defined('PHPUNIT_UTIL') and PHPUNIT_UTIL) {
- // do not write to error stream because we need the error message in PHP exec result from web ui
- echo($text."\n");
- } else {
- fwrite(STDERR, $text."\n");
- }
+
+ // do not write to error stream because we need the error message in PHP exec result from web ui
+ echo($text."\n");
exit($errorcode);
}
diff --git a/lib/phpunit/lib.php b/lib/phpunit/lib.php
index 56277ab0c14..4b00c004b8a 100644
--- a/lib/phpunit/lib.php
+++ b/lib/phpunit/lib.php
@@ -640,31 +640,31 @@ class phpunit_util {
if (!self::is_test_site()) {
// dataroot was verified in bootstrap, so it must be DB
- return array(131, 'Can not use database for testing, try different prefix');
+ return array(PHPUNIT_EXITCODE_CONFIGERROR, 'Can not use database for testing, try different prefix');
}
if (empty($tables)) {
- return array(132, '');
+ return array(PHPUNIT_EXITCODE_INSTALL, '');
}
if (!file_exists("$CFG->dataroot/phpunit/tabledata.ser") or !file_exists("$CFG->dataroot/phpunit/tablestructure.ser")) {
- return array(133, '');
+ return array(PHPUNIT_EXITCODE_REINSTALL, '');
}
if (!file_exists("$CFG->dataroot/phpunit/versionshash.txt")) {
- return array(133, '');
+ return array(PHPUNIT_EXITCODE_REINSTALL, '');
}
$hash = phpunit_util::get_version_hash();
$oldhash = file_get_contents("$CFG->dataroot/phpunit/versionshash.txt");
if ($hash !== $oldhash) {
- return array(133, '');
+ return array(PHPUNIT_EXITCODE_REINSTALL, '');
}
$dbhash = get_config('core', 'phpunittest');
if ($hash !== $dbhash) {
- return array(133, '');
+ return array(PHPUNIT_EXITCODE_REINSTALL, '');
}
return array(0, '');
@@ -682,7 +682,7 @@ class phpunit_util {
global $DB, $CFG;
if (!self::is_test_site()) {
- phpunit_bootstrap_error(131, 'Can not drop non-test site!!');
+ phpunit_bootstrap_error(PHPUNIT_EXITCODE_CONFIGERROR, 'Can not drop non-test site!!');
}
// purge dataroot
@@ -727,13 +727,13 @@ class phpunit_util {
global $DB, $CFG;
if (!self::is_test_site()) {
- phpunit_bootstrap_error(131, 'Can not install on non-test site!!');
+ phpunit_bootstrap_error(PHPUNIT_EXITCODE_CONFIGERROR, 'Can not install on non-test site!!');
}
if ($DB->get_tables()) {
list($errorcode, $message) = phpunit_util::testing_ready_problem();
if ($errorcode) {
- phpunit_bootstrap_error(133, 'Database tables already present, Moodle PHPUnit test environment can not be initialised');
+ phpunit_bootstrap_error(PHPUNIT_EXITCODE_REINSTALL, 'Database tables already present, Moodle PHPUnit test environment can not be initialised');
} else {
phpunit_bootstrap_error(0, 'Moodle PHPUnit test environment is already initialised');
}
diff --git a/lib/phpunit/readme.md b/lib/phpunit/readme.md
index 0cf0de37bb7..5af9c06286e 100644
--- a/lib/phpunit/readme.md
+++ b/lib/phpunit/readme.md
@@ -13,7 +13,7 @@ Installation
1. install PEAR package manager - see [PEAR Manual](http://pear.php.net/manual/en/installation.php)
2. install PHPUnit package and phpunit/DbUnit extension - see [PHPUnit installation documentation](http://www.phpunit.de/manual/current/en/installation.html)
3. edit main config.php - add `$CFG->phpunit_prefix` and `$CFG->phpunit_dataroot` - see config-dist.php
-4. execute `admin/tool/phpunit/cli/init.sh` to initialise the test environemnt, repeat it after every upgrade or installation of plugins
+4. execute `php admin/tool/phpunit/cli/init.php` to initialise the test environemnt, repeat it after every upgrade or installation of plugins
Test execution
@@ -29,7 +29,7 @@ How to add more tests?
2. add `local/mytest/tests/my_test.php` file with `local_my_testcase` class that extends `basic_testcase` or `advanced_testcase`
3. add some test_*() methods
4. execute your new test case `phpunit local_my_testcase local/mytest/tests/my_test.php`
-5. execute `admin/tool/phpunit/cli/init.sh` to get the plugin tests included in main phpunit.xml configuration file
+5. execute `php admin/tool/phpunit/cli/init.php` to get the plugin tests included in main phpunit.xml configuration file
How to convert existing tests?