public function testThen() { $results = array(); $doneCallback = function ($result) use(&$results) { $results[] = $result; }; $reasons = array(); $failCallback = function ($reason) use(&$reasons) { $reasons[] = $reason; }; $updates = array(); $progressCallback = function ($update) use(&$updates) { $updates[] = $update; }; $promise = new Promise(); $promise->then($doneCallback); $promise->then($doneCallback, $failCallback); $promise->then($doneCallback, $failCallback, $progressCallback); $promise->resolve('foo'); $promise->reject('bar'); $promise->notify('foobar'); $this->assertCount(3, $results); $this->assertSame(array('foo', 'foo', 'foo'), $results); $this->assertCount(2, $reasons); $this->assertSame(array('bar', 'bar'), $reasons); $this->assertCount(1, $updates); $this->assertSame(array('foobar'), $updates); }