11#include " napi.h"
2+ #include " test_helper.h"
23
34using namespace Napi ;
45
@@ -23,6 +24,74 @@ Value PromiseReturnsCorrectEnv(const CallbackInfo& info) {
2324 return Boolean::New (info.Env (), deferred.Env () == info.Env ());
2425}
2526
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+
2695Object InitPromise (Env env) {
2796 Object exports = Object::New (env);
2897
@@ -31,6 +100,12 @@ Object InitPromise(Env env) {
31100 exports[" rejectPromise" ] = Function::New (env, RejectPromise);
32101 exports[" promiseReturnsCorrectEnv" ] =
33102 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);
34109
35110 return exports;
36111}
0 commit comments