aboutsummaryrefslogtreecommitdiffhomepage
path: root/assets/php/vendor/react/stream/tests/DuplexResourceStreamTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'assets/php/vendor/react/stream/tests/DuplexResourceStreamTest.php')
-rwxr-xr-xassets/php/vendor/react/stream/tests/DuplexResourceStreamTest.php495
1 files changed, 0 insertions, 495 deletions
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();
- }
-}