From 77043fd6f624baffe7fc15aac6846a05faaf428e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Mudr=C3=A1k?= Date: Fri, 15 Mar 2013 00:53:14 +0100 Subject: [PATCH] MDL-38497 Add unit tests for the admin tree behaviour --- lib/tests/admintree_test.php | 114 +++++++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 lib/tests/admintree_test.php diff --git a/lib/tests/admintree_test.php b/lib/tests/admintree_test.php new file mode 100644 index 00000000000..f633bd718ad --- /dev/null +++ b/lib/tests/admintree_test.php @@ -0,0 +1,114 @@ +. + +/** + * Unit tests for those parts of adminlib.php that implement the admin tree + * functionality. + * + * @package core + * @category test + * @copyright 2013 David Mudrak + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +global $CFG; +require_once($CFG->libdir.'/adminlib.php'); + +/** + * Provides the unit tests for admin tree functionality. + */ +class admintree_testcase extends advanced_testcase { + + /** + * Adding nodes into the admin tree + */ + public function test_add_nodes() { + + $tree = new admin_root(true); + $tree->add('root', $one = new admin_category('one', 'One')); + $tree->add('root', new admin_category('three', 'Three')); + $tree->add('one', new admin_category('one-one', 'One-one')); + $tree->add('one', new admin_category('one-three', 'One-three')); + + // Check the order of nodes in the root. + $map = array(); + foreach ($tree->children as $child) { + $map[] = $child->name; + } + $this->assertEquals(array('one', 'three'), $map); + + // Insert a node into the middle. + $tree->add('root', new admin_category('two', 'Two'), 'three'); + $map = array(); + foreach ($tree->children as $child) { + $map[] = $child->name; + } + $this->assertEquals(array('one', 'two', 'three'), $map); + + // Non-existing sibling. + $tree->add('root', new admin_category('four', 'Four'), 'five'); + $this->assertDebuggingCalled('Sibling five not found', DEBUG_DEVELOPER); + + $tree->add('root', new admin_category('five', 'Five')); + $map = array(); + foreach ($tree->children as $child) { + $map[] = $child->name; + } + $this->assertEquals(array('one', 'two', 'three', 'four', 'five'), $map); + + // Insert a node into the middle of the subcategory + $tree->add('one', new admin_category('one-two', 'One-two'), 'one-three'); + $map = array(); + foreach ($one->children as $child) { + $map[] = $child->name; + } + $this->assertEquals(array('one-one', 'one-two', 'one-three'), $map); + + // Check just siblings, not parents or children. + $tree->add('one', new admin_category('one-four', 'One-four'), 'one'); + $this->assertDebuggingCalled('Sibling one not found', DEBUG_DEVELOPER); + + $tree->add('root', new admin_category('six', 'Six'), 'one-two'); + $this->assertDebuggingCalled('Sibling one-two not found', DEBUG_DEVELOPER); + + // Me! Me! I wanna be first! + $tree->add('root', new admin_externalpage('zero', 'Zero', 'http://foo.bar'), 'one'); + $map = array(); + foreach ($tree->children as $child) { + $map[] = $child->name; + } + $this->assertEquals(array('zero', 'one', 'two', 'three', 'four', 'five', 'six'), $map); + } + + /** + * @expectedException coding_exception + */ + public function test_add_nodes_before_invalid1() { + $tree = new admin_root(true); + $tree->add('root', new admin_externalpage('foo', 'Foo', 'http://foo.bar'), array('moodle:site/config')); + } + + /** + * @expectedException coding_exception + */ + public function test_add_nodes_before_invalid2() { + $tree = new admin_root(true); + $tree->add('root', new admin_category('bar', 'Bar'), ''); + } +}