Index: drupal_web_test_case.php
===================================================================
--- drupal_web_test_case.php	(revision 1779)
+++ drupal_web_test_case.php	(working copy)
@@ -406,7 +406,7 @@
   /**
    * Run all tests in this class.
    */
-  public function run() {
+  public function run($testname = "") {
     // Initialize verbose debugging.
     simpletest_verbose(NULL, file_directory_path(), get_class($this));
 
@@ -423,7 +423,7 @@
     // Iterate through all the methods in this class.
     foreach (get_class_methods(get_class($this)) as $method) {
       // If the current method starts with "test", run it - it's a test.
-      if (strtolower(substr($method, 0, 4)) == 'test') {
+      if (strtolower(substr($method, 0, 4)) == 'test' && ( $testname=="" || $method == 'test' . $testname)) {
         $this->setUp();
         try {
           $this->$method();
Index: simpletest.module
===================================================================
--- simpletest.module	(revision 1779)
+++ simpletest.module	(working copy)
@@ -63,6 +63,14 @@
     'type' => MENU_CALLBACK,
     'file' => 'simpletest.pages.inc',
   );
+  $items['admin/build/testing/run/%/%'] = array(
+    'title' => 'Run Test',
+    'page callback' => 'simpletest_run_single_test',
+    'page arguments' => array(4, 5),
+    'access arguments' => array('administer unit tests'),
+    'type' => MENU_NORMAL_ITEM,
+    'file' => 'simpletest.pages.inc',
+  );
   return $items;
 }
 
@@ -142,7 +150,7 @@
  *   Which reporter to use. Allowed values are: text, xml, html and drupal,
  *   drupal being the default.
  */
-function simpletest_run_tests($test_list, $reporter = 'drupal') {
+function simpletest_run_tests($test_list, $reporter = 'drupal', $testcase = '') {
   cache_clear_all();
 //  $test_id = db_insert('simpletest_test_id')
 //    ->useDefaults(array('test_id'))
@@ -163,7 +171,7 @@
   $batch = array(
     'title' => t('Running SimpleTests'),
     'operations' => array(
-      array('_simpletest_batch_operation', array($test_list, $test_id)),
+      array('_simpletest_batch_operation', array($test_list, $test_id, $testcase)),
     ),
     'finished' => '_simpletest_batch_finished',
     'progress_message' => '',
@@ -214,7 +222,7 @@
 /**
  * Batch operation callback.
  */
-function _simpletest_batch_operation($test_list_init, $test_id, &$context) {
+function _simpletest_batch_operation($test_list_init, $test_id, $testcase, &$context) {
   // Get working values.
 //  sfp('preparing for a test');
   if (!isset($context['sandbox']['max'])) {
@@ -248,7 +256,7 @@
 
   $test = new $test_class($test_id);
 //  sfp($test, 'pre running');
-  $test->run();
+  $test->run($testcase);
 //  sfp($test, 'post running');
   $size = count($test_list);
   $info = $test->getInfo();
@@ -421,6 +429,22 @@
           // Valid test class, retrieve test information.
           $info = call_user_func(array($class, 'getInfo'));
 
+          $testcases = array();
+          foreach (get_class_methods($class) as $method) {
+            if (strtolower(substr($method, 0, 4)) == 'test') {
+              $testcase = substr($method, 4);
+              $testcases[] = l($testcase, "admin/build/testing/run/$class/$testcase", 
+                            array('attributes' => array('title' => 'Run only this Test',
+                                                        'target' => '_blank',
+                                                       ),
+                            ));
+            }
+          }
+          if (!empty($testcases)) {
+            asort($testcases);
+            $info['description'] .= ' Includes ' . implode(', ', $testcases);
+          }
+          
           // Initialize test groups.
           if (!isset($groups[$info['group']])) {
             $groups[$info['group']] = array();
Index: simpletest.pages.inc
===================================================================
--- simpletest.pages.inc	(revision 1779)
+++ simpletest.pages.inc	(working copy)
@@ -485,3 +485,14 @@
 
   return system_settings_form($form);
 }
+
+function simpletest_run_single_test($class, $test) {
+  $classes = simpletest_test_get_all_classes();
+  if (isset($classes[$class]['file'])) {
+    require_once $classes[$class]['file'];
+  }
+
+  if (class_exists($class)) {
+    simpletest_run_tests(array($class), 'drupal', $test);
+  }
+}
\ No newline at end of file
