diff options
Diffstat (limited to 'vendor/nelexa/zip/tests/PhpZip/ZipFileAddDirTest.php')
-rw-r--r-- | vendor/nelexa/zip/tests/PhpZip/ZipFileAddDirTest.php | 383 |
1 files changed, 383 insertions, 0 deletions
diff --git a/vendor/nelexa/zip/tests/PhpZip/ZipFileAddDirTest.php b/vendor/nelexa/zip/tests/PhpZip/ZipFileAddDirTest.php new file mode 100644 index 0000000..039c1c3 --- /dev/null +++ b/vendor/nelexa/zip/tests/PhpZip/ZipFileAddDirTest.php @@ -0,0 +1,383 @@ +<?php + +namespace PhpZip; + +use PhpZip\Util\Iterator\IgnoreFilesFilterIterator; +use PhpZip\Util\Iterator\IgnoreFilesRecursiveFilterIterator; + +/** + * Test add directory to zip archive. + */ +class ZipFileAddDirTest extends ZipTestCase +{ + protected static $files = [ + '.hidden' => 'Hidden file', + 'text file.txt' => 'Text file', + 'Текстовый документ.txt' => 'Текстовый документ', + 'empty dir/' => null, + 'empty dir2/ещё пустой каталог/' => null, + 'catalog/New File' => 'New Catalog File', + 'catalog/New File 2' => 'New Catalog File 2', + 'catalog/Empty Dir/' => null, + 'category/list.txt' => 'Category list', + 'category/Pictures/128x160/Car/01.jpg' => 'File 01.jpg', + 'category/Pictures/128x160/Car/02.jpg' => 'File 02.jpg', + 'category/Pictures/240x320/Car/01.jpg' => 'File 01.jpg', + 'category/Pictures/240x320/Car/02.jpg' => 'File 02.jpg', + ]; + + /** + * Before test + */ + protected function setUp() + { + parent::setUp(); + $this->fillDirectory(); + } + + protected function fillDirectory() + { + foreach (self::$files as $name => $content) { + $fullName = $this->outputDirname . '/' . $name; + if ($content === null) { + if (!is_dir($fullName)) { + mkdir($fullName, 0755, true); + } + } else { + $dirname = dirname($fullName); + if (!is_dir($dirname)) { + mkdir($dirname, 0755, true); + } + file_put_contents($fullName, $content); + } + } + } + + protected static function assertFilesResult(ZipFileInterface $zipFile, array $actualResultFiles = [], $localPath = '/') + { + $localPath = rtrim($localPath, '/'); + $localPath = empty($localPath) ? "" : $localPath . '/'; + self::assertEquals(sizeof($zipFile), sizeof($actualResultFiles)); + $actualResultFiles = array_flip($actualResultFiles); + foreach (self::$files as $file => $content) { + $zipEntryName = $localPath . $file; + if (isset($actualResultFiles[$file])) { + self::assertTrue(isset($zipFile[$zipEntryName])); + self::assertEquals($zipFile[$zipEntryName], $content); + unset($actualResultFiles[$file]); + } else { + self::assertFalse(isset($zipFile[$zipEntryName])); + } + } + self::assertEmpty($actualResultFiles); + } + + public function testAddDirWithLocalPath() + { + $localPath = 'to/path'; + + $zipFile = new ZipFile(); + $zipFile->addDir($this->outputDirname, $localPath); + $zipFile->saveAsFile($this->outputFilename); + $zipFile->close(); + + self::assertCorrectZipArchive($this->outputFilename); + + $zipFile->openFile($this->outputFilename); + self::assertFilesResult($zipFile, [ + '.hidden', + 'text file.txt', + 'Текстовый документ.txt', + 'empty dir/', + ], $localPath); + $zipFile->close(); + } + + public function testAddDirWithoutLocalPath() + { + $zipFile = new ZipFile(); + $zipFile->addDir($this->outputDirname); + $zipFile->saveAsFile($this->outputFilename); + $zipFile->close(); + + self::assertCorrectZipArchive($this->outputFilename); + + $zipFile->openFile($this->outputFilename); + self::assertFilesResult($zipFile, [ + '.hidden', + 'text file.txt', + 'Текстовый документ.txt', + 'empty dir/', + ]); + $zipFile->close(); + } + + public function testAddFilesFromIterator() + { + $localPath = 'to/project'; + + $directoryIterator = new \DirectoryIterator($this->outputDirname); + + $zipFile = new ZipFile(); + $zipFile->addFilesFromIterator($directoryIterator, $localPath); + $zipFile->saveAsFile($this->outputFilename); + $zipFile->close(); + + self::assertCorrectZipArchive($this->outputFilename); + + $zipFile->openFile($this->outputFilename); + self::assertFilesResult($zipFile, [ + '.hidden', + 'text file.txt', + 'Текстовый документ.txt', + 'empty dir/', + ], $localPath); + $zipFile->close(); + } + + public function testAddFilesFromIteratorEmptyLocalPath() + { + $localPath = ''; + + $directoryIterator = new \DirectoryIterator($this->outputDirname); + + $zipFile = new ZipFile(); + $zipFile->addFilesFromIterator($directoryIterator, $localPath); + $zipFile->saveAsFile($this->outputFilename); + $zipFile->close(); + + self::assertCorrectZipArchive($this->outputFilename); + + $zipFile->openFile($this->outputFilename); + self::assertFilesResult($zipFile, [ + '.hidden', + 'text file.txt', + 'Текстовый документ.txt', + 'empty dir/', + ]); + $zipFile->close(); + } + + public function testAddFilesFromRecursiveIterator() + { + $localPath = 'to/project'; + + $directoryIterator = new \RecursiveDirectoryIterator($this->outputDirname); + + $zipFile = new ZipFile(); + $zipFile->addFilesFromIterator($directoryIterator, $localPath); + $zipFile->saveAsFile($this->outputFilename); + $zipFile->close(); + + self::assertCorrectZipArchive($this->outputFilename); + + $zipFile->openFile($this->outputFilename); + self::assertFilesResult($zipFile, array_keys(self::$files), $localPath); + $zipFile->close(); + } + + public function testAddRecursiveDirWithLocalPath() + { + $localPath = 'to/path'; + + $zipFile = new ZipFile(); + $zipFile->addDirRecursive($this->outputDirname, $localPath); + $zipFile->saveAsFile($this->outputFilename); + $zipFile->close(); + + self::assertCorrectZipArchive($this->outputFilename); + + $zipFile->openFile($this->outputFilename); + self::assertFilesResult($zipFile, array_keys(self::$files), $localPath); + $zipFile->close(); + } + + public function testAddRecursiveDirWithoutLocalPath() + { + $zipFile = new ZipFile(); + $zipFile->addDirRecursive($this->outputDirname); + $zipFile->saveAsFile($this->outputFilename); + $zipFile->close(); + + self::assertCorrectZipArchive($this->outputFilename); + + $zipFile->openFile($this->outputFilename); + self::assertFilesResult($zipFile, array_keys(self::$files)); + $zipFile->close(); + } + + public function testAddFilesFromIteratorWithIgnoreFiles() + { + $localPath = 'to/project'; + $ignoreFiles = [ + 'Текстовый документ.txt', + 'empty dir/' + ]; + + $directoryIterator = new \DirectoryIterator($this->outputDirname); + $ignoreIterator = new IgnoreFilesFilterIterator($directoryIterator, $ignoreFiles); + + $zipFile = new ZipFile(); + $zipFile->addFilesFromIterator($ignoreIterator, $localPath); + $zipFile->saveAsFile($this->outputFilename); + $zipFile->close(); + + self::assertCorrectZipArchive($this->outputFilename); + + $zipFile->openFile($this->outputFilename); + self::assertFilesResult($zipFile, [ + '.hidden', + 'text file.txt', + ], $localPath); + $zipFile->close(); + } + + public function testAddFilesFromRecursiveIteratorWithIgnoreFiles() + { + $localPath = 'to/project'; + $ignoreFiles = [ + '.hidden', + 'empty dir2/ещё пустой каталог/', + 'list.txt', + 'category/Pictures/240x320', + ]; + + $directoryIterator = new \RecursiveDirectoryIterator($this->outputDirname); + $ignoreIterator = new IgnoreFilesRecursiveFilterIterator($directoryIterator, $ignoreFiles); + + $zipFile = new ZipFile(); + $zipFile->addFilesFromIterator($ignoreIterator, $localPath); + $zipFile->saveAsFile($this->outputFilename); + $zipFile->close(); + + self::assertCorrectZipArchive($this->outputFilename); + + $zipFile->openFile($this->outputFilename); + self::assertFilesResult($zipFile, [ + 'text file.txt', + 'Текстовый документ.txt', + 'empty dir/', + 'catalog/New File', + 'catalog/New File 2', + 'catalog/Empty Dir/', + 'category/Pictures/128x160/Car/01.jpg', + 'category/Pictures/128x160/Car/02.jpg', + ], $localPath); + $zipFile->close(); + } + + /** + * Create archive and add files from glob pattern + */ + public function testAddFilesFromGlob() + { + $localPath = '/'; + + $zipFile = new ZipFile(); + $zipFile->addFilesFromGlob($this->outputDirname, '**.{txt,jpg}', $localPath); + $zipFile->saveAsFile($this->outputFilename); + $zipFile->close(); + + self::assertCorrectZipArchive($this->outputFilename); + + $zipFile->openFile($this->outputFilename); + self::assertFilesResult($zipFile, [ + 'text file.txt', + 'Текстовый документ.txt', + ], $localPath); + $zipFile->close(); + } + + /** + * Create archive and add recursively files from glob pattern + */ + public function testAddFilesFromGlobRecursive() + { + $localPath = '/'; + + $zipFile = new ZipFile(); + $zipFile->addFilesFromGlobRecursive($this->outputDirname, '**.{txt,jpg}', $localPath); + $zipFile->saveAsFile($this->outputFilename); + $zipFile->close(); + + self::assertCorrectZipArchive($this->outputFilename); + + $zipFile->openFile($this->outputFilename); + self::assertFilesResult($zipFile, [ + 'text file.txt', + 'Текстовый документ.txt', + 'category/list.txt', + 'category/Pictures/128x160/Car/01.jpg', + 'category/Pictures/128x160/Car/02.jpg', + 'category/Pictures/240x320/Car/01.jpg', + 'category/Pictures/240x320/Car/02.jpg', + ], $localPath); + $zipFile->close(); + } + + /** + * Create archive and add files from regex pattern + */ + public function testAddFilesFromRegex() + { + $localPath = 'path'; + + $zipFile = new ZipFile(); + $zipFile->addFilesFromRegex($this->outputDirname, '~\.(txt|jpe?g)$~i', $localPath); + $zipFile->saveAsFile($this->outputFilename); + $zipFile->close(); + + self::assertCorrectZipArchive($this->outputFilename); + + $zipFile->openFile($this->outputFilename); + self::assertFilesResult($zipFile, [ + 'text file.txt', + 'Текстовый документ.txt', + ], $localPath); + $zipFile->close(); + } + + /** + * Create archive and add files recursively from regex pattern + */ + public function testAddFilesFromRegexRecursive() + { + $localPath = '/'; + + $zipFile = new ZipFile(); + $zipFile->addFilesFromRegexRecursive($this->outputDirname, '~\.(txt|jpe?g)$~i', $localPath); + $zipFile->saveAsFile($this->outputFilename); + $zipFile->close(); + + self::assertCorrectZipArchive($this->outputFilename); + + $zipFile->openFile($this->outputFilename); + self::assertFilesResult($zipFile, [ + 'text file.txt', + 'Текстовый документ.txt', + 'category/list.txt', + 'category/Pictures/128x160/Car/01.jpg', + 'category/Pictures/128x160/Car/02.jpg', + 'category/Pictures/240x320/Car/01.jpg', + 'category/Pictures/240x320/Car/02.jpg', + ], $localPath); + $zipFile->close(); + } + + public function testArrayAccessAddDir() + { + $localPath = 'path/to'; + $iterator = new \RecursiveDirectoryIterator($this->outputDirname); + + $zipFile = new ZipFile(); + $zipFile[$localPath] = $iterator; + $zipFile->saveAsFile($this->outputFilename); + $zipFile->close(); + + self::assertCorrectZipArchive($this->outputFilename); + + $zipFile->openFile($this->outputFilename); + self::assertFilesResult($zipFile, array_keys(self::$files), $localPath); + $zipFile->close(); + } +} |