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:23:32 -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();
   }

