/** * @param \SplFileInfo|string $cwd * @return PromiseInterface */ public function enqueue($cwd = null) { $process = $this->factory->make($cwd); /** @var Promise $promise */ $promise = new Promise(function () use($process, &$promise) { if ($process->isStarted()) { $process->wait(); } $process->isSuccessful() ? $promise->resolve($process) : $promise->reject($process); }); $this->queue->add($process); $process->setOptions([ProcessQueue::PROMISE_KEY => $promise]); return $promise; }
/** @depends testAdd */ public function testInvoke() { $queue = new ProcessQueue(); $process = new Process('pwd'); $queue->add($process); /** @var Process $pending */ foreach ($queue() as $pending) { $this->assertInstanceOf(Process::class, $pending); $this->assertFalse($pending->isStarted()); $pending->start(); } $this->assertEmpty($queue); $this->assertCount(0, $queue); $this->assertTrue($process->isTerminated()); }