Index: drupal_test_case.php
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/simpletest/drupal_test_case.php,v
retrieving revision 1.34
diff -u -r1.34 drupal_test_case.php
--- drupal_test_case.php	23 Sep 2007 08:35:23 -0000	1.34
+++ drupal_test_case.php	25 Dec 2007 17:15:08 -0000
@@ -13,6 +13,7 @@
   var $_cleanupVariables = array();
   var $_cleanupUsers     = array();
   var $_cleanupRoles     = array();
+  var $_cleanupNodes     = array();
 
 
   function DrupalTestCase($label = NULL) {
@@ -24,6 +25,66 @@
     }
     $this->WebTestCase($label);
   }
+
+  /**
+   * Creates a node based on default settings.
+   *
+   * @param settings An array of settings to change from the defaults, in the form of 'body' => 'Hello, world!'
+   * @param user A user to use as the author for the node.
+   * @param node A node object if applicable to work with.
+   */
+  function drupalCreateNode($settings = array(), $user = NULL, $node = NULL) {
+    $modifying = FALSE;
+    if (!is_object($node)) {
+      $modifying = TRUE;
+      $node = (object)$node;
+    }
+    if ($user === NULL) {
+      global $user;
+    }
+
+    // Populate defaults array
+    $defaults = array();
+    $defaults->body      = $this->randomName(32 + $i);
+    $defaults->title     = $this->randomName(8 + $i);
+    $defaults->teaser    = $node->body;
+    $defaults->comment   = '2';
+    $defaults->changed   = time();
+    // If we already have a node, we use the original node's created time, and this
+    if ($modifying) {
+      $defaults->created = $defaults->time;
+    }
+    else {
+      $defaults->created = $node->changed;
+    }
+    $defaults->date      = format_date($node->created, 'custom', 'Y-m-d H:i:s O');
+    $defaults->format    = '1';
+    $defaults->moderate  = 0;
+    $defaults->name      = $user->name;
+    $defaults->uid       = $user->uid;
+    $defaults->promote   = 0;
+    $defaults->revision  = 1;
+    $defaults->log     = '';
+    $defaults->status    = '1';
+    $defaults->sticky    = 0;
+    $defaults->type      = 'page';
+    $defaults->revisions = NULL;
+    $defaults->taxonomy  = NULL;
+
+    foreach (array('body', 'title', 'teaser', 'comment', 'created', 'date', 'format', 'moderate', 'name', 'uid', 'promote', 'revision', 'log', 'status', 'sticky', 'type', 'revisions', 'changed', 'taxonomy') as $property) {
+      // If the settings array has a corresponding value, use it.
+      if (isset($settings[$property])) {
+        $node->$property = $settings[$property];
+      }
+      else {
+        $node->$property = $defaults->$property;
+      }
+    }
+    node_save(&$node);
+    $this->_cleanupNodes[] = $node->nid;
+    return $node;
+  }
+
   
   /**
    * @abstract Checks to see if we need to send 
@@ -384,6 +445,10 @@
         $this->assertTrue(TRUE, "$type: $msg");
       }
     }
+
+    foreach ($this->_cleanupNodes as $nid) {
+      node_delete($node);
+    }
     
     parent::tearDown();
   }

