1 /*
2 * Copyright (c) 2024 SwanLink (Jiangsu) Technology Development Co., LTD.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include "napi/native_api.h"
17 #include "napi_promise_test.h"
18
19 //OH_JSVM_IsPromise:value null,return not ok
TestIsPromiseCase01(JSVM_Env env,JSVM_CallbackInfo info)20 [[maybe_unused]] JSVM_Value TestIsPromiseCase01(JSVM_Env env, JSVM_CallbackInfo info)
21 {
22 bool isPromise = false;
23 JSVM_Status status = OH_JSVM_IsPromise(env, nullptr, &isPromise);
24 if (status == JSVM_OK) {
25 OH_JSVM_ThrowError(env, nullptr, "TestIsPromiseCase01:OH_JSVM_IsPromise Execution exception.");
26 return nullptr;
27 }
28
29 bool setValue = true;
30 JSVM_Value retValue = nullptr;
31 OH_JSVM_GetBoolean(env, setValue, &retValue);
32 return retValue;
33 }
34 //input promise,return ok,result true
TestIsPromiseCase02(JSVM_Env env,JSVM_CallbackInfo info)35 [[maybe_unused]] JSVM_Value TestIsPromiseCase02(JSVM_Env env, JSVM_CallbackInfo info)
36 {
37 JSVM_Deferred deferred = nullptr;
38 JSVM_Value promise;
39 OH_JSVM_CreatePromise(env, &deferred, &promise);
40 bool isPromise = false;
41 JSVM_Status status = OH_JSVM_IsPromise(env, promise, &isPromise);
42 if (status != JSVM_OK) {
43 OH_JSVM_ThrowError(env, nullptr, "TestIsPromiseCase02:OH_JSVM_IsPromise Failed.");
44 return nullptr;
45 }
46 if (!isPromise) {
47 OH_JSVM_ThrowError(env, nullptr, "TestIsPromiseCase02:OH_JSVM_IsPromise false Failed.");
48 return nullptr;
49 }
50
51 bool setValue = true;
52 JSVM_Value retValue = nullptr;
53 OH_JSVM_GetBoolean(env, setValue, &retValue);
54 return retValue;
55 }
56 //input not promise,return ok,result false
TestIsPromiseCase03(JSVM_Env env,JSVM_CallbackInfo info)57 [[maybe_unused]] JSVM_Value TestIsPromiseCase03(JSVM_Env env, JSVM_CallbackInfo info)
58 {
59 size_t argc = 1;
60 JSVM_Value args[1] = {nullptr};
61 OH_JSVM_GetCbInfo(env, info, &argc, args, nullptr, nullptr);
62
63 bool isPromise = false;
64 JSVM_Status status = OH_JSVM_IsPromise(env, args[0], &isPromise);
65 if (status != JSVM_OK) {
66 OH_JSVM_ThrowError(env, nullptr, "TestIsPromiseCase03:OH_JSVM_IsPromise Failed.");
67 return nullptr;
68 }
69 if (isPromise) {
70 OH_JSVM_ThrowError(env, nullptr, "TestIsPromiseCase03:OH_JSVM_IsPromise true Failed.");
71 return nullptr;
72 }
73
74 bool setValue = true;
75 JSVM_Value retValue = nullptr;
76 OH_JSVM_GetBoolean(env, setValue, &retValue);
77 return retValue;
78 }
79 //JS Create promise obj,return ok,result is true
TestIsPromiseCase04(JSVM_Env env,JSVM_CallbackInfo info)80 [[maybe_unused]] JSVM_Value TestIsPromiseCase04(JSVM_Env env, JSVM_CallbackInfo info)
81 {
82 JSVM_Deferred defer;
83 JSVM_Value promise;
84 JSVM_Status status = OH_JSVM_CreatePromise(env, &defer, &promise);
85 if (status != JSVM_OK) {
86 OH_JSVM_ThrowError(env, nullptr, "TestIsPromiseCase04:OH_JSVM_CreatePromise Failed.");
87 return nullptr;
88 }
89
90 bool isPromise = false;
91 status = OH_JSVM_IsPromise(env, promise, &isPromise);
92 if (status != JSVM_OK) {
93 OH_JSVM_ThrowError(env, nullptr, "TestIsPromiseCase04:OH_JSVM_IsPromise Failed.");
94 return nullptr;
95 }
96 if (!isPromise) {
97 OH_JSVM_ThrowError(env, nullptr, "TestIsPromiseCase04:OH_JSVM_IsPromise false Failed.");
98 return nullptr;
99 }
100
101 bool setValue = true;
102 JSVM_Value retValue = nullptr;
103 OH_JSVM_GetBoolean(env, setValue, &retValue);
104 return retValue;
105 }
106 //OH_JSVM_CreatePromise:call this func,return ok, deferred and promise not null
TestCreatePromiseCase01(JSVM_Env env,JSVM_CallbackInfo info)107 [[maybe_unused]] JSVM_Value TestCreatePromiseCase01(JSVM_Env env, JSVM_CallbackInfo info)
108 {
109 JSVM_Deferred defer;
110 JSVM_Value promise;
111 JSVM_Status status = OH_JSVM_CreatePromise(env, &defer, &promise);
112 if (status != JSVM_OK) {
113 OH_JSVM_ThrowError(env, nullptr, "TestCreatePromiseCase01:OH_JSVM_CreatePromise 1 Failed.");
114 return nullptr;
115 }
116 if (defer == nullptr || promise == nullptr) {
117 OH_JSVM_ThrowError(env, nullptr, "TestCreatePromiseCase01:OH_JSVM_CreatePromise 2 Failed.");
118 return nullptr;
119 }
120
121 bool setValue = true;
122 JSVM_Value retValue = nullptr;
123 OH_JSVM_GetBoolean(env, setValue, &retValue);
124 return retValue;
125 }
126 //OH_JSVM_ResolveDeferred
127 //OH_JSVM_CreatePromise create deferred and promise,call this func,resolution true,return ok
TestResolveDeferredCase01(JSVM_Env env,JSVM_CallbackInfo info)128 [[maybe_unused]] JSVM_Value TestResolveDeferredCase01(JSVM_Env env, JSVM_CallbackInfo info)
129 {
130 JSVM_Deferred deferred;
131 JSVM_Value promise;
132 JSVM_Status status = OH_JSVM_CreatePromise(env, &deferred, &promise);
133 if (status != JSVM_OK || deferred == nullptr) {
134 OH_JSVM_ThrowError(env, nullptr, "TestResolveDeferredCase01:OH_JSVM_CreatePromise Failed.");
135 return nullptr;
136 }
137
138 JSVM_Value value = nullptr;
139 bool setVal = true;
140 OH_JSVM_GetBoolean(env, setVal, &value);
141 status = OH_JSVM_ResolveDeferred(env, deferred, value);
142 if (status != JSVM_OK) {
143 OH_JSVM_ThrowError(env, nullptr, "TestResolveDeferredCase01:OH_JSVM_ResolveDeferred Failed.");
144 return nullptr;
145 }
146
147 bool setValue = true;
148 JSVM_Value retValue = nullptr;
149 OH_JSVM_GetBoolean(env, setValue, &retValue);
150 return retValue;
151 }
152 //OH_JSVM_CreatePromise create deferred and promise,call this func,resolution false, return ok
TestResolveDeferredCase02(JSVM_Env env,JSVM_CallbackInfo info)153 [[maybe_unused]] JSVM_Value TestResolveDeferredCase02(JSVM_Env env, JSVM_CallbackInfo info)
154 {
155 JSVM_Deferred deferred;
156 JSVM_Value promise;
157 JSVM_Status status = OH_JSVM_CreatePromise(env, &deferred, &promise);
158 if (status != JSVM_OK || deferred == nullptr) {
159 OH_JSVM_ThrowError(env, nullptr, "TestResolveDeferredCase02:OH_JSVM_CreatePromise Failed.");
160 return nullptr;
161 }
162
163 JSVM_Value value = nullptr;
164 bool setVal = false;
165 OH_JSVM_GetBoolean(env, setVal, &value);
166 status = OH_JSVM_ResolveDeferred(env, deferred, value);
167 if (status != JSVM_OK) {
168 OH_JSVM_ThrowError(env, nullptr, "TestResolveDeferredCase02:OH_JSVM_ResolveDeferred Failed.");
169 return nullptr;
170 }
171
172 bool setValue = true;
173 JSVM_Value retValue = nullptr;
174 OH_JSVM_GetBoolean(env, setValue, &retValue);
175 return retValue;
176 }
177 //OH_JSVM_RejectDeferred:OH_JSVM_CreatePromise create deferred and promise,call this func,rejection true, return ok
TestRejectDeferredCase01(JSVM_Env env,JSVM_CallbackInfo info)178 [[maybe_unused]] JSVM_Value TestRejectDeferredCase01(JSVM_Env env, JSVM_CallbackInfo info)
179 {
180 bool setVal = true;
181 JSVM_Value retVal = nullptr;
182 OH_JSVM_GetBoolean(env, setVal, &retVal);
183 JSVM_Value args[2] = {retVal, retVal};
184
185 JSVM_Deferred deferred;
186 JSVM_Value promise;
187 JSVM_Status status = OH_JSVM_CreatePromise(env, &deferred, &promise);
188 if (status != JSVM_OK) {
189 OH_JSVM_ThrowError(env, nullptr, "TestRejectDeferredCase01:OH_JSVM_CreatePromise Failed.");
190 return nullptr;
191 }
192
193 status = OH_JSVM_RejectDeferred(env, deferred, args[1]);
194 if (status != JSVM_OK) {
195 OH_JSVM_ThrowError(env, nullptr, "TestRejectDeferredCase01:ResolveDeferred 2 Failed.");
196 return nullptr;
197 }
198
199 bool setValue = true;
200 JSVM_Value retValue = nullptr;
201 OH_JSVM_GetBoolean(env, setValue, &retValue);
202 return retValue;
203 }
204 //OH_JSVM_CreatePromise create deferred and promise, call this func, rejection false, return ok
TestRejectDeferredCase02(JSVM_Env env,JSVM_CallbackInfo info)205 [[maybe_unused]] JSVM_Value TestRejectDeferredCase02(JSVM_Env env, JSVM_CallbackInfo info)
206 {
207 bool setVal = false;
208 JSVM_Value retVal = nullptr;
209 OH_JSVM_GetBoolean(env, setVal, &retVal);
210 JSVM_Value args[2] = {retVal, retVal};
211
212 JSVM_Deferred deferred;
213 JSVM_Value promise;
214 JSVM_Status status = OH_JSVM_CreatePromise(env, &deferred, &promise);
215 if (status != JSVM_OK) {
216 OH_JSVM_ThrowError(env, nullptr, "TestRejectDeferredCase02:OH_JSVM_CreatePromise Failed.");
217 return nullptr;
218 }
219
220 status = OH_JSVM_RejectDeferred(env, deferred, args[0]);
221 if (status != JSVM_OK) {
222 OH_JSVM_ThrowError(env, nullptr, "TestRejectDeferredCase02:ResolveDeferred 2 Failed.");
223 return nullptr;
224 }
225
226 bool setValue = true;
227 JSVM_Value retValue = nullptr;
228 OH_JSVM_GetBoolean(env, setValue, &retValue);
229 return retValue;
230 }
231 //API:create -- is -- resolve result normal
TestCreateResolveDeferredCase01(JSVM_Env env,JSVM_CallbackInfo info)232 [[maybe_unused]] JSVM_Value TestCreateResolveDeferredCase01(JSVM_Env env, JSVM_CallbackInfo info)
233 {
234 bool setVal = false;
235 JSVM_Value retVal = nullptr;
236 OH_JSVM_GetBoolean(env, setVal, &retVal);
237 JSVM_Value args[2] = {retVal, retVal};
238
239 JSVM_Deferred deferred;
240 JSVM_Value promise;
241 JSVM_Status status = OH_JSVM_CreatePromise(env, &deferred, &promise);
242 if (status != JSVM_OK) {
243 OH_JSVM_ThrowError(env, nullptr, "TestCreateResolveDeferredCase01:OH_JSVM_CreatePromise Failed.");
244 return nullptr;
245 }
246
247 bool isPromise = false;
248 status = OH_JSVM_IsPromise(env, promise, &isPromise);
249 if (status != JSVM_OK) {
250 OH_JSVM_ThrowError(env, nullptr, "TestCreateResolveDeferredCase01:OH_JSVM_IsPromise 1 Failed.");
251 return nullptr;
252 }
253 if (!isPromise) {
254 OH_JSVM_ThrowError(env, nullptr, "TestCreateResolveDeferredCase01:OH_JSVM_IsPromise 2 Failed.");
255 return nullptr;
256 }
257
258 status = OH_JSVM_ResolveDeferred(env, deferred, args[0]);
259 if (status != JSVM_OK) {
260 OH_JSVM_ThrowError(env, nullptr, "TestCreateResolveDeferredCase01:OH_JSVM_ResolveDeferred Failed.");
261 return nullptr;
262 }
263
264 bool setValue = true;
265 JSVM_Value retValue = nullptr;
266 OH_JSVM_GetBoolean(env, setValue, &retValue);
267 return retValue;
268 }