123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- <?php
- namespace RingCentral\Tests\Psr7;
- use RingCentral\Psr7\NoSeekStream;
- use RingCentral\Psr7\Stream;
- /**
- * @covers RingCentral\Psr7\Stream
- */
- class StreamTest extends \PHPUnit_Framework_TestCase
- {
- /**
- * @expectedException \InvalidArgumentException
- */
- public function testConstructorThrowsExceptionOnInvalidArgument()
- {
- new Stream(true);
- }
- public function testConstructorInitializesProperties()
- {
- $handle = fopen('php://temp', 'r+');
- fwrite($handle, 'data');
- $stream = new Stream($handle);
- $this->assertTrue($stream->isReadable());
- $this->assertTrue($stream->isWritable());
- $this->assertTrue($stream->isSeekable());
- $this->assertEquals('php://temp', $stream->getMetadata('uri'));
- $this->assertInternalType('array', $stream->getMetadata());
- $this->assertEquals(4, $stream->getSize());
- $this->assertFalse($stream->eof());
- $stream->close();
- }
- public function testStreamClosesHandleOnDestruct()
- {
- $handle = fopen('php://temp', 'r');
- $stream = new Stream($handle);
- unset($stream);
- $this->assertFalse(is_resource($handle));
- }
- public function testConvertsToString()
- {
- $handle = fopen('php://temp', 'w+');
- fwrite($handle, 'data');
- $stream = new Stream($handle);
- $this->assertEquals('data', (string) $stream);
- $this->assertEquals('data', (string) $stream);
- $stream->close();
- }
- public function testGetsContents()
- {
- $handle = fopen('php://temp', 'w+');
- fwrite($handle, 'data');
- $stream = new Stream($handle);
- $this->assertEquals('', $stream->getContents());
- $stream->seek(0);
- $this->assertEquals('data', $stream->getContents());
- $this->assertEquals('', $stream->getContents());
- }
- public function testChecksEof()
- {
- $handle = fopen('php://temp', 'w+');
- fwrite($handle, 'data');
- $stream = new Stream($handle);
- $this->assertFalse($stream->eof());
- $stream->read(4);
- $this->assertTrue($stream->eof());
- $stream->close();
- }
- public function testGetSize()
- {
- $size = filesize(__FILE__);
- $handle = fopen(__FILE__, 'r');
- $stream = new Stream($handle);
- $this->assertEquals($size, $stream->getSize());
- // Load from cache
- $this->assertEquals($size, $stream->getSize());
- $stream->close();
- }
- public function testEnsuresSizeIsConsistent()
- {
- $h = fopen('php://temp', 'w+');
- $this->assertEquals(3, fwrite($h, 'foo'));
- $stream = new Stream($h);
- $this->assertEquals(3, $stream->getSize());
- $this->assertEquals(4, $stream->write('test'));
- $this->assertEquals(7, $stream->getSize());
- $this->assertEquals(7, $stream->getSize());
- $stream->close();
- }
- public function testProvidesStreamPosition()
- {
- $handle = fopen('php://temp', 'w+');
- $stream = new Stream($handle);
- $this->assertEquals(0, $stream->tell());
- $stream->write('foo');
- $this->assertEquals(3, $stream->tell());
- $stream->seek(1);
- $this->assertEquals(1, $stream->tell());
- $this->assertSame(ftell($handle), $stream->tell());
- $stream->close();
- }
- public function testCanDetachStream()
- {
- $r = fopen('php://temp', 'w+');
- $stream = new Stream($r);
- $stream->write('foo');
- $this->assertTrue($stream->isReadable());
- $this->assertSame($r, $stream->detach());
- $stream->detach();
- $this->assertFalse($stream->isReadable());
- $this->assertFalse($stream->isWritable());
- $this->assertFalse($stream->isSeekable());
- $self = $this;
- $throws = function ($fn) use ($stream, $self) {
- try {
- $fn($stream);
- $self->fail();
- } catch (\Exception $e) {}
- };
- $throws(function ($stream) { $stream->read(10); });
- $throws(function ($stream) { $stream->write('bar'); });
- $throws(function ($stream) { $stream->seek(10); });
- $throws(function ($stream) { $stream->tell(); });
- $throws(function ($stream) { $stream->eof(); });
- $throws(function ($stream) { $stream->getSize(); });
- $throws(function ($stream) { $stream->getContents(); });
- $this->assertSame('', (string) $stream);
- $stream->close();
- }
- public function testCloseClearProperties()
- {
- $handle = fopen('php://temp', 'r+');
- $stream = new Stream($handle);
- $stream->close();
- $this->assertFalse($stream->isSeekable());
- $this->assertFalse($stream->isReadable());
- $this->assertFalse($stream->isWritable());
- $this->assertNull($stream->getSize());
- $this->assertEmpty($stream->getMetadata());
- }
- public function testDoesNotThrowInToString()
- {
- $s = \RingCentral\Psr7\stream_for('foo');
- $s = new NoSeekStream($s);
- $this->assertEquals('foo', (string) $s);
- }
- }
|