Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 3.10.x will end 8 November 2021 (12 months).
  • Bug fixes for security issues in 3.10.x will end 9 May 2022 (18 months).
  • PHP version: minimum PHP 7.2.0 Note: minimum PHP version has increased since Moodle 3.8. PHP 7.3.x and 7.4.x are supported too.
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.

< /** < * PHPUnit integration 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(); <
> namespace core;
/** * Test basic_testcase extra features and PHPUnit Moodle integration. * * @package core
< * @category phpunit
> * @category test
* @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 {
> class basic_test extends \basic_testcase {
protected $testassertexecuted = false; protected function setUp(): void { parent::setUp(); if ($this->getName() === 'test_setup_assert') { $this->assertTrue(true); $this->testassertexecuted = true; return; } } /** * Tests that bootstrapping has occurred correctly * @return void */ public function test_bootstrap() { global $CFG; // The httpswwwroot has been deprecated, we keep it as an alias for backwards compatibility with plugins only. $this->assertTrue(isset($CFG->httpswwwroot)); $this->assertEquals($CFG->httpswwwroot, $CFG->wwwroot); $this->assertEquals($CFG->prefix, $CFG->phpunit_prefix); } /** * 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->assertEqualsCanonicalizing($a, $b); // Objects.
< $a = new stdClass();
> $a = new \stdClass();
$a->x = 'x'; $a->y = 'y';
< $b = new stdClass(); // Switched order.
> $b = new \stdClass(); // Switched order.
$b->y = 'y'; $b->x = 'x'; $c = $a;
< $d = new stdClass();
> $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());
> $this->assertNotEmpty(new \stdClass());
} /** * Make sure there are no sloppy Windows line endings * that would break our tests. */ public function test_lineendings() { $string = <<<STRING a b STRING; $this->assertSame("a\nb", $string, 'Make sure all project files are checked out with unix line endings.'); } /** * Make sure asserts in setUp() do not create problems. */ public function test_setup_assert() { $this->assertTrue($this->testassertexecuted); $this->testassertexecuted = false; } /** * Test assert Tag */ public function test_assert_tag() { // This should succeed. self::assertTag(['id' => 'testid'], "<div><span id='testid'></span></div>"); $this->expectException(\PHPUnit\Framework\ExpectationFailedException::class); self::assertTag(['id' => 'testid'], "<div><div>"); } // 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; } public function test_all_modifications() { global $DB, $CFG, $USER, $COURSE; $DB->set_field('user', 'confirmed', 1, array('id'=>-1)); $CFG->xx = 'yy'; unset($CFG->admin); $CFG->rolesactive = 0; $USER->id = 10; $COURSE->id = 10; } public function test_transaction_problem() { global $DB; $DB->start_delegated_transaction(); } */ }