You are here

function FileTestCase::assertDirectoryPermissions in Drupal 7

Helper function to test the permissions of a directory.

Parameters

$directory: String directory path.

$expected_mode: Octal integer like 0664 or 0777.

$message: Optional message.

1 call to FileTestCase::assertDirectoryPermissions()
FileDirectoryTest::testFileCheckDirectoryHandling in modules/simpletest/tests/file.test
Test directory handling functions.

File

modules/simpletest/tests/file.test, line 140
This provides SimpleTests for the core file handling functionality. These include FileValidateTest and FileSaveTest.

Class

FileTestCase
Base class for file tests that adds some additional file specific assertions and helper functions.

Code

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) & 0777;

  // PHP on Windows has limited support for file permissions. Usually each of
  // "user", "group" and "other" use one octal digit (3 bits) to represent the
  // read/write/execute bits. On Windows, chmod() ignores the "group" and
  // "other" bits, and fileperms() returns the "user" bits in all three
  // positions. $expected_mode is updated to reflect this.
  if (substr(PHP_OS, 0, 3) == 'WIN') {

    // Reset the "group" and "other" bits.
    $expected_mode = $expected_mode & 0700;

    // Shift the "user" bits to the "group" and "other" positions also.
    $expected_mode = $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);
}