Index: modules/simpletest/drupal_web_test_case.php
===================================================================
RCS file: /cvs/drupal/drupal/modules/simpletest/drupal_web_test_case.php,v
retrieving revision 1.166
diff -u -9 -p -r1.166 drupal_web_test_case.php
--- modules/simpletest/drupal_web_test_case.php	24 Oct 2009 04:23:50 -0000	1.166
+++ modules/simpletest/drupal_web_test_case.php	25 Oct 2009 17:29:38 -0000
@@ -1040,24 +1040,24 @@ class DrupalWebTestCase extends DrupalTe
     $db_prefix_new = Database::getConnection()->prefixTables('{simpletest' . mt_rand(1000, 1000000) . '}');
     db_update('simpletest_test_id')
       ->fields(array('last_prefix' => $db_prefix_new))
       ->condition('test_id', $this->testId)
       ->execute();
     $db_prefix = $db_prefix_new;
 
     // Create test directory ahead of installation so fatal errors and debug
     // information can be logged during installation process.
-    $directory = $this->originalFileDirectory . '/simpletest/' . substr($db_prefix, 10);
-    file_prepare_directory($directory, FILE_CREATE_DIRECTORY | FILE_MODIFY_PERMISSIONS);
+    $public_files_directory = $this->originalFileDirectory . '/simpletest/' . substr($db_prefix, 10);
+    file_prepare_directory($public_files_directory, FILE_CREATE_DIRECTORY | FILE_MODIFY_PERMISSIONS);
 
     // Log fatal errors.
     ini_set('log_errors', 1);
-    ini_set('error_log', $directory . '/error.log');
+    ini_set('error_log', $public_files_directory . '/error.log');
 
     include_once DRUPAL_ROOT . '/includes/install.inc';
     drupal_install_system();
 
     $this->preloadRegistry();
 
     // Include the default profile
     variable_set('install_profile', 'default');
     $profile_details = install_profile_info('default', 'en');
@@ -1103,30 +1103,28 @@ class DrupalWebTestCase extends DrupalTe
     variable_set('clean_url', $clean_url_original);
     variable_set('site_mail', 'simpletest@example.com');
     // Set up English language.
     unset($GLOBALS['conf']['language_default']);
     $language = language_default();
 
     // Use the test mail class instead of the default mail handler class.
     variable_set('mail_system', array('default-system' => 'TestingMailSystem'));
 
-    // Use temporary files directory with the same prefix as the database.
-    $public_files_directory  = $this->originalFileDirectory . '/' . $db_prefix;
+    // Create subdirectories for private and temporary files.
     $private_files_directory = $public_files_directory . '/private';
+    $temporary_files_directory = $public_files_directory . '/temporary';
+    file_prepare_directory($private_files_directory, FILE_CREATE_DIRECTORY);
+    file_prepare_directory($temporary_files_directory, FILE_CREATE_DIRECTORY);
 
     // Set path variables
     variable_set('file_public_path', $public_files_directory);
     variable_set('file_private_path', $private_files_directory);
-
-    // Create the directories
-    $directory = file_directory_path('public');
-    file_prepare_directory($directory, FILE_CREATE_DIRECTORY | FILE_MODIFY_PERMISSIONS);
-    file_prepare_directory($private_files_directory, FILE_CREATE_DIRECTORY);
+    variable_set('file_temporary_path', $temporary_files_directory);
 
     drupal_set_time_limit($this->timeLimit);
   }
 
   /**
    * This method is called by DrupalWebTestCase::setUp, and preloads the
    * registry from the testing site to cut down on the time it takes to
    * setup a clean environment for the current test run.
    */
@@ -1169,19 +1167,19 @@ class DrupalWebTestCase extends DrupalTe
 
     $emailCount = count(variable_get('drupal_test_email_collector', array()));
     if ($emailCount) {
       $message = format_plural($emailCount, t('!count e-mail was sent during this test.'), t('!count e-mails were sent during this test.'), array('!count' => $emailCount));
       $this->pass($message, t('E-mail'));
     }
 
     if (preg_match('/simpletest\d+/', $db_prefix)) {
       // Delete temporary files directory.
-      file_unmanaged_delete_recursive($this->originalFileDirectory . '/' . $db_prefix);
+      file_unmanaged_delete_recursive($this->originalFileDirectory . '/simpletest/' . substr($db_prefix, 10));
 
       // Remove all prefixed tables (all the tables in the schema).
       $schema = drupal_get_schema(NULL, TRUE);
       $ret = array();
       foreach ($schema as $name => $table) {
         db_drop_table($name);
       }
 
       // Return the database prefix to the original.
Index: modules/simpletest/simpletest.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/simpletest/simpletest.module,v
retrieving revision 1.80
diff -u -9 -p -r1.80 simpletest.module
--- modules/simpletest/simpletest.module	24 Oct 2009 23:12:11 -0000	1.80
+++ modules/simpletest/simpletest.module	25 Oct 2009 17:29:38 -0000
@@ -434,23 +434,23 @@ function simpletest_clean_database() {
   else {
     drupal_set_message(t('No leftover tables to remove.'));
   }
 }
 
 /**
  * Find all leftover temporary directories and remove them.
  */
 function simpletest_clean_temporary_directories() {
-  $files = scandir('public://');
+  $files = scandir('public://simpletest/');
   $count = 0;
   foreach ($files as $file) {
-    $path = 'public://' . $file;
-    if (is_dir($path) && preg_match('/^simpletest\d+/', $file)) {
+    $path = 'public://simpletest/' . $file;
+    if (is_dir($path) && (is_numeric($file) || $file == 'verbose')) {
       file_unmanaged_delete_recursive($path);
       $count++;
     }
   }
 
   if ($count > 0) {
     drupal_set_message(format_plural($count, 'Removed 1 temporary directory.', 'Removed @count temporary directories.'));
   }
   else {
Index: modules/simpletest/tests/file.test
===================================================================
RCS file: /cvs/drupal/drupal/modules/simpletest/tests/file.test,v
retrieving revision 1.45
diff -u -9 -p -r1.45 file.test
--- modules/simpletest/tests/file.test	23 Oct 2009 01:00:52 -0000	1.45
+++ modules/simpletest/tests/file.test	25 Oct 2009 17:29:39 -0000
@@ -2181,19 +2181,19 @@ class StreamWrapperTest extends DrupalWe
 
     // Test file_uri_target().
     $this->assertEqual(file_uri_target('public://foo/bar.txt'), 'foo/bar.txt', t('Got a valid stream target from public://foo/bar.txt.'));
     $this->assertFalse(file_uri_target('foo/bar.txt'), t('foo/bar.txt is not a valid stream.'));
 
     // Test file_build_uri() and file_directory_path().
     $this->assertEqual(file_build_uri('foo/bar.txt'), 'public://foo/bar.txt', t('Expected scheme was added.'));
     $this->assertEqual(file_directory_path(), variable_get('file_public_path'), t('Expected default directory path was returned.'));
     $this->assertEqual(file_directory_path('public'), variable_get('file_public_path'), t('Expected public directory path was returned.'));
-    $this->assertEqual(file_directory_path('temporary'), conf_path() . '/private/temp', t('Expected temporary directory path was returned.'));
+    $this->assertEqual(file_directory_path('temporary'), variable_get('file_temporary_path'), t('Expected temporary directory path was returned.'));
     $this->assertEqual(file_directory_path($this->scheme), variable_get('stream_public_path', 'sites/default/files'), t('Expected dummy directory path was returned.'));
     $this->assertFalse(file_directory_path('non-existent'), t('No directory path returned for invalid scheme.'));
     variable_set('file_default_scheme', 'private');
     $this->assertEqual(file_build_uri('foo/bar.txt'), 'private://foo/bar.txt', t('Got a valid URI from foo/bar.txt.'));
     $this->assertEqual(file_directory_path(), variable_get('file_private_path'), t('Expected default directory path was returned.'));
     $this->assertEqual(file_directory_path('private'), variable_get('file_private_path'), t('Expected private directory path was returned.'));
   }
 
   /**
