From 21860cbb5dbdbc20c4515f56c2631d99ff95ba26 Mon Sep 17 00:00:00 2001 From: Jakub Zalas Date: Fri, 6 Apr 2012 22:25:57 +0100 Subject: [PATCH] [Filesystem] Added unit tests for symlink method. --- .../Filesystem/Tests/FilesystemTest.php | 69 ++++++++++++++++--- 1 file changed, 59 insertions(+), 10 deletions(-) diff --git a/src/Symfony/Component/Filesystem/Tests/FilesystemTest.php b/src/Symfony/Component/Filesystem/Tests/FilesystemTest.php index a4cb26eeca..05f429fe20 100644 --- a/src/Symfony/Component/Filesystem/Tests/FilesystemTest.php +++ b/src/Symfony/Component/Filesystem/Tests/FilesystemTest.php @@ -235,56 +235,51 @@ class FilesystemTest extends \PHPUnit_Framework_TestCase $this->assertFileExists($basePath.'3'); } - public function testRemoveCleansFilesLinksAndDirectoriesIteratively() + public function testRemoveCleansFilesAndDirectoriesIteratively() { $basePath = $this->workspace.DIRECTORY_SEPARATOR.'directory'.DIRECTORY_SEPARATOR; mkdir($basePath); mkdir($basePath.'dir'); touch($basePath.'file'); - link($basePath.'file', $basePath.'link'); $this->filesystem->remove($basePath); $this->assertTrue(!is_dir($basePath)); } - public function testRemoveCleansArrayOfFilesLinksAndDirectories() + public function testRemoveCleansArrayOfFilesAndDirectories() { $basePath = $this->workspace.DIRECTORY_SEPARATOR; mkdir($basePath.'dir'); touch($basePath.'file'); - link($basePath.'file', $basePath.'link'); $files = array( - $basePath.'dir', $basePath.'file', $basePath.'link' + $basePath.'dir', $basePath.'file' ); $this->filesystem->remove($files); $this->assertTrue(!is_dir($basePath.'dir')); $this->assertTrue(!is_file($basePath.'file')); - $this->assertTrue(!is_link($basePath.'link')); } - public function testRemoveCleansTraversableObjectOfFilesLinksAndDirectories() + public function testRemoveCleansTraversableObjectOfFilesAndDirectories() { $basePath = $this->workspace.DIRECTORY_SEPARATOR; mkdir($basePath.'dir'); touch($basePath.'file'); - link($basePath.'file', $basePath.'link'); $files = new \ArrayObject(array( - $basePath.'dir', $basePath.'file', $basePath.'link' + $basePath.'dir', $basePath.'file' )); $this->filesystem->remove($files); $this->assertTrue(!is_dir($basePath.'dir')); $this->assertTrue(!is_file($basePath.'file')); - $this->assertTrue(!is_link($basePath.'link')); } public function testRemoveIgnoresNonExistingFiles() @@ -368,6 +363,53 @@ class FilesystemTest extends \PHPUnit_Framework_TestCase $this->filesystem->rename($file, $newPath); } + public function testSymlink() + { + $this->markAsSkippeIfSymlinkIsMissing(); + + $file = $this->workspace.DIRECTORY_SEPARATOR.'file'; + $link = $this->workspace.DIRECTORY_SEPARATOR.'link'; + + touch($file); + + $this->filesystem->symlink($file, $link); + + $this->assertTrue(is_link($link)); + $this->assertEquals($file, readlink($link)); + } + + public function testSymlinkIsOverwrittenIfPointsToDifferentTarget() + { + $this->markAsSkippeIfSymlinkIsMissing(); + + $file = $this->workspace.DIRECTORY_SEPARATOR.'file'; + $link = $this->workspace.DIRECTORY_SEPARATOR.'link'; + + touch($file); + symlink($this->workspace, $link); + + $this->filesystem->symlink($file, $link); + + $this->assertTrue(is_link($link)); + $this->assertEquals($file, readlink($link)); + } + + public function testSymlinkIsNotOverwrittenIfAlreadyCreated() + { + $this->markAsSkippeIfSymlinkIsMissing(); + + $file = $this->workspace.DIRECTORY_SEPARATOR.'file'; + $link = $this->workspace.DIRECTORY_SEPARATOR.'link'; + + touch($file); + symlink($file, $link); + + $this->filesystem->symlink($file, $link); + + $this->assertTrue(is_link($link)); + $this->assertEquals($file, readlink($link)); + } + /** * Returns file permissions as three digits (i.e. 755) * @@ -377,4 +419,11 @@ class FilesystemTest extends \PHPUnit_Framework_TestCase { return (int) substr(sprintf('%o', fileperms($filePath)), -3); } + + private function markAsSkippeIfSymlinkIsMissing() + { + if (!function_exists('symlink')) { + $this->markTestSkipped('symlink is not supported'); + } + } }