MDL-39801 navigation_node::remove does not allow to insert nodes afterwards
authorMarina Glancy <marina@moodle.com>
Fri, 31 May 2013 01:48:32 +0000 (11:48 +1000)
committerEloy Lafuente (stronk7) <stronk7@moodle.org>
Tue, 4 Jun 2013 00:06:09 +0000 (02:06 +0200)
lib/navigationlib.php
lib/tests/navigationlib_test.php

index 9266975..b364a55 100644 (file)
@@ -891,6 +891,7 @@ class navigation_node_collection implements IteratorAggregate {
             foreach ($this->collection as $colkey => $node) {
                 if ($node->key === $key && $node->type == $type) {
                     unset($this->collection[$colkey]);
+                    $this->collection = array_values($this->collection);
                     break;
                 }
             }
index 1c046ce..473b659 100644 (file)
@@ -258,9 +258,19 @@ class navigation_node_testcase extends basic_testcase {
         $this->assertFalse($this->node->get('remove1'));
         $this->assertFalse(in_array('remove1', $this->node->get_children_key_list(), true));
 
+        // Make sure that we can insert element after removal
+        $insertelement = navigation_node::create('extra element 4', null, navigation_node::TYPE_CUSTOM, null, 'element4');
+        $this->node->add_node($insertelement, 'remove2');
+        $this->assertNotEmpty($this->node->get('element4'));
+
         // Remove more elements
         $this->assertTrue($this->node->get('remove2')->remove());
         $this->assertFalse($this->node->get('remove2'));
+
+        // Make sure that we can add element after removal
+        $this->node->add('extra element 5', null, navigation_node::TYPE_CUSTOM, null, 'element5');
+        $this->assertNotEmpty($this->node->get('element5'));
+
         $this->assertTrue($remove2->get('remove3')->remove());
 
         $this->assertFalse($this->node->get('remove1'));