91 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			91 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| namespace GuzzleHttp\Tests\Psr7;
 | |
| 
 | |
| use GuzzleHttp\Psr7;
 | |
| use GuzzleHttp\Psr7\FnStream;
 | |
| 
 | |
| /**
 | |
|  * @covers GuzzleHttp\Psr7\FnStream
 | |
|  */
 | |
| class FnStreamTest extends \PHPUnit_Framework_TestCase
 | |
| {
 | |
|     /**
 | |
|      * @expectedException \BadMethodCallException
 | |
|      * @expectedExceptionMessage seek() is not implemented in the FnStream
 | |
|      */
 | |
|     public function testThrowsWhenNotImplemented()
 | |
|     {
 | |
|         (new FnStream([]))->seek(1);
 | |
|     }
 | |
| 
 | |
|     public function testProxiesToFunction()
 | |
|     {
 | |
|         $s = new FnStream([
 | |
|             'read' => function ($len) {
 | |
|                 $this->assertEquals(3, $len);
 | |
|                 return 'foo';
 | |
|             }
 | |
|         ]);
 | |
| 
 | |
|         $this->assertEquals('foo', $s->read(3));
 | |
|     }
 | |
| 
 | |
|     public function testCanCloseOnDestruct()
 | |
|     {
 | |
|         $called = false;
 | |
|         $s = new FnStream([
 | |
|             'close' => function () use (&$called) {
 | |
|                 $called = true;
 | |
|             }
 | |
|         ]);
 | |
|         unset($s);
 | |
|         $this->assertTrue($called);
 | |
|     }
 | |
| 
 | |
|     public function testDoesNotRequireClose()
 | |
|     {
 | |
|         $s = new FnStream([]);
 | |
|         unset($s);
 | |
|     }
 | |
| 
 | |
|     public function testDecoratesStream()
 | |
|     {
 | |
|         $a = Psr7\stream_for('foo');
 | |
|         $b = FnStream::decorate($a, []);
 | |
|         $this->assertEquals(3, $b->getSize());
 | |
|         $this->assertEquals($b->isWritable(), true);
 | |
|         $this->assertEquals($b->isReadable(), true);
 | |
|         $this->assertEquals($b->isSeekable(), true);
 | |
|         $this->assertEquals($b->read(3), 'foo');
 | |
|         $this->assertEquals($b->tell(), 3);
 | |
|         $this->assertEquals($a->tell(), 3);
 | |
|         $this->assertSame('', $a->read(1));
 | |
|         $this->assertEquals($b->eof(), true);
 | |
|         $this->assertEquals($a->eof(), true);
 | |
|         $b->seek(0);
 | |
|         $this->assertEquals('foo', (string) $b);
 | |
|         $b->seek(0);
 | |
|         $this->assertEquals('foo', $b->getContents());
 | |
|         $this->assertEquals($a->getMetadata(), $b->getMetadata());
 | |
|         $b->seek(0, SEEK_END);
 | |
|         $b->write('bar');
 | |
|         $this->assertEquals('foobar', (string) $b);
 | |
|         $this->assertInternalType('resource', $b->detach());
 | |
|         $b->close();
 | |
|     }
 | |
| 
 | |
|     public function testDecoratesWithCustomizations()
 | |
|     {
 | |
|         $called = false;
 | |
|         $a = Psr7\stream_for('foo');
 | |
|         $b = FnStream::decorate($a, [
 | |
|             'read' => function ($len) use (&$called, $a) {
 | |
|                 $called = true;
 | |
|                 return $a->read($len);
 | |
|             }
 | |
|         ]);
 | |
|         $this->assertEquals('foo', $b->read(3));
 | |
|         $this->assertTrue($called);
 | |
|     }
 | |
| }
 | 
