Index: modules/simpletest/tests/menu.test
===================================================================
RCS file: /cvs/drupal/drupal/modules/simpletest/tests/menu.test,v
retrieving revision 1.6
diff -u -p -r1.6 menu.test
--- modules/simpletest/tests/menu.test	5 Feb 2009 01:05:17 -0000	1.6
+++ modules/simpletest/tests/menu.test	7 Mar 2009 21:26:38 -0000
@@ -47,6 +47,39 @@ class MenuIncTestCase extends DrupalWebT
     $name = db_result(db_query($sql));
     $this->assertEqual($name, 'changed', t('Menu name was successfully changed after rebuild.'));
   }
+  
+  /**
+   * Tests the possible ways to set the title for menu items
+   * Also tests that menu item titles work with string overrides. 
+   */
+  function testMenuItemTitlesCases() {
+
+    // Build array with string overrides
+    $test_data = array(
+      1 => array('Example title - Case 1' => 'Alternative example title - Case 1'),
+      2 => array('Example @sub1 - Case @op2' => 'Alternative example @sub1 - Case @op2'),
+      3 => array('Example title' => 'Alternative example title'),
+      4 => array('Example title' => 'Alternative example title'),
+    );
+
+    foreach ($test_data as $case_no => $override) {
+      $this->menuItemTitlesCasesHelper($case_no);
+      variable_set('locale_custom_strings_en', $override);
+      $this->menuItemTitlesCasesHelper($case_no, TRUE);
+      variable_set('locale_custom_strings_en', array());
+    }
+  }
+
+  /**
+   * Get a url and assert the title given a case number. If override is true,
+   * the title is asserted to begin with "Alternative"
+   */
+  private function menuItemTitlesCasesHelper($case_no, $override = FALSE) {
+    $this->drupalGet('menu_title_test/case'. $case_no);
+    $this->assertResponse(200);
+    $asserted_title = $override ? 'Alternative example title - Case '. $case_no : 'Example title - Case '. $case_no;
+    $this->assertTitle($asserted_title .' | Drupal', t('Menu title is') .': '. $asserted_title, 'Menu');
+  }
 }
 
 /**
Index: modules/simpletest/tests/menu_test.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/simpletest/tests/menu_test.module,v
retrieving revision 1.2
diff -u -p -r1.2 menu_test.module
--- modules/simpletest/tests/menu_test.module	5 Feb 2009 01:05:17 -0000	1.2
+++ modules/simpletest/tests/menu_test.module	7 Mar 2009 21:26:38 -0000
@@ -24,6 +24,35 @@ function menu_test_menu() {
     'page callback' => 'menu_test_callback',
     'access arguments' => array('access content'),
   );
+ 
+  $items['menu_title_test/case1'] = array(
+    'title' => 'Example title - Case 1',
+    'access callback' => TRUE,
+    'page callback' => 'user_page', 
+  );
+  $items['menu_title_test/case2'] = array(
+    'title' => 'Example @sub1 - Case @op2',
+    // If '2' is not in quotes, the argument becomes arg(2)
+    'title arguments' => array('@sub1' => 'title', '@op2' => '2'),
+    'access callback' => TRUE,
+    'page callback' => 'user_page', 
+  );
+  $items['menu_title_test/case3'] = array(
+    'title' => 'Example title',
+    'title callback' => 'menu_test_title_callback',
+    'access callback' => TRUE,
+    'page callback' => 'user_page',
+  );
+  $items['menu_title_test/case4'] = array(
+    // Title gets completely ignored. Good thing, too.
+    'title' => 'Bike sheds full of blue smurfs', 
+    'title callback' => 'menu_test_title_callback',
+    // If '4' is not in quotes, the argument becomes arg(4)
+    'title arguments' => array('Example title', '4'),
+    'access callback' => TRUE,
+    'page callback' => 'user_page',
+  );
+
   return $items;
 }
 
@@ -36,3 +65,13 @@ function menu_test_menu() {
 function menu_test_callback() {
   return $this->randomName();
 }
+
+/**
+ * Concatenates a string, by using the t function and a case number.
+ *
+ * @param $title Title string.
+ * @param $case_number The current case number which is tests. Defaults to 3
+ */
+function menu_test_title_callback($title, $case_no = 3) {
+  return t($title) .' - Case '. $case_no; 
+}
