Bladeren bron

Merge tag '3.2.2' into develop

Tagging hotfix 3.2.2 3.2.2

# Conflicts:
#	.travis.yml
#	tests/ZipFileTest.php
Ne-Lexa 6 jaren geleden
bovenliggende
commit
f3d769739b
4 gewijzigde bestanden met toevoegingen van 42 en 4 verwijderingen
  1. 4 1
      src/Model/Data/ZipFileData.php
  2. 1 2
      src/ZipFile.php
  3. 2 1
      tests/ZipEntryTest.php
  4. 35 0
      tests/ZipFileTest.php

+ 4 - 1
src/Model/Data/ZipFileData.php

@@ -4,6 +4,7 @@ namespace PhpZip\Model\Data;
 
 use PhpZip\Exception\ZipException;
 use PhpZip\Model\ZipData;
+use PhpZip\Model\ZipEntry;
 
 /**
  * Class ZipFileData.
@@ -16,11 +17,12 @@ class ZipFileData implements ZipData
     /**
      * ZipStringData constructor.
      *
+     * @param ZipEntry     $zipEntry
      * @param \SplFileInfo $fileInfo
      *
      * @throws ZipException
      */
-    public function __construct(\SplFileInfo $fileInfo)
+    public function __construct(ZipEntry $zipEntry, \SplFileInfo $fileInfo)
     {
         if (!$fileInfo->isFile()) {
             throw new ZipException('$fileInfo is not a file.');
@@ -31,6 +33,7 @@ class ZipFileData implements ZipData
         }
 
         $this->file = $fileInfo;
+        $zipEntry->setUncompressedSize($fileInfo->getSize());
     }
 
     /**

+ 1 - 2
src/ZipFile.php

@@ -711,10 +711,9 @@ class ZipFile implements ZipFileInterface
                     ZipCompressionMethod::DEFLATED;
             }
 
-            $zipEntry->setUncompressedSize($file->getSize());
             $zipEntry->setCompressionMethod($compressionMethod);
 
-            $zipData = new ZipFileData($file);
+            $zipData = new ZipFileData($zipEntry, $file);
         } elseif ($file->isDir()) {
             $zipEntry->setCompressionMethod(ZipCompressionMethod::STORED);
             $zipEntry->setUncompressedSize(0);

+ 2 - 1
tests/ZipEntryTest.php

@@ -1571,9 +1571,10 @@ class ZipEntryTest extends TestCase
     public function testClone()
     {
         $newUnixExtra = new NewUnixExtraField();
-        $zipData = new ZipFileData(new \SplFileInfo(__FILE__));
 
         $zipEntry = new ZipEntry('entry');
+        $zipData = new ZipFileData($zipEntry, new \SplFileInfo(__FILE__));
+
         $zipEntry->addExtraField($newUnixExtra);
         $zipEntry->setData($zipData);
 

+ 35 - 0
tests/ZipFileTest.php

@@ -10,6 +10,7 @@ use PhpZip\Exception\InvalidArgumentException;
 use PhpZip\Exception\ZipEntryNotFoundException;
 use PhpZip\Exception\ZipException;
 use PhpZip\Exception\ZipUnsupportMethodException;
+use PhpZip\Model\Data\ZipFileData;
 use PhpZip\Model\ZipEntry;
 use PhpZip\Model\ZipInfo;
 use PhpZip\Util\FilesUtil;
@@ -2459,6 +2460,10 @@ class ZipFileTest extends ZipTestCase
         $zipFile->close();
     }
 
+    /**
+     * @throws ZipEntryNotFoundException
+     * @throws ZipException
+     */
     public function testNoData()
     {
         $this->setExpectedException(ZipException::class, 'No data for zip entry file');
@@ -2476,4 +2481,34 @@ class ZipFileTest extends ZipTestCase
             $zipFile->close();
         }
     }
+
+    /**
+     * @throws ZipEntryNotFoundException
+     * @throws ZipException
+     */
+    public function testReplaceEntryContentsByFile()
+    {
+        $entryName = basename(__FILE__);
+
+        $zipFile = new ZipFile();
+        $zipFile[$entryName] = 'contents';
+        $zipFile->saveAsFile($this->outputFilename);
+        $zipFile->close();
+
+        $zipFile->openFile($this->outputFilename);
+        $entry = $zipFile->getEntry($entryName);
+        $data = new ZipFileData($entry, new \SplFileInfo(__FILE__));
+        $entry->setData($data);
+        $zipFile->saveAsFile($this->outputFilename);
+        $zipFile->close();
+
+        self::assertCorrectZipArchive($this->outputFilename);
+
+        $zipFile->openFile($this->outputFilename);
+        static::assertSame(
+            $zipFile->getEntryContents($entryName),
+            file_get_contents(__FILE__)
+        );
+        $zipFile->close();
+    }
 }