LazyOpenStreamTest.php 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. <?php
  2. declare(strict_types=1);
  3. namespace GuzzleHttp\Tests\Psr7;
  4. use GuzzleHttp\Psr7\LazyOpenStream;
  5. use PHPUnit\Framework\TestCase;
  6. class LazyOpenStreamTest extends TestCase
  7. {
  8. private $fname;
  9. protected function setUp(): void
  10. {
  11. $this->fname = tempnam(sys_get_temp_dir(), 'tfile');
  12. if (file_exists($this->fname)) {
  13. unlink($this->fname);
  14. }
  15. }
  16. protected function tearDown(): void
  17. {
  18. if (file_exists($this->fname)) {
  19. unlink($this->fname);
  20. }
  21. }
  22. public function testOpensLazily(): void
  23. {
  24. $l = new LazyOpenStream($this->fname, 'w+');
  25. $l->write('foo');
  26. self::assertIsArray($l->getMetadata());
  27. self::assertFileExists($this->fname);
  28. self::assertSame('foo', file_get_contents($this->fname));
  29. self::assertSame('foo', (string) $l);
  30. }
  31. public function testProxiesToFile(): void
  32. {
  33. file_put_contents($this->fname, 'foo');
  34. $l = new LazyOpenStream($this->fname, 'r');
  35. self::assertSame('foo', $l->read(4));
  36. self::assertTrue($l->eof());
  37. self::assertSame(3, $l->tell());
  38. self::assertTrue($l->isReadable());
  39. self::assertTrue($l->isSeekable());
  40. self::assertFalse($l->isWritable());
  41. $l->seek(1);
  42. self::assertSame('oo', $l->getContents());
  43. self::assertSame('foo', (string) $l);
  44. self::assertSame(3, $l->getSize());
  45. self::assertIsArray($l->getMetadata());
  46. $l->close();
  47. }
  48. public function testDetachesUnderlyingStream(): void
  49. {
  50. file_put_contents($this->fname, 'foo');
  51. $l = new LazyOpenStream($this->fname, 'r');
  52. $r = $l->detach();
  53. self::assertIsResource($r);
  54. fseek($r, 0);
  55. self::assertSame('foo', stream_get_contents($r));
  56. fclose($r);
  57. }
  58. }