Index: modules/simpletest/tests/menu.test
===================================================================
RCS file: /cvs/drupal/drupal/modules/simpletest/tests/menu.test,v
retrieving revision 1.4
diff -u -p -r1.4 menu.test
--- modules/simpletest/tests/menu.test	28 Dec 2008 18:27:14 -0000	1.4
+++ modules/simpletest/tests/menu.test	19 Jan 2009 20:01:12 -0000
@@ -38,6 +38,40 @@ class MenuIncTestCase extends DrupalWebT
     $name = db_result(db_query($sql));
     $this->assertEqual($name, 'changed', t('Menu name was successfully changed after rebuild.'));
   }
+  
+  /**
+   * Tests the 4 possible ways to set the title for menu items mentioned in:
+   * http://drupal.org/node/140311 Also tests that menu item titles work 
+   * with string overrides http://drupal.org/node/131061
+   */
+  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"
+   */
+  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);
+  }
 }
 
 /**
Index: modules/simpletest/tests/menu_test.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/simpletest/tests/menu_test.module,v
retrieving revision 1.1
diff -u -p -r1.1 menu_test.module
--- modules/simpletest/tests/menu_test.module	28 Dec 2008 18:27:14 -0000	1.1
+++ modules/simpletest/tests/menu_test.module	19 Jan 2009 20:01:12 -0000
@@ -7,14 +7,46 @@
  */
 
  /**
- * The name of the menu changes during the course of this test. Use a $_GET.
+ * Implementation of hook_menu()
  */
 function menu_test_menu() {
-
+  // The name of this menu item changes during the course of this test. Use a $_GET.
   $items['menu_name_test'] = array(
-    'title' => t('Test menu_name router item'),
+    'title' => 'Test menu_name router item',
     'page callback' => 'node_save',
     'menu_name' => isset($_GET["hook_menu_name"]) ? $_GET["hook_menu_name"] : 'original',
   );
+  
+  $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;
+}
+
+function menu_test_title_callback($title, $case_no = 3) {
+    return t($title) .' - Case '. $case_no; 
 }
\ No newline at end of file
