1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/movim_ynh.git synced 2024-09-03 19:46:19 +02:00
movim_ynh/sources/vendor/react/stream/tests/UtilTest.php
2016-03-14 23:16:11 +01:00

157 lines
4.2 KiB
PHP

<?php
namespace React\Tests\Stream;
use React\Stream\Buffer;
use React\Stream\ReadableStream;
use React\Stream\Util;
/**
* @covers React\Stream\Util
*/
class UtilTest extends TestCase
{
public function testPipeShouldEmitEvents()
{
$readable = $this->getMock('React\Stream\ReadableStreamInterface');
$readable
->expects($this->at(0))
->method('on')
->with('data', $this->isInstanceOf('Closure'));
$readable
->expects($this->at(1))
->method('on')
->with('end', $this->isInstanceOf('Closure'));
$writable = $this->getMock('React\Stream\WritableStreamInterface');
$writable
->expects($this->at(0))
->method('emit')
->with('pipe', array($readable));
Util::pipe($readable, $writable);
}
public function testPipeWithEnd()
{
$readable = new Stub\ReadableStreamStub();
$writable = $this->getMock('React\Stream\WritableStreamInterface');
$writable
->expects($this->once())
->method('end');
Util::pipe($readable, $writable);
$readable->end();
}
public function testPipeWithoutEnd()
{
$readable = new Stub\ReadableStreamStub();
$writable = $this->getMock('React\Stream\WritableStreamInterface');
$writable
->expects($this->never())
->method('end');
Util::pipe($readable, $writable, array('end' => false));
$readable->end();
}
public function testPipeWithTooSlowWritableShouldPauseReadable()
{
$readable = new Stub\ReadableStreamStub();
$writable = $this->getMock('React\Stream\WritableStreamInterface');
$writable
->expects($this->once())
->method('write')
->with('some data')
->will($this->returnValue(false));
$readable->pipe($writable);
$this->assertFalse($readable->paused);
$readable->write('some data');
$this->assertTrue($readable->paused);
}
public function testPipeWithTooSlowWritableShouldResumeOnDrain()
{
$readable = new Stub\ReadableStreamStub();
$onDrain = null;
$writable = $this->getMock('React\Stream\WritableStreamInterface');
$writable
->expects($this->once())
->method('on')
->with('drain', $this->isInstanceOf('Closure'))
->will($this->returnCallback(function ($name, $callback) use (&$onDrain) {
$onDrain = $callback;
}));
$readable->pipe($writable);
$readable->pause();
$this->assertTrue($readable->paused);
$onDrain();
$this->assertFalse($readable->paused);
}
public function testPipeWithBuffer()
{
$readable = new Stub\ReadableStreamStub();
$stream = fopen('php://temp', 'r+');
$loop = $this->createWriteableLoopMock();
$buffer = new Buffer($stream, $loop);
$readable->pipe($buffer);
$readable->write('hello, I am some ');
$readable->write('random data');
rewind($stream);
$this->assertSame('hello, I am some random data', stream_get_contents($stream));
}
/** @test */
public function forwardEventsShouldSetupForwards()
{
$source = new ReadableStream();
$target = new ReadableStream();
Util::forwardEvents($source, $target, array('data'));
$target->on('data', $this->expectCallableOnce());
$target->on('foo', $this->expectCallableNever());
$source->emit('data', array('hello'));
$source->emit('foo', array('bar'));
}
private function createWriteableLoopMock()
{
$loop = $this->createLoopMock();
$loop
->expects($this->any())
->method('addWriteStream')
->will($this->returnCallback(function ($stream, $listener) {
call_user_func($listener, $stream);
}));
return $loop;
}
private function createLoopMock()
{
return $this->getMock('React\EventLoop\LoopInterface');
}
private function notEqualTo($value)
{
return new \PHPUnit_Framework_Constraint_Not($value);
}
}