123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- <?php
- /** @noinspection PhpUsageOfSilenceOperatorInspection */
- namespace PhpZip\Tests;
- use PHPUnit\Framework\TestCase;
- use PhpZip\Exception\InvalidArgumentException;
- use PhpZip\Exception\ZipException;
- use PhpZip\ZipFile;
- /**
- * Class ZipStreamOpenTest.
- *
- * @internal
- *
- * @medium
- */
- class ZipStreamOpenTest extends TestCase
- {
- /**
- * @dataProvider provideStreams
- *
- * @param resource $resource
- * @param string|null $exceptionClass
- * @param string|null $exceptionMessage
- *
- * @throws ZipException
- */
- public function testOpenStream($resource, $exceptionClass = null, $exceptionMessage = null)
- {
- if ($resource === null) {
- static::markTestSkipped('skip null resource');
- return;
- }
- if ($exceptionClass !== null) {
- $this->setExpectedException(
- $exceptionClass,
- $exceptionMessage
- );
- }
- static::assertInternalType('resource', $resource);
- $zipFile = new ZipFile();
- $zipFile->openFromStream($resource);
- static::assertTrue(fclose($resource));
- }
- /**
- * @return array
- */
- public function provideStreams()
- {
- return [
- [@fopen(__DIR__ . '/resources/apk.zip', 'rb'), null, null],
- [
- @fopen(__DIR__, 'rb'),
- InvalidArgumentException::class,
- 'Directory stream not supported',
- ],
- [$this->getTempResource('php://temp'), null, null],
- [$this->getTempResource('php://memory'), null, null],
- [
- @fopen('https://github.com/Ne-Lexa/php-zip/archive/master.zip', 'rb'),
- InvalidArgumentException::class,
- 'The stream wrapper type "http" is not supported.',
- ],
- ];
- }
- /**
- * @param string $filename
- *
- * @return resource
- */
- private function getTempResource($filename)
- {
- $fp = fopen(__DIR__ . '/resources/apk.zip', 'rb');
- $stream = fopen($filename, 'r+b');
- stream_copy_to_stream($fp, $stream);
- fclose($fp);
- rewind($stream);
- return $stream;
- }
- }
|