MDL-31857 phpunit: PHPDoc and typo fixes during integration

This commit is contained in:
Sam Hemelryk 2012-03-22 10:45:17 +13:00
parent 3222f6eca1
commit 7aea08e1b0
9 changed files with 217 additions and 61 deletions

View File

@ -19,6 +19,7 @@
*
* @package tool_phpunit
* @copyright 2012 Petr Skoda {@link http://skodak.org}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
define('NO_OUTPUT_BUFFERING', true);

View File

@ -24,7 +24,7 @@
* 131 - configuration problem
* 132 - drop data, then install new test database
*
* @package core_core
* @package core
* @category phpunit
* @copyright 2012 Petr Skoda {@link http://skodak.org}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
@ -183,9 +183,9 @@ phpunit_util::init_globals();
/**
* Print error and stop execution
* @param $text
* @param int $errorcode
* @return void - stops code execution with error code
* @param string $text An error message to display
* @param int $errorcode The error code (see docblock for detailed list)
* @return void stops code execution with error code
*/
function phpunit_bootstrap_error($text, $errorcode = 1) {
fwrite(STDERR, $text."\n");
@ -194,7 +194,7 @@ function phpunit_bootstrap_error($text, $errorcode = 1) {
/**
* Mark empty dataroot to be used for testing.
* @param $dataroot
* @param string $dataroot The dataroot directory
* @return void
*/
function phpunit_bootstrap_initdataroot($dataroot) {

View File

@ -17,19 +17,23 @@
/**
* Various PHPUnit classes and functions
*
* @package core_core
* @package core
* @category phpunit
* @copyright 2012 Petr Skoda {@link http://skodak.org}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
require_once 'PHPUnit/Autoload.php'; // necessary when loaded from cli/util.php script
// necessary when loaded from cli/util.php script
// If this is missing then PHPUnit is not in your PHP include path. This normally
// happens if installation didn't complete correctly. Check your environment.
require_once 'PHPUnit/Autoload.php';
/**
* Collection of utility methods.
*
* @package core_phpunit
* @package core
* @category phpunit
* @copyright 2012 Petr Skoda {@link http://skodak.org}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
@ -39,6 +43,9 @@ class phpunit_util {
*/
protected static $tabledata = null;
/**
* @var array An array of globals cloned from CFG
*/
protected static $globals = array();
/**
@ -134,7 +141,6 @@ class phpunit_util {
/**
* Called during bootstrap only!
* @static
* @return void
*/
public static function init_globals() {
global $CFG;
@ -236,7 +242,7 @@ class phpunit_util {
* Note: To be used from CLI scripts only.
*
* @static
* @return void, may terminate execution with exit code
* @return void may terminate execution with exit code
*/
public static function drop_site() {
global $DB, $CFG;
@ -270,7 +276,7 @@ class phpunit_util {
* Note: To be used from CLI scripts only.
*
* @static
* @return void, may terminate execution with exit code
* @return void may terminate execution with exit code
*/
public static function install_site() {
global $DB, $CFG;
@ -395,7 +401,7 @@ class phpunit_util {
}
}
$data = preg_replace('|<!--@plugin_suits_start@-->.*<!--@plugin_suits_end@-->|s', $suites, $data, 1);
$data = preg_replace('|<!--@plugin_suites_start@-->.*<!--@plugin_suites_end@-->|s', $suites, $data, 1);
@unlink("$CFG->dirroot/phpunit.xml");
file_put_contents("$CFG->dirroot/phpunit.xml", $data);
@ -408,8 +414,9 @@ class phpunit_util {
*
* Note: this is supposed to work for very simple tests only.
*
* @deprecated
* @package core_phpunit
* @deprecated since 2.3
* @package core
* @category phpunit
* @author Petr Skoda
* @copyright 2012 Petr Skoda {@link http://skodak.org}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
@ -417,10 +424,9 @@ class phpunit_util {
class UnitTestCase extends PHPUnit_Framework_TestCase {
/**
* @deprecated
* @deprecated since 2.3
* @param bool $expected
* @param string $message
* @return void
*/
public function expectException($expected, $message = '') {
// use phpdocs: @expectedException ExceptionClassName
@ -431,10 +437,9 @@ class UnitTestCase extends PHPUnit_Framework_TestCase {
}
/**
* @deprecated
* @deprecated since 2.3
* @param bool $expected
* @param string $message
* @return void
*/
public static function expectError($expected = false, $message = '') {
// not available in PHPUnit
@ -445,82 +450,75 @@ class UnitTestCase extends PHPUnit_Framework_TestCase {
}
/**
* @deprecated
* @deprecated since 2.3
* @static
* @param mixed $actual
* @param string $messages
* @return void
*/
public static function assertTrue($actual, $messages = '') {
parent::assertTrue((bool)$actual, $messages);
}
/**
* @deprecated
* @deprecated since 2.3
* @static
* @param mixed $actual
* @param string $messages
* @return void
*/
public static function assertFalse($actual, $messages = '') {
parent::assertFalse((bool)$actual, $messages);
}
/**
* @deprecated
* @deprecated since 2.3
* @static
* @param mixed $expected
* @param mixed $actual
* @param string $message
* @return void
*/
public static function assertEqual($expected, $actual, $message = '') {
parent::assertEquals($expected, $actual, $message);
}
/**
* @deprecated
* @deprecated since 2.3
* @static
* @param mixed $expected
* @param mixed $actual
* @param string $message
* @return void
*/
public static function assertNotEqual($expected, $actual, $message = '') {
parent::assertNotEquals($expected, $actual, $message);
}
/**
* @deprecated
* @deprecated since 2.3
* @static
* @param mixed $expected
* @param mixed $actual
* @param string $message
* @return void
*/
public static function assertIdentical($expected, $actual, $message = '') {
parent::assertSame($expected, $actual, $message);
}
/**
* @deprecated
* @deprecated since 2.3
* @static
* @param mixed $expected
* @param mixed $actual
* @param string $message
* @return void
*/
public static function assertNotIdentical($expected, $actual, $message = '') {
parent::assertNotSame($expected, $actual, $message);
}
/**
* @deprecated
* @deprecated since 2.3
* @static
* @param mixed $actual
* @param mixed $expected
* @param string $message
* @return void
*/
public static function assertIsA($actual, $expected, $message = '') {
parent::assertInstanceOf($expected, $actual, $message);
@ -529,10 +527,12 @@ class UnitTestCase extends PHPUnit_Framework_TestCase {
/**
* The simplest PHPUnit test case customised for Moodle,
* do not modify database or any globals.
* The simplest PHPUnit test case customised for Moodle
*
* @package core_phpunit
* This test case does not modify database or any globals.
*
* @package core
* @category phpunit
* @copyright 2012 Petr Skoda {@link http://skodak.org}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
@ -541,9 +541,9 @@ class basic_testcase extends PHPUnit_Framework_TestCase {
/**
* Constructs a test case with the given name.
*
* @param string $name
* @param array $data
* @param string $dataName
* @param string $name
* @param array $data
* @param string $dataName
*/
public function __construct($name = NULL, array $data = array(), $dataName = '') {
parent::__construct($name, $data, $dataName);
@ -598,5 +598,4 @@ class basic_testcase extends PHPUnit_Framework_TestCase {
//TODO: somehow find out if there are changes in dataroot
}
}
}

View File

@ -37,13 +37,13 @@ How to convert existing tests
FAQs
----
* Why is it necessary to execute the tests from commandline? PHPUnit is designed to be executed from shell, existing Moodle globals and constants would interfere with it.
* Why `tests` subdirectory? It should not collide with any plugin name because plugin names use singular form.
* Why is it necessary to execute the tests from the command line? PHPUnit is designed to be executed from shell, existing Moodle globals and constants would interfere with it.
* Why `tests` subdirectory? It is very unlikely that it will collide with any plugin name because plugin names use singular form.
* Why is it necessary to include core and plugin suites in configuration files? PHPUnit does not seem to allow dynamic loading of tests from our dir structure.
TODO
----
* stage 2 - implement advaced_testcase - support for database modifications, object generators, automatic rollback of db, blobals and dataroot
* stage 2 - implement advanced_testcase - support for database modifications, object generators, automatic rollback of db, globals and dataroot
* stage 3 - mocking and other advanced features, add support for execution of functional DB tests for different engines together (new options in phpunit.xml)
* other - support for execution of tests and cli/util.php from web UI (to be implemented via shell execution), shell script that prepares everything for the first execution

View File

@ -17,7 +17,7 @@
/**
* Unit tests for the HTMLPurifier integration
*
* @package core_core
* @package core
* @category phpunit
* @copyright 2012 Petr Skoda {@link http://skodak.org}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
@ -26,6 +26,14 @@
defined('MOODLE_INTERNAL') || die();
/**
* HTMLPurifier test case
*
* @package core
* @category phpunit
* @copyright 2012 Petr Skoda {@link http://skodak.org}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class core_htmlpurifier_testcase extends basic_testcase {
/**
@ -126,7 +134,7 @@ class core_htmlpurifier_testcase extends basic_testcase {
* Test if linebreaks kept unchanged.
* @return void
*/
function test_line_breaking() {
public function test_line_breaking() {
$text = "\n\raa\rsss\nsss\r";
$this->assertSame($text, purify_html($text));
}
@ -135,7 +143,7 @@ class core_htmlpurifier_testcase extends basic_testcase {
* Test fixing of strict problems.
* @return void
*/
function test_tidy() {
public function test_tidy() {
$text = "<p>xx";
$this->assertSame('<p>xx</p>', purify_html($text));
@ -150,7 +158,7 @@ class core_htmlpurifier_testcase extends basic_testcase {
* Test nesting - this used to cause problems in earlier versions
* @return void
*/
function test_nested_lists() {
public function test_nested_lists() {
$text = "<ul><li>One<ul><li>Two</li></ul></li><li>Three</li></ul>";
$this->assertSame($text, purify_html($text));
}
@ -159,7 +167,7 @@ class core_htmlpurifier_testcase extends basic_testcase {
* Test that XSS protection works, complete smoke tests are in htmlpurifier itself.
* @return void
*/
function test_cleaning_nastiness() {
public function test_cleaning_nastiness() {
$text = "x<SCRIPT>alert('XSS')</SCRIPT>x";
$this->assertSame('xx', purify_html($text));

View File

@ -14,18 +14,31 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* PHPunit implementation unit tests
*
* @package core
* @category phpunit
* @copyright 2012 Petr Skoda {@link http://skodak.org}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
/**
* Test integration of PHPUnit and custom Moodle hacks.
*
* @package core_core
* @package core
* @category phpunit
* @copyright 2012 Petr Skoda {@link http://skodak.org}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class core_phpunit_basic_testcase extends basic_testcase {
/**
* Tests that bootstraping has occurred correctly
* @return void
*/
public function test_bootstrap() {
global $CFG;
$this->assertTrue(isset($CFG->httpswwwroot));

View File

@ -15,9 +15,9 @@
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* textlib unit teststest
* textlib unit tests
*
* @package core_core
* @package core
* @category phpunit
* @copyright 2012 Petr Skoda {@link http://skodak.org}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
@ -30,18 +30,26 @@ defined('MOODLE_INTERNAL') || die();
* Unit tests for our utf-8 aware text processing
*
* @package core
* @subpackage lib
* @category phpunit
* @copyright 2010 Petr Skoda (http://skodak.org)
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class core_textlib_testcase extends basic_testcase {
/**
* Tests the static parse charset method
* @return void
*/
public function test_parse_charset() {
$this->assertSame(textlib::parse_charset('Cp1250'), 'windows-1250');
// does typo3 work? some encoding moodle does not use
$this->assertSame(textlib::parse_charset('ms-ansi'), 'windows-1252');
}
/**
* Tests the static convert method
* @return void
*/
public function test_convert() {
$utf8 = "Žluťoučký koníček";
$iso2 = pack("H*", "ae6c75bb6f75e86bfd206b6f6eede8656b");
@ -79,6 +87,10 @@ class core_textlib_testcase extends basic_testcase {
$this->assertSame(textlib::convert($str, 'GB18030', 'utf-8'), $utf8);
}
/**
* Tests the static sub string method
* @return void
*/
public function test_substr() {
$str = "Žluťoučký koníček";
$this->assertSame(textlib::substr($str, 0), $str);
@ -119,6 +131,10 @@ class core_textlib_testcase extends basic_testcase {
$this->assertSame(textlib::substr($str, 1, 1, 'GB18030'), $s);
}
/**
* Tests the static string length method
* @return void
*/
public function test_strlen() {
$str = "Žluťoučký koníček";
$this->assertSame(textlib::strlen($str), 17);
@ -156,6 +172,10 @@ class core_textlib_testcase extends basic_testcase {
$this->assertSame(textlib::strlen($str, 'GB18030'), 4);
}
/**
* Tests the static strtolower method
* @return void
*/
public function test_strtolower() {
$str = "Žluťoučký koníček";
$low = 'žluťoučký koníček';
@ -187,6 +207,10 @@ class core_textlib_testcase extends basic_testcase {
$this->assertSame(textlib::strtolower($str, 'GB18030'), $str);
}
/**
* Tests the static strtoupper
* @return void
*/
public function test_strtoupper() {
$str = "Žluťoučký koníček";
$up = 'ŽLUŤOUČKÝ KONÍČEK';
@ -218,31 +242,55 @@ class core_textlib_testcase extends basic_testcase {
$this->assertSame(textlib::strtoupper($str, 'GB18030'), $str);
}
/**
* Tests the static strpos method
* @return void
*/
public function test_strpos() {
$str = "Žluťoučký koníček";
$this->assertSame(textlib::strpos($str, 'koníč'), 10);
}
/**
* Tests the static strrpos
* @return void
*/
public function test_strrpos() {
$str = "Žluťoučký koníček";
$this->assertSame(textlib::strrpos($str, 'o'), 11);
}
/**
* Tests the static specialtoascii method
* @return void
*/
public function test_specialtoascii() {
$str = "Žluťoučký koníček";
$this->assertSame(textlib::specialtoascii($str), 'Zlutoucky konicek');
}
/**
* Tests the static encode_mimeheader method
* @return void
*/
public function test_encode_mimeheader() {
$str = "Žluťoučký koníček";
$this->assertSame(textlib::encode_mimeheader($str), '=?utf-8?B?xb1sdcWlb3XEjWvDvSBrb27DrcSNZWs=?=');
}
/**
* Tests the static entities_to_utf8 method
* @return void
*/
public function test_entities_to_utf8() {
$str = "&#x17d;lu&#x165;ou&#x10d;k&#xfd; kon&#237;&#269;ek";
$this->assertSame(textlib::entities_to_utf8($str), "Žluťoučký koníček");
}
/**
* Tests the static utf8_to_entities method
* @return void
*/
public function test_utf8_to_entities() {
$str = "Žluťoučký koníček";
$this->assertSame(textlib::utf8_to_entities($str), "&#x17d;lu&#x165;ou&#x10d;k&#xfd; kon&#xed;&#x10d;ek");
@ -250,12 +298,20 @@ class core_textlib_testcase extends basic_testcase {
}
/**
* Tests the static trim_utf8_bom method
* @return void
*/
public function test_trim_utf8_bom() {
$bom = "\xef\xbb\xbf";
$str = "Žluťoučký koníček";
$this->assertSame(textlib::trim_utf8_bom($bom.$str.$bom), $str.$bom);
}
/**
* Tests the static get_encodings method
* @return void
*/
public function test_get_encodings() {
$encodings = textlib::get_encodings();
$this->assertTrue(is_array($encodings));
@ -263,15 +319,27 @@ class core_textlib_testcase extends basic_testcase {
$this->assertTrue(isset($encodings['UTF-8']));
}
/**
* Tests the static code2utf8 method
* @return void
*/
public function test_code2utf8() {
$this->assertSame(textlib::code2utf8(381), 'Ž');
}
/**
* Tests the static strtotitle method
* @return void
*/
public function test_strtotitle() {
$str = "žluťoučký koníček";
$this->assertSame(textlib::strtotitle($str), "Žluťoučký Koníček");
}
/**
* Tests the deprecated method of textlib that still require an instance.
* @return void
*/
public function test_deprecated_textlib_get_instance() {
ob_start();
$textlib = textlib_get_instance();
@ -297,15 +365,26 @@ class core_textlib_testcase extends basic_testcase {
* Used for sorting.
*
* @package core
* @subpackage lib
* @category phpunit
* @copyright 2011 Sam Hemelryk
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class collatorlib_testcase extends basic_testcase {
/**
* @var string The initial lang, stored because we change it during testing
*/
protected $initiallang = null;
/**
* @var string The last error that has occured
*/
protected $error = null;
/**
* Prepares things for this test case
* @return void
*/
public function setUp() {
global $SESSION;
if (isset($SESSION->lang)) {
@ -319,6 +398,11 @@ class collatorlib_testcase extends basic_testcase {
}
parent::setUp();
}
/**
* Cleans things up after this test case has run
* @return void
*/
public function tearDown() {
global $SESSION;
parent::tearDown();
@ -329,7 +413,12 @@ class collatorlib_testcase extends basic_testcase {
unset($SESSION->lang);
}
}
function test_asort() {
/**
* Tests the static asort method
* @return void
*/
public function test_asort() {
$arr = array('b' => 'ab', 1 => 'aa', 0 => 'cc');
collatorlib::asort($arr);
$this->assertSame(array_keys($arr), array(1, 'b', 0));
@ -340,7 +429,12 @@ class collatorlib_testcase extends basic_testcase {
$this->assertSame(array_keys($arr), array(1, 'b', 'a', 0), $this->error);
$this->assertSame(array_values($arr), array('aa', 'ab', 'áb', 'cc'), $this->error);
}
function test_asort_objects_by_method() {
/**
* Tests the static asort_objects_by_method method
* @return void
*/
public function test_asort_objects_by_method() {
$objects = array(
'b' => new string_test_class('ab'),
1 => new string_test_class('aa'),
@ -360,7 +454,12 @@ class collatorlib_testcase extends basic_testcase {
$this->assertSame(array_keys($objects), array(1, 'b', 'a', 0), $this->error);
$this->assertSame($this->get_ordered_names($objects, 'get_private_name'), array('aa', 'ab', 'áb', 'cc'), $this->error);
}
function test_asort_objects_by_property() {
/**
* Tests the static asort_objects_by_method method
* @return void
*/
public function asort_objects_by_property() {
$objects = array(
'b' => new string_test_class('ab'),
1 => new string_test_class('aa'),
@ -380,6 +479,13 @@ class collatorlib_testcase extends basic_testcase {
$this->assertSame(array_keys($objects), array(1, 'b', 'a', 0), $this->error);
$this->assertSame($this->get_ordered_names($objects, 'publicname'), array('aa', 'ab', 'áb', 'cc'), $this->error);
}
/**
* Returns an array of sorted names
* @param array $objects
* @param string $methodproperty
* @return type
*/
protected function get_ordered_names($objects, $methodproperty = 'get_protected_name') {
$return = array();
foreach ($objects as $object) {
@ -398,23 +504,44 @@ class collatorlib_testcase extends basic_testcase {
* Simple class used to work with the unit test.
*
* @package core
* @subpackage lib
* @category phpunit
* @copyright 2011 Sam Hemelryk
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class string_test_class extends stdClass {
/**
* @var string A public property
*/
public $publicname;
/**
* @var string A protected property
*/
protected $protectedname;
/**
* @var string A private property
*/
private $privatename;
/**
* Constructs the test instance
* @param string $name
*/
public function __construct($name) {
$this->publicname = $name;
$this->protectedname = $name;
$this->privatename = $name;
}
/**
* Returns the protected property
* @return string
*/
public function get_protected_name() {
return $this->protectedname;
}
/**
* Returns the protected property
* @return string
*/
public function get_private_name() {
return $this->publicname;
}
}
}

View File

@ -36,11 +36,19 @@ defined('MOODLE_INTERNAL') || die();
*/
class mod_url_lib_testcase extends basic_testcase {
/**
* Prepares things before this test case is initialised
* @return void
*/
public static function setUpBeforeClass() {
global $CFG;
require_once($CFG->dirroot . '/mod/url/locallib.php');
}
/**
* Tests the url_appears_valid_url function
* @return void
*/
public function test_url_appears_valid_url() {
$this->assertTrue(url_appears_valid_url('http://example'));
$this->assertTrue(url_appears_valid_url('http://www.example.com'));

View File

@ -15,7 +15,7 @@
verbose="false"
>
<!--All core suites need to be added manually here-->
<!--All core suites need to be manually added here-->
<testsuites>
<testsuite name="core_lib">
@ -24,7 +24,7 @@
</testsuites>
<!--Plugin suites: use admin/tool/phpunit/cli/util.php to build phpunit.xml from phpunit.xml.dist with up-to-date list of plugins in current install-->
<!--@plugin_suits_start@-->
<!--@plugin_suits_end@-->
<!--@plugin_suites_start@-->
<!--@plugin_suites_end@-->
</phpunit>