Index: modules/simpletest/drupal_web_test_case.php
===================================================================
RCS file: /cvs/drupal/drupal/modules/simpletest/drupal_web_test_case.php,v
retrieving revision 1.14
diff -u -r1.14 drupal_web_test_case.php
--- modules/simpletest/drupal_web_test_case.php	5 Jun 2008 21:55:45 -0000	1.14
+++ modules/simpletest/drupal_web_test_case.php	6 Jun 2008 00:42:31 -0000
@@ -191,8 +191,7 @@
    */
   function drupalCreateUser($permissions = NULL) {
     // Create a role with the given permission set.
-    $rid = $this->_drupalCreateRole($permissions);
-    if (!$rid) {
+    if (!($rid = $this->_drupalCreateRole($permissions))) {
       return FALSE;
     }
 
@@ -228,6 +227,10 @@
       $permissions = array('access comments', 'access content', 'post comments', 'post comments without approval');
     }
 
+    if (!$this->checkPermissions($permissions)) {
+      return FALSE;
+    }
+
     // Create new role.
     $role_name = $this->randomName();
     db_query("INSERT INTO {role} (name) VALUES ('%s')", $role_name);
@@ -248,6 +251,30 @@
   }
 
   /**
+   * Check to make sure that the array of permissions are valid.
+   *
+   * @param array $permissions Permissions to check.
+   * @param boolean $reset Reset cached available permissions.
+   * @return boolean Valid.
+   */
+  private function checkPermissions(array $permissions, $reset = FALSE) {
+    static $available;
+
+    if (!isset($available) || $reset) {
+      $available = array_keys(module_invoke_all('perm'));
+    }
+
+    $valid = TRUE;
+    foreach ($permissions as $permission) {
+      if (!in_array($permission, $available)) {
+        $this->fail(t('Invalid permission %permission.', array('%permission' => $permission)), t('Role'));
+        $valid = FALSE;
+      }
+    }
+    return $valid;
+  }
+
+  /**
    * Logs in a user with the internal browser. If already logged in then logs the current
    * user out before logging in the specified user. If no user is specified then a new
    * user will be created and logged in.
@@ -331,6 +358,7 @@
     actions_synchronize();
     _drupal_flush_css_js();
     $this->refreshVariables();
+    $this->checkPermissions(array(), TRUE);
 
     // Restore necessary variables.
     variable_set('install_profile', 'default');
Index: modules/simpletest/simpletest.test
===================================================================
RCS file: /cvs/drupal/drupal/modules/simpletest/simpletest.test,v
retrieving revision 1.1
diff -u -r1.1 simpletest.test
--- modules/simpletest/simpletest.test	28 May 2008 14:07:46 -0000	1.1
+++ modules/simpletest/simpletest.test	6 Jun 2008 00:42:31 -0000
@@ -22,11 +22,16 @@
    * Implementation of setUp().
    */
   function setUp() {
-    parent::setUp('simpletest');
+    if (!$this->inCURL()) {
+      parent::setUp('simpletest');
 
-    // Create and login user
-    $admin_user = $this->drupalCreateUser(array('administer unit tests'));
-    $this->drupalLogin($admin_user);
+      // Create and login user
+      $admin_user = $this->drupalCreateUser(array('administer unit tests'));
+      $this->drupalLogin($admin_user);
+    }
+    else {
+      parent::setUp();
+    }
   }
 
   /**
@@ -47,6 +52,8 @@
   function testWebTestRunner() {
     $this->pass = t('SimpleTest pass.');
     $this->fail = t('SimpleTest fail.');
+    $this->valid_permission = 'access content';
+    $this->invalid_permission = 'invalid permission';
 
     if ($this->inCURL()) {
       // Only run following code if this test is running itself through a CURL request.
@@ -73,6 +80,9 @@
   function stubTest() {
     $this->pass($this->pass);
     $this->fail($this->fail);
+
+    $this->drupalCreateUser(array($this->valid_permission));
+    $this->drupalCreateUser(array($this->invalid_permission));
   }
 
   /**
@@ -81,6 +91,9 @@
   function confirmStubTestResults() {
     $this->assertAssertion($this->pass, '[Other]', 'Pass');
     $this->assertAssertion($this->fail, '[Other]', 'Fail');
+
+    $this->assertAssertion(t('Created permissions: @perms', array('@perms' => $this->valid_permission)), '[Role]', 'Pass');
+    $this->assertAssertion(t('Invalid permission %permission.', array('%permission' => $this->invalid_permission)), '[Role]', 'Fail');
   }
 
   /**
@@ -93,6 +106,7 @@
    * @return Assertion result.
    */
   function assertAssertion($message, $type, $status) {
+    $message = trim(strip_tags($message));
     $found = FALSE;
     foreach ($this->results['assertions'] as $assertion) {
       if ($assertion['message'] == $message &&
@@ -154,7 +168,7 @@
    * @return string Extracted text.
    */
   function asText(SimpleXMLElement $element) {
-    return strip_tags($element->asXML());
+    return trim(strip_tags($element->asXML()));
   }
 
   /**
