Skip to content

Commit 6e1bb8c

Browse files
committed
Merge remote-tracking branch 'origin/util-when-refactoring'
* origin/util-when-refactoring: Use When methods in tests instead of direct promise instances Move Util::resolve() and Util::reject() to When (Util is now only used internally)
2 parents 2964281 + 234121c commit 6e1bb8c

16 files changed

Lines changed: 185 additions & 121 deletions

README.md

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,8 @@ Table of Contents
2424
* [When::some()](#whensome)
2525
* [When::map()](#whenmap)
2626
* [When::reduce()](#whenreduce)
27-
* [Util](#util)
28-
* [Util::resolve()](#utilresolve)
29-
* [Util::reject()](#utilreject)
27+
* [When::resolve()](#whenresolve)
28+
* [When::reject()](#whenreject)
3029
4. [Examples](#examples)
3130
* [How to use Deferred](#how-to-use-deferred)
3231
* [How Promise forwarding works](#how-promise-forwarding-works)
@@ -237,14 +236,10 @@ Promises and/or values, and `$reduceFunc` may return either a value or a
237236
Promise, *and* `$initialValue` may be a Promise or a value for the starting
238237
value.
239238

240-
### Util
241-
242-
The `React\Promise\Util` class provides useful methods for creating Promises.
243-
244-
#### Util::resolve()
239+
#### When::resolve()
245240

246241
``` php
247-
$promise = React\Promise\Util::resolve(mixed $promiseOrValue);
242+
$promise = React\Promise\When::resolve(mixed $promiseOrValue);
248243
```
249244

250245
Creates a resolved Promise for the supplied `$promiseOrValue`.
@@ -254,10 +249,10 @@ returned Promise.
254249

255250
If `$promiseOrValue` is a Promise, it will simply be returned.
256251

257-
#### Util::reject()
252+
#### When::reject()
258253

259254
``` php
260-
$promise = React\Promise\Util::reject(mixed $promiseOrValue);
255+
$promise = React\Promise\When::reject(mixed $promiseOrValue);
261256
```
262257

263258
Creates a rejected Promise for the supplied `$promiseOrValue`.

src/React/Promise/Deferred.php

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,13 @@ public function then($fulfilledHandler = null, $errorHandler = null, $progressHa
4848
public function resolve($result = null)
4949
{
5050
if (null !== $this->completed) {
51-
return Util::resolve($result);
51+
$deferred = new static();
52+
$deferred->resolve($result);
53+
54+
return $deferred->promise();
5255
}
5356

54-
$this->completed = Util::resolve($result);
57+
$this->completed = Util::promiseFor($result);
5558

5659
$this->processQueue($this->handlers, $this->completed);
5760

src/React/Promise/FulfilledPromise.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public function then($fulfilledHandler = null, $errorHandler = null, $progressHa
1919
$result = call_user_func($fulfilledHandler, $result);
2020
}
2121

22-
return Util::resolve($result);
22+
return Util::promiseFor($result);
2323
} catch (\Exception $exception) {
2424
return new RejectedPromise($exception);
2525
}

src/React/Promise/RejectedPromise.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public function then($fulfilledHandler = null, $errorHandler = null, $progressHa
1818
return new RejectedPromise($this->error);
1919
}
2020

21-
return Util::resolve(call_user_func($errorHandler, $this->error));
21+
return Util::promiseFor(call_user_func($errorHandler, $this->error));
2222
} catch (\Exception $exception) {
2323
return new RejectedPromise($exception);
2424
}

src/React/Promise/Util.php

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,12 @@
44

55
class Util
66
{
7-
public static function resolve($promiseOrValue)
7+
public static function promiseFor($promiseOrValue)
88
{
99
if ($promiseOrValue instanceof PromiseInterface) {
1010
return $promiseOrValue;
1111
}
1212

1313
return new FulfilledPromise($promiseOrValue);
1414
}
15-
16-
public static function reject($promiseOrValue)
17-
{
18-
return static::resolve($promiseOrValue)->then(function ($value = null) {
19-
return new RejectedPromise($value);
20-
});
21-
}
2215
}

src/React/Promise/When.php

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,21 @@
44

55
class When
66
{
7+
public static function resolve($promiseOrValue)
8+
{
9+
$deferred = new Deferred();
10+
$deferred->resolve($promiseOrValue);
11+
12+
return $deferred->promise();
13+
}
14+
15+
public static function reject($promiseOrValue)
16+
{
17+
return static::resolve($promiseOrValue)->then(function ($value = null) {
18+
return new RejectedPromise($value);
19+
});
20+
}
21+
722
public static function all($promisesOrValues, $fulfilledHandler = null, $errorHandler = null, $progressHandler = null)
823
{
924
$promise = static::map($promisesOrValues, function ($val) {
@@ -26,7 +41,7 @@ public static function any($promisesOrValues, $fulfilledHandler = null, $errorHa
2641

2742
public static function some($promisesOrValues, $howMany, $fulfilledHandler = null, $errorHandler = null, $progressHandler = null)
2843
{
29-
return Util::resolve($promisesOrValues)->then(function ($array) use ($howMany, $fulfilledHandler, $errorHandler, $progressHandler) {
44+
return When::resolve($promisesOrValues)->then(function ($array) use ($howMany, $fulfilledHandler, $errorHandler, $progressHandler) {
3045
if (!is_array($array)) {
3146
$array = array();
3247
}
@@ -79,7 +94,7 @@ public static function some($promisesOrValues, $howMany, $fulfilledHandler = nul
7994
}
8095
};
8196

82-
Util::resolve($promiseOrValue)->then($fulfiller, $rejecter, $progress);
97+
When::resolve($promiseOrValue)->then($fulfiller, $rejecter, $progress);
8398
}
8499
}
85100

@@ -89,7 +104,7 @@ public static function some($promisesOrValues, $howMany, $fulfilledHandler = nul
89104

90105
public static function map($promisesOrValues, $mapFunc)
91106
{
92-
return Util::resolve($promisesOrValues)->then(function ($array) use ($mapFunc) {
107+
return When::resolve($promisesOrValues)->then(function ($array) use ($mapFunc) {
93108
if (!is_array($array)) {
94109
$array = array();
95110
}
@@ -102,7 +117,7 @@ public static function map($promisesOrValues, $mapFunc)
102117
$deferred->resolve($results);
103118
} else {
104119
$resolve = function ($item, $i) use ($mapFunc, &$results, &$toResolve, $deferred) {
105-
Util::resolve($item)
120+
When::resolve($item)
106121
->then($mapFunc)
107122
->then(
108123
function ($mapped) use (&$results, $i, &$toResolve, $deferred) {
@@ -127,7 +142,7 @@ function ($mapped) use (&$results, $i, &$toResolve, $deferred) {
127142

128143
public static function reduce($promisesOrValues, $reduceFunc , $initialValue = null)
129144
{
130-
return Util::resolve($promisesOrValues)->then(function ($array) use ($reduceFunc, $initialValue) {
145+
return When::resolve($promisesOrValues)->then(function ($array) use ($reduceFunc, $initialValue) {
131146
if (!is_array($array)) {
132147
$array = array();
133148
}
@@ -138,8 +153,8 @@ public static function reduce($promisesOrValues, $reduceFunc , $initialValue = n
138153
// Wrap the supplied $reduceFunc with one that handles promises and then
139154
// delegates to the supplied.
140155
$wrappedReduceFunc = function ($current, $val) use ($reduceFunc, $total, &$i) {
141-
return Util::resolve($current)->then(function ($c) use ($reduceFunc, $total, &$i, $val) {
142-
return Util::resolve($val)->then(function ($value) use ($reduceFunc, $total, &$i, $c) {
156+
return When::resolve($current)->then(function ($c) use ($reduceFunc, $total, &$i, $val) {
157+
return When::resolve($val)->then(function ($value) use ($reduceFunc, $total, &$i, $c) {
143158
return call_user_func($reduceFunc, $c, $value, $i++, $total);
144159
});
145160
});

tests/React/Promise/DeferredRejectTest.php

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -33,20 +33,16 @@ public function shouldReturnAPromiseForTheRejectionValue()
3333
{
3434
$d = new Deferred();
3535

36-
$self = $this;
36+
$mock = $this->createCallableMock();
37+
$mock
38+
->expects($this->once())
39+
->method('__invoke')
40+
->with($this->identicalTo(1));
3741

3842
$d
3943
->resolver()
4044
->reject(1)
41-
->then($this->expectCallableNever(), function ($returnedPromiseVal) use ($d, $self) {
42-
$mock = $self->createCallableMock();
43-
$mock
44-
->expects($self->once())
45-
->method('__invoke')
46-
->with($self->identicalTo($returnedPromiseVal));
47-
48-
$d->then($self->expectCallableNever(), $mock);
49-
});
45+
->then($this->expectCallableNever(), $mock);
5046
}
5147

5248
/** @test */

tests/React/Promise/DeferredResolveTest.php

Lines changed: 22 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -73,62 +73,52 @@ public function shouldReturnAPromiseForTheResolutionValue()
7373
{
7474
$d = new Deferred();
7575

76-
$self = $this;
76+
$mock = $this->createCallableMock();
77+
$mock
78+
->expects($this->once())
79+
->method('__invoke')
80+
->with($this->identicalTo(1));
7781

7882
$d
7983
->resolver()
8084
->resolve(1)
81-
->then(function ($returnedPromiseVal) use ($d, $self) {
82-
$mock = $self->createCallableMock();
83-
$mock
84-
->expects($self->once())
85-
->method('__invoke')
86-
->with($self->identicalTo($returnedPromiseVal));
87-
88-
$d->then($mock);
89-
});
85+
->then($mock);
9086
}
9187

9288
/** @test */
9389
public function shouldReturnAPromiseForAPromisedResolutionValue()
9490
{
9591
$d = new Deferred();
9692

97-
$self = $this;
93+
$mock = $this->createCallableMock();
94+
$mock
95+
->expects($this->once())
96+
->method('__invoke')
97+
->with($this->identicalTo(1));
9898

9999
$d
100100
->resolver()
101-
->resolve(Util::resolve(1))
102-
->then(function ($returnedPromiseVal) use ($d, $self) {
103-
$mock = $self->createCallableMock();
104-
$mock
105-
->expects($self->once())
106-
->method('__invoke')
107-
->with($self->identicalTo($returnedPromiseVal));
108-
109-
$d->then($mock);
110-
});
101+
->resolve(When::resolve(1))
102+
->then($mock);
111103
}
112104

113105
/** @test */
114106
public function shouldReturnAPromiseForAPromisedRejectionValue()
115107
{
116108
$d = new Deferred();
117109

118-
$self = $this;
110+
$mock = $this->createCallableMock();
111+
$mock
112+
->expects($this->once())
113+
->method('__invoke')
114+
->with($this->identicalTo(1));
119115

116+
// Both the returned promise, and the deferred's own promise should
117+
// be rejected with the same value
120118
$d
121119
->resolver()
122-
->resolve(Util::reject(1))
123-
->then($this->expectCallableNever(), function ($returnedPromiseVal) use ($d, $self) {
124-
$mock = $self->createCallableMock();
125-
$mock
126-
->expects($self->once())
127-
->method('__invoke')
128-
->with($self->identicalTo($returnedPromiseVal));
129-
130-
$d->then($self->expectCallableNever(), $mock);
131-
});
120+
->resolve(When::reject(1))
121+
->then($this->expectCallableNever(), $mock);
132122
}
133123

134124
/** @test */
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
<?php
2+
3+
namespace React\Promise;
4+
5+
/**
6+
* @group Util
7+
* @group UtilPromiseFor
8+
*/
9+
class UtilPromiseForTest extends TestCase
10+
{
11+
/** @test */
12+
public function shouldResolveAnImmediateValue()
13+
{
14+
$expected = 123;
15+
16+
$mock = $this->createCallableMock();
17+
$mock
18+
->expects($this->once())
19+
->method('__invoke')
20+
->with($this->identicalTo($expected));
21+
22+
Util::promiseFor($expected)
23+
->then(
24+
$mock,
25+
$this->expectCallableNever()
26+
);
27+
}
28+
29+
/** @test */
30+
public function shouldResolveAFulfilledPromise()
31+
{
32+
$expected = 123;
33+
34+
$resolved = new FulfilledPromise($expected);
35+
36+
$mock = $this->createCallableMock();
37+
$mock
38+
->expects($this->once())
39+
->method('__invoke')
40+
->with($this->identicalTo($expected));
41+
42+
Util::promiseFor($resolved)
43+
->then(
44+
$mock,
45+
$this->expectCallableNever()
46+
);
47+
}
48+
49+
/** @test */
50+
public function shouldRejectARejectedPromise()
51+
{
52+
$expected = 123;
53+
54+
$resolved = new RejectedPromise($expected);
55+
56+
$mock = $this->createCallableMock();
57+
$mock
58+
->expects($this->once())
59+
->method('__invoke')
60+
->with($this->identicalTo($expected));
61+
62+
Util::promiseFor($resolved)
63+
->then(
64+
$this->expectCallableNever(),
65+
$mock
66+
);
67+
}
68+
}

tests/React/Promise/WhenAllTest.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public function shouldResolvePromisesArray()
4545
->with($this->identicalTo(array(1, 2, 3)));
4646

4747
When::all(
48-
array(new FulfilledPromise(1), new FulfilledPromise(2), new FulfilledPromise(3)),
48+
array(When::resolve(1), When::resolve(2), When::resolve(3)),
4949
$mock
5050
);
5151
}
@@ -75,7 +75,7 @@ public function shouldRejectIfAnyInputPromiseRejects()
7575
->with($this->identicalTo(2));
7676

7777
When::all(
78-
array(new FulfilledPromise(1), new RejectedPromise(2), new FulfilledPromise(3)),
78+
array(When::resolve(1), When::reject(2), When::resolve(3)),
7979
$this->expectCallableNever(),
8080
$mock
8181
);
@@ -91,7 +91,7 @@ public function shouldAcceptAPromiseForAnArray()
9191
->with($this->identicalTo(array(1, 2, 3)));
9292

9393
When::all(
94-
new FulfilledPromise(array(1, 2, 3)),
94+
When::resolve(array(1, 2, 3)),
9595
$mock
9696
);
9797
}
@@ -106,7 +106,7 @@ public function shouldResolveToEmptyArrayWhenInputPromiseDoesNotResolveToArray()
106106
->with($this->identicalTo(array()));
107107

108108
When::all(
109-
new FulfilledPromise(1),
109+
When::resolve(1),
110110
$mock
111111
);
112112
}

0 commit comments

Comments
 (0)