From 3a7bc16ad745e3e29a7ab659246a6adde4d2ffa0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20S=CC=8Ckoda?= Date: Mon, 19 Nov 2012 22:16:17 +0100 Subject: [PATCH 1/2] MDL-36701 support for PHPUnit installation via Composer packaging system See http://getcomposer.org/doc/00-intro.md --- .gitignore | 6 ++++- admin/tool/phpunit/cli/util.php | 23 +++++-------------- composer.json | 6 +++++ lib/phpunit/classes/hint_resultprinter.php | 26 ++++++++++++++++++---- lib/tests/pagelib_test.php | 3 +++ 5 files changed, 41 insertions(+), 23 deletions(-) create mode 100644 composer.json diff --git a/.gitignore b/.gitignore index e95a47a4fc6..e27bed209a5 100644 --- a/.gitignore +++ b/.gitignore @@ -25,4 +25,8 @@ CVS /.project /.buildpath /.cache -phpunit.xml \ No newline at end of file +phpunit.xml +# Composer support - only composer.json is to be in git, the rest is installed in each checkout. +composer.phar +composer.lock +/vendor/ diff --git a/admin/tool/phpunit/cli/util.php b/admin/tool/phpunit/cli/util.php index 5afd3bacbe8..5cfd1285690 100644 --- a/admin/tool/phpunit/cli/util.php +++ b/admin/tool/phpunit/cli/util.php @@ -39,7 +39,6 @@ list($options, $unrecognized) = cli_get_params( 'buildconfig' => false, 'buildcomponentconfigs' => false, 'diag' => false, - 'phpunitdir' => false, 'run' => false, 'help' => false, ), @@ -48,24 +47,12 @@ 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); +if (file_exists(__DIR__.'/../../../../vendor/autoload.php')) { + // Composer packages present. + require_once(__DIR__.'/../../../../vendor/autoload.php'); } -// verify PHPUnit libs are loaded +// Verify PHPUnit libs can be loaded. if (!include_once('PHPUnit/Autoload.php')) { phpunit_bootstrap_error(PHPUNIT_EXITCODE_PHPUNITMISSING); } @@ -75,7 +62,7 @@ if ($options['run']) { unset($unrecognized); foreach ($_SERVER['argv'] as $k=>$v) { - if (strpos($v, '--run') === 0 or strpos($v, '--phpunitdir') === 0) { + if (strpos($v, '--run') === 0) { unset($_SERVER['argv'][$k]); $_SERVER['argc'] = $_SERVER['argc'] - 1; } diff --git a/composer.json b/composer.json new file mode 100644 index 00000000000..94bf8860ad1 --- /dev/null +++ b/composer.json @@ -0,0 +1,6 @@ +{ + "require": { + "phpunit/phpunit": "3.7.*", + "phpunit/dbUnit": "1.2.*" + } +} \ No newline at end of file diff --git a/lib/phpunit/classes/hint_resultprinter.php b/lib/phpunit/classes/hint_resultprinter.php index 33ec7938aa2..4f68206702b 100644 --- a/lib/phpunit/classes/hint_resultprinter.php +++ b/lib/phpunit/classes/hint_resultprinter.php @@ -88,10 +88,28 @@ class Hint_ResultPrinter extends PHPUnit_TextUI_ResultPrinter { $file = substr($file, strlen($cwd)+1); } - $executable = 'phpunit'; - if (phpunit_bootstrap_is_cygwin()) { - $file = str_replace('\\', '/', $file); - $executable = 'phpunit.bat'; + $executable = null; + + if (isset($_SERVER['argv'][0])) { + if (preg_match('/phpunit(\.bat|\.cmd)?$/', $_SERVER['argv'][0])) { + $executable = $_SERVER['argv'][0]; + for($i=1;$iwrite("\nTo re-run:\n $executable $testName $file\n"); diff --git a/lib/tests/pagelib_test.php b/lib/tests/pagelib_test.php index 243f2df8d50..a7158e71c8c 100644 --- a/lib/tests/pagelib_test.php +++ b/lib/tests/pagelib_test.php @@ -187,7 +187,10 @@ class moodle_page_test extends advanced_testcase { } public function test_pagetype_defaults_to_script() { + global $SCRIPT; // Exercise SUT and validate + $SCRIPT = '/index.php'; + $this->testpage->initialise_default_pagetype(); $this->assertEquals('site-index', $this->testpage->pagetype); } From 07c6fa6ee4d9b41576c1714a6cf2f2a3e6823a76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20S=CC=8Ckoda?= Date: Thu, 22 Nov 2012 07:28:59 +0100 Subject: [PATCH 2/2] MDL-36701 add composer to phpunit readme Thanks Aparup for reminding me! --- lib/phpunit/readme.md | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/lib/phpunit/readme.md b/lib/phpunit/readme.md index 5af9c06286e..132c4dbf054 100644 --- a/lib/phpunit/readme.md +++ b/lib/phpunit/readme.md @@ -5,22 +5,35 @@ PHPUnit testing support in Moodle Documentation ------------- * [Moodle Dev wiki](http://docs.moodle.org/dev/PHPUnit) -* [PHPUnit online documentaion](http://www.phpunit.de/manual/current/en/) +* [PHPUnit online documentation](http://www.phpunit.de/manual/current/en/) +* [Composer dependency manager](http://getcomposer.org/) -Installation ------------- +Composer installation +--------------------- +Composer is a new dependency manager for PHP projects. +It installs PHP libraries into /vendor/ subdirectory inside your moodle dirroot. + +1. install Composer - http://getcomposer.org/doc/00-intro.md +2. go to your moodle dirroot and execute `php composer.phar install` + + +PEAR installation (not recommended) +----------------------------------- +PEAR is a framework and distribution system for reusable PHP components. +The packages installed via PEAR are available in all PHP projects. + 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 `php admin/tool/phpunit/cli/init.php` 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 environment, repeat it after every upgrade or installation of plugins Test execution -------------- -* execute `phpunit` from dirroot directory -* you can execute a single test case class using class name followed by path to test file `phpunit core_phpunit_basic_testcase lib/tests/phpunit_test.php` -* it is also possible to create custom configuration files in xml format and use `phpunit -c mytestsuites.xml` +* execute `vendor/bin/phpunit` (or `phpunit` if you use PEAR) from dirroot directory +* you can execute a single test case class using class name followed by path to test file `vendor/bin/phpunit core_phpunit_basic_testcase lib/tests/phpunit_test.php` +* it is also possible to create custom configuration files in xml format and use `vendor/bin/phpunit -c mytestsuites.xml` How to add more tests?