diff --git a/lib/Cake/Test/Case/Utility/FileTest.php b/lib/Cake/Test/Case/Utility/FileTest.php index 1f6beee0ad3..70b20d98a58 100644 --- a/lib/Cake/Test/Case/Utility/FileTest.php +++ b/lib/Cake/Test/Case/Utility/FileTest.php @@ -53,6 +53,9 @@ public function tearDown() { parent::tearDown(); $this->File->close(); unset($this->File); + + $Folder = new Folder(); + $Folder->delete(TMP . 'tests' . DS . 'permissions'); } /** @@ -116,12 +119,52 @@ public function testBasic() { $result = $this->File->Folder(); $this->assertInstanceOf('Folder', $result); + } +/** + * testPermission method + */ + public function testPermission() { $this->skipIf(DIRECTORY_SEPARATOR === '\\', 'File permissions tests not supported on Windows.'); - $result = $this->File->perms(); + $dir = TMP . 'tests' . DS . 'permissions' . DS; + $Folder = new Folder($dir); + + $old = umask(); + + umask(0002); + $file = $dir . 'permission_' . uniqid(); + $expecting = decoct(0664 & ~umask()); + $File = new File($file, true); + $result = $File->perms(); + $this->assertEquals($expecting, $result); + $File->delete(); + + umask(0022); + $file = $dir . 'permission_' . uniqid(); $expecting = decoct(0644 & ~umask()); + $File = new File($file, true); + $result = $File->perms(); + $this->assertEquals($expecting, $result); + $File->delete(); + + umask(0422); + $file = $dir . 'permission_' . uniqid(); + $expecting = decoct(0244 & ~umask()); + $File = new File($file, true); + $result = $File->perms(); $this->assertEquals($expecting, $result); + $File->delete(); + + umask(0444); + $file = $dir . 'permission_' . uniqid(); + $expecting = decoct(0222 & ~umask()); + $File = new File($file, true); + $result = $File->perms(); + $this->assertEquals($expecting, $result); + $File->delete(); + + umask($old); } /** diff --git a/lib/Cake/Utility/File.php b/lib/Cake/Utility/File.php index ed72a900863..a7914f8377f 100644 --- a/lib/Cake/Utility/File.php +++ b/lib/Cake/Utility/File.php @@ -110,9 +110,7 @@ public function __destruct() { public function create() { $dir = $this->Folder->pwd(); if (is_dir($dir) && is_writable($dir) && !$this->exists()) { - $old = umask(0); if (touch($this->path)) { - umask($old); return true; } }