advance()) { $this->assertSame(\array_shift($expected), $stream->getCurrent()); } }); } /** * @depends testMerge */ public function testMergeWithDelayedEmits() { Loop::run(function () { $streams = []; $values1 = [new Pause(10, 1), new Pause(50, 2), new Pause(70, 3)]; $values2 = [new Pause(20, 4), new Pause(40, 5), new Pause(60, 6)]; $expected = [1, 4, 5, 2, 6, 3]; $streams[] = new Producer(function (callable $emit) use ($values1) { foreach ($values1 as $value) { yield $emit($value); } }); $streams[] = new Producer(function (callable $emit) use ($values2) { foreach ($values2 as $value) { yield $emit($value); } }); $stream = Stream\merge($streams); while (yield $stream->advance()) { $this->assertSame(\array_shift($expected), $stream->getCurrent()); } }); } /** * @depends testMerge */ public function testMergeWithFailedStream() { Loop::run(function () { $exception = new \Exception; $producer = new Producer(function (callable $emit) use ($exception) { yield $emit(1); // Emit once before failing. throw $exception; }); $stream = Stream\merge([$producer, Stream\fromIterable(\range(1, 5))]); try { while (yield $stream->advance()); } catch (\Throwable $reason) { $this->assertSame($exception, $reason); } }); } /** * @expectedException \TypeError */ public function testNonStream() { Stream\merge([1]); } }