? .DS_Store
? .cache
? .cvsignore
? .git
? .project
? .settings
? file_test_cleanup_0.patch
? test
? modules/.DS_Store
? sites/all/modules
? sites/default/files
? sites/default/settings.php
? sites/default/test
Index: modules/simpletest/drupal_web_test_case.php
===================================================================
RCS file: /cvs/drupal/drupal/modules/simpletest/drupal_web_test_case.php,v
retrieving revision 1.42
diff -u -p -r1.42 drupal_web_test_case.php
--- modules/simpletest/drupal_web_test_case.php	19 Sep 2008 02:47:38 -0000	1.42
+++ modules/simpletest/drupal_web_test_case.php	19 Sep 2008 08:22:00 -0000
@@ -311,6 +311,7 @@ class DrupalWebTestCase {
         $this->tearDown();
       }
     }
+    drupal_get_messages();
     restore_error_handler();
   }
 
Index: modules/simpletest/tests/file.test
===================================================================
RCS file: /cvs/drupal/drupal/modules/simpletest/tests/file.test,v
retrieving revision 1.4
diff -u -p -r1.4 file.test
--- modules/simpletest/tests/file.test	17 Sep 2008 07:11:58 -0000	1.4
+++ modules/simpletest/tests/file.test	19 Sep 2008 08:22:01 -0000
@@ -15,6 +15,84 @@ function file_test_validator($file, $err
 }
 
 /**
+ * Base class for file tests that adds some additional file specific
+ * assertions and helper functions.
+ */
+class FileTestCase extends DrupalWebTestCase {
+  /**
+   * Helper function to test the permissions of a file.
+   *
+   * @param $filepath
+   *   String file path.
+   * @param $expected_mode
+   *   Octal integer like 0664 or 0777.
+   * @param $message
+   *   Optional message.
+   */
+  function assertFilePermissions($filepath, $expected_mode, $message = NULL) {
+    // Mask out all but the last three octets.
+    $actual_mode = fileperms($filepath) & 511;
+    if (is_null($message)) {
+      if ($actual_mode == $expected_mode) {
+        $message = t("File permissions set correctly.");
+      }
+      else {
+        $message = t("Expected file permission to be %expected, actually were %actual.", array('%actual' => decoct($actual_mode), '%expected' => decoct($expected_mode)));
+      }
+    }
+    $this->assertEqual($actual_mode, $expected_mode, $message);
+  }
+
+  /**
+   * Create a directory and assert it exists.
+   *
+   * @param $path
+   *   Optional string with a directory path. If none is provided, a random
+   *   name in the site's files directory will be used.
+   * @return
+   *   The path to the directory.
+   */
+  function createDirectory($path = NULL) {
+    // A directory to operate on.
+    if (is_null($path)) {
+      $path = file_directory_path() . '/' . $this->randomName();
+    }
+    $this->assertTrue(mkdir($path) && is_dir($path), t('Directory was created successfully.'));
+    return $path;
+  }
+
+  /**
+   * Create a file and save it to the files table and assert that it occurs
+   * correctly.
+   *
+   * @param $filepath
+   *   Optional string specifying the file path. If none is provided then a
+   *   randomly named file will be created in the site's files directory.
+   * @return
+   *   File object.
+   */
+  function createFile($filepath = NULL) {
+    if (is_null($filepath)) {
+      $filepath = file_directory_path() . '/' . $this->randomName();
+    }
+
+    file_put_contents($filepath, '');
+    $this->assertTrue(is_file($filepath), t("The test file exists on the disk."));
+
+    $file = new stdClass();
+    $file->filepath = $filepath;
+    $file->filename = basename($file->filepath);
+    $file->filemime = 'text/plain';
+    $file->uid = 1;
+    $file->timestamp = REQUEST_TIME;
+    $file->filesize = 0;
+    $this->assertNotIdentical(drupal_write_record('files', $file), FALSE, t("The file was added to the database."));
+
+    return $file;
+  }
+}
+
+/**
  *  This will run tests against the file validation functions (file_validate_*).
  */
 class FileValidateTest extends DrupalWebTestCase {
@@ -44,8 +122,11 @@ class FileValidateTest extends DrupalWeb
     $this->non_image->filename = basename($this->non_image->filepath);
   }
 
+  /**
+   * Test the file_validate() function.
+   */
   function testFileValidate() {
-    // Empty validators
+    // Empty validators.
     $this->assertEqual(file_validate($this->image, array()), array(), t('Validating an empty array works succesfully.'));
 
     // Use the file_test.module's test validator to ensure that passing tests
@@ -89,13 +170,13 @@ class FileValidateTest extends DrupalWeb
    *  The image will be resized if it's too large.
    */
   function testFileValidateImageResolution() {
-    // Non-images
+    // Non-images.
     $errors = file_validate_image_resolution($this->non_image);
     $this->assertEqual(count($errors), 0, t("Shouldn't get any errors for a non-image file."), 'File');
     $errors = file_validate_image_resolution($this->non_image, '50x50', '100x100');
     $this->assertEqual(count($errors), 0, t("Don't check the resolution on non files."), 'File');
 
-    // Minimum size
+    // Minimum size.
     $errors = file_validate_image_resolution($this->image);
     $this->assertEqual(count($errors), 0, t("No errors for an image when there is no minimum or maximum resolution."), 'File');
     $errors = file_validate_image_resolution($this->image, 0, '200x1');
@@ -105,7 +186,7 @@ class FileValidateTest extends DrupalWeb
     $errors = file_validate_image_resolution($this->image, 0, '200x200');
     $this->assertEqual(count($errors), 1, t("Small images report an error."), 'File');
 
-    // Maximum size
+    // Maximum size.
     if (image_get_toolkit()) {
       // Copy the image so that the original doesn't get resized.
       $temp_dir = file_directory_temp();
@@ -126,9 +207,6 @@ class FileValidateTest extends DrupalWeb
       $errors = file_validate_image_resolution($this->image, '5x10');
       $this->assertEqual(count($errors), 1, t("Oversize images that can't be scaled get an error."), 'File');
     }
-
-    // Clear out any resizing messages.
-    drupal_get_messages();
   }
 
   /**
@@ -164,7 +242,7 @@ class FileValidateTest extends DrupalWeb
     $original_user = $user;
     drupal_save_session(FALSE);
 
-    // Run these test as uid = 1
+    // Run these test as uid = 1.
     $user = user_load(array('uid' => 1));
 
     $file = new stdClass();
@@ -173,7 +251,7 @@ class FileValidateTest extends DrupalWeb
     $this->assertEqual(count($errors), 0, t("No size limits enforced on uid=1."), 'File');
 
 
-    // Run these test as a regular user
+    // Run these test as a regular user.
     $user = $this->drupalCreateUser();
 
     $file = new stdClass();
@@ -193,52 +271,54 @@ class FileValidateTest extends DrupalWeb
   }
 }
 
-
 /**
- *  This will run tests against file validation.
- *
+ *  Tests the file_save_data() function.
  */
-class FileLoadSaveTest extends DrupalWebTestCase {
+class FileSaveDataTest extends FileTestCase {
   /**
    * Implementation of getInfo().
    */
   function getInfo() {
     return array(
-      'name' => t('File loading and saving'),
-      'description' => t('Tests the file loading and saving functions.'),
+      'name' => t('File save'),
+      'description' => t('Tests the file save data function.'),
       'group' => t('File'),
     );
   }
 
+  /**
+   * Test the file_save_data() function.
+   */
   function testFileSaveData() {
     $contents = $this->randomName(8);
 
-    // No filename
+    // No filename.
     $filepath = file_save_data($contents);
     $this->assertTrue($filepath, t("Unnamed file saved correctly"));
     $this->assertEqual(file_directory_path(), dirname($filepath), t("File was placed in Drupal's files directory"));
     $this->assertEqual($contents, file_get_contents(realpath($filepath)), t("Contents of the file are correct."));
 
-    // Provide a filename
+    // Provide a filename.
     $filepath = file_save_data($contents, 'asdf.txt', FILE_EXISTS_REPLACE);
     $this->assertTrue($filepath, t("Unnamed file saved correctly"));
     $this->assertEqual(file_directory_path(), dirname($filepath), t("File was placed in Drupal's files directory."));
     $this->assertEqual('asdf.txt', basename($filepath), t("File was named correctly."));
     $this->assertEqual($contents, file_get_contents(realpath($filepath)), t("Contents of the file are correct."));
+    $this->assertFilePermissions($filepath, 0664);
   }
 }
 
 /**
- * Directory related tests.
+ * Test the file_save_upload() function.
  */
-class FileDirectoryTest extends DrupalWebTestCase {
+class FileSaveUploadTest extends FileTestCase {
   /**
    * Implementation of getInfo().
    */
   function getInfo() {
     return array(
-      'name' => t('File paths and directories'),
-      'description' => t('Tests operations dealing with directories.'),
+      'name' => t('File uploading'),
+      'description' => t('Tests the file uploading functions.'),
       'group' => t('File'),
     );
   }
@@ -247,46 +327,86 @@ class FileDirectoryTest extends DrupalWe
    * Implementation of setUp().
    */
   function setUp() {
-    parent::setUp();
+    // Need to enable the test module for an upload target.
+    parent::setUp('file_test');
+  }
 
-    // A directory to operate on.
-    $this->directory = file_directory_path() . '/' . $this->randomName();
-    // Save initial temp directory as this gets modified.
-    $this->initial_temp_directory = variable_get('file_directory_temp', NULL);
+  /**
+   * Test the file_save_upload() function.
+   */
+  function testFileSaveUpload() {
+    $max_fid_before = db_result(db_query("SELECT MAX(fid) AS fid FROM {files}"));
+
+    $upload_user = $this->drupalCreateUser(array('access content'));
+    $this->drupalLogin($upload_user);
+
+    $image = current($this->drupalGetTestFiles('image'));
+    $this->assertTrue(is_file($image->filename), t("The file we're going to upload exists."));
+    $edit = array('files[file_test_upload]' => realpath($image->filename));
+    $this->drupalPost('file-test/upload', $edit, t('Submit'));
+    $this->assertResponse(200, t("Received a 200 response for posted test file."));
+
+    $max_fid_after = db_result(db_query("SELECT MAX(fid) AS fid FROM {files}"));
+    $this->assertTrue($max_fid_after > $max_fid_before, t("A new file was created."));
+
+    // FIXME: this is some stupidity because we don't have a file_load().
+    // Replace this once the hook_file patch gets committed in 2010.
+    $file = db_fetch_object(db_query('SELECT f.* FROM {files} f WHERE f.fid = %d', array($max_fid_after)));
+    $this->assertTrue($file, t("Loaded the file."));
   }
+}
 
+/**
+ * Directory related tests.
+ */
+class FileDirectoryTest extends FileTestCase {
   /**
-   * Check directory creation and validation
+   * Implementation of getInfo().
+   */
+  function getInfo() {
+    return array(
+      'name' => t('File paths and directories'),
+      'description' => t('Tests operations dealing with directories.'),
+      'group' => t('File'),
+    );
+  }
+
+  /**
+   * Test the file_directory_path() function.
    */
   function testFileCheckDirectory() {
+    // A directory to operate on.
+    $directory = file_directory_path() . '/' . $this->randomName();
+    $this->assertFalse(is_dir($directory), t('Directory does not exist prior to testing.'));
+
     // non-existent directory
     $form_element = $this->randomName();
-    $this->assertFalse(file_check_directory($this->directory, 0, $form_element), t("Error reported for non-existing directory."), 'File');
+    $this->assertFalse(file_check_directory($directory, 0, $form_element), t("Error reported for non-existing directory."), 'File');
 
     // check that an error was set for the form element above
     $errors = form_get_errors();
-    $this->assertEqual($errors[$form_element], t('The directory %directory does not exist.', array('%directory' => $this->directory)), t("Properly generated an error for the passed form element."), 'File');
+    $this->assertEqual($errors[$form_element], t('The directory %directory does not exist.', array('%directory' => $directory)), t("Properly generated an error for the passed form element."), 'File');
 
     // make a directory
-    $this->assertTrue(file_check_directory($this->directory, FILE_CREATE_DIRECTORY), t("No error reported when creating a new directory"), 'File');
+    $this->assertTrue(file_check_directory($directory, FILE_CREATE_DIRECTORY), t("No error reported when creating a new directory"), 'File');
 
     // make sure directory actually exists
-    $this->assertTrue(is_dir($this->directory), t("Directory actually exists"), 'File');
+    $this->assertTrue(is_dir($directory), t("Directory actually exists"), 'File');
 
     // make directory read only
-    @chmod($this->directory, 0444);
+    @chmod($directory, 0444);
     $form_element = $this->randomName();
-    $this->assertFalse(file_check_directory($this->directory, 0, $form_element), t("Error reported for a non-writeable directory"), 'File');
+    $this->assertFalse(file_check_directory($directory, 0, $form_element), t("Error reported for a non-writeable directory"), 'File');
 
     // check if form error was set
     $errors = form_get_errors();
-    $this->assertEqual($errors[$form_element], t('The directory %directory is not writable', array('%directory' => $this->directory)), t("Properly generated an error for the passed form element."), 'File');
+    $this->assertEqual($errors[$form_element], t('The directory %directory is not writable', array('%directory' => $directory)), t("Properly generated an error for the passed form element."), 'File');
 
     // test directory permission modification
-    $this->assertTrue(file_check_directory($this->directory, FILE_MODIFY_PERMISSIONS), t("No error reported when making directory writeable."), 'File');
+    $this->assertTrue(file_check_directory($directory, FILE_MODIFY_PERMISSIONS), t("No error reported when making directory writeable."), 'File');
 
     // verify directory actually is writeable
-    $this->assertTrue(is_writeable($this->directory), t("Directory is writeable"), 'File');
+    $this->assertTrue(is_writeable($directory), t("Directory is writeable"), 'File');
 
     // remove .htaccess file to then test the writing of .htaccess file
     @unlink(file_directory_path() .'/.htaccess');
@@ -318,7 +438,8 @@ class FileDirectoryTest extends DrupalWe
   }
 
   /**
-   *  This tests that a file is actually in the specified directory, to prevent exploits.
+   * This tests that a file is actually in the specified directory, to prevent
+   * exploits.
    */
   function testFileCheckLocation() {
     $source = 'misc/xyz.txt';
@@ -347,23 +468,26 @@ class FileDirectoryTest extends DrupalWe
 
 
   /**
-   * This will take a directory and path, and find a valid filepath that is not taken by another file.
-   * First we test against an imaginary file that does not exist in a directory.
-   * Then we test against a file that already exists within that directory.
-   * @TODO: Finally we copy a file into a directory several times, to ensure a properly iterating filename suffix.
+   * This will take a directory and path, and find a valid filepath that is not
+   * taken by another file.
    */
   function testFileCreateNewFilepath() {
+    // First we test against an imaginary file that does not exist in a
+    // directory.
     $basename = 'xyz.txt';
     $directory = 'misc';
     $original = $directory .'/'. $basename;
     $path = file_create_filename($basename, $directory);
     $this->assertEqual($path, $original, t("New filepath %new equals %original.", array('%new' => $path, '%original' => $original)), 'File');
 
+    // Then we test against a file that already exists within that directory.
     $basename = 'druplicon.png';
     $original = $directory .'/'. $basename;
     $expected = $directory .'/druplicon_0.png';
     $path = file_create_filename($basename, $directory);
     $this->assertEqual($path, $expected, t("Creating a new filepath from %original equals %new.", array('%new' => $path, '%original' => $original)), 'File');
+
+    // @TODO: Finally we copy a file into a directory several times, to ensure a properly iterating filename suffix.
   }
 
   /**
@@ -396,112 +520,151 @@ class FileDirectoryTest extends DrupalWe
 
 
 /**
- * Deletion related tests
+ * Deletion related tests.
  */
-class FileCopyDeleteMoveTest extends DrupalWebTestCase {
+class FileDeleteTest extends FileTestCase {
   /**
    * Implementation of getInfo().
    */
   function getInfo() {
     return array(
-      'name' => t('File management'),
-      'description' => t('Tests the file copy, delete and move functions.'),
+      'name' => t('File delete'),
+      'description' => t('Tests the file delete function.'),
       'group' => t('File'),
     );
   }
 
   /**
-   * Implementation of setUp().
+   * Delete a normal file.
    */
-  function setUp() {
-    // Install file_test module
-    parent::setUp();
-
-    // A directory to operate on.
-    $this->dirname = file_directory_path() . '/' . $this->randomName();
-    mkdir($this->dirname);
-
+  function testNormal() {
     // Create a file for testing
-    $f = new stdClass();
-    $f->filepath = file_directory_path() . '/' . $this->randomName();
-    $f->filename = basename($f->filepath);
-    touch($f->filepath);
-    $f->filemime = 'text/plain';
-    $f->uid = 1;
-    $f->timestamp = REQUEST_TIME;
-    $f->filesize = 0;
-    drupal_write_record('files', $f);
-    $this->file = $f;
-  }
+    $file = $this->createFile();
 
-  function testFileDelete() {
     // Delete a regular file
-    $this->assertTrue(is_file($this->file->filepath), t("File exists."));
-    $this->assertTrue(file_delete($this->file->filepath), t("Deleted worked."));
-    $this->assertFalse(file_exists($this->file->filepath), t("Test file has actually been deleted."));
+    $this->assertTrue(file_delete($file->filepath), t("Deleted worked."));
+    $this->assertFalse(file_exists($file->filepath), t("Test file has actually been deleted."));
   }
 
-  function testFileDelete_Missing() {
+  /**
+   * Try deleting a missing file.
+   */
+  function testMissing() {
     // Try to delete a non-existing file
     $this->assertTrue(file_delete(file_directory_path() . '/' . $this->randomName()), t("Returns true when deleting a non-existant file."));
   }
 
-  function testFileDelete_Directory() {
+  /**
+   * Try deleting a directory.
+   */
+  function testDirectory() {
+    // A directory to operate on.
+    $this->dirname = $this->createDirectory();
+
     // Try to delete a directory
-    $this->assertTrue(is_dir($this->dirname), t("Directory exists."));
     $this->assertFalse(file_delete($this->dirname), t("Could not delete the delete directory."));
     $this->assertTrue(file_exists($this->dirname), t("Directory has not been deleted."));
   }
+}
+
+
+/**
+ * Move related tests
+ */
+class FileMoveTest extends FileTestCase {
+  /**
+   * Implementation of getInfo().
+   */
+  function getInfo() {
+    return array(
+      'name' => t('File moving'),
+      'description' => t('Tests the file move function.'),
+      'group' => t('File'),
+    );
+  }
+
+  /**
+   * Move a normal file.
+   */
+  function testNormal() {
+    // Create a file for testing
+    $file = $this->createFile();
 
-  function testFileMove() {
     // Moving to a new name.
-    $this->assertTrue(file_exists($this->file->filepath), t("File exists before moving."));
     $desired_filepath = file_directory_path() . '/' . $this->randomName();
-    $new_filepath = file_move($this->file->filepath, $desired_filepath, FILE_EXISTS_ERROR);
+    $new_filepath = file_move($file->filepath, $desired_filepath, FILE_EXISTS_ERROR);
     $this->assertTrue($new_filepath, t("Move was successful."));
     $this->assertEqual($new_filepath, $desired_filepath, t("Returned expected filepath."));
     $this->assertTrue(file_exists($new_filepath), t("File exists at the new location."));
-    $this->assertFalse(file_exists($this->file->filepath), t("No file remains at the old location."));
+    $this->assertFalse(file_exists($file->filepath), t("No file remains at the old location."));
+    $this->assertFilePermissions($new_filepath, 0664);
 
     // Moving with rename.
     $desired_filepath = file_directory_path() . '/' . $this->randomName();
     $this->assertTrue(file_exists($new_filepath), t("File exists before moving."));
-    $this->assertTrue(touch($desired_filepath), t('Created a file so a rename will have to happen.'));
+    $this->assertTrue(file_put_contents($desired_filepath, ' '), t('Created a file so a rename will have to happen.'));
     $newer_filepath = file_move($new_filepath, $desired_filepath, FILE_EXISTS_RENAME);
     $this->assertTrue($newer_filepath, t("Move was successful."));
     $this->assertNotEqual($newer_filepath, $desired_filepath, t("Returned expected filepath."));
     $this->assertTrue(file_exists($newer_filepath), t("File exists at the new location."));
     $this->assertFalse(file_exists($new_filepath), t("No file remains at the old location."));
+    $this->assertFilePermissions($newer_filepath, 0664);
 
     // TODO: test moving to a directory (rather than full directory/file path)
   }
 
-  function testFileMove_Missing() {
-    // Move non-existant file
+  /**
+   * Try to move a missing file.
+   */
+  function testMissing() {
+    // Move non-existant file.
     $new_filepath = file_move($this->randomName(), $this->randomName());
     $this->assertFalse($new_filepath, t("Moving a missing file fails"));
-
-    drupal_get_messages();
   }
 
-  function testFileMove_OverwriteSelf() {
+  /**
+   * Try to move a file onto itself.
+   */
+  function testOverwriteSelf() {
+    // Create a file for testing.
+    $file = $this->createFile();
+
     // Move the file onto itself without renaming shouldn't make changes.
-    $this->assertTrue(file_exists($this->file->filepath), t("File exists before moving."));
-    $new_filepath = file_move($this->file->filepath, $this->file->filepath, FILE_EXISTS_REPLACE);
+    $new_filepath = file_move($file->filepath, $file->filepath, FILE_EXISTS_REPLACE);
     $this->assertFalse($new_filepath, t("Moving onto itself without renaming fails."));
-    $this->assertTrue(file_exists($this->file->filepath), t("File exists after moving onto itself."));
+    $this->assertTrue(file_exists($file->filepath), t("File exists after moving onto itself."));
 
     // Move the file onto itself with renaming will result in a new filename.
-    $this->assertTrue(file_exists($this->file->filepath), t("File exists before moving."));
-    $new_filepath = file_move($this->file->filepath, $this->file->filepath, FILE_EXISTS_RENAME);
+    $new_filepath = file_move($file->filepath, $file->filepath, FILE_EXISTS_RENAME);
     $this->assertTrue($new_filepath, t("Moving onto itself with renaming works."));
-    $this->assertFalse(file_exists($this->file->filepath), t("Original file has been removed."));
+    $this->assertFalse(file_exists($file->filepath), t("Original file has been removed."));
     $this->assertTrue(file_exists($new_filepath), t("File exists after moving onto itself."));
+  }
+}
+
 
-    drupal_get_messages();
+/**
+ * Copy related tests.
+ */
+class FileCopyTest extends FileTestCase {
+  /**
+   * Implementation of getInfo().
+   */
+  function getInfo() {
+    return array(
+      'name' => t('File copying'),
+      'description' => t('Tests the file copy function.'),
+      'group' => t('File'),
+    );
   }
 
-  function testFileCopy() {
+  /**
+   * Copy a normal file.
+   */
+  function testNormal() {
+    // Create a file for testing
+    $this->file = $this->createFile();
+
     // Copying to a new name.
     $desired_filepath = file_directory_path() . '/' . $this->randomName();
     $new_filepath = file_copy($this->file->filepath, $desired_filepath, FILE_EXISTS_ERROR);
@@ -509,32 +672,40 @@ class FileCopyDeleteMoveTest extends Dru
     $this->assertEqual($new_filepath, $desired_filepath, t("Returned expected filepath."));
     $this->assertTrue(file_exists($this->file->filepath), t("Original file remains."));
     $this->assertTrue(file_exists($new_filepath), t("New file exists."));
+    $this->assertFilePermissions($new_filepath, 0664);
 
     // Copying with rename.
     $desired_filepath = file_directory_path() . '/' . $this->randomName();
-    $this->assertTrue(touch($desired_filepath), t('Created a file so a rename will have to happen.'));
+    $this->assertTrue(file_put_contents($desired_filepath, ' '), t('Created a file so a rename will have to happen.'));
     $newer_filepath = file_copy($new_filepath, $desired_filepath, FILE_EXISTS_RENAME);
     $this->assertTrue($newer_filepath, t("Copy was successful."));
     $this->assertNotEqual($newer_filepath, $desired_filepath, t("Returned expected filepath."));
     $this->assertTrue(file_exists($this->file->filepath), t("Original file remains."));
     $this->assertTrue(file_exists($new_filepath), t("New file exists."));
+    $this->assertFilePermissions($new_filepath, 0664);
 
     // TODO: test copying to a directory (rather than full directory/file path)
   }
 
-  function testFileCopy_NonExistant() {
+  /**
+   * Copy a non-existant file.
+   */
+  function testNonExistant() {
     // Copy non-existant file
     $desired_filepath = $this->randomName();
     $this->assertFalse(file_exists($desired_filepath), t("Randomly named file doesn't exists."));
     $new_filepath = file_copy($desired_filepath, $this->randomName());
     $this->assertFalse($new_filepath, t("Copying a missing file fails"));
-
-    drupal_get_messages();
   }
 
-  function testFileCopy_OverwriteSelf() {
+  /**
+   * Copy a file onto itself.
+   */
+  function testOverwriteSelf() {
+    // Create a file for testing
+    $this->file = $this->createFile();
+
     // Copy the file onto itself with renaming works.
-    $this->assertTrue(file_exists($this->file->filepath), t("File exists before copying."));
     $new_filepath = file_copy($this->file->filepath, $this->file->filepath, FILE_EXISTS_RENAME);
     $this->assertTrue($new_filepath, t("Copying onto itself with renaming works."));
     $this->assertNotEqual($new_filepath, $this->file->filepath, t("Copied file has a new name."));
@@ -542,26 +713,21 @@ class FileCopyDeleteMoveTest extends Dru
     $this->assertTrue(file_exists($new_filepath), t("Copied file exists after copying onto itself."));
 
     // Copy the file onto itself without renaming fails.
-    $this->assertTrue(file_exists($this->file->filepath), t("File exists before copying."));
     $new_filepath = file_copy($this->file->filepath, $this->file->filepath, FILE_EXISTS_ERROR);
     $this->assertFalse($new_filepath, t("Copying onto itself without renaming fails."));
     $this->assertTrue(file_exists($this->file->filepath), t("File exists after copying onto itself."));
 
     // Copy the file into same directory without renaming fails.
-    $this->assertTrue(file_exists($this->file->filepath), t("File exists before copying."));
     $new_filepath = file_copy($this->file->filepath, dirname($this->file->filepath), FILE_EXISTS_ERROR);
     $this->assertFalse($new_filepath, t("Copying onto itself fails."));
     $this->assertTrue(file_exists($this->file->filepath), t("File exists after copying onto itself."));
 
     // Copy the file into same directory with renaming works.
-    $this->assertTrue(file_exists($this->file->filepath), t("File exists before copying."));
     $new_filepath = file_copy($this->file->filepath, dirname($this->file->filepath), FILE_EXISTS_RENAME);
     $this->assertTrue($new_filepath, t("Copying into same directory works."));
     $this->assertNotEqual($new_filepath, $this->file->filepath, t("Copied file has a new name."));
     $this->assertTrue(file_exists($this->file->filepath), t("Original file exists after copying onto itself."));
     $this->assertTrue(file_exists($new_filepath), t("Copied file exists after copying onto itself."));
-
-    drupal_get_messages();
   }
 }
 
Index: modules/simpletest/tests/file_test.info
===================================================================
RCS file: modules/simpletest/tests/file_test.info
diff -N modules/simpletest/tests/file_test.info
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ modules/simpletest/tests/file_test.info	19 Sep 2008 08:22:01 -0000
@@ -0,0 +1,8 @@
+; $Id$
+name = "File test"
+description = "Support module for file handling tests."
+package = Testing
+version = VERSION
+core = 7.x
+files[] = file_test.module
+hidden = TRUE
Index: modules/simpletest/tests/file_test.module
===================================================================
RCS file: modules/simpletest/tests/file_test.module
diff -N modules/simpletest/tests/file_test.module
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ modules/simpletest/tests/file_test.module	19 Sep 2008 08:22:01 -0000
@@ -0,0 +1,53 @@
+<?php
+// $Id$
+
+/**
+ * @file
+ * Helper module for the file tests.
+ */
+
+
+/**
+ * Implementation of hook_menu().
+ */
+function file_test_menu() {
+  $items['file-test/upload'] = array(
+    'title' => t('Upload test'),
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('_file_test_form'),
+    'access arguments' => array('access content'),
+    'type' => MENU_CALLBACK,
+  );
+  return $items;
+}
+
+/**
+ * Form to test file uploads.
+ */
+function _file_test_form(&$form_state) {
+  $form['#attributes'] = array('enctype' => 'multipart/form-data');
+  $form['file_test_upload'] = array(
+    '#type' => 'file',
+    '#title' => t('Upload an image'),
+  );
+  $form['submit'] = array(
+    '#type' => 'submit',
+    '#value' => t('Submit'),
+  );
+  return $form;
+}
+
+/**
+ * Process the upload.
+ */
+function _file_test_form_submit(&$form, &$form_state) {
+  // Validate the uploaded picture.
+  $file = file_save_upload('file_test_upload', array('file_validate_is_image' => array()));
+  if ($file) {
+    $form_state['values']['file_test_upload'] = $file;
+    drupal_set_message(t('File @filepath was uploaded.', array('@filepath' => $file->filepath)));
+  }
+  else {
+    drupal_set_message(t('Epic upload FAIL!'), 'error');
+  }
+}
\ No newline at end of file
