From 08c890ba24143e6bff24b8ebd437ede047985403 Mon Sep 17 00:00:00 2001 From: Ne-Lexa <alexey@nelexa.ru> Date: Fri, 10 Mar 2017 19:03:59 +0300 Subject: [PATCH] Add tests --- src/PhpZip/ZipFile.php | 11 +++-- tests/PhpZip/ZipFileTest.php | 91 +++++++++++++++++++++++++++++++++++- 2 files changed, 96 insertions(+), 6 deletions(-) diff --git a/src/PhpZip/ZipFile.php b/src/PhpZip/ZipFile.php index 8d924a9..acbe97d 100644 --- a/src/PhpZip/ZipFile.php +++ b/src/PhpZip/ZipFile.php @@ -498,8 +498,7 @@ class ZipFile implements \Countable, \ArrayAccess, \Iterator } else { $compressionMethod = self::METHOD_STORED; } - } - elseif (!in_array($compressionMethod, self::$allowCompressionMethods, true)) { + } elseif (!in_array($compressionMethod, self::$allowCompressionMethods, true)) { throw new ZipUnsupportMethod('Unsupported method ' . $compressionMethod); } @@ -860,12 +859,12 @@ class ZipFile implements \Countable, \ArrayAccess, \Iterator $filename = (string)$filename; $tempFilename = $filename . '.temp' . uniqid(); - if (!($handle = fopen($tempFilename, 'w+b'))) { + if (!($handle = @fopen($tempFilename, 'w+b'))) { throw new InvalidArgumentException("File " . $tempFilename . ' can not open from write.'); } $this->saveAsStream($handle); - if (!rename($tempFilename, $filename)) { + if (!@rename($tempFilename, $filename)) { throw new ZipException('Can not move ' . $tempFilename . ' to ' . $filename); } } @@ -999,6 +998,10 @@ class ZipFile implements \Countable, \ArrayAccess, \Iterator if ($entryName === null) { throw new InvalidArgumentException('entryName is null'); } + $entryName = (string)$entryName; + if (strlen($entryName) === 0) { + throw new InvalidArgumentException('entryName is empty'); + } if ($entryName[strlen($entryName) - 1] === '/') { $this->addEmptyDir($entryName); } else { diff --git a/tests/PhpZip/ZipFileTest.php b/tests/PhpZip/ZipFileTest.php index 7834f42..714cfea 100644 --- a/tests/PhpZip/ZipFileTest.php +++ b/tests/PhpZip/ZipFileTest.php @@ -531,6 +531,24 @@ class ZipFileTest extends ZipTestCase $zipFile->close(); } + /** + * @expectedException \PhpZip\Exception\InvalidArgumentException + * @expectedExceptionMessage Glob pattern is empty + */ + public function testDeleteFromGlobFailNull(){ + $zipFile = new ZipFile(); + $zipFile->deleteFromGlob(null); + } + + /** + * @expectedException \PhpZip\Exception\InvalidArgumentException + * @expectedExceptionMessage Glob pattern is empty + */ + public function testDeleteFromGlobFailEmpty(){ + $zipFile = new ZipFile(); + $zipFile->deleteFromGlob(''); + } + /** * Delete entries from regex pattern */ @@ -558,6 +576,24 @@ class ZipFileTest extends ZipTestCase $zipFile->close(); } + /** + * @expectedException \PhpZip\Exception\InvalidArgumentException + * @expectedExceptionMessage Regex pattern is empty. + */ + public function testDeleteFromRegexFailNull(){ + $zipFile = new ZipFile(); + $zipFile->deleteFromRegex(null); + } + + /** + * @expectedException \PhpZip\Exception\InvalidArgumentException + * @expectedExceptionMessage Regex pattern is empty. + */ + public function testDeleteFromRegexFailEmpty(){ + $zipFile = new ZipFile(); + $zipFile->deleteFromRegex(''); + } + /** * Delete all entries */ @@ -1015,6 +1051,26 @@ class ZipFileTest extends ZipTestCase $zipFile->close(); } + /** + * @expectedException \PhpZip\Exception\InvalidArgumentException + * @expectedExceptionMessage entryName is null + */ + public function testAddFromArrayAccessNullName() + { + $zipFile = new ZipFile(); + $zipFile[null] = 'content'; + } + + /** + * @expectedException \PhpZip\Exception\InvalidArgumentException + * @expectedExceptionMessage entryName is empty + */ + public function testAddFromArrayAccessEmptyName() + { + $zipFile = new ZipFile(); + $zipFile[''] = 'content'; + } + /** * @expectedException \PhpZip\Exception\InvalidArgumentException * @expectedExceptionMessage Contents is null @@ -1191,6 +1247,35 @@ class ZipFileTest extends ZipTestCase $zipFile->addFile($this->outputFilename); } + /** + * @expectedException \PhpZip\Exception\InvalidArgumentException + * @expectedExceptionMessage handle is not resource + */ + public function testSaveAsStreamBadStream() + { + $zipFile = new ZipFile(); + $zipFile->saveAsStream("bad stream"); + } + + /** + * @expectedException \PhpZip\Exception\InvalidArgumentException + * @expectedExceptionMessage can not open from write + */ + public function testSaveAsFileNotWritable() + { + $this->outputFilename = sys_get_temp_dir() . '/zipExtractTest'; + if (is_dir($this->outputFilename)) { + FilesUtil::removeDir($this->outputFilename); + } + self::assertTrue(mkdir($this->outputFilename, 0444, true)); + self::assertTrue(chmod($this->outputFilename, 0444)); + + $this->outputFilename .= '/' . uniqid() . '.zip'; + + $zipFile = new ZipFile(); + $zipFile->saveAsFile($this->outputFilename); + } + /** * Test `ZipFile` implemented \ArrayAccess, \Countable and |iterator. */ @@ -1280,7 +1365,8 @@ class ZipFileTest extends ZipTestCase * @expectedException \PhpZip\Exception\InvalidArgumentException * @expectedExceptionMessage DirName empty */ - public function testAddEmptyDirNullName(){ + public function testAddEmptyDirNullName() + { $zipFile = new ZipFile(); $zipFile->addEmptyDir(null); } @@ -1289,7 +1375,8 @@ class ZipFileTest extends ZipTestCase * @expectedException \PhpZip\Exception\InvalidArgumentException * @expectedExceptionMessage DirName empty */ - public function testAddEmptyDirEmptyName(){ + public function testAddEmptyDirEmptyName() + { $zipFile = new ZipFile(); $zipFile->addEmptyDir(""); }