diff options
Diffstat (limited to 'vendor/ringcentral/psr7/tests/StreamTest.php')
-rw-r--r-- | vendor/ringcentral/psr7/tests/StreamTest.php | 163 |
1 files changed, 163 insertions, 0 deletions
diff --git a/vendor/ringcentral/psr7/tests/StreamTest.php b/vendor/ringcentral/psr7/tests/StreamTest.php new file mode 100644 index 0000000..5501805 --- /dev/null +++ b/vendor/ringcentral/psr7/tests/StreamTest.php @@ -0,0 +1,163 @@ +<?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); + } +} |