You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
155 lines
4.7 KiB
155 lines
4.7 KiB
<?php
|
|
namespace GuzzleHttp\Tests\Stream;
|
|
|
|
use GuzzleHttp\Stream\FnStream;
|
|
use GuzzleHttp\Stream\NoSeekStream;
|
|
use GuzzleHttp\Stream\Stream;
|
|
use GuzzleHttp\Stream\Utils;
|
|
|
|
class UtilsTest extends \PHPUnit_Framework_TestCase
|
|
{
|
|
public function testCopiesToString()
|
|
{
|
|
$s = Stream::factory('foobaz');
|
|
$this->assertEquals('foobaz', Utils::copyToString($s));
|
|
$s->seek(0);
|
|
$this->assertEquals('foo', Utils::copyToString($s, 3));
|
|
$this->assertEquals('baz', Utils::copyToString($s, 3));
|
|
$this->assertEquals('', Utils::copyToString($s));
|
|
}
|
|
|
|
public function testCopiesToStringStopsWhenReadFails()
|
|
{
|
|
$s1 = Stream::factory('foobaz');
|
|
$s1 = FnStream::decorate($s1, [
|
|
'read' => function () {
|
|
return false;
|
|
}
|
|
]);
|
|
$result = Utils::copyToString($s1);
|
|
$this->assertEquals('', $result);
|
|
}
|
|
|
|
public function testCopiesToStream()
|
|
{
|
|
$s1 = Stream::factory('foobaz');
|
|
$s2 = Stream::factory('');
|
|
Utils::copyToStream($s1, $s2);
|
|
$this->assertEquals('foobaz', (string) $s2);
|
|
$s2 = Stream::factory('');
|
|
$s1->seek(0);
|
|
Utils::copyToStream($s1, $s2, 3);
|
|
$this->assertEquals('foo', (string) $s2);
|
|
Utils::copyToStream($s1, $s2, 3);
|
|
$this->assertEquals('foobaz', (string) $s2);
|
|
}
|
|
|
|
public function testStopsCopyToStreamWhenWriteFails()
|
|
{
|
|
$s1 = Stream::factory('foobaz');
|
|
$s2 = Stream::factory('');
|
|
$s2 = FnStream::decorate($s2, ['write' => function () { return 0; }]);
|
|
Utils::copyToStream($s1, $s2);
|
|
$this->assertEquals('', (string) $s2);
|
|
}
|
|
|
|
public function testStopsCopyToSteamWhenWriteFailsWithMaxLen()
|
|
{
|
|
$s1 = Stream::factory('foobaz');
|
|
$s2 = Stream::factory('');
|
|
$s2 = FnStream::decorate($s2, ['write' => function () { return 0; }]);
|
|
Utils::copyToStream($s1, $s2, 10);
|
|
$this->assertEquals('', (string) $s2);
|
|
}
|
|
|
|
public function testStopsCopyToSteamWhenReadFailsWithMaxLen()
|
|
{
|
|
$s1 = Stream::factory('foobaz');
|
|
$s1 = FnStream::decorate($s1, ['read' => function () { return ''; }]);
|
|
$s2 = Stream::factory('');
|
|
Utils::copyToStream($s1, $s2, 10);
|
|
$this->assertEquals('', (string) $s2);
|
|
}
|
|
|
|
public function testReadsLines()
|
|
{
|
|
$s = Stream::factory("foo\nbaz\nbar");
|
|
$this->assertEquals("foo\n", Utils::readline($s));
|
|
$this->assertEquals("baz\n", Utils::readline($s));
|
|
$this->assertEquals("bar", Utils::readline($s));
|
|
}
|
|
|
|
public function testReadsLinesUpToMaxLength()
|
|
{
|
|
$s = Stream::factory("12345\n");
|
|
$this->assertEquals("123", Utils::readline($s, 4));
|
|
$this->assertEquals("45\n", Utils::readline($s));
|
|
}
|
|
|
|
public function testReadsLineUntilFalseReturnedFromRead()
|
|
{
|
|
$s = $this->getMockBuilder('GuzzleHttp\Stream\Stream')
|
|
->setMethods(['read', 'eof'])
|
|
->disableOriginalConstructor()
|
|
->getMock();
|
|
$s->expects($this->exactly(2))
|
|
->method('read')
|
|
->will($this->returnCallback(function () {
|
|
static $c = false;
|
|
if ($c) {
|
|
return false;
|
|
}
|
|
$c = true;
|
|
return 'h';
|
|
}));
|
|
$s->expects($this->exactly(2))
|
|
->method('eof')
|
|
->will($this->returnValue(false));
|
|
$this->assertEquals("h", Utils::readline($s));
|
|
}
|
|
|
|
public function testCalculatesHash()
|
|
{
|
|
$s = Stream::factory('foobazbar');
|
|
$this->assertEquals(md5('foobazbar'), Utils::hash($s, 'md5'));
|
|
}
|
|
|
|
/**
|
|
* @expectedException \GuzzleHttp\Stream\Exception\SeekException
|
|
*/
|
|
public function testCalculatesHashThrowsWhenSeekFails()
|
|
{
|
|
$s = new NoSeekStream(Stream::factory('foobazbar'));
|
|
$s->read(2);
|
|
Utils::hash($s, 'md5');
|
|
}
|
|
|
|
public function testCalculatesHashSeeksToOriginalPosition()
|
|
{
|
|
$s = Stream::factory('foobazbar');
|
|
$s->seek(4);
|
|
$this->assertEquals(md5('foobazbar'), Utils::hash($s, 'md5'));
|
|
$this->assertEquals(4, $s->tell());
|
|
}
|
|
|
|
public function testOpensFilesSuccessfully()
|
|
{
|
|
$r = Utils::open(__FILE__, 'r');
|
|
$this->assertInternalType('resource', $r);
|
|
fclose($r);
|
|
}
|
|
|
|
/**
|
|
* @expectedException \RuntimeException
|
|
* @expectedExceptionMessage Unable to open /path/to/does/not/exist using mode r
|
|
*/
|
|
public function testThrowsExceptionNotWarning()
|
|
{
|
|
Utils::open('/path/to/does/not/exist', 'r');
|
|
}
|
|
|
|
public function testProxiesToFactory()
|
|
{
|
|
$this->assertEquals('foo', (string) Utils::create('foo'));
|
|
}
|
|
}
|
|
|