|
6 | 6 |
|
7 | 7 | use function PHPStan\Testing\assertType;
|
8 | 8 | use function React\Promise\all;
|
| 9 | +use function React\Promise\any; |
9 | 10 | use function React\Promise\race;
|
10 | 11 | use function React\Promise\reject;
|
11 | 12 | use function React\Promise\resolve;
|
|
14 | 15 | $passThroughThrowable = static function (Throwable $t): PromiseInterface {
|
15 | 16 | return reject($t);
|
16 | 17 | };
|
17 |
| -$stringOrInt = function (): string|int { |
| 18 | +$stringOrInt = function (): int|string { |
18 | 19 | return time() % 2 ? 'string' : time();
|
19 | 20 | };
|
20 | 21 | $tosseable = new Exception('Oops I did it again!');
|
21 | 22 |
|
| 23 | +/** |
| 24 | + * basic |
| 25 | + */ |
22 | 26 | assertType('React\Promise\PromiseInterface<bool>', resolve(true));
|
23 |
| -//assertType('React\Promise\PromiseInterface<string|int>', resolve($stringOrInt())); |
24 | 27 | assertType('React\Promise\PromiseInterface<int|string>', resolve($stringOrInt()));
|
25 | 28 | assertType('React\Promise\PromiseInterface<bool>', resolve(resolve(true)));
|
26 |
| -//assertType('React\Promise\PromiseInterface<array<bool>>', all([resolve(true), resolve(false)])); |
27 |
| -//assertType('React\Promise\PromiseInterface<array<bool>>', all([resolve(true), false])); |
28 |
| -//assertType('React\Promise\PromiseInterface<array<bool|int>>', all([resolve(true), resolve(time())])); |
29 |
| -//assertType('React\Promise\PromiseInterface<array<bool|float>>', all([resolve(true), hrtime()])); |
30 |
| -//assertType('React\Promise\PromiseInterface<array<bool|int>>', all([true, resolve(time())])); |
31 |
| -//assertType('React\Promise\PromiseInterface<bool>', race([resolve(true), resolve(true)])); |
32 |
| -//assertType('React\Promise\PromiseInterface<bool>', resolve(true)->then($passThroughBoolFn)); |
33 |
| -//assertType('React\Promise\PromiseInterface<bool>', resolve(true)->then()->then($passThroughBoolFn)); |
34 |
| -//assertType('React\Promise\PromiseInterface<bool>', resolve(true)->then(null)->then($passThroughBoolFn)); |
35 |
| -//assertType('React\Promise\PromiseInterface<bool>', resolve(true)->then($passThroughBoolFn)->then($passThroughBoolFn)); |
36 |
| -//assertType('React\Promise\PromiseInterface<bool>', resolve(true)->then($passThroughBoolFn, $passThroughThrowable)->then($passThroughBoolFn)); |
| 29 | + |
| 30 | +/** |
| 31 | + * chaining |
| 32 | + */ |
| 33 | +assertType('React\Promise\PromiseInterface<bool>', resolve(true)->then($passThroughBoolFn)); |
| 34 | +assertType('React\Promise\PromiseInterface<bool>', resolve(true)->then()->then($passThroughBoolFn)); |
| 35 | +assertType('React\Promise\PromiseInterface<bool>', resolve(true)->then(null)->then($passThroughBoolFn)); |
| 36 | +assertType('React\Promise\PromiseInterface<bool>', resolve(true)->then($passThroughBoolFn)->then($passThroughBoolFn)); |
| 37 | +assertType('React\Promise\PromiseInterface<bool>', resolve(true)->then($passThroughBoolFn, $passThroughThrowable)->then($passThroughBoolFn)); |
37 | 38 | assertType('React\Promise\PromiseInterface<bool>', resolve(true)->then(null, $passThroughThrowable)->then($passThroughBoolFn));
|
38 |
| -//assertType('React\Promise\PromiseInterface<bool>', resolve(true)->then()->then(null, $passThroughThrowable)->then($passThroughBoolFn)); |
39 |
| -//assertType('React\Promise\FulfilledPromise<bool>', new FulfilledPromise(true)); |
40 |
| -//assertType('React\Promise\PromiseInterface<bool>', (new FulfilledPromise(true))->then($passThroughBoolFn)); |
41 |
| - |
42 |
| -//assertType('React\Promise\PromiseInterface<null, Exception>', reject($tosseable)); |
43 |
| -//assertType('React\Promise\PromiseInterface<null, Throwable>', reject($tosseable)); |
44 |
| -//assertType('React\Promise\PromiseInterface<null, Throwable>', reject($tosseable)->then($passThroughBoolFn, $passThroughThrowable)); |
45 |
| -//assertType('React\Promise\PromiseInterface<null, Throwable>', reject($tosseable)->then()->then($passThroughBoolFn, $passThroughThrowable)); |
46 |
| -//assertType('React\Promise\PromiseInterface<null, Throwable>', reject($tosseable)->then(null, $passThroughThrowable)); |
47 |
| -//assertType('React\Promise\PromiseInterface<null, Throwable>', reject($tosseable)->then()->then(null, $passThroughThrowable)); |
| 39 | +assertType('React\Promise\PromiseInterface<bool>', resolve(true)->then()->then(null, $passThroughThrowable)->then($passThroughBoolFn)); |
| 40 | + |
| 41 | +/** |
| 42 | + * all |
| 43 | + */ |
| 44 | +assertType('React\Promise\PromiseInterface<array<bool>>', all([resolve(true), resolve(false)])); |
| 45 | +assertType('React\Promise\PromiseInterface<array<bool>>', all([resolve(true), false])); |
| 46 | +assertType('React\Promise\PromiseInterface<array<bool|int>>', all([resolve(true), resolve(time())])); |
| 47 | +assertType('React\Promise\PromiseInterface<array<bool|float>>', all([resolve(true), hrtime()])); |
| 48 | +assertType('React\Promise\PromiseInterface<array<bool|int>>', all([true, resolve(time())])); |
| 49 | + |
| 50 | +/** |
| 51 | + * any |
| 52 | + */ |
| 53 | +assertType('React\Promise\PromiseInterface<bool>', any([resolve(true), resolve(false)])); |
| 54 | +assertType('React\Promise\PromiseInterface<bool>', any([resolve(true), false])); |
| 55 | +assertType('React\Promise\PromiseInterface<bool|int>', any([resolve(true), resolve(time())])); |
| 56 | +assertType('React\Promise\PromiseInterface<bool|float>', any([resolve(true), hrtime()])); |
| 57 | +assertType('React\Promise\PromiseInterface<bool|int>', any([true, resolve(time())])); |
| 58 | + |
| 59 | +/** |
| 60 | + * race |
| 61 | + */ |
| 62 | +assertType('React\Promise\PromiseInterface<bool>', race([resolve(true), resolve(false)])); |
| 63 | +assertType('React\Promise\PromiseInterface<bool>', race([resolve(true), false])); |
| 64 | +assertType('React\Promise\PromiseInterface<bool|int>', race([resolve(true), resolve(time())])); |
| 65 | +assertType('React\Promise\PromiseInterface<bool|float>', race([resolve(true), hrtime()])); |
| 66 | +assertType('React\Promise\PromiseInterface<bool|int>', race([true, resolve(time())])); |
| 67 | + |
| 68 | +/** |
| 69 | + * race |
| 70 | + */ |
| 71 | +assertType('React\Promise\PromiseInterface<bool>', race([resolve(true), resolve(true)])); |
| 72 | + |
| 73 | +/** |
| 74 | + * direct class access (deprecated!!!) |
| 75 | + */ |
| 76 | +assertType('React\Promise\FulfilledPromise<bool>', new FulfilledPromise(true)); |
| 77 | +assertType('React\Promise\PromiseInterface<bool>', (new FulfilledPromise(true))->then($passThroughBoolFn)); |
0 commit comments