aboutsummaryrefslogtreecommitdiffhomepage
path: root/assets/php/vendor/react/stream/tests
diff options
context:
space:
mode:
authormarvin-borner@live.com2018-04-16 21:09:05 +0200
committermarvin-borner@live.com2018-04-16 21:09:05 +0200
commitcf14306c2b3f82a81f8d56669a71633b4d4b5fce (patch)
tree86700651aa180026e89a66064b0364b1e4346f3f /assets/php/vendor/react/stream/tests
parent619b01b3615458c4ed78bfaeabb6b1a47cc8ad8b (diff)
Main merge to user management system - files are now at /main/public/
Diffstat (limited to 'assets/php/vendor/react/stream/tests')
-rwxr-xr-xassets/php/vendor/react/stream/tests/CallableStub.php10
-rwxr-xr-xassets/php/vendor/react/stream/tests/CompositeStreamTest.php267
-rwxr-xr-xassets/php/vendor/react/stream/tests/DuplexResourceStreamIntegrationTest.php352
-rwxr-xr-xassets/php/vendor/react/stream/tests/DuplexResourceStreamTest.php495
-rwxr-xr-xassets/php/vendor/react/stream/tests/EnforceBlockingWrapper.php35
-rwxr-xr-xassets/php/vendor/react/stream/tests/FunctionalInternetTest.php122
-rwxr-xr-xassets/php/vendor/react/stream/tests/ReadableResourceStreamTest.php372
-rwxr-xr-xassets/php/vendor/react/stream/tests/Stub/ReadableStreamStub.php61
-rwxr-xr-xassets/php/vendor/react/stream/tests/TestCase.php54
-rwxr-xr-xassets/php/vendor/react/stream/tests/ThroughStreamTest.php267
-rwxr-xr-xassets/php/vendor/react/stream/tests/UtilTest.php273
-rwxr-xr-xassets/php/vendor/react/stream/tests/WritableStreamResourceTest.php534
12 files changed, 0 insertions, 2842 deletions
diff --git a/assets/php/vendor/react/stream/tests/CallableStub.php b/assets/php/vendor/react/stream/tests/CallableStub.php
deleted file mode 100755
index 31cc834..0000000
--- a/assets/php/vendor/react/stream/tests/CallableStub.php
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php
-
-namespace React\Tests\Stream;
-
-class CallableStub
-{
- public function __invoke()
- {
- }
-}
diff --git a/assets/php/vendor/react/stream/tests/CompositeStreamTest.php b/assets/php/vendor/react/stream/tests/CompositeStreamTest.php
deleted file mode 100755
index df89c3e..0000000
--- a/assets/php/vendor/react/stream/tests/CompositeStreamTest.php
+++ /dev/null
@@ -1,267 +0,0 @@
-<?php
-
-namespace React\Tests\Stream;
-
-use React\Stream\CompositeStream;
-use React\Stream\ThroughStream;
-
-/**
- * @covers React\Stream\CompositeStream
- */
-class CompositeStreamTest extends TestCase
-{
- /** @test */
- public function itShouldCloseReadableIfNotWritable()
- {
- $readable = $this->getMockBuilder('React\Stream\ReadableStreamInterface')->getMock();
- $readable
- ->expects($this->once())
- ->method('isReadable')
- ->willReturn(true);
- $readable
- ->expects($this->once())
- ->method('close');
-
- $writable = $this->getMockBuilder('React\Stream\WritableStreamInterface')->getMock();
- $writable
- ->expects($this->once())
- ->method('isWritable')
- ->willReturn(false);
-
- $composite = new CompositeStream($readable, $writable);
-
- $composite->on('close', $this->expectCallableNever());
- $composite->close();
- }
-
- /** @test */
- public function itShouldCloseWritableIfNotReadable()
- {
- $readable = $this->getMockBuilder('React\Stream\ReadableStreamInterface')->getMock();
- $readable
- ->expects($this->once())
- ->method('isReadable')
- ->willReturn(false);
-
- $writable = $this->getMockBuilder('React\Stream\WritableStreamInterface')->getMock();
- $writable
- ->expects($this->once())
- ->method('close');
-
- $composite = new CompositeStream($readable, $writable);
-
- $composite->on('close', $this->expectCallableNever());
- $composite->close();
- }
-
- /** @test */
- public function itShouldForwardWritableCallsToWritableStream()
- {
- $readable = $this->getMockBuilder('React\Stream\ReadableStreamInterface')->getMock();
- $readable
- ->expects($this->once())
- ->method('isReadable')
- ->willReturn(true);
-
- $writable = $this->getMockBuilder('React\Stream\WritableStreamInterface')->getMock();
- $writable
- ->expects($this->once())
- ->method('write')
- ->with('foo');
- $writable
- ->expects($this->exactly(2))
- ->method('isWritable')
- ->willReturn(true);
-
- $composite = new CompositeStream($readable, $writable);
- $composite->write('foo');
- $composite->isWritable();
- }
-
- /** @test */
- public function itShouldForwardReadableCallsToReadableStream()
- {
- $readable = $this->getMockBuilder('React\Stream\ReadableStreamInterface')->getMock();
- $readable
- ->expects($this->exactly(2))
- ->method('isReadable')
- ->willReturn(true);
- $readable
- ->expects($this->once())
- ->method('pause');
- $readable
- ->expects($this->once())
- ->method('resume');
-
- $writable = $this->getMockBuilder('React\Stream\WritableStreamInterface')->getMock();
- $writable
- ->expects($this->any())
- ->method('isWritable')
- ->willReturn(true);
-
- $composite = new CompositeStream($readable, $writable);
- $composite->isReadable();
- $composite->pause();
- $composite->resume();
- }
-
- /** @test */
- public function itShouldNotForwardResumeIfStreamIsNotWritable()
- {
- $readable = $this->getMockBuilder('React\Stream\ReadableStreamInterface')->getMock();
- $readable
- ->expects($this->once())
- ->method('isReadable')
- ->willReturn(true);
- $readable
- ->expects($this->never())
- ->method('resume');
-
- $writable = $this->getMockBuilder('React\Stream\WritableStreamInterface')->getMock();
- $writable
- ->expects($this->exactly(2))
- ->method('isWritable')
- ->willReturnOnConsecutiveCalls(true, false);
-
- $composite = new CompositeStream($readable, $writable);
- $composite->resume();
- }
-
- /** @test */
- public function endShouldDelegateToWritableWithData()
- {
- $readable = $this->getMockBuilder('React\Stream\ReadableStreamInterface')->getMock();
- $readable
- ->expects($this->once())
- ->method('isReadable')
- ->willReturn(true);
-
- $writable = $this->getMockBuilder('React\Stream\WritableStreamInterface')->getMock();
- $writable
- ->expects($this->once())
- ->method('isWritable')
- ->willReturn(true);
- $writable
- ->expects($this->once())
- ->method('end')
- ->with('foo');
-
- $composite = new CompositeStream($readable, $writable);
- $composite->end('foo');
- }
-
- /** @test */
- public function closeShouldCloseBothStreams()
- {
- $readable = $this->getMockBuilder('React\Stream\ReadableStreamInterface')->getMock();
- $readable
- ->expects($this->once())
- ->method('isReadable')
- ->willReturn(true);
- $readable
- ->expects($this->once())
- ->method('close');
-
- $writable = $this->getMockBuilder('React\Stream\WritableStreamInterface')->getMock();
- $writable
- ->expects($this->once())
- ->method('isWritable')
- ->willReturn(true);
- $writable
- ->expects($this->once())
- ->method('close');
-
- $composite = new CompositeStream($readable, $writable);
- $composite->close();
- }
-
- /** @test */
- public function itShouldForwardCloseOnlyOnce()
- {
- $readable = new ThroughStream();
- $writable = new ThroughStream();
-
- $composite = new CompositeStream($readable, $writable);
- $composite->on('close', $this->expectCallableOnce());
-
- $readable->close();
- $writable->close();
- }
-
- /** @test */
- public function itShouldForwardCloseAndRemoveAllListeners()
- {
- $in = new ThroughStream();
-
- $composite = new CompositeStream($in, $in);
- $composite->on('close', $this->expectCallableOnce());
-
- $this->assertTrue($composite->isReadable());
- $this->assertTrue($composite->isWritable());
- $this->assertCount(1, $composite->listeners('close'));
-
- $composite->close();
-
- $this->assertFalse($composite->isReadable());
- $this->assertFalse($composite->isWritable());
- $this->assertCount(0, $composite->listeners('close'));
- }
-
- /** @test */
- public function itShouldReceiveForwardedEvents()
- {
- $readable = new ThroughStream();
- $writable = new ThroughStream();
-
- $composite = new CompositeStream($readable, $writable);
- $composite->on('data', $this->expectCallableOnce());
- $composite->on('drain', $this->expectCallableOnce());
-
- $readable->emit('data', array('foo'));
- $writable->emit('drain');
- }
-
- /** @test */
- public function itShouldHandlePipingCorrectly()
- {
- $readable = $this->getMockBuilder('React\Stream\ReadableStreamInterface')->getMock();
- $readable
- ->expects($this->once())
- ->method('isReadable')
- ->willReturn(true);
-
- $writable = $this->getMockBuilder('React\Stream\WritableStreamInterface')->getMock();
- $writable->expects($this->any())->method('isWritable')->willReturn(True);
- $writable
- ->expects($this->once())
- ->method('write')
- ->with('foo');
-
- $composite = new CompositeStream($readable, $writable);
-
- $input = new ThroughStream();
- $input->pipe($composite);
- $input->emit('data', array('foo'));
- }
-
- /** @test */
- public function itShouldForwardPipeCallsToReadableStream()
- {
- $readable = new ThroughStream();
-
- $writable = $this->getMockBuilder('React\Stream\WritableStreamInterface')->getMock();
- $writable->expects($this->any())->method('isWritable')->willReturn(True);
-
- $composite = new CompositeStream($readable, $writable);
-
- $output = $this->getMockBuilder('React\Stream\WritableStreamInterface')->getMock();
- $output->expects($this->any())->method('isWritable')->willReturn(True);
- $output
- ->expects($this->once())
- ->method('write')
- ->with('foo');
-
- $composite->pipe($output);
- $readable->emit('data', array('foo'));
- }
-}
diff --git a/assets/php/vendor/react/stream/tests/DuplexResourceStreamIntegrationTest.php b/assets/php/vendor/react/stream/tests/DuplexResourceStreamIntegrationTest.php
deleted file mode 100755
index fb5f02a..0000000
--- a/assets/php/vendor/react/stream/tests/DuplexResourceStreamIntegrationTest.php
+++ /dev/null
@@ -1,352 +0,0 @@
-<?php
-
-namespace React\Tests\Stream;
-
-use React\Stream\DuplexResourceStream;
-use React\Stream\ReadableResourceStream;
-use React\EventLoop\ExtEventLoop;
-use React\EventLoop\ExtLibeventLoop;
-use React\EventLoop\ExtLibevLoop;
-use React\EventLoop\LoopInterface;
-use React\EventLoop\LibEventLoop;
-use React\EventLoop\LibEvLoop;
-use React\EventLoop\StreamSelectLoop;
-
-class DuplexResourceStreamIntegrationTest extends TestCase
-{
- public function loopProvider()
- {
- return array(
- array(
- function() {
- return true;
- },
- function () {
- return new StreamSelectLoop();
- }
- ),
- array(
- function () {
- return function_exists('event_base_new');
- },
- function () {
- return class_exists('React\EventLoop\ExtLibeventLoop') ? new ExtLibeventLoop() : new LibEventLoop();
- }
- ),
- array(
- function () {
- return class_exists('libev\EventLoop');
- },
- function () {
- return class_exists('React\EventLoop\ExtLibevLoop') ? new ExtLibevLoop() : new LibEvLoop();
- }
- ),
- array(
- function () {
- return class_exists('EventBase') && class_exists('React\EventLoop\ExtEventLoop');
- },
- function () {
- return new ExtEventLoop();
- }
- )
- );
- }
-
- /**
- * @dataProvider loopProvider
- */
- public function testBufferReadsLargeChunks($condition, $loopFactory)
- {
- if (true !== $condition()) {
- return $this->markTestSkipped('Loop implementation not available');
- }
-
- $loop = $loopFactory();
-
- list($sockA, $sockB) = stream_socket_pair(STREAM_PF_UNIX, STREAM_SOCK_STREAM, 0);
-
- $bufferSize = 4096;
- $streamA = new DuplexResourceStream($sockA, $loop, $bufferSize);
- $streamB = new DuplexResourceStream($sockB, $loop, $bufferSize);
-
- $testString = str_repeat("*", $bufferSize + 1);
-
- $buffer = "";
- $streamB->on('data', function ($data) use (&$buffer) {
- $buffer .= $data;
- });
-
- $streamA->write($testString);
-
- $this->loopTick($loop);
- $this->loopTick($loop);
- $this->loopTick($loop);
-
- $streamA->close();
- $streamB->close();
-
- $this->assertEquals($testString, $buffer);
- }
-
- /**
- * @dataProvider loopProvider
- */
- public function testWriteLargeChunk($condition, $loopFactory)
- {
- if (true !== $condition()) {
- return $this->markTestSkipped('Loop implementation not available');
- }
-
- $loop = $loopFactory();
-
- list($sockA, $sockB) = stream_socket_pair(STREAM_PF_UNIX, STREAM_SOCK_STREAM, 0);
-
- $streamA = new DuplexResourceStream($sockA, $loop);
- $streamB = new DuplexResourceStream($sockB, $loop);
-
- // limit seems to be 192 KiB
- $size = 256 * 1024;
-
- // sending side sends and expects clean close with no errors
- $streamA->end(str_repeat('*', $size));
- $streamA->on('close', $this->expectCallableOnce());
- $streamA->on('error', $this->expectCallableNever());
-
- // receiving side counts bytes and expects clean close with no errors
- $received = 0;
- $streamB->on('data', function ($chunk) use (&$received) {
- $received += strlen($chunk);
- });
- $streamB->on('close', $this->expectCallableOnce());
- $streamB->on('error', $this->expectCallableNever());
-
- $loop->run();
-
- $streamA->close();
- $streamB->close();
-
- $this->assertEquals($size, $received);
- }
-
- /**
- * @dataProvider loopProvider
- */
- public function testDoesNotEmitDataIfNothingHasBeenWritten($condition, $loopFactory)
- {
- if (true !== $condition()) {
- return $this->markTestSkipped('Loop implementation not available');
- }
-
- $loop = $loopFactory();
-
- list($sockA, $sockB) = stream_socket_pair(STREAM_PF_UNIX, STREAM_SOCK_STREAM, 0);
-
- $streamA = new DuplexResourceStream($sockA, $loop);
- $streamB = new DuplexResourceStream($sockB, $loop);
-
- // end streamA without writing any data
- $streamA->end();
-
- // streamB should not emit any data
- $streamB->on('data', $this->expectCallableNever());
-
- $loop->run();
-
- $streamA->close();
- $streamB->close();
- }
-
- /**
- * @dataProvider loopProvider
- */
- public function testDoesNotWriteDataIfRemoteSideFromPairHasBeenClosed($condition, $loopFactory)
- {
- if (true !== $condition()) {
- return $this->markTestSkipped('Loop implementation not available');
- }
-
- $loop = $loopFactory();
-
- list($sockA, $sockB) = stream_socket_pair(STREAM_PF_UNIX, STREAM_SOCK_STREAM, 0);
-
- $streamA = new DuplexResourceStream($sockA, $loop);
- $streamB = new DuplexResourceStream($sockB, $loop);
-
- // end streamA without writing any data
- $streamA->pause();
- $streamA->write('hello');
- $streamA->on('close', $this->expectCallableOnce());
-
- $streamB->on('data', $this->expectCallableNever());
- $streamB->close();
-
- $loop->run();
-
- $streamA->close();
- $streamB->close();
- }
-
- /**
- * @dataProvider loopProvider
- */
- public function testDoesNotWriteDataIfServerSideHasBeenClosed($condition, $loopFactory)
- {
- if (true !== $condition()) {
- return $this->markTestSkipped('Loop implementation not available');
- }
-
- $loop = $loopFactory();
-
- $server = stream_socket_server('tcp://127.0.0.1:0');
-
- $client = stream_socket_client(stream_socket_get_name($server, false));
- $peer = stream_socket_accept($server);
-
- $streamA = new DuplexResourceStream($client, $loop);
- $streamB = new DuplexResourceStream($peer, $loop);
-
- // end streamA without writing any data
- $streamA->pause();
- $streamA->write('hello');
- $streamA->on('close', $this->expectCallableOnce());
-
- $streamB->on('data', $this->expectCallableNever());
- $streamB->close();
-
- $loop->run();
-
- $streamA->close();
- $streamB->close();
- }
-
- /**
- * @dataProvider loopProvider
- */
- public function testDoesNotWriteDataIfClientSideHasBeenClosed($condition, $loopFactory)
- {
- if (true !== $condition()) {
- return $this->markTestSkipped('Loop implementation not available');
- }
-
- $loop = $loopFactory();
-
- $server = stream_socket_server('tcp://127.0.0.1:0');
-
- $client = stream_socket_client(stream_socket_get_name($server, false));
- $peer = stream_socket_accept($server);
-
- $streamA = new DuplexResourceStream($peer, $loop);
- $streamB = new DuplexResourceStream($client, $loop);
-
- // end streamA without writing any data
- $streamA->pause();
- $streamA->write('hello');
- $streamA->on('close', $this->expectCallableOnce());
-
- $streamB->on('data', $this->expectCallableNever());
- $streamB->close();
-
- $loop->run();
-
- $streamA->close();
- $streamB->close();
- }
-
- /**
- * @dataProvider loopProvider
- */
- public function testReadsSingleChunkFromProcessPipe($condition, $loopFactory)
- {
- if (true !== $condition()) {
- return $this->markTestSkipped('Loop implementation not available');
- }
-
- $loop = $loopFactory();
-
- $stream = new ReadableResourceStream(popen('echo test', 'r'), $loop);
- $stream->on('data', $this->expectCallableOnceWith("test\n"));
- $stream->on('end', $this->expectCallableOnce());
- $stream->on('error', $this->expectCallableNever());
-
- $loop->run();
- }
-
- /**
- * @dataProvider loopProvider
- */
- public function testReadsMultipleChunksFromProcessPipe($condition, $loopFactory)
- {
- if (true !== $condition()) {
- return $this->markTestSkipped('Loop implementation not available');
- }
-
- $loop = $loopFactory();
-
- $stream = new ReadableResourceStream(popen('echo a;sleep 0.1;echo b;sleep 0.1;echo c', 'r'), $loop);
-
- $buffer = '';
- $stream->on('data', function ($chunk) use (&$buffer) {
- $buffer .= $chunk;
- });
-
- $stream->on('end', $this->expectCallableOnce());
- $stream->on('error', $this->expectCallableNever());
-
- $loop->run();
-
- $this->assertEquals("a\n" . "b\n" . "c\n", $buffer);
- }
-
- /**
- * @dataProvider loopProvider
- */
- public function testReadsLongChunksFromProcessPipe($condition, $loopFactory)
- {
- if (true !== $condition()) {
- return $this->markTestSkipped('Loop implementation not available');
- }
-
- $loop = $loopFactory();
-
- $stream = new ReadableResourceStream(popen('dd if=/dev/zero bs=12345 count=1234 2>&-', 'r'), $loop);
-
- $bytes = 0;
- $stream->on('data', function ($chunk) use (&$bytes) {
- $bytes += strlen($chunk);
- });
-
- $stream->on('end', $this->expectCallableOnce());
- $stream->on('error', $this->expectCallableNever());
-
- $loop->run();
-
- $this->assertEquals(12345 * 1234, $bytes);
- }
-
- /**
- * @dataProvider loopProvider
- */
- public function testReadsNothingFromProcessPipeWithNoOutput($condition, $loopFactory)
- {
- if (true !== $condition()) {
- return $this->markTestSkipped('Loop implementation not available');
- }
-
- $loop = $loopFactory();
-
- $stream = new ReadableResourceStream(popen('true', 'r'), $loop);
- $stream->on('data', $this->expectCallableNever());
- $stream->on('end', $this->expectCallableOnce());
- $stream->on('error', $this->expectCallableNever());
-
- $loop->run();
- }
-
- private function loopTick(LoopInterface $loop)
- {
- $loop->addTimer(0, function () use ($loop) {
- $loop->stop();
- });
- $loop->run();
- }
-}
diff --git a/assets/php/vendor/react/stream/tests/DuplexResourceStreamTest.php b/assets/php/vendor/react/stream/tests/DuplexResourceStreamTest.php
deleted file mode 100755
index 3212ae8..0000000
--- a/assets/php/vendor/react/stream/tests/DuplexResourceStreamTest.php
+++ /dev/null
@@ -1,495 +0,0 @@
-<?php
-
-namespace React\Tests\Stream;
-
-use React\Stream\DuplexResourceStream;
-use Clue\StreamFilter as Filter;
-use React\Stream\WritableResourceStream;
-
-class DuplexResourceStreamTest extends TestCase
-{
- /**
- * @covers React\Stream\DuplexResourceStream::__construct
- * @doesNotPerformAssertions
- */
- public function testConstructor()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- new DuplexResourceStream($stream, $loop);
- }
-
- /**
- * @covers React\Stream\DuplexResourceStream::__construct
- * @doesNotPerformAssertions
- */
- public function testConstructorWithExcessiveMode()
- {
- // excessive flags are ignored for temp streams, so we have to use a file stream
- $name = tempnam(sys_get_temp_dir(), 'test');
- $stream = @fopen($name, 'r+eANYTHING');
- unlink($name);
-
- $loop = $this->createLoopMock();
- $buffer = new DuplexResourceStream($stream, $loop);
- $buffer->close();
- }
-
- /**
- * @covers React\Stream\DuplexResourceStream::__construct
- * @expectedException InvalidArgumentException
- */
- public function testConstructorThrowsExceptionOnInvalidStream()
- {
- $loop = $this->createLoopMock();
-
- new DuplexResourceStream('breakme', $loop);
- }
-
- /**
- * @covers React\Stream\DuplexResourceStream::__construct
- * @expectedException InvalidArgumentException
- */
- public function testConstructorThrowsExceptionOnWriteOnlyStream()
- {
- if (defined('HHVM_VERSION')) {
- $this->markTestSkipped('HHVM does not report fopen mode for STDOUT');
- }
-
- $loop = $this->createLoopMock();
-
- new DuplexResourceStream(STDOUT, $loop);
- }
-
- /**
- * @covers React\Stream\DuplexResourceStream::__construct
- * @expectedException InvalidArgumentException
- */
- public function testConstructorThrowsExceptionOnWriteOnlyStreamWithExcessiveMode()
- {
- // excessive flags are ignored for temp streams, so we have to use a file stream
- $name = tempnam(sys_get_temp_dir(), 'test');
- $stream = fopen($name, 'weANYTHING');
- unlink($name);
-
- $loop = $this->createLoopMock();
- new DuplexResourceStream($stream, $loop);
- }
-
- /**
- * @covers React\Stream\DuplexResourceStream::__construct
- * @expectedException RunTimeException
- */
- public function testConstructorThrowsExceptionIfStreamDoesNotSupportNonBlocking()
- {
- if (!in_array('blocking', stream_get_wrappers())) {
- stream_wrapper_register('blocking', 'React\Tests\Stream\EnforceBlockingWrapper');
- }
-
- $stream = fopen('blocking://test', 'r+');
- $loop = $this->createLoopMock();
-
- new DuplexResourceStream($stream, $loop);
- }
-
- /**
- * @covers React\Stream\DuplexResourceStream::__construct
- * @doesNotPerformAssertions
- */
- public function testConstructorAcceptsBuffer()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- $buffer = $this->getMockBuilder('React\Stream\WritableStreamInterface')->getMock();
-
- $conn = new DuplexResourceStream($stream, $loop, null, $buffer);
- }
-
- public function testCloseShouldEmitCloseEvent()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- $conn = new DuplexResourceStream($stream, $loop);
- $conn->on('close', $this->expectCallableOnce());
- $conn->on('end', $this->expectCallableNever());
-
- $conn->close();
-
- $this->assertFalse($conn->isReadable());
- }
-
- public function testEndShouldEndBuffer()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- $buffer = $this->getMockBuilder('React\Stream\WritableStreamInterface')->getMock();
- $buffer->expects($this->once())->method('end')->with('foo');
-
- $conn = new DuplexResourceStream($stream, $loop, null, $buffer);
- $conn->end('foo');
- }
-
-
- public function testEndAfterCloseIsNoOp()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- $buffer = $this->getMockBuilder('React\Stream\WritableStreamInterface')->getMock();
- $buffer->expects($this->never())->method('end');
-
- $conn = new DuplexResourceStream($stream, $loop);
- $conn->close();
- $conn->end();
- }
-
- /**
- * @covers React\Stream\DuplexResourceStream::__construct
- * @covers React\Stream\DuplexResourceStream::handleData
- */
- public function testDataEvent()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- $capturedData = null;
-
- $conn = new DuplexResourceStream($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\DuplexResourceStream::__construct
- * @covers React\Stream\DuplexResourceStream::handleData
- */
- public function testDataEventDoesEmitOneChunkMatchingBufferSize()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- $capturedData = null;
-
- $conn = new DuplexResourceStream($stream, $loop, 4321);
- $conn->on('data', function ($data) use (&$capturedData) {
- $capturedData = $data;
- });
-
- fwrite($stream, str_repeat("a", 100000));
- rewind($stream);
-
- $conn->handleData($stream);
-
- $this->assertTrue($conn->isReadable());
- $this->assertEquals(4321, strlen($capturedData));
- }
-
- /**
- * @covers React\Stream\DuplexResourceStream::__construct
- * @covers React\Stream\DuplexResourceStream::handleData
- */
- public function testDataEventDoesEmitOneChunkUntilStreamEndsWhenBufferSizeIsInfinite()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- $capturedData = null;
-
- $conn = new DuplexResourceStream($stream, $loop, -1);
-
- $conn->on('data', function ($data) use (&$capturedData) {
- $capturedData = $data;
- });
-
- fwrite($stream, str_repeat("a", 100000));
- rewind($stream);
-
- $conn->handleData($stream);
-
- $this->assertTrue($conn->isReadable());
- $this->assertEquals(100000, strlen($capturedData));
- }
-
- /**
- * @covers React\Stream\DuplexResourceStream::handleData
- */
- public function testEmptyStreamShouldNotEmitData()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- $conn = new DuplexResourceStream($stream, $loop);
- $conn->on('data', $this->expectCallableNever());
-
- $conn->handleData($stream);
- }
-
- /**
- * @covers React\Stream\DuplexResourceStream::write
- */
- public function testWrite()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createWriteableLoopMock();
-
- $conn = new DuplexResourceStream($stream, $loop);
- $conn->write("foo\n");
-
- rewind($stream);
- $this->assertSame("foo\n", fgets($stream));
- }
-
- /**
- * @covers React\Stream\DuplexResourceStream::end
- * @covers React\Stream\DuplexResourceStream::isReadable
- * @covers React\Stream\DuplexResourceStream::isWritable
- */
- public function testEnd()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- $conn = new DuplexResourceStream($stream, $loop);
- $conn->end();
-
- $this->assertFalse(is_resource($stream));
- $this->assertFalse($conn->isReadable());
- $this->assertFalse($conn->isWritable());
- }
-
- /**
- * @covers React\Stream\DuplexResourceStream::end
- */
- public function testEndRemovesReadStreamFromLoop()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
- $loop->expects($this->once())->method('addReadStream')->with($stream);
- $loop->expects($this->once())->method('removeReadStream')->with($stream);
-
- $conn = new DuplexResourceStream($stream, $loop);
- $conn->end('bye');
- }
-
- /**
- * @covers React\Stream\DuplexResourceStream::pause
- */
- public function testPauseRemovesReadStreamFromLoop()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
- $loop->expects($this->once())->method('addReadStream')->with($stream);
- $loop->expects($this->once())->method('removeReadStream')->with($stream);
-
- $conn = new DuplexResourceStream($stream, $loop);
- $conn->pause();
- $conn->pause();
- }
-
- /**
- * @covers React\Stream\DuplexResourceStream::pause
- */
- public function testResumeDoesAddStreamToLoopOnlyOnce()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
- $loop->expects($this->once())->method('addReadStream')->with($stream);
-
- $conn = new DuplexResourceStream($stream, $loop);
- $conn->resume();
- $conn->resume();
- }
-
- /**
- * @covers React\Stream\DuplexResourceStream::close
- */
- public function testCloseRemovesReadStreamFromLoop()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
- $loop->expects($this->once())->method('addReadStream')->with($stream);
- $loop->expects($this->once())->method('removeReadStream')->with($stream);
-
- $conn = new DuplexResourceStream($stream, $loop);
- $conn->close();
- }
-
- /**
- * @covers React\Stream\DuplexResourceStream::close
- */
- public function testCloseAfterPauseRemovesReadStreamFromLoopOnlyOnce()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
- $loop->expects($this->once())->method('addReadStream')->with($stream);
- $loop->expects($this->once())->method('removeReadStream')->with($stream);
-
- $conn = new DuplexResourceStream($stream, $loop);
- $conn->pause();
- $conn->close();
- }
-
- /**
- * @covers React\Stream\DuplexResourceStream::close
- */
- public function testResumeAfterCloseDoesAddReadStreamToLoopOnlyOnce()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
- $loop->expects($this->once())->method('addReadStream')->with($stream);
-
- $conn = new DuplexResourceStream($stream, $loop);
- $conn->close();
- $conn->resume();
- }
-
- public function testEndedStreamsShouldNotWrite()
- {
- $file = tempnam(sys_get_temp_dir(), 'reactphptest_');
- $stream = fopen($file, 'r+');
- $loop = $this->createWriteableLoopMock();
-
- $conn = new DuplexResourceStream($stream, $loop);
- $conn->write("foo\n");
- $conn->end();
-
- $res = $conn->write("bar\n");
- $stream = fopen($file, 'r');
-
- $this->assertSame("foo\n", fgets($stream));
- $this->assertFalse($res);
-
- unlink($file);
- }
-
- public function testPipeShouldReturnDestination()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- $conn = new DuplexResourceStream($stream, $loop);
- $dest = $this->getMockBuilder('React\Stream\WritableStreamInterface')->getMock();
-
- $this->assertSame($dest, $conn->pipe($dest));
- }
-
- public function testBufferEventsShouldBubbleUp()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- $buffer = new WritableResourceStream($stream, $loop);
- $conn = new DuplexResourceStream($stream, $loop, null, $buffer);
-
- $conn->on('drain', $this->expectCallableOnce());
- $conn->on('error', $this->expectCallableOnce());
-
- $buffer->emit('drain');
- $buffer->emit('error', array(new \RuntimeException('Whoops')));
- }
-
- /**
- * @covers React\Stream\DuplexResourceStream::handleData
- */
- public function testClosingStreamInDataEventShouldNotTriggerError()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- $conn = new DuplexResourceStream($stream, $loop);
- $conn->on('error', $this->expectCallableNever());
- $conn->on('data', function ($data) use ($conn) {
- $conn->close();
- });
-
- fwrite($stream, "foobar\n");
- rewind($stream);
-
- $conn->handleData($stream);
- }
-
- /**
- * @covers React\Stream\DuplexResourceStream::handleData
- */
- public function testDataFiltered()
- {
- $stream = fopen('php://temp', 'r+');
-
- // add a filter which removes every 'a' when reading
- Filter\append($stream, function ($chunk) {
- return str_replace('a', '', $chunk);
- }, STREAM_FILTER_READ);
-
- $loop = $this->createLoopMock();
-
- $capturedData = null;
-
- $conn = new DuplexResourceStream($stream, $loop);
- $conn->on('data', function ($data) use (&$capturedData) {
- $capturedData = $data;
- });
-
- fwrite($stream, "foobar\n");
- rewind($stream);
-
- $conn->handleData($stream);
- $this->assertSame("foobr\n", $capturedData);
- }
-
- /**
- * @covers React\Stream\DuplexResourceStream::handleData
- */
- public function testDataErrorShouldEmitErrorAndClose()
- {
- $stream = fopen('php://temp', 'r+');
-
- // add a filter which returns an error when encountering an 'a' when reading
- Filter\append($stream, function ($chunk) {
- if (strpos($chunk, 'a') !== false) {
- throw new \Exception('Invalid');
- }
- return $chunk;
- }, STREAM_FILTER_READ);
-
- $loop = $this->createLoopMock();
-
- $conn = new DuplexResourceStream($stream, $loop);
- $conn->on('data', $this->expectCallableNever());
- $conn->on('error', $this->expectCallableOnce());
- $conn->on('close', $this->expectCallableOnce());
-
- 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->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
- }
-}
diff --git a/assets/php/vendor/react/stream/tests/EnforceBlockingWrapper.php b/assets/php/vendor/react/stream/tests/EnforceBlockingWrapper.php
deleted file mode 100755
index 39c0487..0000000
--- a/assets/php/vendor/react/stream/tests/EnforceBlockingWrapper.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-
-namespace React\Tests\Stream;
-
-/**
- * Used to test dummy stream resources that do not support setting non-blocking mode
- *
- * @link http://php.net/manual/de/class.streamwrapper.php
- */
-class EnforceBlockingWrapper
-{
- public function stream_open($path, $mode, $options, &$opened_path)
- {
- return true;
- }
-
- public function stream_cast($cast_as)
- {
- return false;
- }
-
- public function stream_eof()
- {
- return false;
- }
-
- public function stream_set_option($option, $arg1, $arg2)
- {
- if ($option === STREAM_OPTION_BLOCKING) {
- return false;
- }
-
- return true;
- }
-}
diff --git a/assets/php/vendor/react/stream/tests/FunctionalInternetTest.php b/assets/php/vendor/react/stream/tests/FunctionalInternetTest.php
deleted file mode 100755
index 4d31e8e..0000000
--- a/assets/php/vendor/react/stream/tests/FunctionalInternetTest.php
+++ /dev/null
@@ -1,122 +0,0 @@
-<?php
-
-namespace React\Tests\Stream;
-
-use React\EventLoop\Factory;
-use React\EventLoop\LoopInterface;
-use React\Stream\DuplexResourceStream;
-use React\Stream\WritableResourceStream;
-
-/**
- * @group internet
- */
-class FunctionalInternetTest extends TestCase
-{
- public function testUploadKilobytePlain()
- {
- $size = 1000;
- $stream = stream_socket_client('tcp://httpbin.org:80');
-
- $loop = Factory::create();
- $stream = new DuplexResourceStream($stream, $loop);
-
- $buffer = '';
- $stream->on('data', function ($chunk) use (&$buffer) {
- $buffer .= $chunk;
- });
-
- $stream->on('error', $this->expectCallableNever());
-
- $stream->write("POST /post HTTP/1.0\r\nHost: httpbin.org\r\nContent-Length: $size\r\n\r\n" . str_repeat('.', $size));
-
- $this->awaitStreamClose($stream, $loop);
-
- $this->assertNotEquals('', $buffer);
- }
-
- public function testUploadBiggerBlockPlain()
- {
- $size = 50 * 1000;
- $stream = stream_socket_client('tcp://httpbin.org:80');
-
- $loop = Factory::create();
- $stream = new DuplexResourceStream($stream, $loop);
-
- $buffer = '';
- $stream->on('data', function ($chunk) use (&$buffer) {
- $buffer .= $chunk;
- });
-
- $stream->on('error', $this->expectCallableNever());
-
- $stream->write("POST /post HTTP/1.0\r\nHost: httpbin.org\r\nContent-Length: $size\r\n\r\n" . str_repeat('.', $size));
-
- $this->awaitStreamClose($stream, $loop);
-
- $this->assertNotEquals('', $buffer);
- }
-
- public function testUploadKilobyteSecure()
- {
- $size = 1000;
- $stream = stream_socket_client('tls://httpbin.org:443');
-
- $loop = Factory::create();
- $stream = new DuplexResourceStream($stream, $loop);
-
- $buffer = '';
- $stream->on('data', function ($chunk) use (&$buffer) {
- $buffer .= $chunk;
- });
-
- $stream->on('error', $this->expectCallableNever());
-
- $stream->write("POST /post HTTP/1.0\r\nHost: httpbin.org\r\nContent-Length: $size\r\n\r\n" . str_repeat('.', $size));
-
- $this->awaitStreamClose($stream, $loop);
-
- $this->assertNotEquals('', $buffer);
- }
-
- public function testUploadBiggerBlockSecureRequiresSmallerChunkSize()
- {
- $size = 50 * 1000;
- $stream = stream_socket_client('tls://httpbin.org:443');
-
- $loop = Factory::create();
- $stream = new DuplexResourceStream(
- $stream,
- $loop,
- null,
- new WritableResourceStream($stream, $loop, null, 8192)
- );
-
- $buffer = '';
- $stream->on('data', function ($chunk) use (&$buffer) {
- $buffer .= $chunk;
- });
-
- $stream->on('error', $this->expectCallableNever());
-
- $stream->write("POST /post HTTP/1.0\r\nHost: httpbin.org\r\nContent-Length: $size\r\n\r\n" . str_repeat('.', $size));
-
- $this->awaitStreamClose($stream, $loop);
-
- $this->assertNotEquals('', $buffer);
- }
-
- private function awaitStreamClose(DuplexResourceStream $stream, LoopInterface $loop, $timeout = 10.0)
- {
- $stream->on('close', function () use ($loop) {
- $loop->stop();
- });
-
- $that = $this;
- $loop->addTimer($timeout, function () use ($loop, $that) {
- $loop->stop();
- $that->fail('Timed out while waiting for stream to close');
- });
-
- $loop->run();
- }
-}
diff --git a/assets/php/vendor/react/stream/tests/ReadableResourceStreamTest.php b/assets/php/vendor/react/stream/tests/ReadableResourceStreamTest.php
deleted file mode 100755
index 20da96f..0000000
--- a/assets/php/vendor/react/stream/tests/ReadableResourceStreamTest.php
+++ /dev/null
@@ -1,372 +0,0 @@
-<?php
-
-namespace React\Tests\Stream;
-
-use React\Stream\ReadableResourceStream;
-use Clue\StreamFilter as Filter;
-
-class ReadableResourceStreamTest extends TestCase
-{
- /**
- * @covers React\Stream\ReadableResourceStream::__construct
- * @doesNotPerformAssertions
- */
- public function testConstructor()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- new ReadableResourceStream($stream, $loop);
- }
-
- /**
- * @covers React\Stream\ReadableResourceStream::__construct
- * @doesNotPerformAssertions
- */
- public function testConstructorWithExcessiveMode()
- {
- // excessive flags are ignored for temp streams, so we have to use a file stream
- $name = tempnam(sys_get_temp_dir(), 'test');
- $stream = @fopen($name, 'r+eANYTHING');
- unlink($name);
-
- $loop = $this->createLoopMock();
- $buffer = new ReadableResourceStream($stream, $loop);
- $buffer->close();
- }
-
- /**
- * @covers React\Stream\ReadableResourceStream::__construct
- * @expectedException InvalidArgumentException
- */
- public function testConstructorThrowsExceptionOnInvalidStream()
- {
- $loop = $this->createLoopMock();
-
- new ReadableResourceStream(false, $loop);
- }
-
- /**
- * @covers React\Stream\ReadableResourceStream::__construct
- * @expectedException InvalidArgumentException
- */
- public function testConstructorThrowsExceptionOnWriteOnlyStream()
- {
- if (defined('HHVM_VERSION')) {
- $this->markTestSkipped('HHVM does not report fopen mode for STDOUT');
- }
-
- $loop = $this->createLoopMock();
-
- new ReadableResourceStream(STDOUT, $loop);
- }
-
- /**
- * @covers React\Stream\ReadableResourceStream::__construct
- * @expectedException InvalidArgumentException
- */
- public function testConstructorThrowsExceptionOnWriteOnlyStreamWithExcessiveMode()
- {
- // excessive flags are ignored for temp streams, so we have to use a file stream
- $name = tempnam(sys_get_temp_dir(), 'test');
- $stream = fopen($name, 'weANYTHING');
- unlink($name);
-
- $loop = $this->createLoopMock();
- new ReadableResourceStream($stream, $loop);
- }
-
- /**
- * @covers React\Stream\ReadableResourceStream::__construct
- * @expectedException RuntimeException
- */
- public function testConstructorThrowsExceptionIfStreamDoesNotSupportNonBlocking()
- {
- if (!in_array('blocking', stream_get_wrappers())) {
- stream_wrapper_register('blocking', 'React\Tests\Stream\EnforceBlockingWrapper');
- }
-
- $stream = fopen('blocking://test', 'r+');
- $loop = $this->createLoopMock();
-
- new ReadableResourceStream($stream, $loop);
- }
-
-
- public function testCloseShouldEmitCloseEvent()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- $conn = new ReadableResourceStream($stream, $loop);
- $conn->on('close', $this->expectCallableOnce());
-
- $conn->close();
-
- $this->assertFalse($conn->isReadable());
- }
-
- public function testCloseTwiceShouldEmitCloseEventOnce()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- $conn = new ReadableResourceStream($stream, $loop);
- $conn->on('close', $this->expectCallableOnce());
-
- $conn->close();
- $conn->close();
- }
-
- /**
- * @covers React\Stream\ReadableResourceStream::__construct
- * @covers React\Stream\ReadableResourceStream::handleData
- */
- public function testDataEvent()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- $capturedData = null;
-
- $conn = new ReadableResourceStream($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\ReadableResourceStream::__construct
- * @covers React\Stream\ReadableResourceStream::handleData
- */
- public function testDataEventDoesEmitOneChunkMatchingBufferSize()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- $capturedData = null;
-
- $conn = new ReadableResourceStream($stream, $loop, 4321);
- $conn->on('data', function ($data) use (&$capturedData) {
- $capturedData = $data;
- });
-
- fwrite($stream, str_repeat("a", 100000));
- rewind($stream);
-
- $conn->handleData($stream);
-
- $this->assertTrue($conn->isReadable());
- $this->assertEquals(4321, strlen($capturedData));
- }
-
- /**
- * @covers React\Stream\ReadableResourceStream::__construct
- * @covers React\Stream\ReadableResourceStream::handleData
- */
- public function testDataEventDoesEmitOneChunkUntilStreamEndsWhenBufferSizeIsInfinite()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- $capturedData = null;
-
- $conn = new ReadableResourceStream($stream, $loop, -1);
-
- $conn->on('data', function ($data) use (&$capturedData) {
- $capturedData = $data;
- });
-
- fwrite($stream, str_repeat("a", 100000));
- rewind($stream);
-
- $conn->handleData($stream);
-
- $this->assertTrue($conn->isReadable());
- $this->assertEquals(100000, strlen($capturedData));
- }
-
- /**
- * @covers React\Stream\ReadableResourceStream::handleData
- */
- public function testEmptyStreamShouldNotEmitData()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- $conn = new ReadableResourceStream($stream, $loop);
- $conn->on('data', $this->expectCallableNever());
-
- $conn->handleData($stream);
- }
-
- public function testPipeShouldReturnDestination()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- $conn = new ReadableResourceStream($stream, $loop);
- $dest = $this->getMockBuilder('React\Stream\WritableStreamInterface')->getMock();
-
- $this->assertSame($dest, $conn->pipe($dest));
- }
-
- /**
- * @covers React\Stream\ReadableResourceStream::handleData
- */
- public function testClosingStreamInDataEventShouldNotTriggerError()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- $conn = new ReadableResourceStream($stream, $loop);
- $conn->on('error', $this->expectCallableNever());
- $conn->on('data', function ($data) use ($conn) {
- $conn->close();
- });
-
- fwrite($stream, "foobar\n");
- rewind($stream);
-
- $conn->handleData($stream);
- }
-
- /**
- * @covers React\Stream\ReadableResourceStream::pause
- */
- public function testPauseRemovesReadStreamFromLoop()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
- $loop->expects($this->once())->method('addReadStream')->with($stream);
- $loop->expects($this->once())->method('removeReadStream')->with($stream);
-
- $conn = new ReadableResourceStream($stream, $loop);
- $conn->pause();
- $conn->pause();
- }
-
- /**
- * @covers React\Stream\ReadableResourceStream::pause
- */
- public function testResumeDoesAddStreamToLoopOnlyOnce()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
- $loop->expects($this->once())->method('addReadStream')->with($stream);
-
- $conn = new ReadableResourceStream($stream, $loop);
- $conn->resume();
- $conn->resume();
- }
-
- /**
- * @covers React\Stream\ReadableResourceStream::close
- */
- public function testCloseRemovesReadStreamFromLoop()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
- $loop->expects($this->once())->method('addReadStream')->with($stream);
- $loop->expects($this->once())->method('removeReadStream')->with($stream);
-
- $conn = new ReadableResourceStream($stream, $loop);
- $conn->close();
- }
-
- /**
- * @covers React\Stream\ReadableResourceStream::close
- */
- public function testCloseAfterPauseRemovesReadStreamFromLoopOnce()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
- $loop->expects($this->once())->method('addReadStream')->with($stream);
- $loop->expects($this->once())->method('removeReadStream')->with($stream);
-
- $conn = new ReadableResourceStream($stream, $loop);
- $conn->pause();
- $conn->close();
- }
-
- /**
- * @covers React\Stream\ReadableResourceStream::close
- */
- public function testResumeAfterCloseDoesAddReadStreamToLoopOnlyOnce()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
- $loop->expects($this->once())->method('addReadStream')->with($stream);
-
- $conn = new ReadableResourceStream($stream, $loop);
- $conn->close();
- $conn->resume();
- }
-
- /**
- * @covers React\Stream\ReadableResourceStream::handleData
- */
- public function testDataFiltered()
- {
- $stream = fopen('php://temp', 'r+');
-
- // add a filter which removes every 'a' when reading
- Filter\append($stream, function ($chunk) {
- return str_replace('a', '', $chunk);
- }, STREAM_FILTER_READ);
-
- $loop = $this->createLoopMock();
-
- $capturedData = null;
-
- $conn = new ReadableResourceStream($stream, $loop);
- $conn->on('data', function ($data) use (&$capturedData) {
- $capturedData = $data;
- });
-
- fwrite($stream, "foobar\n");
- rewind($stream);
-
- $conn->handleData($stream);
- $this->assertSame("foobr\n", $capturedData);
- }
-
- /**
- * @covers React\Stream\ReadableResourceStream::handleData
- */
- public function testDataErrorShouldEmitErrorAndClose()
- {
- $stream = fopen('php://temp', 'r+');
-
- // add a filter which returns an error when encountering an 'a' when reading
- Filter\append($stream, function ($chunk) {
- if (strpos($chunk, 'a') !== false) {
- throw new \Exception('Invalid');
- }
- return $chunk;
- }, STREAM_FILTER_READ);
-
- $loop = $this->createLoopMock();
-
- $conn = new ReadableResourceStream($stream, $loop);
- $conn->on('data', $this->expectCallableNever());
- $conn->on('error', $this->expectCallableOnce());
- $conn->on('close', $this->expectCallableOnce());
-
- fwrite($stream, "foobar\n");
- rewind($stream);
-
- $conn->handleData($stream);
- }
-
- private function createLoopMock()
- {
- return $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
- }
-}
diff --git a/assets/php/vendor/react/stream/tests/Stub/ReadableStreamStub.php b/assets/php/vendor/react/stream/tests/Stub/ReadableStreamStub.php
deleted file mode 100755
index 6984f24..0000000
--- a/assets/php/vendor/react/stream/tests/Stub/ReadableStreamStub.php
+++ /dev/null
@@ -1,61 +0,0 @@
-<?php
-
-namespace React\Tests\Stream\Stub;
-
-use Evenement\EventEmitter;
-use React\Stream\ReadableStreamInterface;
-use React\Stream\WritableStreamInterface;
-use React\Stream\Util;
-
-class ReadableStreamStub extends EventEmitter implements ReadableStreamInterface
-{
- public $readable = true;
- public $paused = false;
-
- public function isReadable()
- {
- return true;
- }
-
- // trigger data event
- public function write($data)
- {
- $this->emit('data', array($data));
- }
-
- // trigger error event
- public function error($error)
- {
- $this->emit('error', array($error));
- }
-
- // trigger end event
- public function end()
- {
- $this->emit('end', array());
- }
-
- public function pause()
- {
- $this->paused = true;
- }
-
- public function resume()
- {
- $this->paused = false;
- }
-
- public function close()
- {
- $this->readable = false;
-
- $this->emit('close');
- }
-
- public function pipe(WritableStreamInterface $dest, array $options = array())
- {
- Util::pipe($this, $dest, $options);
-
- return $dest;
- }
-}
diff --git a/assets/php/vendor/react/stream/tests/TestCase.php b/assets/php/vendor/react/stream/tests/TestCase.php
deleted file mode 100755
index c8fc1db..0000000
--- a/assets/php/vendor/react/stream/tests/TestCase.php
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-
-namespace React\Tests\Stream;
-
-use PHPUnit\Framework\TestCase as BaseTestCase;
-
-class TestCase extends BaseTestCase
-{
- protected function expectCallableExactly($amount)
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->exactly($amount))
- ->method('__invoke');
-
- return $mock;
- }
-
- protected function expectCallableOnce()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke');
-
- return $mock;
- }
-
- protected function expectCallableOnceWith($value)
- {
- $callback = $this->createCallableMock();
- $callback
- ->expects($this->once())
- ->method('__invoke')
- ->with($value);
-
- return $callback;
- }
-
- protected function expectCallableNever()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->never())
- ->method('__invoke');
-
- return $mock;
- }
-
- protected function createCallableMock()
- {
- return $this->getMockBuilder('React\Tests\Stream\CallableStub')->getMock();
- }
-}
diff --git a/assets/php/vendor/react/stream/tests/ThroughStreamTest.php b/assets/php/vendor/react/stream/tests/ThroughStreamTest.php
deleted file mode 100755
index a98badf..0000000
--- a/assets/php/vendor/react/stream/tests/ThroughStreamTest.php
+++ /dev/null
@@ -1,267 +0,0 @@
-<?php
-
-namespace React\Tests\Stream;
-
-use React\Stream\ThroughStream;
-
-/**
- * @covers React\Stream\ThroughStream
- */
-class ThroughStreamTest extends TestCase
-{
- /**
- * @test
- * @expectedException InvalidArgumentException
- */
- public function itShouldRejectInvalidCallback()
- {
- new ThroughStream(123);
- }
-
- /** @test */
- public function itShouldReturnTrueForAnyDataWrittenToIt()
- {
- $through = new ThroughStream();
- $ret = $through->write('foo');
-
- $this->assertTrue($ret);
- }
-
- /** @test */
- public function itShouldEmitAnyDataWrittenToIt()
- {
- $through = new ThroughStream();
- $through->on('data', $this->expectCallableOnceWith('foo'));
- $through->write('foo');
- }
-
- /** @test */
- public function itShouldEmitAnyDataWrittenToItPassedThruFunction()
- {
- $through = new ThroughStream('strtoupper');
- $through->on('data', $this->expectCallableOnceWith('FOO'));
- $through->write('foo');
- }
-
- /** @test */
- public function itShouldEmitAnyDataWrittenToItPassedThruCallback()
- {
- $through = new ThroughStream('strtoupper');
- $through->on('data', $this->expectCallableOnceWith('FOO'));
- $through->write('foo');
- }
-
- /** @test */
- public function itShouldEmitErrorAndCloseIfCallbackThrowsException()
- {
- $through = new ThroughStream(function () {
- throw new \RuntimeException();
- });
- $through->on('error', $this->expectCallableOnce());
- $through->on('close', $this->expectCallableOnce());
- $through->on('data', $this->expectCallableNever());
- $through->on('end', $this->expectCallableNever());
-
- $through->write('foo');
-
- $this->assertFalse($through->isReadable());
- $this->assertFalse($through->isWritable());
- }
-
- /** @test */
- public function itShouldEmitErrorAndCloseIfCallbackThrowsExceptionOnEnd()
- {
- $through = new ThroughStream(function () {
- throw new \RuntimeException();
- });
- $through->on('error', $this->expectCallableOnce());
- $through->on('close', $this->expectCallableOnce());
- $through->on('data', $this->expectCallableNever());
- $through->on('end', $this->expectCallableNever());
-
- $through->end('foo');
-
- $this->assertFalse($through->isReadable());
- $this->assertFalse($through->isWritable());
- }
-
- /** @test */
- public function itShouldReturnFalseForAnyDataWrittenToItWhenPaused()
- {
- $through = new ThroughStream();
- $through->pause();
- $ret = $through->write('foo');
-
- $this->assertFalse($ret);
- }
-
- /** @test */
- public function itShouldEmitDrainOnResumeAfterReturnFalseForAnyDataWrittenToItWhenPaused()
- {
- $through = new ThroughStream();
- $through->pause();
- $through->write('foo');
-
- $through->on('drain', $this->expectCallableOnce());
- $through->resume();
- }
-
- /** @test */
- public function itShouldReturnTrueForAnyDataWrittenToItWhenResumedAfterPause()
- {
- $through = new ThroughStream();
- $through->on('drain', $this->expectCallableNever());
- $through->pause();
- $through->resume();
- $ret = $through->write('foo');
-
- $this->assertTrue($ret);
- }
-
- /** @test */
- public function pipingStuffIntoItShouldWork()
- {
- $readable = new ThroughStream();
-
- $through = new ThroughStream();
- $through->on('data', $this->expectCallableOnceWith('foo'));
-
- $readable->pipe($through);
- $readable->emit('data', array('foo'));
- }
-
- /** @test */
- public function endShouldEmitEndAndClose()
- {
- $through = new ThroughStream();
- $through->on('data', $this->expectCallableNever());
- $through->on('end', $this->expectCallableOnce());
- $through->on('close', $this->expectCallableOnce());
- $through->end();
- }
-
- /** @test */
- public function endShouldCloseTheStream()
- {
- $through = new ThroughStream();
- $through->on('data', $this->expectCallableNever());
- $through->end();
-
- $this->assertFalse($through->isReadable());
- $this->assertFalse($through->isWritable());
- }
-
- /** @test */
- public function endShouldWriteDataBeforeClosing()
- {
- $through = new ThroughStream();
- $through->on('data', $this->expectCallableOnceWith('foo'));
- $through->end('foo');
-
- $this->assertFalse($through->isReadable());
- $this->assertFalse($through->isWritable());
- }
-
- /** @test */
- public function endTwiceShouldOnlyEmitOnce()
- {
- $through = new ThroughStream();
- $through->on('data', $this->expectCallableOnce('first'));
- $through->end('first');
- $through->end('ignored');
- }
-
- /** @test */
- public function writeAfterEndShouldReturnFalse()
- {
- $through = new ThroughStream();
- $through->on('data', $this->expectCallableNever());
- $through->end();
-
- $this->assertFalse($through->write('foo'));
- }
-
- /** @test */
- public function writeDataWillCloseStreamShouldReturnFalse()
- {
- $through = new ThroughStream();
- $through->on('data', array($through, 'close'));
-
- $this->assertFalse($through->write('foo'));
- }
-
- /** @test */
- public function writeDataToPausedShouldReturnFalse()
- {
- $through = new ThroughStream();
- $through->pause();
-
- $this->assertFalse($through->write('foo'));
- }
-
- /** @test */
- public function writeDataToResumedShouldReturnTrue()
- {
- $through = new ThroughStream();
- $through->pause();
- $through->resume();
-
- $this->assertTrue($through->write('foo'));
- }
-
- /** @test */
- public function itShouldBeReadableByDefault()
- {
- $through = new ThroughStream();
- $this->assertTrue($through->isReadable());
- }
-
- /** @test */
- public function itShouldBeWritableByDefault()
- {
- $through = new ThroughStream();
- $this->assertTrue($through->isWritable());
- }
-
- /** @test */
- public function closeShouldCloseOnce()
- {
- $through = new ThroughStream();
-
- $through->on('close', $this->expectCallableOnce());
-
- $through->close();
-
- $this->assertFalse($through->isReadable());
- $this->assertFalse($through->isWritable());
- }
-
- /** @test */
- public function doubleCloseShouldCloseOnce()
- {
- $through = new ThroughStream();
-
- $through->on('close', $this->expectCallableOnce());
-
- $through->close();
- $through->close();
-
- $this->assertFalse($through->isReadable());
- $this->assertFalse($through->isWritable());
- }
-
- /** @test */
- public function pipeShouldPipeCorrectly()
- {
- $output = $this->getMockBuilder('React\Stream\WritableStreamInterface')->getMock();
- $output->expects($this->any())->method('isWritable')->willReturn(True);
- $output
- ->expects($this->once())
- ->method('write')
- ->with('foo');
-
- $through = new ThroughStream();
- $through->pipe($output);
- $through->write('foo');
- }
-}
diff --git a/assets/php/vendor/react/stream/tests/UtilTest.php b/assets/php/vendor/react/stream/tests/UtilTest.php
deleted file mode 100755
index 3d113ab..0000000
--- a/assets/php/vendor/react/stream/tests/UtilTest.php
+++ /dev/null
@@ -1,273 +0,0 @@
-<?php
-
-namespace React\Tests\Stream;
-
-use React\Stream\WritableResourceStream;
-use React\Stream\Util;
-use React\Stream\CompositeStream;
-use React\Stream\ThroughStream;
-
-/**
- * @covers React\Stream\Util
- */
-class UtilTest extends TestCase
-{
- public function testPipeReturnsDestinationStream()
- {
- $readable = $this->getMockBuilder('React\Stream\ReadableStreamInterface')->getMock();
-
- $writable = $this->getMockBuilder('React\Stream\WritableStreamInterface')->getMock();
-
- $ret = Util::pipe($readable, $writable);
-
- $this->assertSame($writable, $ret);
- }
-
- public function testPipeNonReadableSourceShouldDoNothing()
- {
- $readable = $this->getMockBuilder('React\Stream\ReadableStreamInterface')->getMock();
- $readable
- ->expects($this->any())
- ->method('isReadable')
- ->willReturn(false);
-
- $writable = $this->getMockBuilder('React\Stream\WritableStreamInterface')->getMock();
- $writable
- ->expects($this->never())
- ->method('isWritable');
- $writable
- ->expects($this->never())
- ->method('end');
-
- Util::pipe($readable, $writable);
- }
-
- public function testPipeIntoNonWritableDestinationShouldPauseSource()
- {
- $readable = $this->getMockBuilder('React\Stream\ReadableStreamInterface')->getMock();
- $readable
- ->expects($this->any())
- ->method('isReadable')
- ->willReturn(true);
- $readable
- ->expects($this->once())
- ->method('pause');
-
- $writable = $this->getMockBuilder('React\Stream\WritableStreamInterface')->getMock();
- $writable
- ->expects($this->any())
- ->method('isWritable')
- ->willReturn(false);
- $writable
- ->expects($this->never())
- ->method('end');
-
- Util::pipe($readable, $writable);
- }
-
- public function testPipeClosingDestPausesSource()
- {
- $readable = $this->getMockBuilder('React\Stream\ReadableStreamInterface')->getMock();
- $readable
- ->expects($this->any())
- ->method('isReadable')
- ->willReturn(true);
- $readable
- ->expects($this->once())
- ->method('pause');
-
- $writable = new ThroughStream();
-
- Util::pipe($readable, $writable);
-
- $writable->close();
- }
-
- public function testPipeWithEnd()
- {
- $readable = new Stub\ReadableStreamStub();
-
- $writable = $this->getMockBuilder('React\Stream\WritableStreamInterface')->getMock();
- $writable
- ->expects($this->any())
- ->method('isWritable')
- ->willReturn(true);
- $writable
- ->expects($this->once())
- ->method('end');
-
- Util::pipe($readable, $writable);
-
- $readable->end();
- }
-
- public function testPipeWithoutEnd()
- {
- $readable = new Stub\ReadableStreamStub();
-
- $writable = $this->getMockBuilder('React\Stream\WritableStreamInterface')->getMock();
- $writable
- ->expects($this->any())
- ->method('isWritable')
- ->willReturn(true);
- $writable
- ->expects($this->never())
- ->method('end');
-
- Util::pipe($readable, $writable, array('end' => false));
-
- $readable->end();
- }
-
- public function testPipeWithTooSlowWritableShouldPauseReadable()
- {
- $readable = new Stub\ReadableStreamStub();
-
- $writable = $this->getMockBuilder('React\Stream\WritableStreamInterface')->getMock();
- $writable
- ->expects($this->any())
- ->method('isWritable')
- ->willReturn(true);
- $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->getMockBuilder('React\Stream\WritableStreamInterface')->getMock();
- $writable
- ->expects($this->any())
- ->method('isWritable')
- ->willReturn(true);
- $writable
- ->expects($this->any())
- ->method('on')
- ->will($this->returnCallback(function ($name, $callback) use (&$onDrain) {
- if ($name === 'drain') {
- $onDrain = $callback;
- }
- }));
-
- $readable->pipe($writable);
- $readable->pause();
-
- $this->assertTrue($readable->paused);
- $this->assertNotNull($onDrain);
- $onDrain();
- $this->assertFalse($readable->paused);
- }
-
- public function testPipeWithWritableResourceStream()
- {
- $readable = new Stub\ReadableStreamStub();
-
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
- $buffer = new WritableResourceStream($stream, $loop);
-
- $readable->pipe($buffer);
-
- $readable->write('hello, I am some ');
- $readable->write('random data');
-
- $buffer->handleWrite();
- rewind($stream);
- $this->assertSame('hello, I am some random data', stream_get_contents($stream));
- }
-
- public function testPipeSetsUpListeners()
- {
- $source = new ThroughStream();
- $dest = new ThroughStream();
-
- $this->assertCount(0, $source->listeners('data'));
- $this->assertCount(0, $source->listeners('end'));
- $this->assertCount(0, $dest->listeners('drain'));
-
- Util::pipe($source, $dest);
-
- $this->assertCount(1, $source->listeners('data'));
- $this->assertCount(1, $source->listeners('end'));
- $this->assertCount(1, $dest->listeners('drain'));
- }
-
- public function testPipeClosingSourceRemovesListeners()
- {
- $source = new ThroughStream();
- $dest = new ThroughStream();
-
- Util::pipe($source, $dest);
-
- $source->close();
-
- $this->assertCount(0, $source->listeners('data'));
- $this->assertCount(0, $source->listeners('end'));
- $this->assertCount(0, $dest->listeners('drain'));
- }
-
- public function testPipeClosingDestRemovesListeners()
- {
- $source = new ThroughStream();
- $dest = new ThroughStream();
-
- Util::pipe($source, $dest);
-
- $dest->close();
-
- $this->assertCount(0, $source->listeners('data'));
- $this->assertCount(0, $source->listeners('end'));
- $this->assertCount(0, $dest->listeners('drain'));
- }
-
- public function testPipeDuplexIntoSelfEndsOnEnd()
- {
- $readable = $this->getMockBuilder('React\Stream\ReadableStreamInterface')->getMock();
- $readable->expects($this->any())->method('isReadable')->willReturn(true);
- $writable = $this->getMockBuilder('React\Stream\WritableStreamInterface')->getMock();
- $writable->expects($this->any())->method('isWritable')->willReturn(true);
- $duplex = new CompositeStream($readable, $writable);
-
- Util::pipe($duplex, $duplex);
-
- $writable->expects($this->once())->method('end');
-
- $duplex->emit('end');
- }
-
- /** @test */
- public function forwardEventsShouldSetupForwards()
- {
- $source = new ThroughStream();
- $target = new ThroughStream();
-
- 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 createLoopMock()
- {
- return $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
- }
-
- private function notEqualTo($value)
- {
- return new \PHPUnit_Framework_Constraint_Not($value);
- }
-}
diff --git a/assets/php/vendor/react/stream/tests/WritableStreamResourceTest.php b/assets/php/vendor/react/stream/tests/WritableStreamResourceTest.php
deleted file mode 100755
index 05bce9c..0000000
--- a/assets/php/vendor/react/stream/tests/WritableStreamResourceTest.php
+++ /dev/null
@@ -1,534 +0,0 @@
-<?php
-
-namespace React\Tests\Stream;
-
-use Clue\StreamFilter as Filter;
-use React\Stream\WritableResourceStream;
-
-class WritableResourceStreamTest extends TestCase
-{
- /**
- * @covers React\Stream\WritableResourceStream::__construct
- * @doesNotPerformAssertions
- */
- public function testConstructor()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- new WritableResourceStream($stream, $loop);
- }
-
- /**
- * @covers React\Stream\WritableResourceStream::__construct
- * @doesNotPerformAssertions
- */
- public function testConstructorWithExcessiveMode()
- {
- // excessive flags are ignored for temp streams, so we have to use a file stream
- $name = tempnam(sys_get_temp_dir(), 'test');
- $stream = @fopen($name, 'w+eANYTHING');
- unlink($name);
-
- $loop = $this->createLoopMock();
- $buffer = new WritableResourceStream($stream, $loop);
- $buffer->close();
- }
-
- /**
- * @covers React\Stream\WritableResourceStream::__construct
- * @expectedException InvalidArgumentException
- */
- public function testConstructorThrowsIfNotAValidStreamResource()
- {
- $stream = null;
- $loop = $this->createLoopMock();
-
- new WritableResourceStream($stream, $loop);
- }
-
- /**
- * @covers React\Stream\WritableResourceStream::__construct
- * @expectedException InvalidArgumentException
- */
- public function testConstructorThrowsExceptionOnReadOnlyStream()
- {
- $stream = fopen('php://temp', 'r');
- $loop = $this->createLoopMock();
-
- new WritableResourceStream($stream, $loop);
- }
-
- /**
- * @covers React\Stream\WritableResourceStream::__construct
- * @expectedException InvalidArgumentException
- */
- public function testConstructorThrowsExceptionOnReadOnlyStreamWithExcessiveMode()
- {
- // excessive flags are ignored for temp streams, so we have to use a file stream
- $name = tempnam(sys_get_temp_dir(), 'test');
- $stream = fopen($name, 'reANYTHING');
- unlink($name);
-
- $loop = $this->createLoopMock();
- new WritableResourceStream($stream, $loop);
- }
-
- /**
- * @covers React\Stream\WritableResourceStream::__construct
- * @expectedException RuntimeException
- */
- public function testConstructorThrowsExceptionIfStreamDoesNotSupportNonBlocking()
- {
- if (!in_array('blocking', stream_get_wrappers())) {
- stream_wrapper_register('blocking', 'React\Tests\Stream\EnforceBlockingWrapper');
- }
-
- $stream = fopen('blocking://test', 'r+');
- $loop = $this->createLoopMock();
-
- new WritableResourceStream($stream, $loop);
- }
-
- /**
- * @covers React\Stream\WritableResourceStream::write
- * @covers React\Stream\WritableResourceStream::handleWrite
- */
- public function testWrite()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createWriteableLoopMock();
-
- $buffer = new WritableResourceStream($stream, $loop);
- $buffer->on('error', $this->expectCallableNever());
-
- $buffer->write("foobar\n");
- rewind($stream);
- $this->assertSame("foobar\n", fread($stream, 1024));
- }
-
- /**
- * @covers React\Stream\WritableResourceStream::write
- */
- public function testWriteWithDataDoesAddResourceToLoop()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
- $loop->expects($this->once())->method('addWriteStream')->with($this->equalTo($stream));
-
- $buffer = new WritableResourceStream($stream, $loop);
-
- $buffer->write("foobar\n");
- }
-
- /**
- * @covers React\Stream\WritableResourceStream::write
- * @covers React\Stream\WritableResourceStream::handleWrite
- */
- public function testEmptyWriteDoesNotAddToLoop()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
- $loop->expects($this->never())->method('addWriteStream');
-
- $buffer = new WritableResourceStream($stream, $loop);
-
- $buffer->write("");
- $buffer->write(null);
- }
-
- /**
- * @covers React\Stream\WritableResourceStream::write
- * @covers React\Stream\WritableResourceStream::handleWrite
- */
- public function testWriteReturnsFalseWhenWritableResourceStreamIsFull()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createWriteableLoopMock();
- $loop->preventWrites = true;
-
- $buffer = new WritableResourceStream($stream, $loop, 4);
- $buffer->on('error', $this->expectCallableNever());
-
- $this->assertTrue($buffer->write("foo"));
- $loop->preventWrites = false;
- $this->assertFalse($buffer->write("bar\n"));
- }
-
- /**
- * @covers React\Stream\WritableResourceStream::write
- */
- public function testWriteReturnsFalseWhenWritableResourceStreamIsExactlyFull()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- $buffer = new WritableResourceStream($stream, $loop, 3);
-
- $this->assertFalse($buffer->write("foo"));
- }
-
- /**
- * @covers React\Stream\WritableResourceStream::write
- * @covers React\Stream\WritableResourceStream::handleWrite
- */
- public function testWriteDetectsWhenOtherSideIsClosed()
- {
- list($a, $b) = stream_socket_pair(STREAM_PF_UNIX, STREAM_SOCK_STREAM, STREAM_IPPROTO_IP);
-
- $loop = $this->createWriteableLoopMock();
-
- $buffer = new WritableResourceStream($a, $loop, 4);
- $buffer->on('error', $this->expectCallableOnce());
-
- fclose($b);
-
- $buffer->write("foo");
- }
-
- /**
- * @covers React\Stream\WritableResourceStream::write
- * @covers React\Stream\WritableResourceStream::handleWrite
- */
- public function testEmitsDrainAfterWriteWhichExceedsBuffer()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- $buffer = new WritableResourceStream($stream, $loop, 2);
- $buffer->on('error', $this->expectCallableNever());
- $buffer->on('drain', $this->expectCallableOnce());
-
- $buffer->write("foo");
- $buffer->handleWrite();
- }
-
- /**
- * @covers React\Stream\WritableResourceStream::write
- * @covers React\Stream\WritableResourceStream::handleWrite
- */
- public function testWriteInDrain()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- $buffer = new WritableResourceStream($stream, $loop, 2);
- $buffer->on('error', $this->expectCallableNever());
-
- $buffer->once('drain', function () use ($buffer) {
- $buffer->write("bar\n");
- $buffer->handleWrite();
- });
-
- $this->assertFalse($buffer->write("foo\n"));
- $buffer->handleWrite();
-
- fseek($stream, 0);
- $this->assertSame("foo\nbar\n", stream_get_contents($stream));
- }
-
- /**
- * @covers React\Stream\WritableResourceStream::write
- * @covers React\Stream\WritableResourceStream::handleWrite
- */
- public function testDrainAfterWrite()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- $buffer = new WritableResourceStream($stream, $loop, 2);
-
- $buffer->on('drain', $this->expectCallableOnce());
-
- $buffer->write("foo");
- $buffer->handleWrite();
- }
-
- /**
- * @covers React\Stream\WritableResourceStream::handleWrite
- */
- public function testDrainAfterWriteWillRemoveResourceFromLoopWithoutClosing()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
- $loop->expects($this->once())->method('removeWriteStream')->with($stream);
-
- $buffer = new WritableResourceStream($stream, $loop, 2);
-
- $buffer->on('drain', $this->expectCallableOnce());
-
- $buffer->on('close', $this->expectCallableNever());
-
- $buffer->write("foo");
- $buffer->handleWrite();
- }
-
- /**
- * @covers React\Stream\WritableResourceStream::handleWrite
- */
- public function testClosingDuringDrainAfterWriteWillRemoveResourceFromLoopOnceAndClose()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
- $loop->expects($this->once())->method('removeWriteStream')->with($stream);
-
- $buffer = new WritableResourceStream($stream, $loop, 2);
-
- $buffer->on('drain', function () use ($buffer) {
- $buffer->close();
- });
-
- $buffer->on('close', $this->expectCallableOnce());
-
- $buffer->write("foo");
- $buffer->handleWrite();
- }
-
- /**
- * @covers React\Stream\WritableResourceStream::end
- */
- public function testEndWithoutDataClosesImmediatelyIfWritableResourceStreamIsEmpty()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- $buffer = new WritableResourceStream($stream, $loop);
- $buffer->on('error', $this->expectCallableNever());
- $buffer->on('close', $this->expectCallableOnce());
-
- $this->assertTrue($buffer->isWritable());
- $buffer->end();
- $this->assertFalse($buffer->isWritable());
- }
-
- /**
- * @covers React\Stream\WritableResourceStream::end
- */
- public function testEndWithoutDataDoesNotCloseIfWritableResourceStreamIsFull()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- $buffer = new WritableResourceStream($stream, $loop);
- $buffer->on('error', $this->expectCallableNever());
- $buffer->on('close', $this->expectCallableNever());
-
- $buffer->write('foo');
-
- $this->assertTrue($buffer->isWritable());
- $buffer->end();
- $this->assertFalse($buffer->isWritable());
- }
-
- /**
- * @covers React\Stream\WritableResourceStream::end
- */
- public function testEndWithDataClosesImmediatelyIfWritableResourceStreamFlushes()
- {
- $stream = fopen('php://temp', 'r+');
- $filterBuffer = '';
- $loop = $this->createLoopMock();
-
- $buffer = new WritableResourceStream($stream, $loop);
- $buffer->on('error', $this->expectCallableNever());
- $buffer->on('close', $this->expectCallableOnce());
-
- Filter\append($stream, function ($chunk) use (&$filterBuffer) {
- $filterBuffer .= $chunk;
- return $chunk;
- });
-
- $this->assertTrue($buffer->isWritable());
- $buffer->end('final words');
- $this->assertFalse($buffer->isWritable());
-
- $buffer->handleWrite();
- $this->assertSame('final words', $filterBuffer);
- }
-
- /**
- * @covers React\Stream\WritableResourceStream::end
- */
- public function testEndWithDataDoesNotCloseImmediatelyIfWritableResourceStreamIsFull()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- $buffer = new WritableResourceStream($stream, $loop);
- $buffer->on('error', $this->expectCallableNever());
- $buffer->on('close', $this->expectCallableNever());
-
- $buffer->write('foo');
-
- $this->assertTrue($buffer->isWritable());
- $buffer->end('final words');
- $this->assertFalse($buffer->isWritable());
-
- rewind($stream);
- $this->assertSame('', stream_get_contents($stream));
- }
-
- /**
- * @covers React\Stream\WritableResourceStream::isWritable
- * @covers React\Stream\WritableResourceStream::close
- */
- public function testClose()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- $buffer = new WritableResourceStream($stream, $loop);
- $buffer->on('error', $this->expectCallableNever());
- $buffer->on('close', $this->expectCallableOnce());
-
- $this->assertTrue($buffer->isWritable());
- $buffer->close();
- $this->assertFalse($buffer->isWritable());
-
- $this->assertEquals(array(), $buffer->listeners('close'));
- }
-
- /**
- * @covers React\Stream\WritableResourceStream::close
- */
- public function testClosingAfterWriteRemovesStreamFromLoop()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
- $buffer = new WritableResourceStream($stream, $loop);
-
- $loop->expects($this->once())->method('removeWriteStream')->with($stream);
-
- $buffer->write('foo');
- $buffer->close();
- }
-
- /**
- * @covers React\Stream\WritableResourceStream::close
- */
- public function testClosingWithoutWritingDoesNotRemoveStreamFromLoop()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
- $buffer = new WritableResourceStream($stream, $loop);
-
- $loop->expects($this->never())->method('removeWriteStream');
-
- $buffer->close();
- }
-
- /**
- * @covers React\Stream\WritableResourceStream::close
- */
- public function testDoubleCloseWillEmitOnlyOnce()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- $buffer = new WritableResourceStream($stream, $loop);
- $buffer->on('close', $this->expectCallableOnce());
-
- $buffer->close();
- $buffer->close();
- }
-
- /**
- * @covers React\Stream\WritableResourceStream::write
- * @covers React\Stream\WritableResourceStream::close
- */
- public function testWritingToClosedWritableResourceStreamShouldNotWriteToStream()
- {
- $stream = fopen('php://temp', 'r+');
- $filterBuffer = '';
- $loop = $this->createLoopMock();
-
- $buffer = new WritableResourceStream($stream, $loop);
-
- Filter\append($stream, function ($chunk) use (&$filterBuffer) {
- $filterBuffer .= $chunk;
- return $chunk;
- });
-
- $buffer->close();
-
- $buffer->write('foo');
-
- $buffer->handleWrite();
- $this->assertSame('', $filterBuffer);
- }
-
- /**
- * @covers React\Stream\WritableResourceStream::handleWrite
- */
- public function testErrorWhenStreamResourceIsInvalid()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createWriteableLoopMock();
-
- $error = null;
-
- $buffer = new WritableResourceStream($stream, $loop);
- $buffer->on('error', function ($message) use (&$error) {
- $error = $message;
- });
-
- // invalidate stream resource
- fclose($stream);
-
- $buffer->write('Attempting to write to bad stream');
-
- $this->assertInstanceOf('Exception', $error);
-
- // the error messages differ between PHP versions, let's just check substrings
- $this->assertContains('Unable to write to stream: ', $error->getMessage());
- $this->assertContains(' not a valid stream resource', $error->getMessage(), '', true);
- }
-
- public function testWritingToClosedStream()
- {
- if ('Darwin' === PHP_OS) {
- $this->markTestSkipped('OS X issue with shutting down pair for writing');
- }
-
- list($a, $b) = stream_socket_pair(STREAM_PF_UNIX, STREAM_SOCK_STREAM, STREAM_IPPROTO_IP);
- $loop = $this->createLoopMock();
-
- $error = null;
-
- $buffer = new WritableResourceStream($a, $loop);
- $buffer->on('error', function($message) use (&$error) {
- $error = $message;
- });
-
- $buffer->write('foo');
- $buffer->handleWrite();
- stream_socket_shutdown($b, STREAM_SHUT_RD);
- stream_socket_shutdown($a, STREAM_SHUT_RD);
- $buffer->write('bar');
- $buffer->handleWrite();
-
- $this->assertInstanceOf('Exception', $error);
- $this->assertSame('Unable to write to stream: fwrite(): send of 3 bytes failed with errno=32 Broken pipe', $error->getMessage());
- }
-
- private function createWriteableLoopMock()
- {
- $loop = $this->createLoopMock();
- $loop->preventWrites = false;
- $loop
- ->expects($this->any())
- ->method('addWriteStream')
- ->will($this->returnCallback(function ($stream, $listener) use ($loop) {
- if (!$loop->preventWrites) {
- call_user_func($listener, $stream);
- }
- }));
-
- return $loop;
- }
-
- private function createLoopMock()
- {
- return $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
- }
-}