Index: includes/install.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/install.inc,v
retrieving revision 1.118
diff -u -r1.118 install.inc
--- includes/install.inc	27 Dec 2009 03:37:54 -0000	1.118
+++ includes/install.inc	31 Dec 2009 03:06:32 -0000
@@ -547,7 +547,18 @@ function drupal_install_modules() {
       $file = $files[$module];
       if (isset($file->info['dependencies']) && is_array($file->info['dependencies'])) {
         foreach ($file->info['dependencies'] as $dependency) {
-          if (isset($module_list[$dependency]) && $module_list[$module] < $module_list[$dependency] +1) {
+          if (!isset($module_list[$dependency])) {
+            if (!isset($files[$dependency])) {
+              // A dependency was not found, abort installation.
+              return FALSE;
+            }
+            elseif (!$files[$dependency]->status) {
+              // Add dependencies to $module_list and install them first.
+              $module_list[$dependency] = $weight - 1;
+              $moved = TRUE;
+            }
+          }
+          elseif ($module_list[$module] < $module_list[$dependency] +1) {
             $module_list[$module] = $module_list[$dependency] +1;
             $moved = TRUE;
           }
Index: modules/simpletest/drupal_web_test_case.php
===================================================================
RCS file: /cvs/drupal/drupal/modules/simpletest/drupal_web_test_case.php,v
retrieving revision 1.186
diff -u -r1.186 drupal_web_test_case.php
--- modules/simpletest/drupal_web_test_case.php	30 Dec 2009 11:41:52 -0000	1.186
+++ modules/simpletest/drupal_web_test_case.php	31 Dec 2009 03:06:33 -0000
@@ -1140,17 +1140,14 @@ function setUp() {
     variable_set('install_profile', 'default');
     $profile_details = install_profile_info('default', 'en');
 
-    // Add the specified modules to the list of modules in the default profile.
     // Install the modules specified by the default profile.
     drupal_install_modules($profile_details['dependencies'], TRUE);
 
     drupal_static_reset('_node_types_build');
 
-    // Install additional modules one at a time in order to make sure that the
-    // list of modules is updated between each module's installation.
-    $modules = func_get_args();
-    foreach ($modules as $module) {
-      drupal_install_modules(array($module), TRUE);
+    if ($modules = func_get_args()) {
+      // Install modules needed for this test.
+      drupal_install_modules($modules, TRUE);
     }
 
     // Because the schema is static cached, we need to flush