Index: modules/simpletest/drupal_web_test_case.php
===================================================================
RCS file: /cvs/drupal/drupal/modules/simpletest/drupal_web_test_case.php,v
retrieving revision 1.90
diff -u -p -r1.90 drupal_web_test_case.php
--- modules/simpletest/drupal_web_test_case.php	14 Mar 2009 23:01:37 -0000	1.90
+++ modules/simpletest/drupal_web_test_case.php	15 Mar 2009 21:13:43 -0000
@@ -1705,6 +1705,75 @@ class DrupalWebTestCase {
   }
 
   /**
+   * Pass if the text is found ONLY ONCE on the text version of the page. The text version
+   * is the equivalent of what a user would see when viewing through a web browser.
+   * In other words the HTML has been filtered out of the contents.
+   *
+   * @param $text
+   *   Plain text to look for.
+   * @param $message
+   *   Message to display.
+   * @param $group
+   *   The group this message belongs to, defaults to 'Other'.
+   * @return
+   *   TRUE on pass, FALSE on fail.
+   */
+  protected function assertUniqueText($text, $message = '', $group = 'Other') {
+    return $this->assertUniqueTextHelper($text, $message, $group, TRUE);
+  }
+
+  /**
+   * Pass if the text is found MORE THAN ONCE on the text version of the page. The text version
+   * is the equivalent of what a user would see when viewing through a web browser.
+   * In other words the HTML has been filtered out of the contents.
+   *
+   * @param $text
+   *   Plain text to look for.
+   * @param $message
+   *   Message to display.
+   * @param $group
+   *   The group this message belongs to, defaults to 'Other'.
+   * @return
+   *   TRUE on pass, FALSE on fail.
+   */
+  protected function assertNoUniqueText($text, $message = '', $group = 'Other') {
+    return $this->assertUniqueTextHelper($text, $message, $group, FALSE);
+  }
+
+
+  /**
+   * Helper for assertUniqueText and assertNoUniqueText.
+   *
+   * It is not recommended to call this function directly.
+   *
+   * @param $text
+   *   Plain text to look for.
+   * @param $message
+   *   Message to display.
+   * @param $group
+   *   The group this message belongs to.
+   * @param $be_unique
+   *   TRUE if this text should be found only once, FALSE if it should be found more than once.
+   * @return
+   *   TRUE on pass, FALSE on fail.
+   */
+  protected function assertUniqueTextHelper($text, $message, $group, $be_unique) {
+    if ($this->plainTextContent === FALSE) {
+      $this->plainTextContent = filter_xss($this->content, array());
+    }
+    if (!$message) {
+      $message = '"' . $text . '"'. ($be_unique ? ' found only once' : ' found more than once');
+    }
+    $first_occurance = strpos($this->plainTextContent, $text);
+    if ($first_occurance === FALSE) {
+      return $this->assert(FALSE, $message, $group);
+    }
+    $offset = $first_occurance + strlen($text);
+    $second_occurance = strpos($this->plainTextContent, $text, $offset);
+    return $this->assert($be_unique == ($second_occurance === FALSE), $message, $group);
+  }
+
+  /**
    * Will trigger a pass if the Perl regex pattern is found in the raw content.
    *
    * @param $pattern
Index: modules/simpletest/tests/form.test
===================================================================
RCS file: /cvs/drupal/drupal/modules/simpletest/tests/form.test,v
retrieving revision 1.4
diff -u -p -r1.4 form.test
--- modules/simpletest/tests/form.test	14 Mar 2009 20:13:27 -0000	1.4
+++ modules/simpletest/tests/form.test	15 Mar 2009 21:13:43 -0000
@@ -315,3 +315,33 @@ class FormsElementsTableSelectFunctional
 
 }
 
+/**
+ * Test the form_clean_id() for expected behavior.
+ */
+class FormsFormCleanIdFunctionalTest extends DrupalWebTestCase {
+
+  function getInfo() {
+    return array(
+      'name' => t('form_clean_id() test'),
+      'description' => t('Test the function form_clean_id() for expected behavior'),
+      'group' => t('Form API'),
+    );
+  }
+
+  function setUp() {
+    parent::setUp('form_test');
+  }
+
+
+  /**
+   * Test the uniqueness of the form_clean_id() function.
+   */
+  function testFormCleanId() {
+    $this->drupalget('form_test/form_clean_id');
+    $this->assertNoUniqueText('form-test-form-clean-id-presence');
+    $this->assertUniqueText('form-test-form-clean-id-presence-1');
+    $this->assertUniqueText('form-test-form-clean-id-presence-2');
+    $this->assertNoUniqueText('Test Textfield');
+  }
+
+}
Index: modules/simpletest/tests/form_test.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/simpletest/tests/form_test.module,v
retrieving revision 1.1
diff -u -p -r1.1 form_test.module
--- modules/simpletest/tests/form_test.module	28 Jan 2009 07:43:26 -0000	1.1
+++ modules/simpletest/tests/form_test.module	15 Mar 2009 21:13:43 -0000
@@ -44,9 +44,32 @@ function form_test_menu() {
     'type' => MENU_CALLBACK,
   );
 
+  $items['form_test/form_clean_id'] = array(
+    'title' => 'form_clean_id test',
+    'page callback' => 'form_test_form_clean_id_page',
+    'access arguments' => array('access content'),
+    'type' => MENU_CALLBACK,
+  );
+
   return $items;
 }
 
+function form_test_form_clean_id_page() {
+  $output = drupal_get_form('form_test_test_form');
+  $output .= drupal_get_form('form_test_test_form');
+  $output .= drupal_get_form('form_test_test_form');
+  return $output;
+}
+
+function form_test_test_form(&$form_state) {
+  $form['input'] = array(
+    '#type' => 'item',
+    '#title' => 'Test Textfield',
+    '#markup' => form_clean_id('form_test_form_clean_id_presence'),
+  );
+  return $form;
+}
+
 /**
  * Create a header and options array. Helper function for callbacks.
  */
