1
1
#include " napi.h"
2
+ #include " test_helper.h"
2
3
3
4
using namespace Napi ;
4
5
@@ -23,6 +24,74 @@ Value PromiseReturnsCorrectEnv(const CallbackInfo& info) {
23
24
return Boolean::New (info.Env (), deferred.Env () == info.Env ());
24
25
}
25
26
27
+ Value ThenMethodOnFulfilled (const CallbackInfo& info) {
28
+ auto deferred = Promise::Deferred::New (info.Env ());
29
+ Function onFulfilled = info[0 ].As <Function>();
30
+
31
+ Promise resultPromise = MaybeUnwrap (deferred.Promise ().Then (onFulfilled));
32
+
33
+ bool isPromise = resultPromise.IsPromise ();
34
+ deferred.Resolve (Number::New (info.Env (), 42 ));
35
+
36
+ Object result = Object::New (info.Env ());
37
+ result[" isPromise" ] = Boolean::New (info.Env (), isPromise);
38
+ result[" promise" ] = resultPromise;
39
+
40
+ return result;
41
+ }
42
+
43
+ Value ThenMethodOnFulfilledOnRejectedResolve (const CallbackInfo& info) {
44
+ auto deferred = Promise::Deferred::New (info.Env ());
45
+ Function onFulfilled = info[0 ].As <Function>();
46
+ Function onRejected = info[1 ].As <Function>();
47
+
48
+ Promise resultPromise =
49
+ MaybeUnwrap (deferred.Promise ().Then (onFulfilled, onRejected));
50
+
51
+ bool isPromise = resultPromise.IsPromise ();
52
+ deferred.Resolve (Number::New (info.Env (), 42 ));
53
+
54
+ Object result = Object::New (info.Env ());
55
+ result[" isPromise" ] = Boolean::New (info.Env (), isPromise);
56
+ result[" promise" ] = resultPromise;
57
+
58
+ return result;
59
+ }
60
+
61
+ Value ThenMethodOnFulfilledOnRejectedReject (const CallbackInfo& info) {
62
+ auto deferred = Promise::Deferred::New (info.Env ());
63
+ Function onFulfilled = info[0 ].As <Function>();
64
+ Function onRejected = info[1 ].As <Function>();
65
+
66
+ Promise resultPromise =
67
+ MaybeUnwrap (deferred.Promise ().Then (onFulfilled, onRejected));
68
+
69
+ bool isPromise = resultPromise.IsPromise ();
70
+ deferred.Reject (String::New (info.Env (), " Rejected" ));
71
+
72
+ Object result = Object::New (info.Env ());
73
+ result[" isPromise" ] = Boolean::New (info.Env (), isPromise);
74
+ result[" promise" ] = resultPromise;
75
+
76
+ return result;
77
+ }
78
+
79
+ Value CatchMethod (const CallbackInfo& info) {
80
+ auto deferred = Promise::Deferred::New (info.Env ());
81
+ Function onRejected = info[0 ].As <Function>();
82
+
83
+ Promise resultPromise = MaybeUnwrap (deferred.Promise ().Catch (onRejected));
84
+
85
+ bool isPromise = resultPromise.IsPromise ();
86
+ deferred.Reject (String::New (info.Env (), " Rejected" ));
87
+
88
+ Object result = Object::New (info.Env ());
89
+ result[" isPromise" ] = Boolean::New (info.Env (), isPromise);
90
+ result[" promise" ] = resultPromise;
91
+
92
+ return result;
93
+ }
94
+
26
95
Object InitPromise (Env env) {
27
96
Object exports = Object::New (env);
28
97
@@ -31,6 +100,12 @@ Object InitPromise(Env env) {
31
100
exports[" rejectPromise" ] = Function::New (env, RejectPromise);
32
101
exports[" promiseReturnsCorrectEnv" ] =
33
102
Function::New (env, PromiseReturnsCorrectEnv);
103
+ exports[" thenMethodOnFulfilled" ] = Function::New (env, ThenMethodOnFulfilled);
104
+ exports[" thenMethodOnFulfilledOnRejectedResolve" ] =
105
+ Function::New (env, ThenMethodOnFulfilledOnRejectedResolve);
106
+ exports[" thenMethodOnFulfilledOnRejectedReject" ] =
107
+ Function::New (env, ThenMethodOnFulfilledOnRejectedReject);
108
+ exports[" catchMethod" ] = Function::New (env, CatchMethod);
34
109
35
110
return exports;
36
111
}
0 commit comments