pictcode / lib / Cake / Test / Case / Utility / FileTest.php @ 995bd018
履歴 | 表示 | アノテート | ダウンロード (15.834 KB)
| 1 | 635eef61 | spyder1211 | <?php
 | 
      
|---|---|---|---|
| 2 | /**
 | 
      ||
| 3 |  * FileTest file
 | 
      ||
| 4 |  *
 | 
      ||
| 5 |  * CakePHP(tm) Tests <http://book.cakephp.org/2.0/en/development/testing.html>
 | 
      ||
| 6 |  * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
 | 
      ||
| 7 |  *
 | 
      ||
| 8 |  * Licensed under The MIT License
 | 
      ||
| 9 |  * For full copyright and license information, please see the LICENSE.txt
 | 
      ||
| 10 |  * Redistributions of files must retain the above copyright notice
 | 
      ||
| 11 |  *
 | 
      ||
| 12 |  * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
 | 
      ||
| 13 |  * @link          http://book.cakephp.org/2.0/en/development/testing.html CakePHP(tm) Tests
 | 
      ||
| 14 |  * @package       Cake.Test.Case.Utility
 | 
      ||
| 15 |  * @since         CakePHP(tm) v 1.2.0.4206
 | 
      ||
| 16 |  * @license       http://www.opensource.org/licenses/mit-license.php MIT License
 | 
      ||
| 17 |  */
 | 
      ||
| 18 | |||
| 19 | App::uses('File', 'Utility');  | 
      ||
| 20 | App::uses('Folder', 'Utility');  | 
      ||
| 21 | |||
| 22 | /**
 | 
      ||
| 23 |  * FileTest class
 | 
      ||
| 24 |  *
 | 
      ||
| 25 |  * @package       Cake.Test.Case.Utility
 | 
      ||
| 26 |  * @coversDefaultClass File
 | 
      ||
| 27 |  */
 | 
      ||
| 28 | class FileTest extends CakeTestCase {  | 
      ||
| 29 | |||
| 30 | /**
 | 
      ||
| 31 |  * File property
 | 
      ||
| 32 |  *
 | 
      ||
| 33 |  * @var mixed
 | 
      ||
| 34 |  */
 | 
      ||
| 35 | public $File = null;  | 
      ||
| 36 | |||
| 37 | /**
 | 
      ||
| 38 |  * setup the test case
 | 
      ||
| 39 |  *
 | 
      ||
| 40 |  * @return void
 | 
      ||
| 41 |  */
 | 
      ||
| 42 | public function setUp() {  | 
      ||
| 43 |                 parent::setUp();
 | 
      ||
| 44 | $file = __FILE__;  | 
      ||
| 45 | $this->File = new File($file);  | 
      ||
| 46 | }  | 
      ||
| 47 | |||
| 48 | /**
 | 
      ||
| 49 |  * tearDown method
 | 
      ||
| 50 |  *
 | 
      ||
| 51 |  * @return void
 | 
      ||
| 52 |  */
 | 
      ||
| 53 | public function tearDown() {  | 
      ||
| 54 |                 parent::tearDown();
 | 
      ||
| 55 | $this->File->close();  | 
      ||
| 56 | unset($this->File);  | 
      ||
| 57 | |||
| 58 | $Folder = new Folder();  | 
      ||
| 59 | $Folder->delete(TMP . 'tests' . DS . 'permissions');  | 
      ||
| 60 | }  | 
      ||
| 61 | |||
| 62 | /**
 | 
      ||
| 63 |  * testBasic method
 | 
      ||
| 64 |  *
 | 
      ||
| 65 |  * @return void
 | 
      ||
| 66 |  * @covers ::__construct
 | 
      ||
| 67 |  * @covers ::info
 | 
      ||
| 68 |  * @covers ::ext
 | 
      ||
| 69 |  * @covers ::name
 | 
      ||
| 70 |  * @covers ::md5
 | 
      ||
| 71 |  * @covers ::size
 | 
      ||
| 72 |  * @covers ::owner
 | 
      ||
| 73 |  * @covers ::group
 | 
      ||
| 74 |  * @covers ::Folder
 | 
      ||
| 75 |  */
 | 
      ||
| 76 | public function testBasic() {  | 
      ||
| 77 | $file = CAKE . DS . 'LICENSE.txt';  | 
      ||
| 78 | |||
| 79 | $this->File = new File($file, false);  | 
      ||
| 80 | |||
| 81 | $result = $this->File->name;  | 
      ||
| 82 | $expecting = basename($file);  | 
      ||
| 83 | $this->assertEquals($expecting, $result);  | 
      ||
| 84 | |||
| 85 | $result = $this->File->info();  | 
      ||
| 86 | $expecting = array(  | 
      ||
| 87 | 'dirname' => dirname($file),  | 
      ||
| 88 | 'basename' => basename($file),  | 
      ||
| 89 | 'extension' => 'txt',  | 
      ||
| 90 | 'filename' => 'LICENSE',  | 
      ||
| 91 | 'filesize' => filesize($file),  | 
      ||
| 92 | 'mime' => 'text/plain'  | 
      ||
| 93 | );  | 
      ||
| 94 | if (!function_exists('finfo_open') &&  | 
      ||
| 95 | (!function_exists('mime_content_type') ||  | 
      ||
| 96 | function_exists('mime_content_type') &&  | 
      ||
| 97 | mime_content_type($this->File->pwd()) === false)  | 
      ||
| 98 |                 ) {
 | 
      ||
| 99 | $expecting['mime'] = false;  | 
      ||
| 100 | }  | 
      ||
| 101 | $this->assertEquals($expecting, $result);  | 
      ||
| 102 | |||
| 103 | $result = $this->File->ext();  | 
      ||
| 104 | $expecting = 'txt';  | 
      ||
| 105 | $this->assertEquals($expecting, $result);  | 
      ||
| 106 | |||
| 107 | $result = $this->File->name();  | 
      ||
| 108 | $expecting = 'LICENSE';  | 
      ||
| 109 | $this->assertEquals($expecting, $result);  | 
      ||
| 110 | |||
| 111 | $result = $this->File->md5();  | 
      ||
| 112 | $expecting = md5_file($file);  | 
      ||
| 113 | $this->assertEquals($expecting, $result);  | 
      ||
| 114 | |||
| 115 | $result = $this->File->md5(true);  | 
      ||
| 116 | $expecting = md5_file($file);  | 
      ||
| 117 | $this->assertEquals($expecting, $result);  | 
      ||
| 118 | |||
| 119 | $result = $this->File->size();  | 
      ||
| 120 | $expecting = filesize($file);  | 
      ||
| 121 | $this->assertEquals($expecting, $result);  | 
      ||
| 122 | |||
| 123 | $result = $this->File->owner();  | 
      ||
| 124 | $expecting = fileowner($file);  | 
      ||
| 125 | $this->assertEquals($expecting, $result);  | 
      ||
| 126 | |||
| 127 | $result = $this->File->group();  | 
      ||
| 128 | $expecting = filegroup($file);  | 
      ||
| 129 | $this->assertEquals($expecting, $result);  | 
      ||
| 130 | |||
| 131 | $result = $this->File->Folder();  | 
      ||
| 132 | $this->assertInstanceOf('Folder', $result);  | 
      ||
| 133 | }  | 
      ||
| 134 | |||
| 135 | /**
 | 
      ||
| 136 |  * testPermission method
 | 
      ||
| 137 |  *
 | 
      ||
| 138 |  * @return void
 | 
      ||
| 139 |  * @covers ::perms
 | 
      ||
| 140 |  */
 | 
      ||
| 141 | public function testPermission() {  | 
      ||
| 142 | $this->skipIf(DIRECTORY_SEPARATOR === '\\', 'File permissions tests not supported on Windows.');  | 
      ||
| 143 | |||
| 144 | $dir = TMP . 'tests' . DS . 'permissions' . DS;  | 
      ||
| 145 | $old = umask();  | 
      ||
| 146 | |||
| 147 | umask(0002);  | 
      ||
| 148 | $file = $dir . 'permission_' . uniqid();  | 
      ||
| 149 | $expecting = decoct(0664 & ~umask());  | 
      ||
| 150 | $File = new File($file, true);  | 
      ||
| 151 | $result = $File->perms();  | 
      ||
| 152 | $this->assertEquals($expecting, $result);  | 
      ||
| 153 | $File->delete();  | 
      ||
| 154 | |||
| 155 | umask(0022);  | 
      ||
| 156 | $file = $dir . 'permission_' . uniqid();  | 
      ||
| 157 | $expecting = decoct(0644 & ~umask());  | 
      ||
| 158 | $File = new File($file, true);  | 
      ||
| 159 | $result = $File->perms();  | 
      ||
| 160 | $this->assertEquals($expecting, $result);  | 
      ||
| 161 | $File->delete();  | 
      ||
| 162 | |||
| 163 | umask(0422);  | 
      ||
| 164 | $file = $dir . 'permission_' . uniqid();  | 
      ||
| 165 | $expecting = decoct(0244 & ~umask());  | 
      ||
| 166 | $File = new File($file, true);  | 
      ||
| 167 | $result = $File->perms();  | 
      ||
| 168 | $this->assertEquals($expecting, $result);  | 
      ||
| 169 | $File->delete();  | 
      ||
| 170 | |||
| 171 | umask(0444);  | 
      ||
| 172 | $file = $dir . 'permission_' . uniqid();  | 
      ||
| 173 | $expecting = decoct(0222 & ~umask());  | 
      ||
| 174 | $File = new File($file, true);  | 
      ||
| 175 | $result = $File->perms();  | 
      ||
| 176 | $this->assertEquals($expecting, $result);  | 
      ||
| 177 | $File->delete();  | 
      ||
| 178 | |||
| 179 | umask($old);  | 
      ||
| 180 | }  | 
      ||
| 181 | |||
| 182 | /**
 | 
      ||
| 183 |  * testRead method
 | 
      ||
| 184 |  *
 | 
      ||
| 185 |  * @return void
 | 
      ||
| 186 |  * @covers ::read
 | 
      ||
| 187 |  */
 | 
      ||
| 188 | public function testRead() {  | 
      ||
| 189 | $file = __FILE__;  | 
      ||
| 190 | $this->File = new File($file);  | 
      ||
| 191 | |||
| 192 | $result = $this->File->read();  | 
      ||
| 193 | $expecting = file_get_contents(__FILE__);  | 
      ||
| 194 | $this->assertEquals($expecting, $result);  | 
      ||
| 195 | $this->assertTrue(!is_resource($this->File->handle));  | 
      ||
| 196 | |||
| 197 | $this->File->lock = true;  | 
      ||
| 198 | $result = $this->File->read();  | 
      ||
| 199 | $expecting = file_get_contents(__FILE__);  | 
      ||
| 200 | $this->assertEquals(trim($expecting), $result);  | 
      ||
| 201 | $this->File->lock = null;  | 
      ||
| 202 | |||
| 203 | $data = $expecting;  | 
      ||
| 204 | $expecting = substr($data, 0, 3);  | 
      ||
| 205 | $result = $this->File->read(3);  | 
      ||
| 206 | $this->assertEquals($expecting, $result);  | 
      ||
| 207 | $this->assertTrue(is_resource($this->File->handle));  | 
      ||
| 208 | |||
| 209 | $expecting = substr($data, 3, 3);  | 
      ||
| 210 | $result = $this->File->read(3);  | 
      ||
| 211 | $this->assertEquals($expecting, $result);  | 
      ||
| 212 | }  | 
      ||
| 213 | |||
| 214 | /**
 | 
      ||
| 215 |  * testOffset method
 | 
      ||
| 216 |  *
 | 
      ||
| 217 |  * @return void
 | 
      ||
| 218 |  * @covers ::offset
 | 
      ||
| 219 |  */
 | 
      ||
| 220 | public function testOffset() {  | 
      ||
| 221 | $this->File->close();  | 
      ||
| 222 | |||
| 223 | $result = $this->File->offset();  | 
      ||
| 224 | $this->assertFalse($result);  | 
      ||
| 225 | |||
| 226 | $this->assertFalse(is_resource($this->File->handle));  | 
      ||
| 227 | $success = $this->File->offset(0);  | 
      ||
| 228 | $this->assertTrue($success);  | 
      ||
| 229 | $this->assertTrue(is_resource($this->File->handle));  | 
      ||
| 230 | |||
| 231 | $result = $this->File->offset();  | 
      ||
| 232 | $expected = 0;  | 
      ||
| 233 | $this->assertSame($expected, $result);  | 
      ||
| 234 | |||
| 235 | $data = file_get_contents(__FILE__);  | 
      ||
| 236 | $success = $this->File->offset(5);  | 
      ||
| 237 | $expected = substr($data, 5, 3);  | 
      ||
| 238 | $result = $this->File->read(3);  | 
      ||
| 239 | $this->assertTrue($success);  | 
      ||
| 240 | $this->assertEquals($expected, $result);  | 
      ||
| 241 | |||
| 242 | $result = $this->File->offset();  | 
      ||
| 243 | $expected = 5 + 3;  | 
      ||
| 244 | $this->assertSame($expected, $result);  | 
      ||
| 245 | }  | 
      ||
| 246 | |||
| 247 | /**
 | 
      ||
| 248 |  * testOpen method
 | 
      ||
| 249 |  *
 | 
      ||
| 250 |  * @return void
 | 
      ||
| 251 |  * @covers ::open
 | 
      ||
| 252 |  */
 | 
      ||
| 253 | public function testOpen() {  | 
      ||
| 254 | $this->File->handle = null;  | 
      ||
| 255 | |||
| 256 | $r = $this->File->open();  | 
      ||
| 257 | $this->assertTrue(is_resource($this->File->handle));  | 
      ||
| 258 | $this->assertTrue($r);  | 
      ||
| 259 | |||
| 260 | $handle = $this->File->handle;  | 
      ||
| 261 | $r = $this->File->open();  | 
      ||
| 262 | $this->assertTrue($r);  | 
      ||
| 263 | $this->assertTrue($handle === $this->File->handle);  | 
      ||
| 264 | $this->assertTrue(is_resource($this->File->handle));  | 
      ||
| 265 | |||
| 266 | $r = $this->File->open('r', true);  | 
      ||
| 267 | $this->assertTrue($r);  | 
      ||
| 268 | $this->assertFalse($handle === $this->File->handle);  | 
      ||
| 269 | $this->assertTrue(is_resource($this->File->handle));  | 
      ||
| 270 | }  | 
      ||
| 271 | |||
| 272 | /**
 | 
      ||
| 273 |  * testClose method
 | 
      ||
| 274 |  *
 | 
      ||
| 275 |  * @return void
 | 
      ||
| 276 |  * @covers ::close
 | 
      ||
| 277 |  */
 | 
      ||
| 278 | public function testClose() {  | 
      ||
| 279 | $this->File->handle = null;  | 
      ||
| 280 | $this->assertFalse(is_resource($this->File->handle));  | 
      ||
| 281 | $this->assertTrue($this->File->close());  | 
      ||
| 282 | $this->assertFalse(is_resource($this->File->handle));  | 
      ||
| 283 | |||
| 284 | $this->File->handle = fopen(__FILE__, 'r');  | 
      ||
| 285 | $this->assertTrue(is_resource($this->File->handle));  | 
      ||
| 286 | $this->assertTrue($this->File->close());  | 
      ||
| 287 | $this->assertFalse(is_resource($this->File->handle));  | 
      ||
| 288 | }  | 
      ||
| 289 | |||
| 290 | /**
 | 
      ||
| 291 |  * testCreate method
 | 
      ||
| 292 |  *
 | 
      ||
| 293 |  * @return void
 | 
      ||
| 294 |  * @covers ::create
 | 
      ||
| 295 |  * @covers ::exists
 | 
      ||
| 296 |  * @covers ::clearStatCache
 | 
      ||
| 297 |  */
 | 
      ||
| 298 | public function testCreate() {  | 
      ||
| 299 | $tmpFile = TMP . 'tests' . DS . 'cakephp.file.test.tmp';  | 
      ||
| 300 | $File = new File($tmpFile, true, 0777);  | 
      ||
| 301 | $this->assertTrue($File->exists());  | 
      ||
| 302 | }  | 
      ||
| 303 | |||
| 304 | /**
 | 
      ||
| 305 |  * Tests the exists() method.
 | 
      ||
| 306 |  *
 | 
      ||
| 307 |  * @return void
 | 
      ||
| 308 |  */
 | 
      ||
| 309 | public function testExists() {  | 
      ||
| 310 | $tmpFile = TMP . 'tests/cakephp.file.test.tmp';  | 
      ||
| 311 | $file = new File($tmpFile, true, 0777);  | 
      ||
| 312 | $this->assertTrue($file->exists(), 'absolute path should exist');  | 
      ||
| 313 | |||
| 314 | $file = new File('file://' . $tmpFile, false);  | 
      ||
| 315 | $this->assertTrue($file->exists(), 'file:// should exist.');  | 
      ||
| 316 | |||
| 317 | $file = new File('/something/bad', false);  | 
      ||
| 318 | $this->assertFalse($file->exists(), 'missing file should not exist.');  | 
      ||
| 319 | }  | 
      ||
| 320 | |||
| 321 | /**
 | 
      ||
| 322 |  * testOpeningNonExistentFileCreatesIt method
 | 
      ||
| 323 |  *
 | 
      ||
| 324 |  * @return void
 | 
      ||
| 325 |  * @covers ::open
 | 
      ||
| 326 |  * @covers ::create
 | 
      ||
| 327 |  */
 | 
      ||
| 328 | public function testOpeningNonExistentFileCreatesIt() {  | 
      ||
| 329 | $someFile = new File(TMP . 'some_file.txt', false);  | 
      ||
| 330 | $this->assertTrue($someFile->open());  | 
      ||
| 331 | $this->assertEquals('', $someFile->read());  | 
      ||
| 332 |                 $someFile->close();
 | 
      ||
| 333 | $someFile->delete();  | 
      ||
| 334 | }  | 
      ||
| 335 | |||
| 336 | /**
 | 
      ||
| 337 |  * testPrepare method
 | 
      ||
| 338 |  *
 | 
      ||
| 339 |  * @return void
 | 
      ||
| 340 |  * @covers ::prepare
 | 
      ||
| 341 |  */
 | 
      ||
| 342 | public function testPrepare() {  | 
      ||
| 343 | $string = "some\nvery\ncool\r\nteststring here\n\n\nfor\r\r\n\n\r\n\nhere";  | 
      ||
| 344 | if (DS === '\\') {  | 
      ||
| 345 | $expected = "some\r\nvery\r\ncool\r\nteststring here\r\n\r\n\r\n";  | 
      ||
| 346 | $expected .= "for\r\n\r\n\r\n\r\n\r\nhere";  | 
      ||
| 347 |                 } else {
 | 
      ||
| 348 | $expected = "some\nvery\ncool\nteststring here\n\n\nfor\n\n\n\n\nhere";  | 
      ||
| 349 | }  | 
      ||
| 350 | $this->assertSame($expected, File::prepare($string));  | 
      ||
| 351 | |||
| 352 | $expected = "some\r\nvery\r\ncool\r\nteststring here\r\n\r\n\r\n";  | 
      ||
| 353 | $expected .= "for\r\n\r\n\r\n\r\n\r\nhere";  | 
      ||
| 354 | $this->assertSame($expected, File::prepare($string, true));  | 
      ||
| 355 | }  | 
      ||
| 356 | |||
| 357 | /**
 | 
      ||
| 358 |  * testReadable method
 | 
      ||
| 359 |  *
 | 
      ||
| 360 |  * @return void
 | 
      ||
| 361 |  * @covers ::readable
 | 
      ||
| 362 |  */
 | 
      ||
| 363 | public function testReadable() {  | 
      ||
| 364 | $someFile = new File(TMP . 'some_file.txt', false);  | 
      ||
| 365 | $this->assertTrue($someFile->open());  | 
      ||
| 366 | $this->assertTrue($someFile->readable());  | 
      ||
| 367 |                 $someFile->close();
 | 
      ||
| 368 | $someFile->delete();  | 
      ||
| 369 | }  | 
      ||
| 370 | |||
| 371 | /**
 | 
      ||
| 372 |  * testWritable method
 | 
      ||
| 373 |  *
 | 
      ||
| 374 |  * @return void
 | 
      ||
| 375 |  * @covers ::writable
 | 
      ||
| 376 |  */
 | 
      ||
| 377 | public function testWritable() {  | 
      ||
| 378 | $someFile = new File(TMP . 'some_file.txt', false);  | 
      ||
| 379 | $this->assertTrue($someFile->open());  | 
      ||
| 380 | $this->assertTrue($someFile->writable());  | 
      ||
| 381 |                 $someFile->close();
 | 
      ||
| 382 | $someFile->delete();  | 
      ||
| 383 | }  | 
      ||
| 384 | |||
| 385 | /**
 | 
      ||
| 386 |  * testExecutable method
 | 
      ||
| 387 |  *
 | 
      ||
| 388 |  * @return void
 | 
      ||
| 389 |  * @covers ::executable
 | 
      ||
| 390 |  */
 | 
      ||
| 391 | public function testExecutable() {  | 
      ||
| 392 | $someFile = new File(TMP . 'some_file.txt', false);  | 
      ||
| 393 | $this->assertTrue($someFile->open());  | 
      ||
| 394 | $this->assertFalse($someFile->executable());  | 
      ||
| 395 |                 $someFile->close();
 | 
      ||
| 396 | $someFile->delete();  | 
      ||
| 397 | }  | 
      ||
| 398 | |||
| 399 | /**
 | 
      ||
| 400 |  * testLastAccess method
 | 
      ||
| 401 |  *
 | 
      ||
| 402 |  * @return void
 | 
      ||
| 403 |  * @covers ::lastAccess
 | 
      ||
| 404 |  */
 | 
      ||
| 405 | public function testLastAccess() {  | 
      ||
| 406 | $someFile = new File(TMP . 'some_file.txt', false);  | 
      ||
| 407 | $this->assertFalse($someFile->lastAccess());  | 
      ||
| 408 | $this->assertTrue($someFile->open());  | 
      ||
| 409 | $this->assertWithinMargin($someFile->lastAccess(), time(), 2);  | 
      ||
| 410 |                 $someFile->close();
 | 
      ||
| 411 | $someFile->delete();  | 
      ||
| 412 | }  | 
      ||
| 413 | |||
| 414 | /**
 | 
      ||
| 415 |  * testLastChange method
 | 
      ||
| 416 |  *
 | 
      ||
| 417 |  * @return void
 | 
      ||
| 418 |  * @covers ::lastChange
 | 
      ||
| 419 |  */
 | 
      ||
| 420 | public function testLastChange() {  | 
      ||
| 421 | $someFile = new File(TMP . 'some_file.txt', false);  | 
      ||
| 422 | $this->assertFalse($someFile->lastChange());  | 
      ||
| 423 | $this->assertTrue($someFile->open('r+'));  | 
      ||
| 424 | $this->assertWithinMargin($someFile->lastChange(), time(), 2);  | 
      ||
| 425 | |||
| 426 | $someFile->write('something');  | 
      ||
| 427 | $this->assertWithinMargin($someFile->lastChange(), time(), 2);  | 
      ||
| 428 | |||
| 429 |                 $someFile->close();
 | 
      ||
| 430 | $someFile->delete();  | 
      ||
| 431 | }  | 
      ||
| 432 | |||
| 433 | /**
 | 
      ||
| 434 |  * testWrite method
 | 
      ||
| 435 |  *
 | 
      ||
| 436 |  * @return void
 | 
      ||
| 437 |  * @covers ::write
 | 
      ||
| 438 |  */
 | 
      ||
| 439 | public function testWrite() {  | 
      ||
| 440 | if (!$tmpFile = $this->_getTmpFile()) {  | 
      ||
| 441 | return false;  | 
      ||
| 442 | }  | 
      ||
| 443 | if (file_exists($tmpFile)) {  | 
      ||
| 444 | unlink($tmpFile);  | 
      ||
| 445 | }  | 
      ||
| 446 | |||
| 447 | $TmpFile = new File($tmpFile);  | 
      ||
| 448 | $this->assertFalse(file_exists($tmpFile));  | 
      ||
| 449 | $this->assertFalse(is_resource($TmpFile->handle));  | 
      ||
| 450 | |||
| 451 | $testData = array('CakePHP\'s', ' test suite', ' was here ...', '');  | 
      ||
| 452 | foreach ($testData as $data) {  | 
      ||
| 453 | $r = $TmpFile->write($data);  | 
      ||
| 454 | $this->assertTrue($r);  | 
      ||
| 455 | $this->assertTrue(file_exists($tmpFile));  | 
      ||
| 456 | $this->assertEquals($data, file_get_contents($tmpFile));  | 
      ||
| 457 | $this->assertTrue(is_resource($TmpFile->handle));  | 
      ||
| 458 |                         $TmpFile->close();
 | 
      ||
| 459 | |||
| 460 | }  | 
      ||
| 461 | unlink($tmpFile);  | 
      ||
| 462 | }  | 
      ||
| 463 | |||
| 464 | /**
 | 
      ||
| 465 |  * testAppend method
 | 
      ||
| 466 |  *
 | 
      ||
| 467 |  * @return void
 | 
      ||
| 468 |  * @covers ::append
 | 
      ||
| 469 |  */
 | 
      ||
| 470 | public function testAppend() {  | 
      ||
| 471 | if (!$tmpFile = $this->_getTmpFile()) {  | 
      ||
| 472 | return false;  | 
      ||
| 473 | }  | 
      ||
| 474 | if (file_exists($tmpFile)) {  | 
      ||
| 475 | unlink($tmpFile);  | 
      ||
| 476 | }  | 
      ||
| 477 | |||
| 478 | $TmpFile = new File($tmpFile);  | 
      ||
| 479 | $this->assertFalse(file_exists($tmpFile));  | 
      ||
| 480 | |||
| 481 | $fragments = array('CakePHP\'s', ' test suite', ' was here ...');  | 
      ||
| 482 | $data = null;  | 
      ||
| 483 | $size = 0;  | 
      ||
| 484 | foreach ($fragments as $fragment) {  | 
      ||
| 485 | $r = $TmpFile->append($fragment);  | 
      ||
| 486 | $this->assertTrue($r);  | 
      ||
| 487 | $this->assertTrue(file_exists($tmpFile));  | 
      ||
| 488 | $data = $data . $fragment;  | 
      ||
| 489 | $this->assertEquals($data, file_get_contents($tmpFile));  | 
      ||
| 490 | $newSize = $TmpFile->size();  | 
      ||
| 491 | $this->assertTrue($newSize > $size);  | 
      ||
| 492 | $size = $newSize;  | 
      ||
| 493 |                         $TmpFile->close();
 | 
      ||
| 494 | }  | 
      ||
| 495 | |||
| 496 | $TmpFile->append('');  | 
      ||
| 497 | $this->assertEquals($data, file_get_contents($tmpFile));  | 
      ||
| 498 |                 $TmpFile->close();
 | 
      ||
| 499 | }  | 
      ||
| 500 | |||
| 501 | /**
 | 
      ||
| 502 |  * testDelete method
 | 
      ||
| 503 |  *
 | 
      ||
| 504 |  * @return void
 | 
      ||
| 505 |  * @covers ::delete
 | 
      ||
| 506 |  */
 | 
      ||
| 507 | public function testDelete() {  | 
      ||
| 508 | if (!$tmpFile = $this->_getTmpFile()) {  | 
      ||
| 509 | return false;  | 
      ||
| 510 | }  | 
      ||
| 511 | |||
| 512 | if (!file_exists($tmpFile)) {  | 
      ||
| 513 | touch($tmpFile);  | 
      ||
| 514 | }  | 
      ||
| 515 | $TmpFile = new File($tmpFile);  | 
      ||
| 516 | $this->assertTrue(file_exists($tmpFile));  | 
      ||
| 517 | $result = $TmpFile->delete();  | 
      ||
| 518 | $this->assertTrue($result);  | 
      ||
| 519 | $this->assertFalse(file_exists($tmpFile));  | 
      ||
| 520 | |||
| 521 | $TmpFile = new File('/this/does/not/exist');  | 
      ||
| 522 | $result = $TmpFile->delete();  | 
      ||
| 523 | $this->assertFalse($result);  | 
      ||
| 524 | }  | 
      ||
| 525 | |||
| 526 | /**
 | 
      ||
| 527 |  * Windows has issues unlinking files if there are
 | 
      ||
| 528 |  * active filehandles open.
 | 
      ||
| 529 |  *
 | 
      ||
| 530 |  * @return void
 | 
      ||
| 531 |  * @covers ::delete
 | 
      ||
| 532 |  */
 | 
      ||
| 533 | public function testDeleteAfterRead() {  | 
      ||
| 534 | if (!$tmpFile = $this->_getTmpFile()) {  | 
      ||
| 535 | return false;  | 
      ||
| 536 | }  | 
      ||
| 537 | if (!file_exists($tmpFile)) {  | 
      ||
| 538 | touch($tmpFile);  | 
      ||
| 539 | }  | 
      ||
| 540 | $File = new File($tmpFile);  | 
      ||
| 541 |                 $File->read();
 | 
      ||
| 542 | $this->assertTrue($File->delete());  | 
      ||
| 543 | }  | 
      ||
| 544 | |||
| 545 | /**
 | 
      ||
| 546 |  * testCopy method
 | 
      ||
| 547 |  *
 | 
      ||
| 548 |  * @return void
 | 
      ||
| 549 |  * @covers ::copy
 | 
      ||
| 550 |  */
 | 
      ||
| 551 | public function testCopy() {  | 
      ||
| 552 | $dest = TMP . 'tests' . DS . 'cakephp.file.test.tmp';  | 
      ||
| 553 | $file = __FILE__;  | 
      ||
| 554 | $this->File = new File($file);  | 
      ||
| 555 | $result = $this->File->copy($dest);  | 
      ||
| 556 | $this->assertTrue($result);  | 
      ||
| 557 | |||
| 558 | $result = $this->File->copy($dest, true);  | 
      ||
| 559 | $this->assertTrue($result);  | 
      ||
| 560 | |||
| 561 | $result = $this->File->copy($dest, false);  | 
      ||
| 562 | $this->assertFalse($result);  | 
      ||
| 563 | |||
| 564 | $this->File->close();  | 
      ||
| 565 | unlink($dest);  | 
      ||
| 566 | |||
| 567 | $TmpFile = new File('/this/does/not/exist');  | 
      ||
| 568 | $result = $TmpFile->copy($dest);  | 
      ||
| 569 | $this->assertFalse($result);  | 
      ||
| 570 | |||
| 571 |                 $TmpFile->close();
 | 
      ||
| 572 | }  | 
      ||
| 573 | |||
| 574 | /**
 | 
      ||
| 575 |  * Test mime()
 | 
      ||
| 576 |  *
 | 
      ||
| 577 |  * @return void
 | 
      ||
| 578 |  * @covers ::mime
 | 
      ||
| 579 |  */
 | 
      ||
| 580 | public function testMime() {  | 
      ||
| 581 | $this->skipIf(!function_exists('finfo_open') && !function_exists('mime_content_type'), 'Not able to read mime type');  | 
      ||
| 582 | $path = CAKE . 'Test' . DS . 'test_app' . DS . 'webroot' . DS . 'img' . DS . 'cake.power.gif';  | 
      ||
| 583 | $file = new File($path);  | 
      ||
| 584 | $expected = 'image/gif';  | 
      ||
| 585 | if (function_exists('mime_content_type') && mime_content_type($file->pwd()) === false) {  | 
      ||
| 586 | $expected = false;  | 
      ||
| 587 | }  | 
      ||
| 588 | $this->assertEquals($expected, $file->mime());  | 
      ||
| 589 | }  | 
      ||
| 590 | |||
| 591 | /**
 | 
      ||
| 592 |  * getTmpFile method
 | 
      ||
| 593 |  *
 | 
      ||
| 594 |  * @param bool $paintSkip
 | 
      ||
| 595 |  * @return void
 | 
      ||
| 596 |  */
 | 
      ||
| 597 | protected function _getTmpFile($paintSkip = true) {  | 
      ||
| 598 | $tmpFile = TMP . 'tests' . DS . 'cakephp.file.test.tmp';  | 
      ||
| 599 | if (is_writable(dirname($tmpFile)) && (!file_exists($tmpFile) || is_writable($tmpFile))) {  | 
      ||
| 600 | return $tmpFile;  | 
      ||
| 601 | }  | 
      ||
| 602 | |||
| 603 | if ($paintSkip) {  | 
      ||
| 604 | $trace = debug_backtrace();  | 
      ||
| 605 | $caller = $trace[0]['function'];  | 
      ||
| 606 | $shortPath = dirname($tmpFile);  | 
      ||
| 607 | |||
| 608 | $message = __d('cake_dev', '[FileTest] Skipping %s because "%s" not writeable!', $caller, $shortPath);  | 
      ||
| 609 | $this->markTestSkipped($message);  | 
      ||
| 610 | }  | 
      ||
| 611 | return false;  | 
      ||
| 612 | }  | 
      ||
| 613 | |||
| 614 | /**
 | 
      ||
| 615 |  * testReplaceText method
 | 
      ||
| 616 |  *
 | 
      ||
| 617 |  * @return void
 | 
      ||
| 618 |  * @covers ::replaceText
 | 
      ||
| 619 |  */
 | 
      ||
| 620 | public function testReplaceText() {  | 
      ||
| 621 | $TestFile = new File(dirname(__FILE__) . '/../../test_app/Vendor/welcome.php');  | 
      ||
| 622 | $TmpFile = new File(TMP . 'tests' . DS . 'cakephp.file.test.tmp');  | 
      ||
| 623 | |||
| 624 |                 // Copy the test file to the temporary location
 | 
      ||
| 625 | $TestFile->copy($TmpFile->path, true);  | 
      ||
| 626 | |||
| 627 |                 // Replace the contents of the tempory file
 | 
      ||
| 628 | $result = $TmpFile->replaceText('welcome.php', 'welcome.tmp');  | 
      ||
| 629 | $this->assertTrue($result);  | 
      ||
| 630 | |||
| 631 |                 // Double check
 | 
      ||
| 632 | $expected = 'This is the welcome.tmp file in vendors directory';  | 
      ||
| 633 | $contents = $TmpFile->read();  | 
      ||
| 634 | $this->assertContains($expected, $contents);  | 
      ||
| 635 | |||
| 636 | $search = array('This is the', 'welcome.php file', 'in tmp directory');  | 
      ||
| 637 | $replace = array('This should be a', 'welcome.tmp file', 'in the Lib directory');  | 
      ||
| 638 | |||
| 639 |                 // Replace the contents of the tempory file
 | 
      ||
| 640 | $result = $TmpFile->replaceText($search, $replace);  | 
      ||
| 641 | $this->assertTrue($result);  | 
      ||
| 642 | |||
| 643 |                 // Double check
 | 
      ||
| 644 | $expected = 'This should be a welcome.tmp file in vendors directory';  | 
      ||
| 645 | $contents = $TmpFile->read();  | 
      ||
| 646 | $this->assertContains($expected, $contents);  | 
      ||
| 647 | |||
| 648 | $TmpFile->delete();  | 
      ||
| 649 | }  | 
      ||
| 650 | |||
| 651 | /**
 | 
      ||
| 652 |  * Tests that no path is being set for passed file paths that
 | 
      ||
| 653 |  * do not exist.
 | 
      ||
| 654 |  *
 | 
      ||
| 655 |  * @return void
 | 
      ||
| 656 |  * @covers ::pwd
 | 
      ||
| 657 |  */
 | 
      ||
| 658 | public function testNoPartialPathBeingSetForNonExistentPath() {  | 
      ||
| 659 | $tmpFile = new File('/non/existent/file');  | 
      ||
| 660 | $this->assertNull($tmpFile->pwd());  | 
      ||
| 661 | $this->assertNull($tmpFile->path);  | 
      ||
| 662 | }  | 
      ||
| 663 | }  |