Index: modules/simpletest/tests/file.test
===================================================================
RCS file: /cvs/drupal/drupal/modules/simpletest/tests/file.test,v
retrieving revision 1.29
diff -u -9 -p -r1.29 file.test
--- modules/simpletest/tests/file.test	22 Apr 2009 09:45:03 -0000	1.29
+++ modules/simpletest/tests/file.test	23 Apr 2009 10:24:09 -0000
@@ -99,19 +99,27 @@ class FileTestCase extends DrupalWebTest
    *   Octal integer like 0664 or 0777.
    * @param $message
    *   Optional message.
    */
   function assertFilePermissions($filepath, $expected_mode, $message = NULL) {
     // Clear out PHP's file stat cache to be sure we see the current value.
     clearstatcache();
 
     // Mask out all but the last three octets.
-    $actual_mode = fileperms($filepath) & 511;
+    $actual_mode = fileperms($filepath) & 0777;
+
+    // Only a few permission values are supported in PHP on Windows. In
+    // particular, the "group" and "other" bits always reflect the "user" bits.
+    if (substr(PHP_OS, 0, 3) == 'WIN') {
+      $expected_mode &= 0700;
+      $expected_mode |= $expected_mode >> 3 | $expected_mode >> 6;
+    }
+
     if (!isset($message)) {
       $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);
   }
 
   /**
    * Helper function to test the permissions of a directory.
    *
@@ -121,19 +129,27 @@ class FileTestCase extends DrupalWebTest
    *   Octal integer like 0664 or 0777.
    * @param $message
    *   Optional message.
    */
   function assertDirectoryPermissions($directory, $expected_mode, $message = NULL) {
     // Clear out PHP's file stat cache to be sure we see the current value.
     clearstatcache();
 
     // Mask out all but the last three octets.
-    $actual_mode = fileperms($directory) & 511;
+    $actual_mode = fileperms($directory) & 0777;
+
+    // Only a few permission values are supported in PHP on Windows. In
+    // particular, the "group" and "other" bits always reflect the "user" bits.
+    if (substr(PHP_OS, 0, 3) == 'WIN') {
+      $expected_mode &= 0700;
+      $expected_mode |= $expected_mode >> 3 | $expected_mode >> 6;
+    }
+
     if (!isset($message)) {
       $message = t('Expected directory 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.
    *
