Index: modules/simpletest/drupal_web_test_case.php
===================================================================
RCS file: /cvs/drupal/drupal/modules/simpletest/drupal_web_test_case.php,v
retrieving revision 1.162
diff -u -p -r1.162 drupal_web_test_case.php
--- modules/simpletest/drupal_web_test_case.php	16 Oct 2009 03:01:54 -0000	1.162
+++ modules/simpletest/drupal_web_test_case.php	16 Oct 2009 15:01:31 -0000
@@ -2494,6 +2494,13 @@ class DrupalWebTestCase extends DrupalTe
   protected function assertMail($name, $value = '', $message = '') {
     $captured_emails = variable_get('drupal_test_email_collector', array());
     $email = end($captured_emails);
+    if ($name == 'headers' && is_array($value)) {
+      $result = TRUE;
+      foreach ($value as $k => $v) {
+        $result &= ($email && isset($email['headers'][$k]) && $email['headers'][$k] == $v);
+      }
+      return $this->assertTrue($result, $message, t('E-mail'));
+    }
     return $this->assertTrue($email && isset($email[$name]) && $email[$name] == $value, $message, t('E-mail'));
   }
 
Index: modules/simpletest/tests/mail.test
===================================================================
RCS file: /cvs/drupal/drupal/modules/simpletest/tests/mail.test,v
retrieving revision 1.2
diff -u -p -r1.2 mail.test
--- modules/simpletest/tests/mail.test	16 Oct 2009 03:01:54 -0000	1.2
+++ modules/simpletest/tests/mail.test	16 Oct 2009 17:42:03 -0000
@@ -5,14 +5,6 @@
  * Test the Drupal mailing system.
  */
 class MailTestCase extends DrupalWebTestCase implements MailSystemInterface {
-  /**
-   * The most recent message that was sent through the test case.
-   *
-   * We take advantage here of the fact that static variables are shared among
-   * all instance of the same class.
-   */
-  private static $sent_message;
-
   function getInfo() {
     return array(
       'name' => 'Mail system',
@@ -22,45 +14,72 @@ class MailTestCase extends DrupalWebTest
   }
 
   function setUp() {
-    parent::setUp();
-
-    // Set MailTestCase (i.e. this class) as the SMTP library
-    variable_set('mail_system', array('default-system' => 'MailTestCase'));
+    parent::setUp('mail_test');
   }
 
   /**
    * Assert that the pluggable mail system is functional.
    */
   function testPluggableFramework() {
-    global $language;
-
-    // Use MailTestCase for sending a message.
-    $message = drupal_mail('simpletest', 'mail_test', 'testing@drupal.org', $language);
-
-    // Assert whether the message was sent through the send function.
-    $this->assertEqual(self::$sent_message['to'], 'testing@drupal.org', t('Pluggable mail system is extendable.'));
+    // Set MailTestCase (i.e. this class) as the mailing class for a mail id.
+    variable_set('mail_system', array(
+      'default-system' => 'TestingMailSystem',
+      'mail_test_pluggable_test' => 'MailTestCase',
+    ));
+
+    // Validate the returned implementation for this module/key pair.
+    $system = drupal_mail_system('mail_test', 'pluggable_test');
+    $this->assertEqual(get_class($system), 'MailTestCase', t('Pluggable mail system is extendable.'), t('E-mail'));
   }
 
   /**
-   * Concatenate and wrap the e-mail body for plain-text mails.
-   *
-   * @see DefaultMailSystem
+   * Assert that drupal_mail() generates a valid message structure.
    */
-  public function format(array $message) {
-    // Join the body array into one string.
-    $message['body'] = implode("\n\n", $message['body']);
-    // Convert any HTML to plain-text.
-    $message['body'] = drupal_html_to_text($message['body']);
-    // Wrap the mail body for sending.
-    $message['body'] = drupal_wrap_mail($message['body']);
-    return $message;
+  function testDrupalMail() {
+    // Create expected message structure.
+    $module = $key = 'mail_test';
+    $default_from = variable_get('site_mail', ini_get('sendmail_from'));
+    $params = array(
+      'subject' => $this->randomString(64),
+      'body'    => $this->randomString(512),
+    );
+    $message = array(
+      'id'       => $module . '_' . $key,
+      'to'       => 'foobar@example.com',
+      'from'     => $default_from,
+      'language' => language_default(),
+      'subject'  => $params['subject'],
+      'body'     => $params['body'],
+      'headers'  => array(
+        'MIME-Version'              => '1.0',
+        'Content-Type'              => 'text/html; charset=UTF-8',
+        'Content-Transfer-Encoding' => '8Bit',
+        'Errors-To'                 => $default_from,
+        'Return-Path'               => $default_from,
+        'Sender'                    => $default_from,
+        'From'                      => $default_from,
+      )
+    );
+
+    // Send the e-mail.
+    // @see mail_test_mail()
+    drupal_mail($module, $key, $message['to'], language_default(), $params, NULL, TRUE);
+
+    // Ensure that there is one e-mail in the captured e-mails array.
+    $captured_emails = $this->drupalGetMails();
+    $this->assertEqual(count($captured_emails), 1, t('One e-mail was captured.'), t('E-mail'));
+
+    // Assert that the e-mail was sent by iterating over the message properties
+    // and ensuring that they were created as expected.
+    foreach ($message as $field => $value) {
+      $this->assertMail($field, $value, t('The value for property @field is intact.', array('@field' => $field)), t('E-mail'));
+    }
   }
 
   /**
-   * Send function that is called through the mail system.
+   * Dummy methods to satisfy MailSystemInterface.
    */
-  public function mail(array $message) {
-    self::$sent_message = $message;
-  }
+  public function format(array $message) {}
+  public function mail(array $message) {}
 }
 
Index: modules/simpletest/tests/mail_test.info
===================================================================
RCS file: modules/simpletest/tests/mail_test.info
diff -N modules/simpletest/tests/mail_test.info
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ modules/simpletest/tests/mail_test.info	16 Oct 2009 13:24:06 -0000
@@ -0,0 +1,8 @@
+; $Id$
+name = "Mail Test"
+description = "Support module for mail tests."
+package = Testing
+version = VERSION
+core = 7.x
+files[] = mail_test.module
+hidden = TRUE
Index: modules/simpletest/tests/mail_test.module
===================================================================
RCS file: modules/simpletest/tests/mail_test.module
diff -N modules/simpletest/tests/mail_test.module
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ modules/simpletest/tests/mail_test.module	16 Oct 2009 13:24:57 -0000
@@ -0,0 +1,16 @@
+<?php
+// $Id$
+
+/**
+ * @file
+ * Helper module for the mail tests.
+ */
+
+/**
+ * Implement hook_mail().
+ */
+function mail_test_mail($key, &$message, $params) {
+  $message['subject'] = $params['subject'];
+  $message['body'][] = $params['body'];
+  $message['headers']['Content-Type'] = 'text/html; charset=UTF-8';
+}
Index: modules/system/mail.sending.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/system/mail.sending.inc,v
retrieving revision 1.2
diff -u -p -r1.2 mail.sending.inc
--- modules/system/mail.sending.inc	16 Oct 2009 03:01:54 -0000	1.2
+++ modules/system/mail.sending.inc	16 Oct 2009 17:37:57 -0000
@@ -63,7 +63,18 @@ class DefaultMailSystem implements MailS
  *
  * This class is for running tests or for development.
  */
-class TestingMailSystem extends DefaultMailSystem implements MailSystemInterface {
+class TestingMailSystem implements MailSystemInterface {
+  /**
+   * Concatenate the e-mail body for test mails.
+   *
+   * @param $message
+   *   An e-mail message.
+   */
+  public function format(array $message) {
+    $message['body'] = implode("\n", $message['body']);
+    return $message;
+  }
+
   /**
    * Accept an e-mail message and store it in a variable.
    *
