Mercurial > hg > Members > shoshi > webvirt
diff cake/tests/cases/libs/folder.test.php @ 0:261e66bd5a0c
hg init
author | Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 24 Jul 2011 21:08:31 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cake/tests/cases/libs/folder.test.php Sun Jul 24 21:08:31 2011 +0900 @@ -0,0 +1,794 @@ +<?php +/** + * FolderTest file + * + * PHP versions 4 and 5 + * + * CakePHP(tm) Tests <http://book.cakephp.org/view/1196/Testing> + * Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * + * Licensed under The Open Group Test Suite License + * Redistributions of files must retain the above copyright notice. + * + * @copyright Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * @link http://book.cakephp.org/view/1196/Testing CakePHP(tm) Tests + * @package cake + * @subpackage cake.tests.cases.libs + * @since CakePHP(tm) v 1.2.0.4206 + * @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License + */ +App::import('Core', 'File'); + +/** + * FolderTest class + * + * @package cake + * @subpackage cake.tests.cases.libs + */ +class FolderTest extends CakeTestCase { + +/** + * testBasic method + * + * @access public + * @return void + */ + function testBasic() { + $path = dirname(__FILE__); + $Folder =& new Folder($path); + + $result = $Folder->pwd(); + $this->assertEqual($result, $path); + + $result = Folder::addPathElement($path, 'test'); + $expected = $path . DS . 'test'; + $this->assertEqual($result, $expected); + + $result = $Folder->cd(ROOT); + $expected = ROOT; + $this->assertEqual($result, $expected); + + $result = $Folder->cd(ROOT . DS . 'non-existent'); + $this->assertFalse($result); + } + +/** + * testInPath method + * + * @access public + * @return void + */ + function testInPath() { + $path = dirname(dirname(__FILE__)); + $inside = dirname($path) . DS; + + $Folder =& new Folder($path); + + $result = $Folder->pwd(); + $this->assertEqual($result, $path); + + $result = Folder::isSlashTerm($inside); + $this->assertTrue($result); + + $result = $Folder->realpath('tests/'); + $this->assertEqual($result, $path . DS .'tests' . DS); + + $result = $Folder->inPath('tests' . DS); + $this->assertTrue($result); + + $result = $Folder->inPath(DS . 'non-existing' . $inside); + $this->assertFalse($result); + } + +/** + * test creation of single and mulitple paths. + * + * @return void + */ + function testCreation() { + $folder =& new Folder(TMP . 'tests'); + $result = $folder->create(TMP . 'tests' . DS . 'first' . DS . 'second' . DS . 'third'); + $this->assertTrue($result); + + rmdir(TMP . 'tests' . DS . 'first' . DS . 'second' . DS . 'third'); + rmdir(TMP . 'tests' . DS . 'first' . DS . 'second'); + rmdir(TMP . 'tests' . DS . 'first'); + + $folder =& new Folder(TMP . 'tests'); + $result = $folder->create(TMP . 'tests' . DS . 'first'); + $this->assertTrue($result); + rmdir(TMP . 'tests' . DS . 'first'); + } + +/** + * test that creation of folders with trailing ds works + * + * @return void + */ + function testCreateWithTrailingDs() { + $folder =& new Folder(TMP); + $path = TMP . 'tests' . DS . 'trailing' . DS . 'dir' . DS; + $result = $folder->create($path); + $this->assertTrue($result); + + $this->assertTrue(is_dir($path), 'Folder was not made'); + + $folder =& new Folder(TMP . 'tests' . DS . 'trailing'); + $this->assertTrue($folder->delete()); + } + +/** + * test recurisve directory create failure. + * + * @return void + */ + function testRecursiveCreateFailure() { + if ($this->skipIf(DS == '\\', 'Cant perform operations using permissions on windows. %s')) { + return; + } + $path = TMP . 'tests' . DS . 'one'; + mkdir($path); + chmod($path, '0444'); + + $this->expectError(); + + $folder =& new Folder($path); + $result = $folder->create($path . DS . 'two' . DS . 'three'); + $this->assertFalse($result); + + chmod($path, '0777'); + rmdir($path); + } +/** + * testOperations method + * + * @access public + * @return void + */ + function testOperations() { + $path = TEST_CAKE_CORE_INCLUDE_PATH . 'console' . DS . 'templates' . DS . 'skel'; + $Folder =& new Folder($path); + + $result = is_dir($Folder->pwd()); + $this->assertTrue($result); + + $new = TMP . 'test_folder_new'; + $result = $Folder->create($new); + $this->assertTrue($result); + + $copy = TMP . 'test_folder_copy'; + $result = $Folder->copy($copy); + $this->assertTrue($result); + + $copy = TMP . 'test_folder_copy'; + $result = $Folder->copy($copy); + $this->assertTrue($result); + + $copy = TMP . 'test_folder_copy'; + $result = $Folder->chmod($copy, 0755, false); + $this->assertTrue($result); + + $result = $Folder->cd($copy); + $this->assertTrue($result); + + $mv = TMP . 'test_folder_mv'; + $result = $Folder->move($mv); + $this->assertTrue($result); + + $mv = TMP . 'test_folder_mv_2'; + $result = $Folder->move($mv); + $this->assertTrue($result); + + $result = $Folder->delete($new); + $this->assertTrue($result); + + $result = $Folder->delete($mv); + $this->assertTrue($result); + + $result = $Folder->delete($mv); + $this->assertTrue($result); + + $new = APP . 'index.php'; + $result = $Folder->create($new); + $this->assertFalse($result); + + $expected = $new . ' is a file'; + $result = array_pop($Folder->errors()); + $this->assertEqual($result, $expected); + + $new = TMP . 'test_folder_new'; + $result = $Folder->create($new); + $this->assertTrue($result); + + $result = $Folder->cd($new); + $this->assertTrue($result); + + $result = $Folder->delete(); + $this->assertTrue($result); + + $Folder =& new Folder('non-existent'); + $result = $Folder->pwd(); + $this->assertNull($result); + } + +/** + * testChmod method + * + * @return void + * @access public + */ + function testChmod() { + $this->skipIf(DIRECTORY_SEPARATOR === '\\', '%s Folder permissions tests not supported on Windows'); + + $path = TEST_CAKE_CORE_INCLUDE_PATH . 'console' . DS . 'templates' . DS . 'skel'; + $Folder =& new Folder($path); + + $subdir = 'test_folder_new'; + $new = TMP . $subdir; + + $this->assertTrue($Folder->create($new)); + $this->assertTrue($Folder->create($new . DS . 'test1')); + $this->assertTrue($Folder->create($new . DS . 'test2')); + + $filePath = $new . DS . 'test1.php'; + $File =& new File($filePath); + $this->assertTrue($File->create()); + $copy = TMP . 'test_folder_copy'; + + $this->assertTrue($Folder->chmod($new, 0777, true)); + $this->assertEqual($File->perms(), '0777'); + + $Folder->delete($new); + } + +/** + * testRealPathForWebroot method + * + * @access public + * @return void + */ + function testRealPathForWebroot() { + $Folder = new Folder('files/'); + $this->assertEqual(realpath('files/'), $Folder->path); + } + +/** + * testZeroAsDirectory method + * + * @access public + * @return void + */ + function testZeroAsDirectory() { + $Folder =& new Folder(TMP); + $new = TMP . '0'; + $this->assertTrue($Folder->create($new)); + + $result = $Folder->read(true, true); + $expected = array('0', 'cache', 'logs', 'sessions', 'tests'); + $this->assertEqual($expected, $result[0]); + + $result = $Folder->read(true, array('.', '..', 'logs', '.svn')); + $expected = array('0', 'cache', 'sessions', 'tests'); + $this->assertEqual($expected, $result[0]); + + $result = $Folder->delete($new); + $this->assertTrue($result); + } + +/** + * test Adding path elements to a path + * + * @return void + */ + function testAddPathElement() { + $result = Folder::addPathElement(DS . 'some' . DS . 'dir', 'another_path'); + $this->assertEqual($result, DS . 'some' . DS . 'dir' . DS . 'another_path'); + + $result = Folder::addPathElement(DS . 'some' . DS . 'dir' . DS, 'another_path'); + $this->assertEqual($result, DS . 'some' . DS . 'dir' . DS . 'another_path'); + } +/** + * testFolderRead method + * + * @access public + * @return void + */ + function testFolderRead() { + $Folder =& new Folder(TMP); + + $expected = array('cache', 'logs', 'sessions', 'tests'); + $result = $Folder->read(true, true); + $this->assertEqual($result[0], $expected); + + $Folder->path = TMP . DS . 'non-existent'; + $expected = array(array(), array()); + $result = $Folder->read(true, true); + $this->assertEqual($result, $expected); + } + +/** + * testFolderTree method + * + * @access public + * @return void + */ + function testFolderTree() { + $Folder =& new Folder(); + $expected = array( + array( + TEST_CAKE_CORE_INCLUDE_PATH . 'config', + TEST_CAKE_CORE_INCLUDE_PATH . 'config' . DS . 'unicode', + TEST_CAKE_CORE_INCLUDE_PATH . 'config' . DS . 'unicode' . DS . 'casefolding' + ), + array( + TEST_CAKE_CORE_INCLUDE_PATH . 'config' . DS . 'config.php', + TEST_CAKE_CORE_INCLUDE_PATH . 'config' . DS . 'paths.php', + TEST_CAKE_CORE_INCLUDE_PATH . 'config' . DS . 'unicode' . DS . 'casefolding' . DS . '0080_00ff.php', + TEST_CAKE_CORE_INCLUDE_PATH . 'config' . DS . 'unicode' . DS . 'casefolding' . DS . '0100_017f.php', + TEST_CAKE_CORE_INCLUDE_PATH . 'config' . DS . 'unicode' . DS . 'casefolding' . DS . '0180_024F.php', + TEST_CAKE_CORE_INCLUDE_PATH . 'config' . DS . 'unicode' . DS . 'casefolding' . DS . '0250_02af.php', + TEST_CAKE_CORE_INCLUDE_PATH . 'config' . DS . 'unicode' . DS . 'casefolding' . DS . '0370_03ff.php', + TEST_CAKE_CORE_INCLUDE_PATH . 'config' . DS . 'unicode' . DS . 'casefolding' . DS . '0400_04ff.php', + TEST_CAKE_CORE_INCLUDE_PATH . 'config' . DS . 'unicode' . DS . 'casefolding' . DS . '0500_052f.php', + TEST_CAKE_CORE_INCLUDE_PATH . 'config' . DS . 'unicode' . DS . 'casefolding' . DS . '0530_058f.php', + TEST_CAKE_CORE_INCLUDE_PATH . 'config' . DS . 'unicode' . DS . 'casefolding' . DS . '1e00_1eff.php', + TEST_CAKE_CORE_INCLUDE_PATH . 'config' . DS . 'unicode' . DS . 'casefolding' . DS . '1f00_1fff.php', + TEST_CAKE_CORE_INCLUDE_PATH . 'config' . DS . 'unicode' . DS . 'casefolding' . DS . '2100_214f.php', + TEST_CAKE_CORE_INCLUDE_PATH . 'config' . DS . 'unicode' . DS . 'casefolding' . DS . '2150_218f.php', + TEST_CAKE_CORE_INCLUDE_PATH . 'config' . DS . 'unicode' . DS . 'casefolding' . DS . '2460_24ff.php', + TEST_CAKE_CORE_INCLUDE_PATH . 'config' . DS . 'unicode' . DS . 'casefolding' . DS . '2c00_2c5f.php', + TEST_CAKE_CORE_INCLUDE_PATH . 'config' . DS . 'unicode' . DS . 'casefolding' . DS . '2c60_2c7f.php', + TEST_CAKE_CORE_INCLUDE_PATH . 'config' . DS . 'unicode' . DS . 'casefolding' . DS . '2c80_2cff.php', + TEST_CAKE_CORE_INCLUDE_PATH . 'config' . DS . 'unicode' . DS . 'casefolding' . DS . 'ff00_ffef.php' + ) + ); + + $result = $Folder->tree(TEST_CAKE_CORE_INCLUDE_PATH . 'config', false); + $this->assertIdentical(array_diff($expected[0], $result[0]), array()); + $this->assertIdentical(array_diff($result[0], $expected[0]), array()); + + $result = $Folder->tree(TEST_CAKE_CORE_INCLUDE_PATH . 'config', false, 'dir'); + $this->assertIdentical(array_diff($expected[0], $result), array()); + $this->assertIdentical(array_diff($result, $expected[0]), array()); + + $result = $Folder->tree(TEST_CAKE_CORE_INCLUDE_PATH . 'config', false, 'files'); + $this->assertIdentical(array_diff($expected[1], $result), array()); + $this->assertIdentical(array_diff($result, $expected[1]), array()); + } + +/** + * testWindowsPath method + * + * @access public + * @return void + */ + function testWindowsPath() { + $this->assertFalse(Folder::isWindowsPath('0:\\cake\\is\\awesome')); + $this->assertTrue(Folder::isWindowsPath('C:\\cake\\is\\awesome')); + $this->assertTrue(Folder::isWindowsPath('d:\\cake\\is\\awesome')); + $this->assertTrue(Folder::isWindowsPath('\\\\vmware-host\\Shared Folders\\file')); + } + +/** + * testIsAbsolute method + * + * @access public + * @return void + */ + function testIsAbsolute() { + $this->assertFalse(Folder::isAbsolute('path/to/file')); + $this->assertFalse(Folder::isAbsolute('cake/')); + $this->assertFalse(Folder::isAbsolute('path\\to\\file')); + $this->assertFalse(Folder::isAbsolute('0:\\path\\to\\file')); + $this->assertFalse(Folder::isAbsolute('\\path/to/file')); + $this->assertFalse(Folder::isAbsolute('\\path\\to\\file')); + + $this->assertTrue(Folder::isAbsolute('/usr/local')); + $this->assertTrue(Folder::isAbsolute('//path/to/file')); + $this->assertTrue(Folder::isAbsolute('C:\\cake')); + $this->assertTrue(Folder::isAbsolute('C:\\path\\to\\file')); + $this->assertTrue(Folder::isAbsolute('d:\\path\\to\\file')); + $this->assertTrue(Folder::isAbsolute('\\\\vmware-host\\Shared Folders\\file')); + } + +/** + * testIsSlashTerm method + * + * @access public + * @return void + */ + function testIsSlashTerm() { + $this->assertFalse(Folder::isSlashTerm('cake')); + + $this->assertTrue(Folder::isSlashTerm('C:\\cake\\')); + $this->assertTrue(Folder::isSlashTerm('/usr/local/')); + } + +/** + * testStatic method + * + * @access public + * @return void + */ + function testSlashTerm() { + $result = Folder::slashTerm('/path/to/file'); + $this->assertEqual($result, '/path/to/file/'); + } + +/** + * testNormalizePath method + * + * @access public + * @return void + */ + function testNormalizePath() { + $path = '/path/to/file'; + $result = Folder::normalizePath($path); + $this->assertEqual($result, '/'); + + $path = '\\path\\\to\\\file'; + $result = Folder::normalizePath($path); + $this->assertEqual($result, '/'); + + $path = 'C:\\path\\to\\file'; + $result = Folder::normalizePath($path); + $this->assertEqual($result, '\\'); + } + +/** + * correctSlashFor method + * + * @access public + * @return void + */ + function testCorrectSlashFor() { + $path = '/path/to/file'; + $result = Folder::correctSlashFor($path); + $this->assertEqual($result, '/'); + + $path = '\\path\\to\\file'; + $result = Folder::correctSlashFor($path); + $this->assertEqual($result, '/'); + + $path = 'C:\\path\to\\file'; + $result = Folder::correctSlashFor($path); + $this->assertEqual($result, '\\'); + } + +/** + * testInCakePath method + * + * @access public + * @return void + */ + function testInCakePath() { + $Folder =& new Folder(); + $Folder->cd(ROOT); + $path = 'C:\\path\\to\\file'; + $result = $Folder->inCakePath($path); + $this->assertFalse($result); + + $path = ROOT; + $Folder->cd(ROOT); + $result = $Folder->inCakePath($path); + $this->assertFalse($result); + + // WHY DOES THIS FAIL ?? + $path = DS . 'cake' . DS . 'config'; + $Folder->cd(ROOT . DS . 'cake' . DS . 'config'); + $result = $Folder->inCakePath($path); + $this->assertTrue($result); + } + +/** + * testFind method + * + * @access public + * @return void + */ + function testFind() { + $Folder =& new Folder(); + $Folder->cd(TEST_CAKE_CORE_INCLUDE_PATH . 'config'); + $result = $Folder->find(); + $expected = array('config.php', 'paths.php'); + $this->assertIdentical(array_diff($expected, $result), array()); + $this->assertIdentical(array_diff($result, $expected), array()); + + $result = $Folder->find('.*', true); + $expected = array('config.php', 'paths.php'); + $this->assertIdentical($result, $expected); + + $result = $Folder->find('.*\.php'); + $expected = array('config.php', 'paths.php'); + $this->assertIdentical(array_diff($expected, $result), array()); + $this->assertIdentical(array_diff($result, $expected), array()); + + $result = $Folder->find('.*\.php', true); + $expected = array('config.php', 'paths.php'); + $this->assertIdentical($result, $expected); + + $result = $Folder->find('.*ig\.php'); + $expected = array('config.php'); + $this->assertIdentical($result, $expected); + + $result = $Folder->find('paths\.php'); + $expected = array('paths.php'); + $this->assertIdentical($result, $expected); + + $Folder->cd(TMP); + $file = new File($Folder->pwd() . DS . 'paths.php', true); + $Folder->create($Folder->pwd() . DS . 'testme'); + $Folder->cd('testme'); + $result = $Folder->find('paths\.php'); + $expected = array(); + $this->assertIdentical($result, $expected); + + $Folder->cd($Folder->pwd() . '/..'); + $result = $Folder->find('paths\.php'); + $expected = array('paths.php'); + $this->assertIdentical($result, $expected); + + $Folder->cd(TMP); + $Folder->delete($Folder->pwd() . DS . 'testme'); + $file->delete(); + } + +/** + * testFindRecursive method + * + * @access public + * @return void + */ + function testFindRecursive() { + $Folder =& new Folder(); + $Folder->cd(TEST_CAKE_CORE_INCLUDE_PATH); + $result = $Folder->findRecursive('(config|paths)\.php'); + $expected = array( + TEST_CAKE_CORE_INCLUDE_PATH . 'config' . DS . 'config.php', + TEST_CAKE_CORE_INCLUDE_PATH . 'config' . DS . 'paths.php' + ); + $this->assertIdentical(array_diff($expected, $result), array()); + $this->assertIdentical(array_diff($result, $expected), array()); + + $result = $Folder->findRecursive('(config|paths)\.php', true); + $expected = array( + TEST_CAKE_CORE_INCLUDE_PATH . 'config' . DS . 'config.php', + TEST_CAKE_CORE_INCLUDE_PATH . 'config' . DS . 'paths.php' + ); + $this->assertIdentical($result, $expected); + + $Folder->cd(TMP); + $Folder->create($Folder->pwd() . DS . 'testme'); + $Folder->cd('testme'); + $File =& new File($Folder->pwd() . DS . 'paths.php'); + $File->create(); + $Folder->cd(TMP . 'sessions'); + $result = $Folder->findRecursive('paths\.php'); + $expected = array(); + $this->assertIdentical($result, $expected); + + $Folder->cd(TMP . 'testme'); + $File =& new File($Folder->pwd() . DS . 'my.php'); + $File->create(); + $Folder->cd($Folder->pwd() . '/../..'); + + $result = $Folder->findRecursive('(paths|my)\.php'); + $expected = array( + TMP . 'testme' . DS . 'my.php', + TMP . 'testme' . DS . 'paths.php' + ); + $this->assertIdentical(array_diff($expected, $result), array()); + $this->assertIdentical(array_diff($result, $expected), array()); + + $result = $Folder->findRecursive('(paths|my)\.php', true); + $expected = array( + TMP . 'testme' . DS . 'my.php', + TMP . 'testme' . DS . 'paths.php' + ); + $this->assertIdentical($result, $expected); + + $Folder->cd(TEST_CAKE_CORE_INCLUDE_PATH . 'config'); + $Folder->cd(TMP); + $Folder->delete($Folder->pwd() . DS . 'testme'); + $File->delete(); + } + +/** + * testConstructWithNonExistantPath method + * + * @access public + * @return void + */ + function testConstructWithNonExistantPath() { + $Folder =& new Folder(TMP . 'config_non_existant', true); + $this->assertTrue(is_dir(TMP . 'config_non_existant')); + $Folder->cd(TMP); + $Folder->delete($Folder->pwd() . 'config_non_existant'); + } + +/** + * testDirSize method + * + * @access public + * @return void + */ + function testDirSize() { + $Folder =& new Folder(TMP . 'config_non_existant', true); + $this->assertEqual($Folder->dirSize(), 0); + + $File =& new File($Folder->pwd() . DS . 'my.php', true, 0777); + $File->create(); + $File->write('something here'); + $File->close(); + $this->assertEqual($Folder->dirSize(), 14); + + $Folder->cd(TMP); + $Folder->delete($Folder->pwd() . 'config_non_existant'); + } + +/** + * testDelete method + * + * @access public + * @return void + */ + function testDelete() { + $path = TMP . 'folder_delete_test'; + $Folder =& new Folder($path, true); + touch(TMP . 'folder_delete_test' . DS . 'file1'); + touch(TMP . 'folder_delete_test' . DS . 'file2'); + + $return = $Folder->delete(); + $this->assertTrue($return); + + $messages = $Folder->messages(); + $errors = $Folder->errors(); + $this->assertEqual($errors, array()); + + $expected = array( + $path . ' created', + $path . DS . 'file1 removed', + $path . DS . 'file2 removed', + $path . ' removed' + ); + $this->assertEqual($expected, $messages); + } + +/** + * testCopy method + * + * Verify that directories and files are copied recursively + * even if the destination directory already exists. + * Subdirectories existing in both destination and source directory + * are skipped and not merged or overwritten. + * + * @return void + * @access public + * @link https://trac.cakephp.org/ticket/6259 + */ + function testCopy() { + $path = TMP . 'folder_test'; + $folder1 = $path . DS . 'folder1'; + $folder2 = $folder1 . DS . 'folder2'; + $folder3 = $path . DS . 'folder3'; + $file1 = $folder1 . DS . 'file1.php'; + $file2 = $folder2 . DS . 'file2.php'; + + new Folder($path, true); + new Folder($folder1, true); + new Folder($folder2, true); + new Folder($folder3, true); + touch($file1); + touch($file2); + + $Folder =& new Folder($folder1); + $result = $Folder->copy($folder3); + $this->assertTrue($result); + $this->assertTrue(file_exists($folder3 . DS . 'file1.php')); + $this->assertTrue(file_exists($folder3 . DS . 'folder2' . DS . 'file2.php')); + + $Folder =& new Folder($folder3); + $Folder->delete(); + + $Folder =& new Folder($folder1); + $result = $Folder->copy($folder3); + $this->assertTrue($result); + $this->assertTrue(file_exists($folder3 . DS . 'file1.php')); + $this->assertTrue(file_exists($folder3 . DS . 'folder2' . DS . 'file2.php')); + + $Folder =& new Folder($folder3); + $Folder->delete(); + + new Folder($folder3, true); + new Folder($folder3 . DS . 'folder2', true); + file_put_contents($folder3 . DS . 'folder2' . DS . 'file2.php', 'untouched'); + + $Folder =& new Folder($folder1); + $result = $Folder->copy($folder3); + $this->assertTrue($result); + $this->assertTrue(file_exists($folder3 . DS . 'file1.php')); + $this->assertEqual(file_get_contents($folder3 . DS . 'folder2' . DS . 'file2.php'), 'untouched'); + + $Folder =& new Folder($path); + $Folder->delete(); + } + +/** + * testMove method + * + * Verify that directories and files are moved recursively + * even if the destination directory already exists. + * Subdirectories existing in both destination and source directory + * are skipped and not merged or overwritten. + * + * @return void + * @access public + * @link https://trac.cakephp.org/ticket/6259 + */ + function testMove() { + $path = TMP . 'folder_test'; + $folder1 = $path . DS . 'folder1'; + $folder2 = $folder1 . DS . 'folder2'; + $folder3 = $path . DS . 'folder3'; + $file1 = $folder1 . DS . 'file1.php'; + $file2 = $folder2 . DS . 'file2.php'; + + new Folder($path, true); + new Folder($folder1, true); + new Folder($folder2, true); + new Folder($folder3, true); + touch($file1); + touch($file2); + + $Folder =& new Folder($folder1); + $result = $Folder->move($folder3); + $this->assertTrue($result); + $this->assertTrue(file_exists($folder3 . DS . 'file1.php')); + $this->assertTrue(is_dir($folder3 . DS . 'folder2')); + $this->assertTrue(file_exists($folder3 . DS . 'folder2' . DS . 'file2.php')); + $this->assertFalse(file_exists($file1)); + $this->assertFalse(file_exists($folder2)); + $this->assertFalse(file_exists($file2)); + + $Folder =& new Folder($folder3); + $Folder->delete(); + + new Folder($folder1, true); + new Folder($folder2, true); + touch($file1); + touch($file2); + + $Folder =& new Folder($folder1); + $result = $Folder->move($folder3); + $this->assertTrue($result); + $this->assertTrue(file_exists($folder3 . DS . 'file1.php')); + $this->assertTrue(is_dir($folder3 . DS . 'folder2')); + $this->assertTrue(file_exists($folder3 . DS . 'folder2' . DS . 'file2.php')); + $this->assertFalse(file_exists($file1)); + $this->assertFalse(file_exists($folder2)); + $this->assertFalse(file_exists($file2)); + + $Folder =& new Folder($folder3); + $Folder->delete(); + + new Folder($folder1, true); + new Folder($folder2, true); + new Folder($folder3, true); + new Folder($folder3 . DS . 'folder2', true); + touch($file1); + touch($file2); + file_put_contents($folder3 . DS . 'folder2' . DS . 'file2.php', 'untouched'); + + $Folder =& new Folder($folder1); + $result = $Folder->move($folder3); + $this->assertTrue($result); + $this->assertTrue(file_exists($folder3 . DS . 'file1.php')); + $this->assertEqual(file_get_contents($folder3 . DS . 'folder2' . DS . 'file2.php'), 'untouched'); + $this->assertFalse(file_exists($file1)); + $this->assertFalse(file_exists($folder2)); + $this->assertFalse(file_exists($file2)); + + $Folder =& new Folder($path); + $Folder->delete(); + } +}