Kraken\_Module\Stream\AsyncStreamTest::testAsyncStream_WritesAndReadsDataCorrectly PHP Method

testAsyncStream_WritesAndReadsDataCorrectly() public method

public testAsyncStream_WritesAndReadsDataCorrectly ( string $readerClass, string $writerClass )
$readerClass string
$writerClass string
    public function testAsyncStream_WritesAndReadsDataCorrectly($readerClass, $writerClass)
    {
        $this->simulate(function (SimulationInterface $sim) use($readerClass, $writerClass) {
            $loop = $sim->getLoop();
            $local = $this->basePath();
            $cnt = 0;
            $reader = (new ReflectionClass($readerClass))->newInstance(fopen("file://{$local}/temp", 'w+'), $loop);
            $reader->on('data', function (AsyncStreamReaderInterface $conn, $data) use($sim) {
                $sim->expect('data', $data);
                $conn->close();
            });
            $reader->on('drain', $this->expectCallableNever());
            $reader->on('error', $this->expectCallableNever());
            $reader->on('close', function () use($sim, &$cnt) {
                $sim->expect('close');
                if (++$cnt === 2) {
                    $sim->done();
                }
            });
            $writer = (new ReflectionClass($writerClass))->newInstance(fopen("file://{$local}/temp", 'r+'), $loop);
            $writer->on('data', $this->expectCallableNever());
            $writer->on('drain', function (AsyncStreamWriterInterface $writer) use($sim) {
                $sim->expect('drain');
                $writer->close();
            });
            $writer->on('error', $this->expectCallableNever());
            $writer->on('close', function () use($sim, &$cnt) {
                $sim->expect('close');
                if (++$cnt === 2) {
                    $sim->done();
                }
            });
            $writer->write('message!');
        })->expect([['drain'], ['close'], ['data', 'message!'], ['close']]);
    }