11#include " napi.h"
2+ #include " common/test_helper.h"
23
34using namespace Napi ;
45
@@ -23,6 +24,66 @@ 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+ bool isPromise = resultPromise.IsPromise ();
33+ deferred.Resolve (Number::New (info.Env (), 42 ));
34+
35+ Object result = Object::New (info.Env ());
36+ result[" isPromise" ] = Boolean::New (info.Env (), isPromise);
37+ result[" promise" ] = resultPromise;
38+ return result;
39+ }
40+
41+ Value ThenMethodOnFulfilledOnRejectedResolve (const CallbackInfo& info) {
42+ auto deferred = Promise::Deferred::New (info.Env ());
43+ Function onFulfilled = info[0 ].As <Function>();
44+ Function onRejected = info[1 ].As <Function>();
45+
46+ Promise resultPromise =
47+ MaybeUnwrap (deferred.Promise ().Then (onFulfilled, onRejected));
48+ bool isPromise = resultPromise.IsPromise ();
49+ deferred.Resolve (Number::New (info.Env (), 42 ));
50+
51+ Object result = Object::New (info.Env ());
52+ result[" isPromise" ] = Boolean::New (info.Env (), isPromise);
53+ result[" promise" ] = resultPromise;
54+ return result;
55+ }
56+
57+ Value ThenMethodOnFulfilledOnRejectedReject (const CallbackInfo& info) {
58+ auto deferred = Promise::Deferred::New (info.Env ());
59+ Function onFulfilled = info[0 ].As <Function>();
60+ Function onRejected = info[1 ].As <Function>();
61+
62+ Promise resultPromise =
63+ MaybeUnwrap (deferred.Promise ().Then (onFulfilled, onRejected));
64+ bool isPromise = resultPromise.IsPromise ();
65+ deferred.Reject (String::New (info.Env (), " Rejected" ));
66+
67+ Object result = Object::New (info.Env ());
68+ result[" isPromise" ] = Boolean::New (info.Env (), isPromise);
69+ result[" promise" ] = resultPromise;
70+ return result;
71+ }
72+
73+ Value CatchMethod (const CallbackInfo& info) {
74+ auto deferred = Promise::Deferred::New (info.Env ());
75+ Function onRejected = info[0 ].As <Function>();
76+
77+ Promise resultPromise = MaybeUnwrap (deferred.Promise ().Catch (onRejected));
78+ bool isPromise = resultPromise.IsPromise ();
79+ deferred.Reject (String::New (info.Env (), " Rejected" ));
80+
81+ Object result = Object::New (info.Env ());
82+ result[" isPromise" ] = Boolean::New (info.Env (), isPromise);
83+ result[" promise" ] = resultPromise;
84+ return result;
85+ }
86+
2687Object InitPromise (Env env) {
2788 Object exports = Object::New (env);
2889
@@ -31,6 +92,12 @@ Object InitPromise(Env env) {
3192 exports[" rejectPromise" ] = Function::New (env, RejectPromise);
3293 exports[" promiseReturnsCorrectEnv" ] =
3394 Function::New (env, PromiseReturnsCorrectEnv);
95+ exports[" thenMethodOnFulfilled" ] = Function::New (env, ThenMethodOnFulfilled);
96+ exports[" thenMethodOnFulfilledOnRejectedResolve" ] =
97+ Function::New (env, ThenMethodOnFulfilledOnRejectedResolve);
98+ exports[" thenMethodOnFulfilledOnRejectedReject" ] =
99+ Function::New (env, ThenMethodOnFulfilledOnRejectedReject);
100+ exports[" catchMethod" ] = Function::New (env, CatchMethod);
34101
35102 return exports;
36103}
0 commit comments