From 7ddef9945539582daecf988fb3b692120d3905a8 Mon Sep 17 00:00:00 2001 From: Petr Skoda Date: Tue, 3 Apr 2012 00:25:25 +0200 Subject: [PATCH] MDL-32149 some more cleanup and testing of PHPUnit asserts --- lib/ajax/tests/ajaxlib_test.php | 13 ++--- lib/tests/accesslib_test.php | 4 -- lib/tests/externallib_test.php | 2 +- lib/tests/phpunit_test.php | 88 +++++++++++++++++++++++++++++++-- 4 files changed, 93 insertions(+), 14 deletions(-) diff --git a/lib/ajax/tests/ajaxlib_test.php b/lib/ajax/tests/ajaxlib_test.php index 45aa7084fd0..9a2db87dfeb 100644 --- a/lib/ajax/tests/ajaxlib_test.php +++ b/lib/ajax/tests/ajaxlib_test.php @@ -14,7 +14,6 @@ // You should have received a copy of the GNU General Public License // along with Moodle. If not, see . - /** * Unit tests for (some of) ../ajaxlib.php. * @@ -36,7 +35,7 @@ require_once($CFG->libdir . '/ajax/ajaxlib.php'); * @copyright 2008 Tim Hunt * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -class ajax_test extends UnitTestCase { +class ajax_test extends advanced_testcase { var $user_agents = array( 'MSIE' => array( @@ -65,11 +64,13 @@ class ajax_test extends UnitTestCase { /** * Uses the array of user agents to test ajax_lib::ajaxenabled */ - function test_ajaxenabled() - { + function test_ajaxenabled() { global $CFG, $USER; - $CFG->enableajax = true; - $USER->ajax = true; + + $this->resetAfterTest(true); + + $CFG->enableajax = 1; + $USER->ajax = 1; // Should be true $_SERVER['HTTP_USER_AGENT'] = $this->user_agents['Firefox']['2.0']['Windows XP']; diff --git a/lib/tests/accesslib_test.php b/lib/tests/accesslib_test.php index 0ceba73b075..7b4d77bd996 100644 --- a/lib/tests/accesslib_test.php +++ b/lib/tests/accesslib_test.php @@ -17,10 +17,6 @@ /** * Full functional accesslib test * - * It is implemented as one test case because it would take hours - * to prepare the fake test site for each test, at the same time - * we have to work around multiple problems in UnitTestCaseUsingDatabase. - * * @package core * @category phpunit * @copyright 2011 Petr Skoda {@link http://skodak.org} diff --git a/lib/tests/externallib_test.php b/lib/tests/externallib_test.php index 43ea1b775e3..59b16921da9 100644 --- a/lib/tests/externallib_test.php +++ b/lib/tests/externallib_test.php @@ -29,7 +29,7 @@ global $CFG; require_once($CFG->libdir . '/externallib.php'); -class externallib_test extends UnitTestCase { +class externallib_test extends basic_testcase { public function test_validate_params() { $params = array('text'=>'aaa', 'someid'=>'6',); $description = new external_function_parameters(array('someid' => new external_value(PARAM_INT, 'Some int value'), diff --git a/lib/tests/phpunit_test.php b/lib/tests/phpunit_test.php index 95876f9747c..d8b16cf1a49 100644 --- a/lib/tests/phpunit_test.php +++ b/lib/tests/phpunit_test.php @@ -47,12 +47,94 @@ class core_phpunit_basic_testcase extends basic_testcase { $this->assertEquals($CFG->prefix, $CFG->phpunit_prefix); } -/* - public function test_borked_tests() { - global $DB; + /** + * This is just a verification if I understand the PHPUnit assert docs right --skodak + * @return void + */ + public function test_assert_behaviour() { + // arrays + $a = array('a', 'b', 'c'); + $b = array('a', 'c', 'b'); + $c = array('a', 'b', 'c'); + $d = array('a', 'b', 'C'); + $this->assertNotEquals($a, $b); + $this->assertNotEquals($a, $d); + $this->assertEquals($a, $c); + $this->assertEquals($a, $b, '', 0, 10, true); + // objects + $a = new stdClass(); + $a->x = 'x'; + $a->y = 'y'; + $b = new stdClass(); // switched order + $b->y = 'y'; + $b->x = 'x'; + $c = $a; + $d = new stdClass(); + $d->x = 'x'; + $d->y = 'y'; + $d->z = 'z'; + $this->assertEquals($a, $b); + $this->assertNotSame($a, $b); + $this->assertEquals($a, $c); + $this->assertSame($a, $c); + $this->assertNotEquals($a, $d); + + // string comparison + $this->assertEquals(1, '1'); + $this->assertEquals(null, ''); + + $this->assertNotEquals(1, '1 '); + $this->assertNotEquals(0, ''); + $this->assertNotEquals(null, '0'); + $this->assertNotEquals(array(), ''); + + // other comparison + $this->assertEquals(null, null); + $this->assertEquals(false, null); + $this->assertEquals(0, null); + + // emptiness + $this->assertEmpty(0); + $this->assertEmpty(0.0); + $this->assertEmpty(''); + $this->assertEmpty('0'); + $this->assertEmpty(false); + $this->assertEmpty(null); + $this->assertEmpty(array()); + + $this->assertNotEmpty(1); + $this->assertNotEmpty(0.1); + $this->assertNotEmpty(-1); + $this->assertNotEmpty(' '); + $this->assertNotEmpty('0 '); + $this->assertNotEmpty(true); + $this->assertNotEmpty(array(null)); + $this->assertNotEmpty(new stdClass()); + } + +// Uncomment following tests to see logging of unexpected changes in global state and database +/* + public function test_db_modification() { + global $DB; $DB->set_field('user', 'confirmed', 1, array('id'=>-1)); + } + + public function test_cfg_modification() { + global $CFG; $CFG->xx = 'yy'; + unset($CFG->admin); + $CFG->rolesactive = 0; + } + + public function test_user_modification() { + global $USER; + $USER->id = 10; + } + + public function test_course_modification() { + global $COURSE; + $COURSE->id = 10; } */ }