scratch

Subversion Repositories:
Compare Path: Rev
With Path: Rev
?path1? @ 86  →  ?path2? @ 87
/vendor/guzzlehttp/streams/tests/AppendStreamTest.php
@@ -0,0 +1,162 @@
<?php
namespace GuzzleHttp\Tests\Stream;
 
use GuzzleHttp\Stream\AppendStream;
use GuzzleHttp\Stream\Stream;
 
class AppendStreamTest extends \PHPUnit_Framework_TestCase
{
/**
* @expectedException \InvalidArgumentException
* @expectedExceptionMessage Each stream must be readable
*/
public function testValidatesStreamsAreReadable()
{
$a = new AppendStream();
$s = $this->getMockBuilder('GuzzleHttp\Stream\StreamInterface')
->setMethods(['isReadable'])
->getMockForAbstractClass();
$s->expects($this->once())
->method('isReadable')
->will($this->returnValue(false));
$a->addStream($s);
}
 
public function testValidatesSeekType()
{
$a = new AppendStream();
$this->assertFalse($a->seek(100, SEEK_CUR));
}
 
public function testTriesToRewindOnSeek()
{
$a = new AppendStream();
$s = $this->getMockBuilder('GuzzleHttp\Stream\StreamInterface')
->setMethods(['isReadable', 'seek', 'isSeekable'])
->getMockForAbstractClass();
$s->expects($this->once())
->method('isReadable')
->will($this->returnValue(true));
$s->expects($this->once())
->method('isSeekable')
->will($this->returnValue(true));
$s->expects($this->once())
->method('seek')
->will($this->returnValue(false));
$a->addStream($s);
$this->assertFalse($a->seek(10));
}
 
public function testSeeksToPositionByReading()
{
$a = new AppendStream([
Stream::factory('foo'),
Stream::factory('bar'),
Stream::factory('baz'),
]);
 
$this->assertTrue($a->seek(3));
$this->assertEquals(3, $a->tell());
$this->assertEquals('bar', $a->read(3));
$a->seek(6);
$this->assertEquals(6, $a->tell());
$this->assertEquals('baz', $a->read(3));
}
 
public function testDetachesEachStream()
{
$s1 = Stream::factory('foo');
$s2 = Stream::factory('foo');
$a = new AppendStream([$s1, $s2]);
$this->assertSame('foofoo', (string) $a);
$a->detach();
$this->assertSame('', (string) $a);
$this->assertSame(0, $a->getSize());
}
 
public function testClosesEachStream()
{
$s1 = Stream::factory('foo');
$a = new AppendStream([$s1]);
$a->close();
$this->assertSame('', (string) $a);
}
 
public function testIsNotWritable()
{
$a = new AppendStream([Stream::factory('foo')]);
$this->assertFalse($a->isWritable());
$this->assertTrue($a->isSeekable());
$this->assertTrue($a->isReadable());
$this->assertFalse($a->write('foo'));
}
 
public function testDoesNotNeedStreams()
{
$a = new AppendStream();
$this->assertEquals('', (string) $a);
}
 
public function testCanReadFromMultipleStreams()
{
$a = new AppendStream([
Stream::factory('foo'),
Stream::factory('bar'),
Stream::factory('baz'),
]);
$this->assertFalse($a->eof());
$this->assertSame(0, $a->tell());
$this->assertEquals('foo', $a->read(3));
$this->assertEquals('bar', $a->read(3));
$this->assertEquals('baz', $a->read(3));
$this->assertTrue($a->eof());
$this->assertSame(9, $a->tell());
$this->assertEquals('foobarbaz', (string) $a);
}
 
public function testCanDetermineSizeFromMultipleStreams()
{
$a = new AppendStream([
Stream::factory('foo'),
Stream::factory('bar')
]);
$this->assertEquals(6, $a->getSize());
 
$s = $this->getMockBuilder('GuzzleHttp\Stream\StreamInterface')
->setMethods(['isSeekable', 'isReadable'])
->getMockForAbstractClass();
$s->expects($this->once())
->method('isSeekable')
->will($this->returnValue(null));
$s->expects($this->once())
->method('isReadable')
->will($this->returnValue(true));
$a->addStream($s);
$this->assertNull($a->getSize());
}
 
public function testCatchesExceptionsWhenCastingToString()
{
$s = $this->getMockBuilder('GuzzleHttp\Stream\StreamInterface')
->setMethods(['read', 'isReadable', 'eof'])
->getMockForAbstractClass();
$s->expects($this->once())
->method('read')
->will($this->throwException(new \RuntimeException('foo')));
$s->expects($this->once())
->method('isReadable')
->will($this->returnValue(true));
$s->expects($this->any())
->method('eof')
->will($this->returnValue(false));
$a = new AppendStream([$s]);
$this->assertFalse($a->eof());
$this->assertSame('', (string) $a);
}
 
public function testFlushReturnsFalse()
{
$s = new AppendStream();
$this->assertFalse($s->flush());
}
}