InflateStreamTest.php 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. <?php
  2. namespace GuzzleHttp\Tests\Psr7;
  3. use GuzzleHttp\Psr7;
  4. use GuzzleHttp\Psr7\InflateStream;
  5. use GuzzleHttp\Psr7\NoSeekStream;
  6. class InflateStreamTest extends BaseTest
  7. {
  8. public function testInflatesStreams()
  9. {
  10. $content = gzencode('test');
  11. $a = Psr7\stream_for($content);
  12. $b = new InflateStream($a);
  13. $this->assertEquals('test', (string) $b);
  14. }
  15. public function testInflatesStreamsWithFilename()
  16. {
  17. $content = $this->getGzipStringWithFilename('test');
  18. $a = Psr7\stream_for($content);
  19. $b = new InflateStream($a);
  20. $this->assertEquals('test', (string) $b);
  21. }
  22. public function testInflatesStreamsPreserveSeekable()
  23. {
  24. $content = $this->getGzipStringWithFilename('test');
  25. $seekable = Psr7\stream_for($content);
  26. $nonSeekable = new NoSeekStream(Psr7\stream_for($content));
  27. $this->assertTrue((new InflateStream($seekable))->isSeekable());
  28. $this->assertFalse((new InflateStream($nonSeekable))->isSeekable());
  29. }
  30. private function getGzipStringWithFilename($original_string)
  31. {
  32. $gzipped = bin2hex(gzencode($original_string));
  33. $header = substr($gzipped, 0, 20);
  34. // set FNAME flag
  35. $header[6]=0;
  36. $header[7]=8;
  37. // make a dummy filename
  38. $filename = '64756d6d7900';
  39. $rest = substr($gzipped, 20);
  40. return hex2bin($header . $filename . $rest);
  41. }
  42. }