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