mirror of
https://github.com/YunoHost-Apps/movim_ynh.git
synced 2024-09-03 19:46:19 +02:00
133 lines
3.2 KiB
PHP
133 lines
3.2 KiB
PHP
<?php
|
|
|
|
namespace React\Tests\Stream;
|
|
|
|
use React\Stream\Stream;
|
|
|
|
class StreamTest extends TestCase
|
|
{
|
|
/**
|
|
* @covers React\Stream\Stream::__construct
|
|
*/
|
|
public function testConstructor()
|
|
{
|
|
$stream = fopen('php://temp', 'r+');
|
|
$loop = $this->createLoopMock();
|
|
|
|
$conn = new Stream($stream, $loop);
|
|
}
|
|
|
|
/**
|
|
* @covers React\Stream\Stream::__construct
|
|
*/
|
|
public function testConstructorThrowsExceptionOnInvalidStream()
|
|
{
|
|
$this->setExpectedException('InvalidArgumentException');
|
|
$loop = $this->createLoopMock();
|
|
$conn = new Stream('breakme', $loop);
|
|
}
|
|
|
|
/**
|
|
* @covers React\Stream\Stream::__construct
|
|
* @covers React\Stream\Stream::handleData
|
|
*/
|
|
public function testDataEvent()
|
|
{
|
|
$stream = fopen('php://temp', 'r+');
|
|
$loop = $this->createLoopMock();
|
|
|
|
$capturedData = null;
|
|
|
|
$conn = new Stream($stream, $loop);
|
|
$conn->on('data', function ($data) use (&$capturedData) {
|
|
$capturedData = $data;
|
|
});
|
|
|
|
fwrite($stream, "foobar\n");
|
|
rewind($stream);
|
|
|
|
$conn->handleData($stream);
|
|
$this->assertSame("foobar\n", $capturedData);
|
|
}
|
|
|
|
/**
|
|
* @covers React\Stream\Stream::write
|
|
*/
|
|
public function testWrite()
|
|
{
|
|
$stream = fopen('php://temp', 'r+');
|
|
$loop = $this->createWriteableLoopMock();
|
|
|
|
$conn = new Stream($stream, $loop);
|
|
$conn->write("foo\n");
|
|
|
|
rewind($stream);
|
|
$this->assertSame("foo\n", fgets($stream));
|
|
}
|
|
|
|
/**
|
|
* @covers React\Stream\Stream::end
|
|
*/
|
|
public function testEnd()
|
|
{
|
|
$stream = fopen('php://temp', 'r+');
|
|
$loop = $this->createLoopMock();
|
|
|
|
$conn = new Stream($stream, $loop);
|
|
$conn->end();
|
|
|
|
$this->assertFalse(is_resource($stream));
|
|
}
|
|
|
|
public function testBufferEventsShouldBubbleUp()
|
|
{
|
|
$stream = fopen('php://temp', 'r+');
|
|
$loop = $this->createLoopMock();
|
|
|
|
$conn = new Stream($stream, $loop);
|
|
|
|
$conn->on('drain', $this->expectCallableOnce());
|
|
$conn->on('error', $this->expectCallableOnce());
|
|
|
|
$buffer = $conn->getBuffer();
|
|
$buffer->emit('drain');
|
|
$buffer->emit('error', array(new \RuntimeException('Whoops')));
|
|
}
|
|
|
|
/**
|
|
* @covers React\Stream\Stream::handleData
|
|
*/
|
|
public function testClosingStreamInDataEventShouldNotTriggerError()
|
|
{
|
|
$stream = fopen('php://temp', 'r+');
|
|
$loop = $this->createLoopMock();
|
|
|
|
$conn = new Stream($stream, $loop);
|
|
$conn->on('data', function ($data, $stream) {
|
|
$stream->close();
|
|
});
|
|
|
|
fwrite($stream, "foobar\n");
|
|
rewind($stream);
|
|
|
|
$conn->handleData($stream);
|
|
}
|
|
|
|
private function createWriteableLoopMock()
|
|
{
|
|
$loop = $this->createLoopMock();
|
|
$loop
|
|
->expects($this->once())
|
|
->method('addWriteStream')
|
|
->will($this->returnCallback(function ($stream, $listener) {
|
|
call_user_func($listener, $stream);
|
|
}));
|
|
|
|
return $loop;
|
|
}
|
|
|
|
private function createLoopMock()
|
|
{
|
|
return $this->getMock('React\EventLoop\LoopInterface');
|
|
}
|
|
}
|