summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--includes/menu.inc16
-rw-r--r--modules/simpletest/tests/menu.test25
2 files changed, 41 insertions, 0 deletions
diff --git a/includes/menu.inc b/includes/menu.inc
index d11d3ea1f..2a8c80c41 100644
--- a/includes/menu.inc
+++ b/includes/menu.inc
@@ -1692,6 +1692,22 @@ function menu_set_custom_theme() {
}
/**
+ * Build a list of named menus.
+ */
+function menu_get_names() {
+ $names = &drupal_static(__FUNCTION__);
+
+ if (empty($names)) {
+ $names = db_select('menu_links')
+ ->distinct()
+ ->fields('menu_links', array('menu_name'))
+ ->orderBy('menu_name')
+ ->execute()->fetchCol();
+ }
+ return $names;
+}
+
+/**
* Return an array containing the names of system-defined (default) menus.
*/
function menu_list_system_menus() {
diff --git a/modules/simpletest/tests/menu.test b/modules/simpletest/tests/menu.test
index 3709876b1..2578bebc0 100644
--- a/modules/simpletest/tests/menu.test
+++ b/modules/simpletest/tests/menu.test
@@ -248,6 +248,31 @@ class MenuRouterTestCase extends DrupalWebTestCase {
}
/**
+ * Test menu_get_names().
+ */
+ function testMenuGetNames() {
+ // Create three menu items.
+ for ($i = 0; $i < 3; $i++) {
+ $menu_link = array(
+ 'link_title' => 'Menu link #' . $i,
+ 'link_path' => 'menu_test/' . $i,
+ 'module' => 'menu_test',
+ 'menu_name' => 'menu_test_' . $i,
+ );
+ menu_link_save($menu_link);
+ }
+
+ drupal_static_reset('menu_get_names');
+
+ // Verify that the menu names are correctly reported by menu_get_names().
+ $menu_names = menu_get_names();
+ $this->pass(implode(' | ', $menu_names));
+ for ($i = 0; $i < 3; $i++) {
+ $this->assertTrue(in_array('menu_test_' . $i, $menu_names), t('Expected menu name %expected is returned.', array('%expected' => 'menu_test_' . $i)));
+ }
+ }
+
+ /**
* Tests for menu_name parameter for hook_menu().
*/
function testMenuName() {