function FileTestCase::assertDirectoryPermissions

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.

2 calls to FileTestCase::assertDirectoryPermissions()
FileDirectoryTest::testFileCheckDirectoryHandling in modules/simpletest/tests/file.test
Test directory handling functions.
FileDirectoryTest::testFileCheckLocalDirectoryHandling in modules/simpletest/tests/file.test
Test local directory handling functions.

File

modules/simpletest/tests/file.test, line 141

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;
    $expected_mode = $expected_mode & 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);
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.