diff --git a/admin/tool/phpunit/cli/util.php b/admin/tool/phpunit/cli/util.php index 1e0a670920f..2ef7cc3e1a3 100644 --- a/admin/tool/phpunit/cli/util.php +++ b/admin/tool/phpunit/cli/util.php @@ -31,22 +31,12 @@ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -define('PHPUNIT_UTIL', true); - -require_once(__DIR__ . '/../../../../lib/phpunit/bootstraplib.php'); - -// verify PHPUnit installation -if (!@include_once('PHPUnit/Autoload.php')) { - phpunit_bootstrap_error(130); +if (isset($_SERVER['REMOTE_ADDR'])) { + die; // no access from web! } -require(__DIR__ . '/../../../../lib/phpunit/bootstrap.php'); -require_once($CFG->libdir.'/phpunit/lib.php'); -require_once($CFG->libdir.'/adminlib.php'); -require_once($CFG->libdir.'/upgradelib.php'); -require_once($CFG->libdir.'/clilib.php'); -require_once($CFG->libdir.'/pluginlib.php'); -require_once($CFG->libdir.'/installlib.php'); +require_once(__DIR__.'/../../../../lib/clilib.php'); +require_once(__DIR__.'/../../../../lib/phpunit/bootstraplib.php'); // now get cli options list($options, $unrecognized) = cli_get_params( @@ -55,6 +45,8 @@ list($options, $unrecognized) = cli_get_params( 'install' => false, 'buildconfig' => false, 'diag' => false, + 'phpunitdir' => false, + 'run' => false, 'help' => false, ), array( @@ -62,6 +54,54 @@ list($options, $unrecognized) = cli_get_params( ) ); +if ($options['phpunitdir']) { + // nasty skodak's hack for testing of future PHPUnit versions - intentionally not documented + if (!file_exists($options['phpunitdir'])) { + cli_error('Invalid custom PHPUnit lib location'); + } + $files = scandir($options['phpunitdir']); + foreach ($files as $file) { + $path = $options['phpunitdir'].'/'.$file; + if (!is_dir($path) or strpos($file, '.') === 0) { + continue; + } + ini_set('include_path', $path . PATH_SEPARATOR . ini_get('include_path')); + } + unset($files); + unset($file); +} + +// verify PHPUnit libs are loaded +if (!@include_once('PHPUnit/Autoload.php')) { + phpunit_bootstrap_error(130); +} + +if ($options['run']) { + unset($options); + unset($unrecognized); + + foreach ($_SERVER['argv'] as $k=>$v) { + if (strpos($v, '--run') === 0 or strpos($v, '--phpunitdir') === 0) { + unset($_SERVER['argv'][$k]); + } + } + $_SERVER['argv'] = array_values($_SERVER['argv']); + PHPUnit_TextUI_Command::main(); + exit(0); +} + +define('PHPUNIT_UTIL', true); + +require(__DIR__ . '/../../../../lib/phpunit/bootstrap.php'); + +// from now on this is a regular moodle CLI_SCRIPT + +require_once($CFG->libdir.'/adminlib.php'); +require_once($CFG->libdir.'/upgradelib.php'); +require_once($CFG->libdir.'/clilib.php'); +require_once($CFG->libdir.'/pluginlib.php'); +require_once($CFG->libdir.'/installlib.php'); + if ($unrecognized) { $unrecognized = implode("\n ", $unrecognized); cli_error(get_string('cliunknowoption', 'admin', $unrecognized)); @@ -80,11 +120,12 @@ Options: --install Install database --buildconfig Build /phpunit.xml from /phpunit.xml.dist that includes suites for all plugins and core --diag Diagnose installation and return error code only +--run Execute PHPUnit tests (alternative for standard phpunit binary) -h, --help Print out this help Example: -\$/usr/bin/php lib/phpunit/tool.php +\$/usr/bin/php lib/phpunit/tool.php --install "; echo $help; exit(0); diff --git a/admin/tool/phpunit/webrunner.php b/admin/tool/phpunit/webrunner.php index 2e0cf68c4e2..3e5971c0322 100644 --- a/admin/tool/phpunit/webrunner.php +++ b/admin/tool/phpunit/webrunner.php @@ -52,11 +52,6 @@ if (!is_writable($CFG->phpunit_dataroot)) { tool_phpunit_problem('$CFG->phpunit_dataroot in not writable, can not execute tests.'); } $output = null; -exec('phpunit --version', $output, $code); -if ($code != 0) { - tool_phpunit_problem('Can not execute \'phpunit\' script.'); -} -$output = null; exec('php --version', $output, $code); if ($code != 0) { tool_phpunit_problem('Can not execute \'php\' binary.'); @@ -140,7 +135,7 @@ if ($execute) { $path = escapeshellcmd($path); $path = str_replace('\*', '*', $path); chdir($CFG->dirroot); - passthru("phpunit -c $configdir $path", $code); + passthru("php $CFG->admin/tool/phpunit/cli/util.php --run -c $configdir $path", $code); chdir($oldcwd); echo ''; diff --git a/lib/clilib.php b/lib/clilib.php index b39de3fd312..32272defc04 100644 --- a/lib/clilib.php +++ b/lib/clilib.php @@ -24,7 +24,7 @@ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -defined('MOODLE_INTERNAL') || die(); +// NOTE: no MOODLE_INTERNAL test here, sometimes we use this before requiring Moodle libs! /** * Get input from user