1 /*
2 * Copyright (c) 2023 Huawei Device 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 <thread>
17 #include <uv.h>
18
19 #include "ark_native_engine.h"
20 #include "helper/error_helper.h"
21 #include "message_queue.h"
22 #include "test.h"
23 #include "napi/native_api.h"
24 #include "napi/native_node_api.h"
25 #include "tools/log.h"
26 #include "worker.h"
27
28 #define SELLP_MS 200
29
30 #define ASSERT_CHECK_CALL(call) \
31 { \
32 ASSERT_EQ(call, napi_ok); \
33 }
34
35 #define ASSERT_CHECK_VALUE_TYPE(env, value, type) \
36 { \
37 napi_valuetype valueType = napi_undefined; \
38 ASSERT_TRUE(value != nullptr); \
39 ASSERT_CHECK_CALL(napi_typeof(env, value, &valueType)); \
40 ASSERT_EQ(valueType, type); \
41 }
42
43 using namespace Commonlibrary::Concurrent::WorkerModule;
44
45 namespace Commonlibrary::Concurrent::WorkerModule {
46
47 static constexpr uint32_t GLOBAL_CALL_ID_MAX = 4294967295;
48 static constexpr size_t GLOBAL_CALL_MAX_COUNT = 65535;
49
50 class WorkersTest : public testing::Test {
51 public:
SetUpTestSuite()52 static void SetUpTestSuite()
53 {
54 InitializeEngine();
55 }
56
TearDownTestSuite()57 static void TearDownTestSuite()
58 {
59 DestroyEngine();
60 }
61
InitializeEngine()62 static void InitializeEngine()
63 {
64 panda::RuntimeOption option;
65 option.SetGcType(panda::RuntimeOption::GC_TYPE::GEN_GC);
66 const int64_t poolSize = 0x1000000; // 16M
67 option.SetGcPoolSize(poolSize);
68 option.SetLogLevel(panda::RuntimeOption::LOG_LEVEL::ERROR);
69 option.SetDebuggerLibraryPath("");
70 vm_ = panda::JSNApi::CreateJSVM(option);
71 ASSERT_TRUE(vm_ != nullptr);
72 engine_ = new ArkNativeEngine(vm_, nullptr);
73 engine_->SetInitWorkerFunc([](NativeEngine*) {});
74 }
75
DestroyEngine()76 static void DestroyEngine()
77 {
78 if (engine_) {
79 delete engine_;
80 engine_ = nullptr;
81 }
82 panda::JSNApi::DestroyJSVM(vm_);
83 }
84
GetEnv()85 static napi_env GetEnv()
86 {
87 return reinterpret_cast<napi_env>(engine_);
88 }
89
WorkerOnMessage(const uv_async_t *req)90 static void WorkerOnMessage(const uv_async_t *req)
91 {
92 Worker *worker = static_cast<Worker*>(req->data);
93 ASSERT_NE(worker, nullptr);
94 napi_env workerEnv = worker->GetWorkerEnv();
95 void *data = nullptr;
96 while (worker->workerMessageQueue_.DeQueue(&data)) {
97 if (data == nullptr) {
98 return;
99 }
100 napi_value result = nullptr;
101 napi_status status = napi_deserialize(workerEnv, data, &result);
102 ASSERT_TRUE(status == napi_ok);
103 uint32_t number = 0;
104 status = napi_get_value_uint32(workerEnv, result, &number);
105 ASSERT_TRUE(status == napi_ok);
106 ASSERT_TRUE(number != 0);
107 napi_delete_serialization_data(workerEnv, data);
108 number = 1000; // 1000 : test number
109 napi_value numVal = nullptr;
110 status = napi_create_uint32(workerEnv, number, &numVal);
111 ASSERT_TRUE(status == napi_ok);
112 napi_value undefined = nullptr;
113 napi_get_undefined(workerEnv, &undefined);
114 void *workerData = nullptr;
115 status = napi_serialize_inner(workerEnv, numVal, undefined, undefined, false, true, &workerData);
116 ASSERT_TRUE(status == napi_ok);
117 ASSERT_NE(workerData, nullptr);
118 worker->PostMessageToHostInner(workerData);
119 }
120 }
121
HostOnMessage(const uv_async_t *req)122 static void HostOnMessage(const uv_async_t *req)
123 {
124 Worker *worker = static_cast<Worker*>(req->data);
125 ASSERT_NE(worker, nullptr);
126 void *data = nullptr;
127 while (worker->hostMessageQueue_.DeQueue(&data)) {
128 if (data == nullptr) {
129 return;
130 }
131 napi_env hostEnv = worker->GetHostEnv();
132 napi_value result = nullptr;
133 napi_status status = napi_deserialize(hostEnv, data, &result);
134 ASSERT_TRUE(status == napi_ok);
135 uint32_t number = 0;
136 status = napi_get_value_uint32(hostEnv, result, &number);
137 ASSERT_TRUE(status == napi_ok);
138 ASSERT_EQ(number, 1000); // 1000 : test number
139 napi_delete_serialization_data(hostEnv, data);
140 }
141 }
142
WorkerThreadFunction(void *data)143 static void WorkerThreadFunction(void *data)
144 {
145 auto worker = reinterpret_cast<Worker*>(data);
146 napi_env hostEnv = worker->GetHostEnv();
147 ASSERT_NE(hostEnv, nullptr);
148 napi_env workerEnv = nullptr;
149 napi_status status = napi_create_runtime(hostEnv, &workerEnv);
150 ASSERT_TRUE(status == napi_ok);
151 worker->SetWorkerEnv(workerEnv);
152 uv_loop_t *workerLoop = nullptr;
153 status = napi_get_uv_event_loop(workerEnv, &workerLoop);
154 ASSERT_TRUE(status == napi_ok);
155 worker->workerOnMessageSignal_ = new uv_async_t;
156 uv_async_init(workerLoop, worker->workerOnMessageSignal_, reinterpret_cast<uv_async_cb>(WorkerOnMessage));
157 worker->workerOnMessageSignal_->data = worker;
158 worker->Loop();
159 }
160
UpdateMainThreadWorkerFlag(Worker *worker, bool isMainThreadWorker)161 static void UpdateMainThreadWorkerFlag(Worker *worker, bool isMainThreadWorker)
162 {
163 worker->isMainThreadWorker_ = isMainThreadWorker;
164 }
165
InitHostHandle(Worker *worker, uv_loop_t *loop)166 static void InitHostHandle(Worker *worker, uv_loop_t *loop)
167 {
168 worker->hostOnMessageSignal_ = new uv_async_t;
169 uv_async_init(loop, worker->hostOnMessageSignal_, reinterpret_cast<uv_async_cb>(HostOnMessage));
170 worker->hostOnMessageSignal_->data = worker;
171 }
172
PostMessage(Worker *worker, void *message)173 static void PostMessage(Worker *worker, void *message)
174 {
175 worker->PostMessageInner(message);
176 }
177
UpdateWorkerState(Worker *worker, Worker::RunnerState state)178 static void UpdateWorkerState(Worker *worker, Worker::RunnerState state)
179 {
180 bool done = false;
181 do {
182 Worker::RunnerState oldState = worker->runnerState_.load(std::memory_order_acquire);
183 done = worker->runnerState_.compare_exchange_strong(oldState, state);
184 } while (!done);
185 }
186
SetCloseWorkerProp(Worker *worker, napi_env env)187 static void SetCloseWorkerProp(Worker *worker, napi_env env)
188 {
189 worker->SetWorkerEnv(env);
190 uv_loop_t* loop = worker->GetWorkerLoop();
191 ASSERT_TRUE(loop != nullptr);
192 worker->workerOnMessageSignal_ = new uv_async_t;
193 uv_async_init(loop, worker->workerOnMessageSignal_, reinterpret_cast<uv_async_cb>(
194 UpdateMainThreadWorkerFlag));
195 worker->workerOnMessageSignal_->data = worker;
196 uv_async_init(loop, &worker->debuggerOnPostTaskSignal_, reinterpret_cast<uv_async_cb>(
197 UpdateWorkerState));
198 }
199
SetWorkerRef(Worker *worker, napi_env env)200 static void SetWorkerRef(Worker *worker, napi_env env)
201 {
202 std::string funcName = "onmessage";
203 auto func = [](napi_env env, napi_callback_info info) -> napi_value {
204 return nullptr;
205 };
206 napi_value funcValue = nullptr;
207 napi_create_function(env, funcName.c_str(), NAPI_AUTO_LENGTH, func, nullptr, &funcValue);
208 napi_value obj = NapiHelper::CreateObject(env);
209 napi_set_named_property(env, obj, funcName.c_str(), funcValue);
210 napi_ref ref = NapiHelper::CreateReference(env, obj, 1);
211 worker->workerRef_ = ref;
212 }
213
SetWorkerHostEnv(Worker *worker, napi_env env, bool setNull)214 static void SetWorkerHostEnv(Worker *worker, napi_env env, bool setNull)
215 {
216 if (setNull) {
217 worker->hostEnv_ = nullptr;
218 return;
219 }
220 worker->hostEnv_ = env;
221 }
222
UpdateHostState(Worker *worker, Worker::HostState state)223 static void UpdateHostState(Worker *worker, Worker::HostState state)
224 {
225 bool done = false;
226 do {
227 Worker::HostState oldState = worker->hostState_.load(std::memory_order_acquire);
228 done = worker->hostState_.compare_exchange_strong(oldState, state);
229 } while (!done);
230 }
231
SetMainThread(Worker *worker, bool isMainThreadWorker)232 static void SetMainThread(Worker *worker, bool isMainThreadWorker)
233 {
234 worker->isMainThreadWorker_ = isMainThreadWorker;
235 }
236
SetLimitedWorker(Worker *worker, bool isLimitedWorker)237 static void SetLimitedWorker(Worker *worker, bool isLimitedWorker)
238 {
239 worker->isLimitedWorker_ = isLimitedWorker;
240 }
241
RemoveGlobalCallObject(Worker *worker, napi_env env)242 static void RemoveGlobalCallObject(Worker *worker, napi_env env)
243 {
244 worker->globalCallId_ = GLOBAL_CALL_ID_MAX;
245 worker->IncreaseGlobalCallId();
246 ASSERT_TRUE(worker->globalCallId_ == 1);
247 napi_value obj = NapiHelper::CreateObject(env);
248 napi_ref ref = NapiHelper::CreateReference(env, obj, 1);
249 std::string instanceName = "host";
250 std::string messageStr = "message";
251 worker->AddGlobalCallObject(instanceName, ref);
252 ASSERT_FALSE(worker->RemoveGlobalCallObject(messageStr));
253 ASSERT_TRUE(worker->RemoveGlobalCallObject(instanceName));
254 napi_env workerEnv = nullptr;
255 napi_create_runtime(env, &workerEnv);
256 worker->workerEnv_ = workerEnv;
257 worker->isRelativePath_ = true;
258 worker->PrepareForWorkerInstance();
259 UpdateHostState(worker, Worker::HostState::INACTIVE);
260 worker->PrepareForWorkerInstance();
261 worker->EraseWorker();
262 ClearWorkerHandle(worker);
263 Worker::ExecuteInThread(reinterpret_cast<void*>(worker));
264 }
265
TestHostOnMessageInner(Worker *worker, napi_env env)266 static void TestHostOnMessageInner(Worker *worker, napi_env env)
267 {
268 uv_async_t* req = new uv_async_t;
269 req->data = nullptr;
270 Worker::HostOnMessage(req);
271 delete req;
272 worker->hostEnv_ = nullptr;
273 worker->HostOnMessageInner();
274 worker->hostEnv_ = env;
275 UpdateHostState(worker, Worker::HostState::INACTIVE);
276 worker->HostOnMessageInner();
277 worker->UpdateHostState(Worker::HostState::ACTIVE);
278 UpdateHostState(worker, Worker::HostState::ACTIVE);
279 worker->hostMessageQueue_.Clear(env);
280 worker->HostOnMessageInner();
281 MessageDataType data1 = nullptr;
282 napi_value undefined = NapiHelper::GetUndefinedValue(env);
283 napi_serialize_inner(env, undefined, undefined,
284 undefined, false, true, &data1);
285 worker->hostMessageQueue_.EnQueue(data1);
286 SetWorkerRef(worker, env);
287 worker->HostOnMessageInner();
288 MessageDataType data2 = nullptr;
289 napi_serialize_inner(env, undefined, undefined,
290 undefined, false, true, &data2);
291 worker->hostMessageQueue_.EnQueue(data2);
292 std::string funcName = "onmessage";
293 napi_value funcValue = nullptr;
294 napi_create_string_utf8(env, funcName.c_str(), funcName.length(), &funcValue);
295 napi_value obj = NapiHelper::CreateObject(env);
296 napi_set_named_property(env, obj, funcName.c_str(), funcValue);
297 napi_ref ref = NapiHelper::CreateReference(env, obj, 1);
298 worker->workerRef_ = ref;
299 worker->HostOnMessageInner();
300 }
301
HostOnGlobalCall(Worker *worker, napi_env env)302 static void HostOnGlobalCall(Worker *worker, napi_env env)
303 {
304 uv_async_t* req = new uv_async_t;
305 req->data = nullptr;
306 Worker::HostOnGlobalCall(req);
307 delete req;
308 req->data = worker;
309 worker->hostEnv_ = nullptr;
310 worker->HostOnGlobalCallInner();
311 worker->hostEnv_ = env;
312 UpdateHostState(worker, Worker::HostState::INACTIVE);
313 worker->HostOnGlobalCallInner();
314 UpdateHostState(worker, Worker::HostState::ACTIVE);
315 worker->HostOnGlobalCallInner();
316 napi_value undefined = NapiHelper::GetUndefinedValue(env);
317 for (size_t index = 0; index <= GLOBAL_CALL_MAX_COUNT; ++index) {
318 MessageDataType data = nullptr;
319 napi_serialize_inner(env, undefined, undefined,
320 undefined, false, true, &data);
321 worker->hostGlobalCallQueue_.Push(index, data);
322 }
323 worker->HostOnGlobalCallInner();
324 worker->hostGlobalCallQueue_.Clear(env);
325 size_t argc = 2;
326 napi_value args[2] = { nullptr };
327 std::string instanceName = "workerInstance";
328 std::string methodName = "onmessage";
329 napi_create_string_utf8(env, instanceName.c_str(), instanceName.length(), &args[0]);
330 napi_create_string_utf8(env, methodName.c_str(), methodName.length(), &args[1]);
331 MessageDataType data = nullptr;
332 napi_value argsArray;
333 napi_create_array_with_length(env, argc, &argsArray);
334 size_t index = 0;
335 for (size_t i = 0; i < argc; i++) {
336 napi_set_element(env, argsArray, index, args[i]);
337 index++;
338 }
339 napi_serialize_inner(env, argsArray, undefined, undefined, false, true, &data);
340 worker->hostGlobalCallQueue_.Push(1, data);
341 worker->globalCallId_ = 1;
342 worker->HostOnGlobalCallInner();
343 }
344
HostOnGlobalCallInner001(Worker *worker, napi_env env)345 static void HostOnGlobalCallInner001(Worker *worker, napi_env env)
346 {
347 napi_value undefined = NapiHelper::GetUndefinedValue(env);
348 size_t argc = 2;
349 napi_value args[2] = { nullptr };
350 std::string instanceName = "workerInstance";
351 std::string methodName = "onmessage";
352 napi_create_string_utf8(env, instanceName.c_str(), instanceName.length(), &args[0]);
353 napi_create_string_utf8(env, methodName.c_str(), methodName.length(), &args[1]);
354 MessageDataType data = nullptr;
355 napi_value argsArray;
356 napi_create_array_with_length(env, argc, &argsArray);
357 size_t index = 0;
358 for (size_t i = 0; i < argc; i++) {
359 napi_set_element(env, argsArray, index, args[i]);
360 index++;
361 }
362 napi_serialize_inner(env, argsArray, undefined, undefined, false, true, &data);
363 worker->hostGlobalCallQueue_.Push(1, data);
364 worker->globalCallId_ = 1;
365 napi_value obj = NapiHelper::CreateObject(env);
366 napi_ref ref = NapiHelper::CreateReference(env, obj, 1);
367 worker->AddGlobalCallObject(instanceName, ref);
368 worker->HostOnGlobalCallInner();
369 }
370
HostOnGlobalCallInner002(Worker *worker, napi_env env)371 static void HostOnGlobalCallInner002(Worker *worker, napi_env env)
372 {
373 napi_value undefined = NapiHelper::GetUndefinedValue(env);
374 size_t argc = 2;
375 napi_value args[2] = { nullptr };
376 std::string instanceName = "workerInstance";
377 std::string methodName = "onmessage";
378 napi_create_string_utf8(env, instanceName.c_str(), instanceName.length(), &args[0]);
379 napi_create_string_utf8(env, methodName.c_str(), methodName.length(), &args[1]);
380 MessageDataType data = nullptr;
381 napi_value argsArray;
382 napi_create_array_with_length(env, argc, &argsArray);
383 size_t index = 0;
384 for (size_t i = 0; i < argc; i++) {
385 napi_set_element(env, argsArray, index, args[i]);
386 index++;
387 }
388 napi_serialize_inner(env, argsArray, undefined, undefined, false, true, &data);
389 worker->hostGlobalCallQueue_.Push(1, data);
390 worker->globalCallId_ = 1;
391 napi_value obj = NapiHelper::CreateObject(env);
392 napi_value methodValue;
393 napi_create_string_utf8(env, methodName.c_str(), methodName.length(), &methodValue);
394 napi_set_named_property(env, obj, methodName.c_str(), methodValue);
395 napi_ref ref = NapiHelper::CreateReference(env, obj, 1);
396 worker->AddGlobalCallObject(instanceName, ref);
397 worker->HostOnGlobalCallInner();
398 }
399
HostOnGlobalCallInner003(Worker *worker, napi_env env)400 static void HostOnGlobalCallInner003(Worker *worker, napi_env env)
401 {
402 napi_value undefined = NapiHelper::GetUndefinedValue(env);
403 size_t argc = 2;
404 napi_value args[2] = { nullptr };
405 std::string instanceName = "workerInstance";
406 std::string methodName = "onmessage";
407 napi_create_string_utf8(env, instanceName.c_str(), instanceName.length(), &args[0]);
408 napi_create_string_utf8(env, methodName.c_str(), methodName.length(), &args[1]);
409 MessageDataType data = nullptr;
410 napi_value argsArray;
411 napi_create_array_with_length(env, argc, &argsArray);
412 size_t index = 0;
413 for (size_t i = 0; i < argc; i++) {
414 napi_set_element(env, argsArray, index, args[i]);
415 index++;
416 }
417 napi_serialize_inner(env, argsArray, undefined, undefined, false, true, &data);
418 worker->hostGlobalCallQueue_.Push(1, data);
419 worker->globalCallId_ = 1;
420 napi_value obj = NapiHelper::CreateObject(env);
421 auto func = [](napi_env env, napi_callback_info info) -> napi_value {
422 return nullptr;
423 };
424 napi_value funcValue = nullptr;
425 napi_create_function(env, methodName.c_str(), NAPI_AUTO_LENGTH, func, nullptr, &funcValue);
426 napi_set_named_property(env, obj, methodName.c_str(), funcValue);
427 napi_ref ref = NapiHelper::CreateReference(env, obj, 1);
428 worker->AddGlobalCallObject(instanceName, ref);
429 worker->HostOnGlobalCallInner();
430 }
431
HostOnGlobalCallInner004(Worker *worker, napi_env env)432 static void HostOnGlobalCallInner004(Worker *worker, napi_env env)
433 {
434 napi_value undefined = NapiHelper::GetUndefinedValue(env);
435 size_t argc = 3;
436 napi_value args[3] = { nullptr };
437 std::string instanceName = "workerInstance";
438 std::string methodName = "onmessage";
439 std::string argValue = "test";
440 napi_create_string_utf8(env, instanceName.c_str(), instanceName.length(), &args[0]);
441 napi_create_string_utf8(env, methodName.c_str(), methodName.length(), &args[1]);
442 napi_create_string_utf8(env, argValue.c_str(), argValue.length(), &args[2]); // 2: the index of test argument
443 MessageDataType data = nullptr;
444 napi_value argsArray;
445 napi_create_array_with_length(env, argc, &argsArray);
446 size_t index = 0;
447 for (size_t i = 0; i < argc; i++) {
448 napi_set_element(env, argsArray, index, args[i]);
449 index++;
450 }
451 napi_serialize_inner(env, argsArray, undefined, undefined, false, true, &data);
452 worker->hostGlobalCallQueue_.Push(1, data);
453 worker->globalCallId_ = 1;
454 napi_value obj = NapiHelper::CreateObject(env);
455 auto func = [](napi_env env, napi_callback_info info) -> napi_value {
456 return nullptr;
457 };
458 napi_value funcValue = nullptr;
459 napi_create_function(env, methodName.c_str(), NAPI_AUTO_LENGTH, func, nullptr, &funcValue);
460 napi_set_named_property(env, obj, methodName.c_str(), funcValue);
461 napi_ref ref = NapiHelper::CreateReference(env, obj, 1);
462 worker->AddGlobalCallObject(instanceName, ref);
463 Worker::LimitedWorkerConstructor(env, nullptr);
464 worker->HostOnGlobalCallInner();
465 }
466
HostOnGlobalCallInner005(Worker *worker, napi_env env)467 static void HostOnGlobalCallInner005(Worker *worker, napi_env env)
468 {
469 napi_value undefined = NapiHelper::GetUndefinedValue(env);
470 size_t argc = 2;
471 napi_value args[3] = { nullptr };
472 std::string instanceName = "workerInstance";
473 std::string methodName = "onmessage";
474 napi_create_string_utf8(env, instanceName.c_str(), instanceName.length(), &args[0]);
475 napi_create_string_utf8(env, methodName.c_str(), methodName.length(), &args[1]);
476 MessageDataType data = nullptr;
477 napi_value argsArray;
478 napi_create_array_with_length(env, argc, &argsArray);
479 size_t index = 0;
480 for (size_t i = 0; i < argc; i++) {
481 napi_set_element(env, argsArray, index, args[i]);
482 index++;
483 }
484 napi_serialize_inner(env, argsArray, undefined, undefined, false, true, &data);
485 worker->hostGlobalCallQueue_.Push(0, data);
486 worker->globalCallId_ = 0;
487 napi_value obj = NapiHelper::CreateObject(env);
488 auto func = [](napi_env env, napi_callback_info info) -> napi_value {
489 return NapiHelper::GetUndefinedValue(env);
490 };
491 napi_value funcValue = nullptr;
492 napi_create_function(env, methodName.c_str(), NAPI_AUTO_LENGTH, func, nullptr, &funcValue);
493 napi_set_named_property(env, obj, methodName.c_str(), funcValue);
494 napi_ref ref = NapiHelper::CreateReference(env, obj, 1);
495 worker->AddGlobalCallObject(instanceName, ref);
496 worker->HostOnGlobalCallInner();
497 }
498
HostOnGlobalCallInner006(Worker *worker, napi_env env)499 static void HostOnGlobalCallInner006(Worker *worker, napi_env env)
500 {
501 napi_value undefined = NapiHelper::GetUndefinedValue(env);
502 size_t argc = 2;
503 napi_value args[3] = { nullptr };
504 std::string instanceName = "workerInstance";
505 std::string methodName = "onmessage";
506 napi_create_string_utf8(env, instanceName.c_str(), instanceName.length(), &args[0]);
507 napi_create_string_utf8(env, methodName.c_str(), methodName.length(), &args[1]);
508 MessageDataType data = nullptr;
509 napi_value argsArray;
510 napi_create_array_with_length(env, argc, &argsArray);
511 size_t index = 0;
512 for (size_t i = 0; i < argc; i++) {
513 napi_set_element(env, argsArray, index, args[i]);
514 index++;
515 }
516 napi_serialize_inner(env, argsArray, undefined, undefined, false, true, &data);
517 worker->hostGlobalCallQueue_.Push(1, data);
518 worker->globalCallId_ = 1;
519 napi_value obj = NapiHelper::CreateObject(env);
520 auto func = [](napi_env env, napi_callback_info info) -> napi_value {
521 return NapiHelper::GetUndefinedValue(env);
522 };
523 napi_value funcValue = nullptr;
524 napi_create_function(env, methodName.c_str(), NAPI_AUTO_LENGTH, func, nullptr, &funcValue);
525 napi_set_named_property(env, obj, methodName.c_str(), funcValue);
526 napi_ref ref = NapiHelper::CreateReference(env, obj, 1);
527 worker->AddGlobalCallObject(instanceName, ref);
528 worker->HostOnGlobalCallInner();
529 }
530
HandleGlobalCall(Worker *worker, napi_env env)531 static void HandleGlobalCall(Worker *worker, napi_env env)
532 {
533 worker->AddGlobalCallError(ErrorHelper::ERR_WORKER_SERIALIZATION);
534 worker->HandleGlobalCallError(env);
535 napi_value exception = nullptr;
536 napi_get_and_clear_last_exception(env, &exception);
537 ASSERT_TRUE(exception != nullptr);
538 napi_value errorData = nullptr;
539 napi_value undefined = NapiHelper::GetUndefinedValue(env);
540 napi_serialize_inner(env, undefined, undefined, undefined,
541 false, true, reinterpret_cast<void**>(&errorData));
542 worker->AddGlobalCallError(ErrorHelper::ERR_WORKER_SERIALIZATION, errorData);
543 worker->AddGlobalCallError(ErrorHelper::ERR_CALL_METHOD_ON_BINDING_OBJ);
544 worker->ClearGlobalCallError(env);
545 worker->hostEnv_ = nullptr;
546 worker->CallHostFunction(0, nullptr, "onmessageerror");
547 worker->hostEnv_ = env;
548 UpdateHostState(worker, Worker::HostState::INACTIVE);
549 worker->CallHostFunction(0, nullptr, "onmessageerror");
550 UpdateHostState(worker, Worker::HostState::ACTIVE);
551 std::string funcName = "onmessage";
552 SetWorkerRef(worker, env);
553 napi_value argv[1] = { nullptr };
554 napi_create_string_utf8(env, funcName.c_str(), funcName.length(), &argv[0]);
555 worker->CallHostFunction(1, argv, "onmessage");
556 }
557
HostOnError(Worker *worker, napi_env env)558 static void HostOnError(Worker *worker, napi_env env)
559 {
560 worker->hostEnv_ = nullptr;
561 worker->HostOnErrorInner();
562 worker->HostOnMessageErrorInner();
563 worker->hostEnv_ = env;
564 UpdateHostState(worker, Worker::HostState::INACTIVE);
565 worker->HostOnErrorInner();
566 worker->HostOnMessageErrorInner();
567 UpdateHostState(worker, Worker::HostState::ACTIVE);
568 std::string funcName = "onerror";
569 napi_value funcValue = nullptr;
570 napi_create_string_utf8(env, funcName.c_str(), funcName.length(), &funcValue);
571 napi_value obj = NapiHelper::CreateObject(env);
572 napi_set_named_property(env, obj, funcName.c_str(), funcValue);
573 napi_ref ref = NapiHelper::CreateReference(env, obj, 1);
574 worker->workerRef_ = ref;
575 MessageDataType data = nullptr;
576 napi_value undefined = NapiHelper::GetUndefinedValue(env);
577 napi_serialize_inner(env, undefined, undefined, undefined, false, true, &data);
578 worker->errorQueue_.EnQueue(data);
579 worker->HostOnErrorInner();
580 }
581
HostOnErrorInner(Worker *worker, napi_env env)582 static void HostOnErrorInner(Worker *worker, napi_env env)
583 {
584 std::string funcName = "onerror";
585 auto func = [](napi_env env, napi_callback_info info) -> napi_value {
586 return nullptr;
587 };
588 napi_value funcValue = nullptr;
589 napi_create_function(env, funcName.c_str(), NAPI_AUTO_LENGTH, func, nullptr, &funcValue);
590 napi_value obj = NapiHelper::CreateObject(env);
591 napi_set_named_property(env, obj, funcName.c_str(), funcValue);
592 napi_ref ref = NapiHelper::CreateReference(env, obj, 1);
593 worker->workerRef_ = ref;
594 MessageDataType data = nullptr;
595 napi_value undefined = NapiHelper::GetUndefinedValue(env);
596 napi_serialize_inner(env, undefined, undefined, undefined, false, true, &data);
597 worker->errorQueue_.EnQueue(data);
598 worker->HostOnErrorInner();
599 UpdateWorkerState(worker, Worker::RunnerState::TERMINATED);
600 worker->PostMessageInner(nullptr);
601 UpdateWorkerState(worker, Worker::RunnerState::RUNNING);
602 worker->workerOnMessageSignal_ = nullptr;
603 worker->PostMessageInner(nullptr);
604 }
605
HostOnMessageErrorInner(Worker *worker, napi_env env)606 static void HostOnMessageErrorInner(Worker *worker, napi_env env)
607 {
608 SetWorkerRef(worker, env);
609 worker->HostOnMessageErrorInner();
610 UpdateWorkerState(worker, Worker::RunnerState::TERMINATED);
611 worker->TerminateInner();
612 UpdateWorkerState(worker, Worker::RunnerState::TERMINATEING);
613 worker->TerminateInner();
614 worker->isTerminated_ = true;
615 worker->CloseInner();
616 }
617
PublishWorkerOverSignal(Worker *worker, napi_env env)618 static void PublishWorkerOverSignal(Worker *worker, napi_env env)
619 {
620 UpdateHostState(worker, Worker::HostState::INACTIVE);
621 worker->PublishWorkerOverSignal();
622 UpdateHostState(worker, Worker::HostState::ACTIVE);
623 uv_loop_t *loop = nullptr;
624 napi_status status = napi_get_uv_event_loop(env, &loop);
625 ASSERT_TRUE(status == napi_ok);
626 InitHostHandle(worker, loop);
627 worker->isMainThreadWorker_ = false;
628 worker->PublishWorkerOverSignal();
629 worker->isMainThreadWorker_ = true;
630 worker->isLimitedWorker_ = true;
631 worker->PublishWorkerOverSignal();
632 worker->isMainThreadWorker_ = true;
633 worker->isLimitedWorker_ = false;
634 worker->PublishWorkerOverSignal();
635 worker->PostWorkerErrorTask();
636 worker->PostWorkerMessageTask();
637 worker->PostWorkerGlobalCallTask();
638 worker->EraseWorker();
639 worker->PostWorkerOverTask();
640 worker->PostWorkerErrorTask();
641 worker->PostWorkerMessageTask();
642 worker->PostWorkerGlobalCallTask();
643 }
644
TestWorkerOnMessageInner(Worker *worker, napi_env env)645 static void TestWorkerOnMessageInner(Worker *worker, napi_env env)
646 {
647 uv_async_t* req = new uv_async_t;
648 req->data = nullptr;
649 Worker::WorkerOnMessage(req);
650 delete req;
651 UpdateWorkerState(worker, Worker::RunnerState::RUNNING);
652 worker->workerEnv_ = nullptr;
653 worker->WorkerOnMessageInner();
654 napi_env workerEnv = nullptr;
655 napi_create_runtime(env, &workerEnv);
656 worker->workerEnv_ = workerEnv;
657 worker->WorkerOnMessageInner();
658 MessageDataType data = nullptr;
659 napi_value undefined = NapiHelper::GetUndefinedValue(env);
660 napi_serialize_inner(env, undefined, undefined, undefined, false, true, &data);
661 worker->workerMessageQueue_.EnQueue(data);
662 std::string funcName = "onmessage";
663 auto func = [](napi_env env, napi_callback_info info) -> napi_value {
664 return nullptr;
665 };
666 napi_value funcValue = nullptr;
667 napi_create_function(workerEnv, funcName.c_str(), NAPI_AUTO_LENGTH, func, nullptr, &funcValue);
668 napi_value obj = NapiHelper::CreateObject(workerEnv);
669 napi_set_named_property(workerEnv, obj, funcName.c_str(), funcValue);
670 napi_ref ref = NapiHelper::CreateReference(workerEnv, obj, 1);
671 worker->workerPort_ = ref;
672 worker->WorkerOnMessageInner();
673 SetCloseWorkerProp(worker, workerEnv);
674 worker->workerMessageQueue_.EnQueue(nullptr);
675 worker->WorkerOnMessageInner();
676 }
677
HandleEventListeners(Worker *worker, napi_env env)678 static void HandleEventListeners(Worker *worker, napi_env env)
679 {
680 napi_value obj = NapiHelper::CreateObject(env);
681 napi_ref callback = NapiHelper::CreateReference(env, obj, 1);
682 auto listener = new Worker::WorkerListener(env, callback, Worker::ListenerMode::PERMANENT);
683 std::string funcName = "onmessage";
684 worker->AddListenerInner(env, "onmessage", listener);
685 worker->HandleEventListeners(env, nullptr, 0, nullptr, "onmessage");
686 worker->eventListeners_.clear();
687 auto func = [](napi_env env, napi_callback_info info) -> napi_value {
688 return nullptr;
689 };
690 napi_value obj2 = NapiHelper::CreateObject(env);
691 napi_value funcValue = nullptr;
692 napi_create_function(env, funcName.c_str(), NAPI_AUTO_LENGTH, func, nullptr, &funcValue);
693 napi_ref callback2 = NapiHelper::CreateReference(env, funcValue, 1);
694 auto listener2 = new Worker::WorkerListener(env, callback2, Worker::ListenerMode::ONCE);
695 worker->AddListenerInner(env, "onmessage", listener2);
696 worker->HandleEventListeners(env, obj2, 0, nullptr, "onmessage");
697 worker->eventListeners_.clear();
698 }
699
HandleHostException(Worker *worker, napi_env env)700 static void HandleHostException(Worker *worker, napi_env env)
701 {
702 worker->HandleHostException();
703 ErrorHelper::ThrowError(env, ErrorHelper::ERR_WORKER_NOT_RUNNING, "Worker create runtime error");
704 worker->HandleHostException();
705 napi_value exception = nullptr;
706 napi_get_and_clear_last_exception(env, &exception);
707 ASSERT_TRUE(exception != nullptr);
708 napi_env workerEnv = nullptr;
709 napi_create_runtime(env, &workerEnv);
710 worker->workerEnv_ = workerEnv;
711 worker->HandleException();
712 ErrorHelper::ThrowError(workerEnv, ErrorHelper::ERR_WORKER_NOT_RUNNING, "Worker create runtime error");
713 std::string funcName = "onerror";
714 auto func = [](napi_env env, napi_callback_info info) -> napi_value {
715 return nullptr;
716 };
717 napi_value funcValue = nullptr;
718 napi_create_function(workerEnv, funcName.c_str(), NAPI_AUTO_LENGTH, func, nullptr, &funcValue);
719 napi_value obj = NapiHelper::CreateObject(workerEnv);
720 napi_set_named_property(workerEnv, obj, funcName.c_str(), funcValue);
721 napi_ref ref = NapiHelper::CreateReference(workerEnv, obj, 1);
722 worker->workerPort_ = ref;
723 uv_loop_t* loop = worker->GetWorkerLoop();
724 ASSERT_TRUE(loop != nullptr);
725 worker->hostOnErrorSignal_ = new uv_async_t;
726 uv_async_init(loop, worker->hostOnErrorSignal_,
727 reinterpret_cast<uv_async_cb>(UpdateMainThreadWorkerFlag));
728 worker->hostOnErrorSignal_->data = worker;
729 worker->isMainThreadWorker_ = false;
730 worker->HandleException();
731 worker->isMainThreadWorker_ = true;
732 worker->isLimitedWorker_ = true;
733 ErrorHelper::ThrowError(workerEnv, ErrorHelper::ERR_WORKER_NOT_RUNNING, "Worker create runtime error");
734 worker->HandleException();
735 worker->isLimitedWorker_ = false;
736 ErrorHelper::ThrowError(workerEnv, ErrorHelper::ERR_WORKER_NOT_RUNNING, "Worker create runtime error");
737 worker->HandleException();
738 ErrorHelper::ThrowError(workerEnv, ErrorHelper::ERR_WORKER_NOT_RUNNING, "Worker create runtime error");
739 napi_get_and_clear_last_exception(workerEnv, &exception);
740 worker->hostEnv_ = nullptr;
741 worker->HandleUncaughtException(exception);
742 worker->hostEnv_ = env;
743 UpdateHostState(worker, Worker::HostState::INACTIVE);
744 worker->HandleUncaughtException(exception);
745 }
746
PostMessageToHostInner(Worker *worker, napi_env env)747 static void PostMessageToHostInner(Worker *worker, napi_env env)
748 {
749 worker->hostEnv_ = nullptr;
750 worker->PostMessageToHostInner(nullptr);
751 worker->hostEnv_ = env;
752 UpdateHostState(worker, Worker::HostState::INACTIVE);
753 worker->PostMessageToHostInner(nullptr);
754 UpdateHostState(worker, Worker::HostState::ACTIVE);
755 uv_loop_t *loop = nullptr;
756 napi_status status = napi_get_uv_event_loop(env, &loop);
757 ASSERT_TRUE(status == napi_ok);
758 InitHostHandle(worker, loop);
759 worker->isMainThreadWorker_ = false;
760 worker->PostMessageToHostInner(nullptr);
761 worker->isMainThreadWorker_ = true;
762 worker->isLimitedWorker_ = true;
763 worker->PostMessageToHostInner(nullptr);
764 worker->isMainThreadWorker_ = true;
765 worker->isLimitedWorker_ = false;
766 worker->PostMessageToHostInner(nullptr);
767 }
768
RemoveListenerInner(Worker *worker, napi_env env)769 static void RemoveListenerInner(Worker *worker, napi_env env)
770 {
771 worker->RemoveListenerInner(env, "onmessage", nullptr);
772 std::string funcName = "onmessage";
773 auto func = [](napi_env env, napi_callback_info info) -> napi_value {
774 return nullptr;
775 };
776 napi_value funcValue = nullptr;
777 napi_create_function(env, funcName.c_str(), NAPI_AUTO_LENGTH, func, nullptr, &funcValue);
778 napi_ref callback = NapiHelper::CreateReference(env, funcValue, 1);
779 auto listener = new Worker::WorkerListener(env, callback, Worker::ListenerMode::PERMANENT);
780 worker->AddListenerInner(env, "onmessage", listener);
781 worker->RemoveListenerInner(env, "onmessage", nullptr);
782
783 napi_env workerEnv = nullptr;
784 napi_create_runtime(env, &workerEnv);
785 worker->workerEnv_ = workerEnv;
786 std::string errorFuncName = "onerror";
787 auto errorFunc = [](napi_env env, napi_callback_info info) -> napi_value {
788 return nullptr;
789 };
790 napi_value errorFuncValue = nullptr;
791 napi_create_function(workerEnv, errorFuncName.c_str(), NAPI_AUTO_LENGTH,
792 errorFunc, nullptr, &errorFuncValue);
793 napi_value obj = NapiHelper::CreateObject(workerEnv);
794 napi_set_named_property(workerEnv, obj, "onerror", errorFuncValue);
795 napi_ref ref = NapiHelper::CreateReference(workerEnv, obj, 1);
796 worker->workerPort_ = ref;
797 worker->CallWorkerFunction(0, nullptr, "onerror", true);
798 worker->CallWorkerFunction(0, nullptr, "onerror", false);
799
800 std::string undefinedFuncName = "OnMessageError";
801 auto undefinedFunc = [](napi_env env, napi_callback_info info) -> napi_value {
802 return NapiHelper::GetUndefinedValue(env);
803 };
804 napi_value undefinedFuncValue = nullptr;
805 napi_create_function(workerEnv, undefinedFuncName.c_str(), NAPI_AUTO_LENGTH,
806 undefinedFunc, nullptr, &undefinedFuncValue);
807 napi_value obj2 = NapiHelper::CreateObject(workerEnv);
808 napi_set_named_property(workerEnv, obj2, "OnMessageError", undefinedFuncValue);
809 napi_ref ref2 = NapiHelper::CreateReference(workerEnv, obj2, 1);
810 worker->workerPort_ = ref2;
811 worker->CallWorkerFunction(0, nullptr, "OnMessageError", true);
812 }
813
ParentPortAddListenerInnerTest(Worker *worker, napi_env env)814 static void ParentPortAddListenerInnerTest(Worker *worker, napi_env env)
815 {
816 UpdateHostState(worker, Worker::HostState::INACTIVE);
817 worker->CloseWorkerCallback();
818 UpdateHostState(worker, Worker::HostState::ACTIVE);
819 std::string funcName = "onmessage";
820 auto func = [](napi_env env, napi_callback_info info) -> napi_value {
821 return nullptr;
822 };
823 napi_value funcValue = nullptr;
824 napi_create_function(env, funcName.c_str(), NAPI_AUTO_LENGTH, func, nullptr, &funcValue);
825 napi_ref callback = NapiHelper::CreateReference(env, funcValue, 1);
826 auto listener = new Worker::WorkerListener(env, callback, Worker::ListenerMode::PERMANENT);
827 worker->ParentPortAddListenerInner(env, "onmessage", listener);
828 worker->ParentPortAddListenerInner(env, "onmessage", listener);
829 napi_value obj = NapiHelper::CreateObject(env);
830 napi_ref ref = NapiHelper::CreateReference(env, obj, 1);
831 auto listener2 = new Worker::WorkerListener(env, ref, Worker::ListenerMode::ONCE);
832 worker->ParentPortAddListenerInner(env, "onmessage", listener2);
833 worker->ParentPortRemoveAllListenerInner();
834 }
835
ParentPortRemoveListenerInnerTest(Worker *worker, napi_env env)836 static void ParentPortRemoveListenerInnerTest(Worker *worker, napi_env env)
837 {
838 std::string funcName = "onmessage";
839 auto func = [](napi_env env, napi_callback_info info) -> napi_value {
840 return nullptr;
841 };
842 napi_value funcValue = nullptr;
843 napi_create_function(env, funcName.c_str(), NAPI_AUTO_LENGTH, func, nullptr, &funcValue);
844 napi_ref callback = NapiHelper::CreateReference(env, funcValue, 1);
845 auto listener = new Worker::WorkerListener(env, callback, Worker::ListenerMode::PERMANENT);
846 worker->ParentPortAddListenerInner(env, "onmessage", listener);
847
848 std::string errorFuncName = "onerror";
849 auto errorFunc = [](napi_env env, napi_callback_info info) -> napi_value {
850 return nullptr;
851 };
852 napi_value errorFuncValue = nullptr;
853 napi_create_function(env, errorFuncName.c_str(), NAPI_AUTO_LENGTH,
854 errorFunc, nullptr, &errorFuncValue);
855 napi_ref callback2 = NapiHelper::CreateReference(env, errorFuncValue, 1);
856 auto listener2 = new Worker::WorkerListener(env, callback2, Worker::ListenerMode::PERMANENT);
857 worker->ParentPortAddListenerInner(env, "onerror", listener2);
858 worker->ParentPortRemoveListenerInner(env, "OnMessageError", nullptr);
859
860 std::string hostFuncName = "host";
861 auto hostFunc = [](napi_env env, napi_callback_info info) -> napi_value {
862 return nullptr;
863 };
864 napi_value hostFuncValue = nullptr;
865 napi_create_function(env, hostFuncName.c_str(), NAPI_AUTO_LENGTH,
866 hostFunc, nullptr, &hostFuncValue);
867 napi_ref callback3 = NapiHelper::CreateReference(env, hostFuncValue, 1);
868 worker->ParentPortRemoveListenerInner(env, "onmessage", callback);
869 worker->ParentPortRemoveListenerInner(env, "onmessage", callback3);
870 worker->ParentPortRemoveListenerInner(env, "onerror", nullptr);
871 }
872
ParentPortHandleEventListeners(Worker *worker, napi_env env)873 static void ParentPortHandleEventListeners(Worker *worker, napi_env env) //todo:
874 {
875 napi_value recv = NapiHelper::CreateObject(env);
876 std::string funcName = "onmessage";
877 auto func = [](napi_env env, napi_callback_info info) -> napi_value {
878 return nullptr;
879 };
880 napi_value funcValue = nullptr;
881 napi_create_function(env, funcName.c_str(), NAPI_AUTO_LENGTH, func, nullptr, &funcValue);
882 napi_ref callback = NapiHelper::CreateReference(env, funcValue, 1);
883 auto listener = new Worker::WorkerListener(env, callback, Worker::ListenerMode::ONCE);
884 worker->ParentPortAddListenerInner(env, "onmessage", listener);
885 worker->ParentPortHandleEventListeners(env, recv, 0, nullptr, "onmessage", true);
886
887 std::string errorFuncName = "onerror";
888 auto errorFunc = [](napi_env env, napi_callback_info info) -> napi_value {
889 return nullptr;
890 };
891 napi_value errorFuncValue = nullptr;
892 napi_create_function(env, errorFuncName.c_str(), NAPI_AUTO_LENGTH,
893 errorFunc, nullptr, &errorFuncValue);
894 napi_ref callback2 = NapiHelper::CreateReference(env, errorFuncValue, 1);
895 auto listener2 = new Worker::WorkerListener(env, callback2, Worker::ListenerMode::PERMANENT);
896 worker->ParentPortAddListenerInner(env, "onerror", listener2);
897
898 std::string hostFuncName = "host";
899 napi_value hostFuncValue = nullptr;
900 napi_create_string_utf8(env, hostFuncName.c_str(), hostFuncName.length(), &hostFuncValue);
901 napi_ref callback3 = NapiHelper::CreateReference(env, hostFuncValue, 1);
902 auto listener3 = new Worker::WorkerListener(env, callback3, Worker::ListenerMode::PERMANENT);
903 worker->ParentPortAddListenerInner(env, "onerror", listener3);
904 worker->ParentPortHandleEventListeners(env, recv, 0, nullptr, "onerror", false);
905 }
906
DebuggerOnPostTask(Worker* worker, napi_env env)907 static void DebuggerOnPostTask(Worker* worker, napi_env env)
908 {
909 napi_env workerEnv = nullptr;
910 napi_create_runtime(env, &workerEnv);
911 auto workerEngine = reinterpret_cast<NativeEngine*>(workerEnv);
912 workerEngine->CheckAndSetWorkerVersion(WorkerVersion::NONE, WorkerVersion::NEW);
913 workerEngine->MarkWorkerThread();
914 Worker::CanCreateWorker(workerEnv, WorkerVersion::NEW);
915 Worker::WorkerThrowError(workerEnv, ErrorHelper::ERR_WORKER_NOT_RUNNING,
916 "host thread maybe is over when CallHostFunction");
917 napi_value exception = nullptr;
918 napi_get_and_clear_last_exception(workerEnv, &exception);
919 worker->SetWorkerEnv(workerEnv);
920 uv_loop_t* loop = worker->GetWorkerLoop();
921 ASSERT_TRUE(loop != nullptr);
922 uv_async_init(loop, &worker->debuggerOnPostTaskSignal_, reinterpret_cast<uv_async_cb>(
923 UpdateMainThreadWorkerFlag));
924 worker->debuggerOnPostTaskSignal_.data = worker;
925 std::function<void()> myTask = []() {
926 return;
927 };
928 UpdateWorkerState(worker, Worker::RunnerState::TERMINATED);
929 worker->DebuggerOnPostTask(std::move(myTask));
930 UpdateWorkerState(worker, Worker::RunnerState::RUNNING);
931 worker->DebuggerOnPostTask(std::move(myTask));
932 }
933
CloseHostHandle(Worker* worker, napi_env env)934 static void CloseHostHandle(Worker* worker, napi_env env)
935 {
936 uv_loop_t *loop = nullptr;
937 napi_status status = napi_get_uv_event_loop(env, &loop);
938 ASSERT_TRUE(status == napi_ok);
939 InitHostHandle(worker, loop);
940 worker->hostOnErrorSignal_ = new uv_async_t;
941 uv_async_init(loop, worker->hostOnErrorSignal_,
942 reinterpret_cast<uv_async_cb>(UpdateMainThreadWorkerFlag));
943 worker->hostOnErrorSignal_->data = worker;
944 worker->hostOnGlobalCallSignal_ = new uv_async_t;
945 uv_async_init(loop, worker->hostOnGlobalCallSignal_,
946 reinterpret_cast<uv_async_cb>(UpdateMainThreadWorkerFlag));
947 worker->hostOnGlobalCallSignal_->data = worker;
948 worker->CloseHostHandle();
949 }
950
ClearWorkerHandle(Worker* worker)951 static void ClearWorkerHandle(Worker* worker)
952 {
953 worker->CloseHostHandle();
954 }
955 protected:
956 static thread_local NativeEngine *engine_;
957 static thread_local EcmaVM *vm_;
958 };
959
960 thread_local NativeEngine *WorkersTest::engine_ = nullptr;
961 thread_local EcmaVM *WorkersTest::vm_ = nullptr;
962 }
963
964 // worker constructor
Worker_Constructor(napi_env env, napi_value global)965 napi_value Worker_Constructor(napi_env env, napi_value global)
966 {
967 std::string funcName = "WorkerConstructor";
968 napi_value cb = nullptr;
969 napi_create_function(env, funcName.c_str(), funcName.size(), Worker::WorkerConstructor, nullptr, &cb);
970
971 napi_value result = nullptr;
972 napi_value argv[2] = { nullptr };
973 std::string script = "entry/ets/workers/@worker.ts";
974 napi_create_string_utf8(env, script.c_str(), script.length(), &argv[0]);
975 std::string type = "classic";
976 std::string name = "WorkerThread";
977 napi_value typeValue = nullptr;
978 napi_value nameValue = nullptr;
979 napi_create_string_utf8(env, name.c_str(), name.length(), &nameValue);
980 napi_create_string_utf8(env, type.c_str(), type.length(), &typeValue);
981
982 napi_value object = nullptr;
983 napi_create_object(env, &object);
984
985 napi_set_named_property(env, object, "name", nameValue);
986 napi_set_named_property(env, object, "type", typeValue);
987 argv[1] = object;
988
989 napi_call_function(env, global, cb, sizeof(argv) / sizeof(argv[0]), argv, &result);
990 uv_sleep(SELLP_MS);
991 napi_env newEnv = nullptr;
992 napi_create_runtime(env, &newEnv);
993 return result;
994 }
995
996 // worker terminate
Worker_Terminate(napi_env env, napi_value global)997 napi_value Worker_Terminate(napi_env env, napi_value global)
998 {
999 std::string funcName = "Terminate";
1000 napi_value cb = nullptr;
1001 napi_value result = nullptr;
1002 napi_create_function(env, funcName.c_str(), funcName.size(), Worker::Terminate, nullptr, &cb);
1003 napi_call_function(env, global, cb, 0, nullptr, &result);
1004 return result;
1005 }
1006
1007 // worker WorkerConstructor
HWTEST_F(WorkersTest, WorkerConstructorTest001, testing::ext::TestSize.Level0)1008 HWTEST_F(WorkersTest, WorkerConstructorTest001, testing::ext::TestSize.Level0)
1009 {
1010 napi_env env = (napi_env)engine_;
1011 napi_value global;
1012 napi_get_global(env, &global);
1013
1014 napi_value result = nullptr;
1015 result = Worker_Constructor(env, global);
1016
1017 Worker* worker = nullptr;
1018 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
1019 std::string nameResult = worker->GetName();
1020 ASSERT_EQ(nameResult, "WorkerThread");
1021 std::string scriptResult = worker->GetScript();
1022 ASSERT_EQ(scriptResult, "entry/ets/workers/@worker.ts");
1023 worker->EraseWorker();
1024 ClearWorkerHandle(worker);
1025 result = Worker_Terminate(env, global);
1026
1027 ASSERT_TRUE(result != nullptr);
1028 }
1029
1030 //worker PostMessage
HWTEST_F(WorkersTest, PostMessageTest001, testing::ext::TestSize.Level0)1031 HWTEST_F(WorkersTest, PostMessageTest001, testing::ext::TestSize.Level0)
1032 {
1033 napi_env env = (napi_env)engine_;
1034 napi_value global;
1035 napi_get_global(env, &global);
1036
1037 napi_value result = nullptr;
1038 result = Worker_Constructor(env, global);
1039
1040 Worker* worker = nullptr;
1041 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
1042
1043 napi_value argv[1] = { nullptr };
1044 std::string message = "host";
1045 napi_create_string_utf8(env, message.c_str(), message.length(), &argv[0]);
1046 std::string funcName = "PostMessage";
1047 napi_value cb = nullptr;
1048 napi_create_function(env, funcName.c_str(), funcName.size(), Worker::PostMessage, worker, &cb);
1049 UpdateWorkerState(worker, Worker::RunnerState::RUNNING);
1050 napi_call_function(env, global, cb, sizeof(argv) / sizeof(argv[0]), argv, &result);
1051 worker->EraseWorker();
1052 ClearWorkerHandle(worker);
1053 result = Worker_Terminate(env, global);
1054 ASSERT_TRUE(result != nullptr);
1055 }
1056
1057 //worker PostMessage
HWTEST_F(WorkersTest, PostMessageTest002, testing::ext::TestSize.Level0)1058 HWTEST_F(WorkersTest, PostMessageTest002, testing::ext::TestSize.Level0)
1059 {
1060 napi_env env = (napi_env)engine_;
1061 napi_value global;
1062 napi_get_global(env, &global);
1063
1064 napi_value result = nullptr;
1065 result = Worker_Constructor(env, global);
1066 Worker* worker = nullptr;
1067 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
1068
1069 napi_value argv[1] = { nullptr };
1070 std::string message = "host";
1071 napi_create_string_utf8(env, message.c_str(), message.length(), &argv[0]);
1072
1073 std::string funcName = "PostMessage";
1074 napi_value cb = nullptr;
1075
1076 napi_create_function(env, funcName.c_str(), funcName.size(), Worker::PostMessage, nullptr, &cb);
1077 napi_call_function(env, global, cb, sizeof(argv) / sizeof(argv[0]), argv, &result);
1078
1079 worker->EraseWorker();
1080 ClearWorkerHandle(worker);
1081 result = Worker_Terminate(env, global);
1082 ASSERT_TRUE(result != nullptr);
1083 }
1084
1085 //worker PostMessage
HWTEST_F(WorkersTest, PostMessageTest003, testing::ext::TestSize.Level0)1086 HWTEST_F(WorkersTest, PostMessageTest003, testing::ext::TestSize.Level0)
1087 {
1088 napi_env env = (napi_env)engine_;
1089 napi_value global;
1090 napi_get_global(env, &global);
1091
1092 napi_value result = nullptr;
1093 result = Worker_Constructor(env, global);
1094
1095 Worker* worker = nullptr;
1096 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
1097 worker->UpdateWorkerState(Worker::RunnerState::TERMINATED);
1098
1099 napi_value argv[1] = { nullptr };
1100 std::string message = "host";
1101 napi_create_string_utf8(env, message.c_str(), message.length(), &argv[0]);
1102 std::string funcName = "PostMessage";
1103 napi_value cb = nullptr;
1104 napi_create_function(env, funcName.c_str(), funcName.size(), Worker::PostMessage, worker, &cb);
1105 napi_call_function(env, global, cb, sizeof(argv) / sizeof(argv[0]), argv, &result);
1106
1107 uv_async_t* req = new uv_async_t;
1108 req->data = worker;
1109 Worker::WorkerOnMessage(req);
1110
1111 worker->EraseWorker();
1112 ClearWorkerHandle(worker);
1113 result = Worker_Terminate(env, global);
1114 ASSERT_TRUE(result != nullptr);
1115 }
1116
1117 //worker PostMessage
HWTEST_F(WorkersTest, PostMessageToHostTest001, testing::ext::TestSize.Level0)1118 HWTEST_F(WorkersTest, PostMessageToHostTest001, testing::ext::TestSize.Level0)
1119 {
1120 napi_env env = (napi_env)engine_;
1121 napi_value global;
1122 napi_get_global(env, &global);
1123
1124 napi_value result = nullptr;
1125 result = Worker_Constructor(env, global);
1126
1127 Worker* worker = nullptr;
1128 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
1129 napi_value argv[1] = { nullptr };
1130 std::string message = "host";
1131 napi_create_string_utf8(env, message.c_str(), message.length(), &argv[0]);
1132
1133 std::string funcName = "PostMessageToHost";
1134 napi_value cb = nullptr;
1135 napi_create_function(env, funcName.c_str(), funcName.size(), Worker::PostMessageToHost, worker, &cb);
1136 UpdateWorkerState(worker, Worker::RunnerState::RUNNING);
1137 napi_call_function(env, global, cb, sizeof(argv) / sizeof(argv[0]), argv, &result);
1138 uv_async_t* req = new uv_async_t;
1139 req->data = worker;
1140 Worker::HostOnMessage(req);
1141
1142 worker->EraseWorker();
1143 ClearWorkerHandle(worker);
1144 result = Worker_Terminate(env, global);
1145 ASSERT_TRUE(result != nullptr);
1146 }
1147
1148 //worker PostMessageToHost
HWTEST_F(WorkersTest, PostMessageToHostTest002, testing::ext::TestSize.Level0)1149 HWTEST_F(WorkersTest, PostMessageToHostTest002, testing::ext::TestSize.Level0)
1150 {
1151 napi_env env = (napi_env)engine_;
1152 napi_value global;
1153 napi_get_global(env, &global);
1154
1155 napi_value result = nullptr;
1156 result = Worker_Constructor(env, global);
1157 Worker* worker = nullptr;
1158 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
1159
1160 napi_value argv[1] = { nullptr };
1161 std::string message = "host";
1162 napi_create_string_utf8(env, message.c_str(), message.length(), &argv[0]);
1163
1164 std::string funcName = "PostMessageToHost";
1165 napi_value cb = nullptr;
1166 napi_create_function(env, funcName.c_str(), funcName.size(), Worker::PostMessageToHost, nullptr, &cb);
1167 napi_call_function(env, global, cb, sizeof(argv) / sizeof(argv[0]), argv, &result);
1168
1169 worker->EraseWorker();
1170 ClearWorkerHandle(worker);
1171 result = Worker_Terminate(env, global);
1172 ASSERT_TRUE(result != nullptr);
1173 }
1174
1175 //worker PostMessageToHost
HWTEST_F(WorkersTest, PostMessageToHostTest003, testing::ext::TestSize.Level0)1176 HWTEST_F(WorkersTest, PostMessageToHostTest003, testing::ext::TestSize.Level0)
1177 {
1178 napi_env env = (napi_env)engine_;
1179 napi_value global;
1180 napi_get_global(env, &global);
1181
1182 napi_value arrayresult = nullptr;
1183 ASSERT_CHECK_CALL(napi_create_object(env, &arrayresult));
1184 ASSERT_CHECK_VALUE_TYPE(env, arrayresult, napi_object);
1185 const char testStr[] = "1234567";
1186 napi_value strAttribute = nullptr;
1187 ASSERT_CHECK_CALL(napi_create_string_utf8(env, testStr, strlen(testStr), &strAttribute));
1188 ASSERT_CHECK_VALUE_TYPE(env, strAttribute, napi_string);
1189 ASSERT_CHECK_CALL(napi_set_named_property(env, arrayresult, "strAttribute", strAttribute));
1190
1191 napi_value retStrAttribute = nullptr;
1192 ASSERT_CHECK_CALL(napi_get_named_property(env, arrayresult, "strAttribute", &retStrAttribute));
1193 ASSERT_CHECK_VALUE_TYPE(env, retStrAttribute, napi_string);
1194
1195 int32_t testNumber = 12345; // 12345 : indicates any number
1196 napi_value numberAttribute = nullptr;
1197 ASSERT_CHECK_CALL(napi_create_int32(env, testNumber, &numberAttribute));
1198 ASSERT_CHECK_VALUE_TYPE(env, numberAttribute, napi_number);
1199 ASSERT_CHECK_CALL(napi_set_named_property(env, arrayresult, "numberAttribute", numberAttribute));
1200
1201 napi_value propNames = nullptr;
1202 ASSERT_CHECK_CALL(napi_get_property_names(env, arrayresult, &propNames));
1203 ASSERT_CHECK_VALUE_TYPE(env, propNames, napi_object);
1204
1205 napi_value result = nullptr;
1206 result = Worker_Constructor(env, global);
1207
1208 Worker* worker = nullptr;
1209 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
1210 napi_value argv[2] = { nullptr };
1211 std::string message = "";
1212 napi_create_string_utf8(env, message.c_str(), message.length(), &argv[0]);
1213 std::string funcName = "PostMessageToHost";
1214 argv[1] = propNames;
1215 napi_value cb = nullptr;
1216 napi_create_function(env, funcName.c_str(), funcName.size(), Worker::PostMessageToHost, worker, &cb);
1217 UpdateWorkerState(worker, Worker::RunnerState::STARTING);
1218 worker->UpdateWorkerState(Worker::RunnerState::RUNNING);
1219 napi_call_function(env, global, cb, sizeof(argv) / sizeof(argv[0]), argv, &result);
1220 worker->EraseWorker();
1221 ClearWorkerHandle(worker);
1222 result = Worker_Terminate(env, global);
1223 ASSERT_TRUE(result != nullptr);
1224 }
1225
1226 //worker EventListener
HWTEST_F(WorkersTest, EventListenerTest001, testing::ext::TestSize.Level0)1227 HWTEST_F(WorkersTest, EventListenerTest001, testing::ext::TestSize.Level0)
1228 {
1229 napi_env env = (napi_env)engine_;
1230 napi_value global;
1231 napi_get_global(env, &global);
1232 napi_value result = nullptr;
1233 result = Worker_Constructor(env, global);
1234 Worker* worker = nullptr;
1235 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
1236
1237 napi_value argv[2] = {nullptr};
1238 std::string message = "host";
1239 napi_create_string_utf8(env, message.c_str(), message.length(), &argv[0]);
1240 auto func = [](napi_env env, napi_callback_info info) -> napi_value {
1241 return nullptr;
1242 };
1243 napi_value funcValue = nullptr;
1244 napi_create_function(env, "testFunc", NAPI_AUTO_LENGTH, func, nullptr, &funcValue);
1245 argv[1] = funcValue;
1246
1247 std::string funcName = "On";
1248 napi_value cb = nullptr;
1249 napi_create_function(env, funcName.c_str(), funcName.size(), Worker::On, worker, &cb);
1250 napi_call_function(env, global, cb, sizeof(argv) / sizeof(argv[0]), argv, &result);
1251
1252 funcName = "Once";
1253 cb = nullptr;
1254 napi_create_function(env, funcName.c_str(), funcName.size(), Worker::Once, worker, &cb);
1255 napi_call_function(env, global, cb, sizeof(argv) / sizeof(argv[0]), argv, &result);
1256
1257 funcName = "AddEventListener";
1258 cb = nullptr;
1259 napi_create_function(env, funcName.c_str(), funcName.size(), Worker::AddEventListener, worker, &cb);
1260 napi_call_function(env, global, cb, sizeof(argv) / sizeof(argv[0]), argv, &result);
1261
1262 funcName = "RemoveEventListener";
1263 cb = nullptr;
1264 napi_create_function(env, funcName.c_str(), funcName.size(), Worker::RemoveEventListener, worker, &cb);
1265 napi_call_function(env, global, cb, sizeof(argv) / sizeof(argv[0]), argv, &result);
1266
1267 funcName = "Off";
1268 cb = nullptr;
1269 napi_create_function(env, funcName.c_str(), funcName.size(), Worker::Off, worker, &cb);
1270 napi_call_function(env, global, cb, sizeof(argv) / sizeof(argv[0]), argv, &result);
1271
1272 worker->EraseWorker();
1273 ClearWorkerHandle(worker);
1274 result = Worker_Terminate(env, global);
1275 ASSERT_TRUE(result != nullptr);
1276 }
1277
1278 //worker EventListener
HWTEST_F(WorkersTest, EventListenerTest002, testing::ext::TestSize.Level0)1279 HWTEST_F(WorkersTest, EventListenerTest002, testing::ext::TestSize.Level0)
1280 {
1281 napi_env env = (napi_env)engine_;
1282 napi_value global;
1283 napi_get_global(env, &global);
1284 napi_value result = nullptr;
1285 result = Worker_Constructor(env, global);
1286 Worker* worker = nullptr;
1287 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
1288 napi_value argv[3] = {nullptr};
1289 std::string message = "host";
1290 napi_create_string_utf8(env, message.c_str(), message.length(), &argv[0]);
1291 auto func = [](napi_env env, napi_callback_info info) -> napi_value {
1292 return nullptr;
1293 };
1294 napi_value funcValue = nullptr;
1295 napi_create_function(env, "testFunc", NAPI_AUTO_LENGTH, func, nullptr, &funcValue);
1296 argv[1] = funcValue;
1297 std::string funcName = "On";
1298 napi_value cb = nullptr;
1299 funcName = "Once";
1300 cb = nullptr;
1301 napi_value myobject = nullptr;
1302 napi_create_object(env, &myobject);
1303
1304 argv[2] = myobject;
1305 napi_create_function(env, funcName.c_str(), funcName.size(), Worker::Once, worker, &cb);
1306 UpdateWorkerState(worker, Worker::RunnerState::RUNNING);
1307 napi_call_function(env, global, cb, sizeof(argv) / sizeof(argv[0]), argv, &result);
1308 worker->EraseWorker();
1309 ClearWorkerHandle(worker);
1310 result = Worker_Terminate(env, global);
1311 ASSERT_TRUE(result != nullptr);
1312 }
1313
1314 //worker DispatchEvent
HWTEST_F(WorkersTest, DispatchEventTest001, testing::ext::TestSize.Level0)1315 HWTEST_F(WorkersTest, DispatchEventTest001, testing::ext::TestSize.Level0)
1316 {
1317 napi_env env = (napi_env)engine_;
1318 napi_value global;
1319 napi_get_global(env, &global);
1320 napi_value result = nullptr;
1321 result = Worker_Constructor(env, global);
1322 Worker* worker = nullptr;
1323 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
1324 napi_value argv1[2] = {nullptr};
1325 std::string message = "host";
1326 napi_create_string_utf8(env, message.c_str(), message.length(), &argv1[0]);
1327 auto func = [](napi_env env, napi_callback_info info) -> napi_value {
1328 return nullptr;
1329 };
1330 napi_value funcValue = nullptr;
1331 napi_create_function(env, "testFunc", NAPI_AUTO_LENGTH, func, nullptr, &funcValue);
1332 argv1[1] = funcValue;
1333
1334 std::string funcName = "Once";
1335 napi_value cb = nullptr;
1336 napi_create_function(env, funcName.c_str(), funcName.size(), Worker::Once, worker, &cb);
1337 napi_call_function(env, global, cb, sizeof(argv1) / sizeof(argv1[0]), argv1, &result);
1338 napi_value argv[1] = {nullptr};
1339
1340 napi_value typeValue = nullptr;
1341 std::string type = "message";
1342 napi_create_string_utf8(env, type.c_str(), type.length(), &typeValue);
1343
1344 napi_value object = nullptr;
1345 napi_create_object(env, &object);
1346 napi_set_named_property(env, object, "type", typeValue);
1347 argv[0] = object;
1348
1349 funcName = "DispatchEvent";
1350 cb = nullptr;
1351 napi_create_function(env, funcName.c_str(), funcName.size(), Worker::DispatchEvent, worker, &cb);
1352 UpdateWorkerState(worker, Worker::RunnerState::RUNNING);
1353 napi_call_function(env, global, cb, sizeof(argv) / sizeof(argv[0]), argv, &result);
1354 worker->EraseWorker();
1355 ClearWorkerHandle(worker);
1356 result = Worker_Terminate(env, global);
1357 ASSERT_TRUE(result != nullptr);
1358 }
1359
1360 //worker ParentPortAddEventListener
HWTEST_F(WorkersTest, ParentPortAddEventListenerTest001, testing::ext::TestSize.Level0)1361 HWTEST_F(WorkersTest, ParentPortAddEventListenerTest001, testing::ext::TestSize.Level0)
1362 {
1363 napi_env env = (napi_env)engine_;
1364 napi_value global;
1365 napi_get_global(env, &global);
1366 napi_value result = nullptr;
1367 result = Worker_Constructor(env, global);
1368 Worker* worker = nullptr;
1369 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
1370 napi_value argv[3] = {nullptr};
1371 std::string message = "host";
1372 napi_create_string_utf8(env, message.c_str(), message.length(), &argv[0]);
1373 auto func = [](napi_env env, napi_callback_info info) -> napi_value {
1374 return nullptr;
1375 };
1376
1377 std::string funcName = "ParentPortAddEventListener";
1378 napi_value cb = nullptr;
1379 napi_value funcValue = nullptr;
1380 napi_create_function(env, "testFunc", NAPI_AUTO_LENGTH, func, nullptr, &funcValue);
1381 argv[1] = funcValue;
1382 ASSERT_TRUE(funcValue != nullptr);
1383 napi_value myobject = nullptr;
1384 napi_create_object(env, &myobject);
1385 argv[2] = myobject;
1386 napi_value callResult = nullptr;
1387 // ------- workerEnv---------
1388 napi_create_function(env, funcName.c_str(), funcName.size(),
1389 Worker::ParentPortAddEventListener, worker, &cb);
1390 UpdateWorkerState(worker, Worker::RunnerState::RUNNING);
1391 napi_call_function(env, global, cb, sizeof(argv) / sizeof(argv[0]), argv, &callResult);
1392 worker->EraseWorker();
1393 ClearWorkerHandle(worker);
1394 result = Worker_Terminate(env, global);
1395 ASSERT_TRUE(result != nullptr);
1396 }
1397
1398 //worker ParentPortRemoveAllListener
HWTEST_F(WorkersTest, ParentPortRemoveAllListenerTest001, testing::ext::TestSize.Level0)1399 HWTEST_F(WorkersTest, ParentPortRemoveAllListenerTest001, testing::ext::TestSize.Level0)
1400 {
1401 napi_env env = (napi_env)engine_;
1402 napi_value global;
1403 napi_get_global(env, &global);
1404 napi_value result = nullptr;
1405 result = Worker_Constructor(env, global);
1406 Worker* worker = nullptr;
1407 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
1408 // ------- workerEnv---------
1409 napi_env workerEnv = nullptr;
1410 napi_create_runtime(env, &workerEnv);
1411 napi_value workerGlobal = nullptr;
1412 napi_get_global(workerEnv, &workerGlobal);
1413 napi_value argv[1] = {nullptr};
1414 std::string message = "host";
1415 napi_create_string_utf8(workerEnv, message.c_str(), message.length(), &argv[0]);
1416 std::string funcName = "ParentPortRemoveAllListener";
1417 napi_value cb = nullptr;
1418
1419 napi_value callResult = nullptr;
1420 // ------- workerEnv---------
1421 napi_create_function(workerEnv, funcName.c_str(), funcName.size(),
1422 Worker::ParentPortRemoveAllListener, worker, &cb);
1423 UpdateWorkerState(worker, Worker::RunnerState::RUNNING);
1424 napi_call_function(workerEnv, workerGlobal, cb, sizeof(argv) / sizeof(argv[0]), argv, &callResult);
1425 worker->EraseWorker();
1426 ClearWorkerHandle(worker);
1427 result = Worker_Terminate(env, global);
1428 ASSERT_TRUE(result != nullptr);
1429 }
1430
1431 //worker ParentPortDispatchEvent
HWTEST_F(WorkersTest, ParentPortDispatchEventTest001, testing::ext::TestSize.Level0)1432 HWTEST_F(WorkersTest, ParentPortDispatchEventTest001, testing::ext::TestSize.Level0)
1433 {
1434 napi_env env = (napi_env)engine_;
1435 napi_value global;
1436 napi_get_global(env, &global);
1437 napi_value result = nullptr;
1438 result = Worker_Constructor(env, global);
1439 Worker* worker = nullptr;
1440 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
1441 // ------- workerEnv---------
1442 napi_env workerEnv = nullptr;
1443 napi_create_runtime(env, &workerEnv);
1444 napi_value workerGlobal = nullptr;
1445 napi_get_global(workerEnv, &workerGlobal);
1446
1447 napi_value argv[1] = {nullptr};
1448 napi_value objresult = nullptr;
1449 napi_create_object(workerEnv, &objresult);
1450 napi_value cb = nullptr;
1451 std::string funcName = "ParentPortDispatchEvent";
1452 napi_value messageKey = nullptr;
1453 const char* messageKeyStr = "type";
1454 napi_create_string_latin1(workerEnv, messageKeyStr, strlen(messageKeyStr), &messageKey);
1455 napi_value messageValue = nullptr;
1456 const char* messageValueStr = "message";
1457 napi_create_string_latin1(workerEnv, messageValueStr, strlen(messageValueStr), &messageValue);
1458 napi_set_property(workerEnv, objresult, messageKey, messageValue);
1459 argv[0] = objresult;
1460 napi_value callResult = nullptr;
1461 // ------- workerEnv---------
1462 napi_create_function(workerEnv, funcName.c_str(), funcName.size(),
1463 Worker::ParentPortDispatchEvent, worker, &cb);
1464 UpdateWorkerState(worker, Worker::RunnerState::RUNNING);
1465 napi_call_function(workerEnv, workerGlobal, cb, sizeof(argv) / sizeof(argv[0]), argv, &callResult);
1466 worker->EraseWorker();
1467 ClearWorkerHandle(worker);
1468 result = Worker_Terminate(env, global);
1469 ASSERT_TRUE(result != nullptr);
1470 }
1471
1472 //worker ParentPortRemoveEventListener
HWTEST_F(WorkersTest, ParentPortRemoveEventListenerTest001, testing::ext::TestSize.Level0)1473 HWTEST_F(WorkersTest, ParentPortRemoveEventListenerTest001, testing::ext::TestSize.Level0)
1474 {
1475 napi_env env = (napi_env)engine_;
1476 napi_value global;
1477 napi_get_global(env, &global);
1478 napi_value result = nullptr;
1479 result = Worker_Constructor(env, global);
1480 Worker* worker = nullptr;
1481 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
1482 // ------- workerEnv---------
1483 napi_env workerEnv = nullptr;
1484 napi_create_runtime(env, &workerEnv);
1485 napi_value workerGlobal = nullptr;
1486 napi_get_global(workerEnv, &workerGlobal);
1487
1488 napi_value argv[2] = {nullptr};
1489 std::string message = "host";
1490 napi_create_string_utf8(workerEnv, message.c_str(), message.length(), &argv[0]);
1491 auto func = [](napi_env env, napi_callback_info info) -> napi_value {
1492 return nullptr;
1493 };
1494 std::string funcName = "ParentPortRemoveEventListener";
1495 napi_value cb = nullptr;
1496 napi_value funcValue = nullptr;
1497 napi_create_function(workerEnv, "testFunc", NAPI_AUTO_LENGTH, func, nullptr, &funcValue);
1498 argv[1] = funcValue;
1499
1500 napi_value callResult = nullptr;
1501 // ------- workerEnv---------
1502 napi_create_function(workerEnv, funcName.c_str(), funcName.size(),
1503 Worker::ParentPortRemoveEventListener, worker, &cb);
1504 UpdateWorkerState(worker, Worker::RunnerState::RUNNING);
1505 napi_call_function(workerEnv, workerGlobal, cb, sizeof(argv) / sizeof(argv[0]), argv, &callResult);
1506 worker->EraseWorker();
1507 ClearWorkerHandle(worker);
1508 result = Worker_Terminate(env, global);
1509 ASSERT_TRUE(result != nullptr);
1510 }
1511
1512 //worker GlobalCall
HWTEST_F(WorkersTest, GlobalCallTest001, testing::ext::TestSize.Level0)1513 HWTEST_F(WorkersTest, GlobalCallTest001, testing::ext::TestSize.Level0)
1514 {
1515 napi_env env = (napi_env)engine_;
1516 napi_value global;
1517 napi_get_global(env, &global);
1518 napi_value result = nullptr;
1519 result = Worker_Constructor(env, global);
1520 Worker* worker = nullptr;
1521 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
1522 // ------- workerEnv---------
1523 napi_env workerEnv = nullptr;
1524 napi_create_runtime(env, &workerEnv);
1525 napi_value workerGlobal = nullptr;
1526 napi_get_global(workerEnv, &workerGlobal);
1527
1528 napi_value argv[3] = {nullptr};
1529 std::string instanceName = "host";
1530 std::string methodName = "postMessage";
1531 int32_t timeout = 300;
1532 napi_create_string_utf8(workerEnv, instanceName.c_str(), instanceName.length(), &argv[0]);
1533 napi_create_string_utf8(workerEnv, methodName.c_str(), methodName.length(), &argv[1]);
1534 napi_create_int32(workerEnv, timeout, &argv[2]);
1535
1536 std::string funcName = "GlobalCall";
1537 napi_value cb = nullptr;
1538 napi_value callResult = nullptr;
1539 // ------- workerEnv---------
1540 napi_create_function(workerEnv, funcName.c_str(), funcName.size(),
1541 Worker::GlobalCall, worker, &cb);
1542 UpdateWorkerState(worker, Worker::RunnerState::RUNNING);
1543 napi_call_function(workerEnv, workerGlobal, cb, sizeof(argv) / sizeof(argv[0]), argv, &callResult);
1544 uv_async_t* req = new uv_async_t;
1545 req->data = worker;
1546 Worker::HostOnGlobalCall(req);
1547 worker->EraseWorker();
1548 ClearWorkerHandle(worker);
1549 result = Worker_Terminate(env, global);
1550 ASSERT_TRUE(result != nullptr);
1551 }
1552
1553 //messageQueue DeQueue_QUEUE_IS_NULL
HWTEST_F(WorkersTest, MessageQueueTest001, testing::ext::TestSize.Level0)1554 HWTEST_F(WorkersTest, MessageQueueTest001, testing::ext::TestSize.Level0)
1555 {
1556 MessageQueue queue;
1557 ASSERT_TRUE(queue.IsEmpty());
1558 MessageDataType data = nullptr;
1559 ASSERT_FALSE(queue.DeQueue(&data));
1560 }
1561
1562 //messageQueue DeQueue_DATA_IS_NULL
HWTEST_F(WorkersTest, MessageQueueTest002, testing::ext::TestSize.Level0)1563 HWTEST_F(WorkersTest, MessageQueueTest002, testing::ext::TestSize.Level0)
1564 {
1565 napi_env env = (napi_env)engine_;
1566 MessageQueue queue;
1567 MessageDataType data = nullptr;
1568 napi_value undefined = NapiHelper::GetUndefinedValue(env);
1569 napi_serialize_inner(env, undefined, undefined, undefined, false, true, &data);
1570 queue.EnQueue(data);
1571 ASSERT_TRUE(queue.DeQueue(nullptr));
1572 queue.Clear(env);
1573 }
1574
1575 //messageQueue MARKEDMESSAGEQUEUE
HWTEST_F(WorkersTest, MarkedMessageQueue001, testing::ext::TestSize.Level0)1576 HWTEST_F(WorkersTest, MarkedMessageQueue001, testing::ext::TestSize.Level0)
1577 {
1578 napi_env env = (napi_env)engine_;
1579 MarkedMessageQueue queue;
1580 MessageDataType data = nullptr;
1581 napi_value undefined = NapiHelper::GetUndefinedValue(env);
1582 napi_serialize_inner(env, undefined, undefined, undefined, false, true, &data);
1583 queue.Push(1, data);
1584 queue.Pop();
1585 ASSERT_TRUE(queue.IsEmpty());
1586
1587 MessageDataType dataType = nullptr;
1588 napi_serialize_inner(env, undefined, undefined, undefined, false, true, &dataType);
1589 queue.Push(2, dataType);
1590 std::pair<uint32_t, MessageDataType> pair = queue.Front();
1591 ASSERT_EQ(pair.first, 2);
1592 queue.Clear(env);
1593 ASSERT_TRUE(queue.IsEmpty());
1594 }
1595
HWTEST_F(WorkersTest, WorkerTest001, testing::ext::TestSize.Level0)1596 HWTEST_F(WorkersTest, WorkerTest001, testing::ext::TestSize.Level0)
1597 {
1598 napi_env env = (napi_env)engine_;
1599 napi_value global;
1600 napi_get_global(env, &global);
1601 napi_value result = nullptr;
1602 result = Worker_Constructor(env, global);
1603 Worker* worker = nullptr;
1604 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
1605 napi_env workerEnv = nullptr;
1606 napi_create_runtime(env, &workerEnv);
1607 napi_value exports = nullptr;
1608 napi_create_object(workerEnv, &exports);
1609 Worker::InitWorker(workerEnv, exports);
1610 worker->EraseWorker();
1611 ClearWorkerHandle(worker);
1612 result = Worker_Terminate(env, global);
1613 ASSERT_TRUE(result != nullptr);
1614 }
1615
HWTEST_F(WorkersTest, WorkerTest002, testing::ext::TestSize.Level0)1616 HWTEST_F(WorkersTest, WorkerTest002, testing::ext::TestSize.Level0)
1617 {
1618 napi_env env = (napi_env)engine_;
1619 napi_value global;
1620 napi_get_global(env, &global);
1621 napi_value result = nullptr;
1622 result = Worker_Constructor(env, global);
1623 Worker* worker = nullptr;
1624 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
1625
1626 napi_value argv[2] = {nullptr};
1627 std::string instanceName = "MainThread";
1628 napi_create_string_utf8(env, instanceName.c_str(), instanceName.length(), &argv[0]);
1629 napi_value obj = nullptr;
1630 napi_create_object(env, &obj);
1631 argv[1] = obj;
1632
1633 std::string funcName = "RegisterGlobalCallObject";
1634 napi_value cb = nullptr;
1635 napi_value callResult = nullptr;
1636 // ------- workerEnv---------
1637 napi_create_function(env, funcName.c_str(), funcName.size(),
1638 Worker::RegisterGlobalCallObject, worker, &cb);
1639 UpdateWorkerState(worker, Worker::RunnerState::RUNNING);
1640 napi_call_function(env, global, cb, sizeof(argv) / sizeof(argv[0]), argv, &callResult);
1641 worker->EraseWorker();
1642 ClearWorkerHandle(worker);
1643 result = Worker_Terminate(env, global);
1644 ASSERT_TRUE(result != nullptr);
1645 }
1646
HWTEST_F(WorkersTest, WorkerTest003, testing::ext::TestSize.Level0)1647 HWTEST_F(WorkersTest, WorkerTest003, testing::ext::TestSize.Level0)
1648 {
1649 napi_env env = (napi_env)engine_;
1650 napi_value global;
1651 napi_get_global(env, &global);
1652 napi_value result = nullptr;
1653 result = Worker_Constructor(env, global);
1654 Worker* worker = nullptr;
1655 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
1656
1657 napi_value argv[1] = {nullptr};
1658 std::string instanceName = "MainThread";
1659 napi_create_string_utf8(env, instanceName.c_str(), instanceName.length(), &argv[0]);
1660
1661 std::string funcName = "UnregisterGlobalCallObject";
1662 napi_value cb = nullptr;
1663 napi_value callResult = nullptr;
1664 // ------- workerEnv---------
1665 napi_create_function(env, funcName.c_str(), funcName.size(),
1666 Worker::UnregisterGlobalCallObject, worker, &cb);
1667 UpdateWorkerState(worker, Worker::RunnerState::RUNNING);
1668 napi_call_function(env, global, cb, sizeof(argv) / sizeof(argv[0]), argv, &callResult);
1669 worker->EraseWorker();
1670 ClearWorkerHandle(worker);
1671 result = Worker_Terminate(env, global);
1672 ASSERT_TRUE(result != nullptr);
1673 }
1674
HWTEST_F(WorkersTest, WorkerTest004, testing::ext::TestSize.Level0)1675 HWTEST_F(WorkersTest, WorkerTest004, testing::ext::TestSize.Level0)
1676 {
1677 napi_env env = (napi_env)engine_;
1678 napi_env workerEnv = nullptr;
1679 napi_create_runtime(env, &workerEnv);
1680 napi_value workerGlobal = nullptr;
1681 napi_get_global(workerEnv, &workerGlobal);
1682 NativeEngine::GetMainThreadEngine()->CheckAndSetWorkerVersion(WorkerVersion::OLD, WorkerVersion::NONE);
1683
1684 std::string funcName = "LimitedWorkerConstructor";
1685 napi_value cb = nullptr;
1686 napi_create_function(workerEnv, funcName.c_str(), funcName.size(), Worker::LimitedWorkerConstructor, nullptr, &cb);
1687
1688 napi_value result = nullptr;
1689 napi_value argv[2] = { nullptr };
1690 std::string script = "entry/ets/workers/@worker.ts";
1691 napi_create_string_utf8(workerEnv, script.c_str(), script.length(), &argv[0]);
1692 std::string type = "classic";
1693 std::string name = "WorkerThread";
1694 napi_value typeValue = nullptr;
1695 napi_value nameValue = nullptr;
1696 napi_create_string_utf8(workerEnv, name.c_str(), name.length(), &nameValue);
1697 napi_create_string_utf8(workerEnv, type.c_str(), type.length(), &typeValue);
1698
1699 napi_value object = nullptr;
1700 napi_create_object(workerEnv, &object);
1701
1702 napi_set_named_property(workerEnv, object, "name", nameValue);
1703 napi_set_named_property(workerEnv, object, "type", typeValue);
1704 argv[1] = object;
1705
1706 napi_call_function(workerEnv, workerGlobal, cb, sizeof(argv) / sizeof(argv[0]), argv, &result);
1707 uv_sleep(200);
1708 Worker* worker = nullptr;
1709 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
1710 worker->EraseWorker();
1711 ClearWorkerHandle(worker);
1712 result = Worker_Terminate(workerEnv, workerGlobal);
1713 NativeEngine::GetMainThreadEngine()->CheckAndSetWorkerVersion(WorkerVersion::NEW, WorkerVersion::OLD);
1714 ASSERT_TRUE(result != nullptr);
1715 }
1716
HWTEST_F(WorkersTest, WorkerTest005, testing::ext::TestSize.Level0)1717 HWTEST_F(WorkersTest, WorkerTest005, testing::ext::TestSize.Level0)
1718 {
1719 napi_env env = (napi_env)engine_;
1720 napi_env workerEnv = nullptr;
1721 napi_create_runtime(env, &workerEnv);
1722 napi_value workerGlobal = nullptr;
1723 napi_get_global(workerEnv, &workerGlobal);
1724 NativeEngine::GetMainThreadEngine()->CheckAndSetWorkerVersion(WorkerVersion::OLD, WorkerVersion::NONE);
1725 std::string funcName = "ThreadWorkerConstructor";
1726 napi_value cb = nullptr;
1727 napi_create_function(workerEnv, funcName.c_str(), funcName.size(), Worker::ThreadWorkerConstructor, nullptr, &cb);
1728
1729 napi_value result = nullptr;
1730 napi_value argv[2] = { nullptr };
1731 std::string script = "entry/ets/workers/@worker.ts";
1732 napi_create_string_utf8(workerEnv, script.c_str(), script.length(), &argv[0]);
1733 std::string type = "classic";
1734 std::string name = "WorkerThread";
1735 napi_value typeValue = nullptr;
1736 napi_value nameValue = nullptr;
1737 napi_create_string_utf8(workerEnv, name.c_str(), name.length(), &nameValue);
1738 napi_create_string_utf8(workerEnv, type.c_str(), type.length(), &typeValue);
1739
1740 napi_value object = nullptr;
1741 napi_create_object(workerEnv, &object);
1742
1743 napi_set_named_property(workerEnv, object, "name", nameValue);
1744 napi_set_named_property(workerEnv, object, "type", typeValue);
1745 argv[1] = object;
1746
1747 napi_call_function(workerEnv, workerGlobal, cb, sizeof(argv) / sizeof(argv[0]), argv, &result);
1748 uv_sleep(200);
1749 Worker* worker = nullptr;
1750 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
1751 worker->EraseWorker();
1752 ClearWorkerHandle(worker);
1753 result = Worker_Terminate(workerEnv, workerGlobal);
1754 NativeEngine::GetMainThreadEngine()->CheckAndSetWorkerVersion(WorkerVersion::NEW, WorkerVersion::OLD);
1755 ASSERT_TRUE(result != nullptr);
1756 }
1757
HWTEST_F(WorkersTest, WorkerTest006, testing::ext::TestSize.Level0)1758 HWTEST_F(WorkersTest, WorkerTest006, testing::ext::TestSize.Level0)
1759 {
1760 napi_env env = (napi_env)engine_;
1761 napi_value global;
1762 napi_get_global(env, &global);
1763
1764 napi_value result = nullptr;
1765 result = Worker_Constructor(env, global);
1766
1767 Worker* worker = nullptr;
1768 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
1769
1770 napi_value argv[1] = { nullptr };
1771 std::string message = "host";
1772 napi_create_string_utf8(env, message.c_str(), message.length(), &argv[0]);
1773 std::string funcName = "PostMessageWithSharedSendable";
1774 napi_value cb = nullptr;
1775 napi_create_function(env, funcName.c_str(), funcName.size(), Worker::PostMessageWithSharedSendable, worker, &cb);
1776 UpdateWorkerState(worker, Worker::RunnerState::RUNNING);
1777 napi_call_function(env, global, cb, sizeof(argv) / sizeof(argv[0]), argv, &result);
1778
1779 worker->EraseWorker();
1780 ClearWorkerHandle(worker);
1781 result = Worker_Terminate(env, global);
1782 ASSERT_TRUE(result != nullptr);
1783 }
1784
HWTEST_F(WorkersTest, WorkerTest007, testing::ext::TestSize.Level0)1785 HWTEST_F(WorkersTest, WorkerTest007, testing::ext::TestSize.Level0)
1786 {
1787 napi_env env = (napi_env)engine_;
1788 napi_value global;
1789 napi_get_global(env, &global);
1790
1791 napi_value result = nullptr;
1792 result = Worker_Constructor(env, global);
1793
1794 Worker* worker = nullptr;
1795 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
1796
1797 napi_value argv[1] = { nullptr };
1798
1799 std::string funcName = "RemoveAllListener";
1800 napi_value cb = nullptr;
1801 napi_create_function(env, funcName.c_str(), funcName.size(), Worker::RemoveAllListener, worker, &cb);
1802 UpdateWorkerState(worker, Worker::RunnerState::RUNNING);
1803 napi_call_function(env, global, cb, 1, argv, &result);
1804 worker->EraseWorker();
1805 ClearWorkerHandle(worker);
1806 result = Worker_Terminate(env, global);
1807 ASSERT_TRUE(result != nullptr);
1808 }
1809
HWTEST_F(WorkersTest, WorkerTest008, testing::ext::TestSize.Level0)1810 HWTEST_F(WorkersTest, WorkerTest008, testing::ext::TestSize.Level0)
1811 {
1812 napi_env env = (napi_env)engine_;
1813 napi_value global;
1814 napi_get_global(env, &global);
1815
1816 napi_value result = nullptr;
1817 result = Worker_Constructor(env, global);
1818
1819 Worker* worker = nullptr;
1820 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
1821
1822 napi_value argv[1] = { nullptr };
1823 std::string message = "host";
1824 napi_create_string_utf8(env, message.c_str(), message.length(), &argv[0]);
1825
1826 std::string funcName = "CancelTask";
1827 napi_value cb = nullptr;
1828 napi_create_function(env, funcName.c_str(), funcName.size(), Worker::CancelTask, worker, &cb);
1829 UpdateWorkerState(worker, Worker::RunnerState::RUNNING);
1830 napi_call_function(env, global, cb, sizeof(argv) / sizeof(argv[0]), argv, &result);
1831 worker->EraseWorker();
1832 ClearWorkerHandle(worker);
1833 result = Worker_Terminate(env, global);
1834 ASSERT_TRUE(result != nullptr);
1835 }
1836
HWTEST_F(WorkersTest, WorkerTest009, testing::ext::TestSize.Level0)1837 HWTEST_F(WorkersTest, WorkerTest009, testing::ext::TestSize.Level0)
1838 {
1839 napi_env env = (napi_env)engine_;
1840 napi_value global;
1841 napi_get_global(env, &global);
1842
1843 napi_value result = nullptr;
1844 result = Worker_Constructor(env, global);
1845
1846 Worker* worker = nullptr;
1847 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
1848 napi_value argv[1] = { nullptr };
1849 std::string message = "host";
1850 napi_create_string_utf8(env, message.c_str(), message.length(), &argv[0]);
1851
1852 std::string funcName = "PostMessageWithSharedSendableToHost";
1853 napi_value cb = nullptr;
1854 napi_create_function(env, funcName.c_str(), funcName.size(),
1855 Worker::PostMessageWithSharedSendableToHost, worker, &cb);
1856 UpdateWorkerState(worker, Worker::RunnerState::RUNNING);
1857 napi_call_function(env, global, cb, sizeof(argv) / sizeof(argv[0]), argv, &result);
1858 uv_async_t* req = new uv_async_t;
1859 req->data = worker;
1860 Worker::HostOnMessage(req);
1861
1862 worker->EraseWorker();
1863 ClearWorkerHandle(worker);
1864 result = Worker_Terminate(env, global);
1865 ASSERT_TRUE(result != nullptr);
1866 }
1867
HWTEST_F(WorkersTest, WorkerTest010, testing::ext::TestSize.Level0)1868 HWTEST_F(WorkersTest, WorkerTest010, testing::ext::TestSize.Level0)
1869 {
1870 napi_env env = (napi_env)engine_;
1871 napi_value global;
1872 napi_get_global(env, &global);
1873
1874 napi_value result = nullptr;
1875 result = Worker_Constructor(env, global);
1876
1877 Worker* worker = nullptr;
1878 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
1879 napi_value argv[1] = { nullptr };
1880 std::string message = "host";
1881 napi_create_string_utf8(env, message.c_str(), message.length(), &argv[0]);
1882
1883 std::string funcName = "ParentPortCancelTask";
1884 napi_value cb = nullptr;
1885 napi_create_function(env, funcName.c_str(), funcName.size(), Worker::ParentPortCancelTask, worker, &cb);
1886 UpdateWorkerState(worker, Worker::RunnerState::RUNNING);
1887 napi_call_function(env, global, cb, sizeof(argv) / sizeof(argv[0]), argv, &result);
1888 worker->EraseWorker();
1889 ClearWorkerHandle(worker);
1890 result = Worker_Terminate(env, global);
1891 ASSERT_TRUE(result != nullptr);
1892 }
1893
HWTEST_F(WorkersTest, WorkerTest011, testing::ext::TestSize.Level0)1894 HWTEST_F(WorkersTest, WorkerTest011, testing::ext::TestSize.Level0)
1895 {
1896 napi_env env = (napi_env)engine_;
1897 napi_value global;
1898 napi_get_global(env, &global);
1899
1900 napi_value result = nullptr;
1901 result = Worker_Constructor(env, global);
1902
1903 Worker* worker = nullptr;
1904 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
1905 UpdateWorkerState(worker, Worker::RunnerState::RUNNING);
1906 uv_async_t* req = new uv_async_t;
1907 req->data = nullptr;
1908 Worker::HostOnError(req);
1909 req->data = worker;
1910 Worker::HostOnError(req);
1911 worker->EraseWorker();
1912 ClearWorkerHandle(worker);
1913 ASSERT_TRUE(result != nullptr);
1914 }
1915
1916 //worker PostMessage
HWTEST_F(WorkersTest, WorkerTest012, testing::ext::TestSize.Level0)1917 HWTEST_F(WorkersTest, WorkerTest012, testing::ext::TestSize.Level0)
1918 {
1919 napi_env env = (napi_env)engine_;
1920 napi_value global;
1921 napi_get_global(env, &global);
1922
1923 napi_value result = nullptr;
1924 result = Worker_Constructor(env, global);
1925
1926 Worker* worker = nullptr;
1927 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
1928
1929 napi_value argv[1] = { nullptr };
1930 std::string message = "host";
1931 napi_create_string_utf8(env, message.c_str(), message.length(), &argv[0]);
1932 std::string funcName = "PostMessage";
1933 napi_value cb = nullptr;
1934 napi_create_function(env, funcName.c_str(), funcName.size(), Worker::PostMessage, worker, &cb);
1935 UpdateWorkerState(worker, Worker::RunnerState::RUNNING);
1936 napi_call_function(env, global, cb, sizeof(argv) / sizeof(argv[0]), argv, &result);
1937
1938 worker->EraseWorker();
1939 ClearWorkerHandle(worker);
1940 result = Worker_Terminate(env, global);
1941 ASSERT_TRUE(result != nullptr);
1942 }
1943
1944
HWTEST_F(WorkersTest, CloseWorkerTest001, testing::ext::TestSize.Level0)1945 HWTEST_F(WorkersTest, CloseWorkerTest001, testing::ext::TestSize.Level0)
1946 {
1947 napi_env env = (napi_env)engine_;
1948 napi_value global;
1949 napi_get_global(env, &global);
1950 napi_value result = nullptr;
1951 std::string funcName = "CloseWorker";
1952 napi_value cb = nullptr;
1953 napi_create_function(env, funcName.c_str(), funcName.size(), Worker::CloseWorker, nullptr, &cb);
1954 napi_call_function(env, global, cb, 0, nullptr, &result);
1955 ASSERT_TRUE(result != nullptr);
1956 }
1957
HWTEST_F(WorkersTest, CloseWorkerTest002, testing::ext::TestSize.Level0)1958 HWTEST_F(WorkersTest, CloseWorkerTest002, testing::ext::TestSize.Level0)
1959 {
1960 napi_env env = (napi_env)engine_;
1961 napi_value global;
1962 napi_get_global(env, &global);
1963
1964 napi_value result = nullptr;
1965 result = Worker_Constructor(env, global);
1966
1967 Worker* worker = nullptr;
1968 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
1969 ASSERT_TRUE(worker != nullptr);
1970
1971 std::string funcName = "CloseWorker";
1972 napi_value cb = nullptr;
1973 napi_create_function(env, funcName.c_str(), funcName.size(), Worker::CloseWorker, worker, &cb);
1974 napi_env workerEnv = nullptr;
1975 napi_create_runtime(env, &workerEnv);
1976 SetCloseWorkerProp(worker, workerEnv);
1977 napi_call_function(env, global, cb, 0, nullptr, &result);
1978 worker->EraseWorker();
1979 ClearWorkerHandle(worker);
1980 ASSERT_TRUE(result != nullptr);
1981 }
1982
HWTEST_F(WorkersTest, InitWorkerTest001, testing::ext::TestSize.Level0)1983 HWTEST_F(WorkersTest, InitWorkerTest001, testing::ext::TestSize.Level0)
1984 {
1985 napi_env env = (napi_env)engine_;
1986 napi_value exports = nullptr;
1987 napi_create_object(env, &exports);
1988 Worker::InitWorker(env, exports);
1989 ASSERT_TRUE(exports != nullptr);
1990 }
1991
HWTEST_F(WorkersTest, InitWorkerTest002, testing::ext::TestSize.Level0)1992 HWTEST_F(WorkersTest, InitWorkerTest002, testing::ext::TestSize.Level0)
1993 {
1994 napi_env env = (napi_env)engine_;
1995 napi_env workerEnv = nullptr;
1996 napi_create_runtime(env, &workerEnv);
1997 napi_value workerGlobal = nullptr;
1998 napi_get_global(workerEnv, &workerGlobal);
1999 NativeEngine::GetMainThreadEngine()->CheckAndSetWorkerVersion(WorkerVersion::OLD, WorkerVersion::NONE);
2000 std::string funcName = "ThreadWorkerConstructor";
2001 napi_value cb = nullptr;
2002 napi_create_function(workerEnv, funcName.c_str(), funcName.size(), Worker::ThreadWorkerConstructor, nullptr, &cb);
2003
2004 napi_value result = nullptr;
2005 napi_value argv[2] = { nullptr };
2006 std::string script = "entry/ets/workers/@worker.ts";
2007 napi_create_string_utf8(workerEnv, script.c_str(), script.length(), &argv[0]);
2008 std::string type = "classic";
2009 std::string name = "WorkerThread";
2010 napi_value typeValue = nullptr;
2011 napi_value nameValue = nullptr;
2012 napi_create_string_utf8(workerEnv, name.c_str(), name.length(), &nameValue);
2013 napi_create_string_utf8(workerEnv, type.c_str(), type.length(), &typeValue);
2014
2015 napi_value object = nullptr;
2016 napi_create_object(workerEnv, &object);
2017
2018 napi_set_named_property(workerEnv, object, "name", nameValue);
2019 napi_set_named_property(workerEnv, object, "type", typeValue);
2020 argv[1] = object;
2021
2022 napi_call_function(workerEnv, workerGlobal, cb, sizeof(argv) / sizeof(argv[0]), argv, &result);
2023 uv_sleep(200);
2024 Worker* worker = nullptr;
2025 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
2026 ASSERT_TRUE(worker != nullptr);
2027 worker->SetWorkerEnv(workerEnv);
2028 NativeEngine* workerEngine = reinterpret_cast<NativeEngine*>(workerEnv);
2029 workerEngine->MarkRestrictedWorkerThread();
2030 napi_value exports = nullptr;
2031 napi_create_object(env, &exports);
2032 Worker::InitWorker(workerEnv, exports);
2033 worker->EraseWorker();
2034 ClearWorkerHandle(worker);
2035 NativeEngine::GetMainThreadEngine()->CheckAndSetWorkerVersion(WorkerVersion::NEW, WorkerVersion::OLD);
2036 ASSERT_TRUE(result != nullptr);
2037 }
2038
HWTEST_F(WorkersTest, InitWorkerTest003, testing::ext::TestSize.Level0)2039 HWTEST_F(WorkersTest, InitWorkerTest003, testing::ext::TestSize.Level0)
2040 {
2041 napi_env env = (napi_env)engine_;
2042 napi_env workerEnv = nullptr;
2043 napi_create_runtime(env, &workerEnv);
2044 napi_value workerGlobal = nullptr;
2045 napi_get_global(workerEnv, &workerGlobal);
2046 NativeEngine::GetMainThreadEngine()->CheckAndSetWorkerVersion(WorkerVersion::OLD, WorkerVersion::NONE);
2047 std::string funcName = "ThreadWorkerConstructor";
2048 napi_value cb = nullptr;
2049 napi_create_function(workerEnv, funcName.c_str(), funcName.size(), Worker::ThreadWorkerConstructor, nullptr, &cb);
2050
2051 napi_value result = nullptr;
2052 napi_value argv[2] = { nullptr };
2053 std::string script = "entry/ets/workers/@worker.ts";
2054 napi_create_string_utf8(workerEnv, script.c_str(), script.length(), &argv[0]);
2055 std::string type = "classic";
2056 std::string name = "WorkerThread";
2057 napi_value typeValue = nullptr;
2058 napi_value nameValue = nullptr;
2059 napi_create_string_utf8(workerEnv, name.c_str(), name.length(), &nameValue);
2060 napi_create_string_utf8(workerEnv, type.c_str(), type.length(), &typeValue);
2061
2062 napi_value object = nullptr;
2063 napi_create_object(workerEnv, &object);
2064
2065 napi_set_named_property(workerEnv, object, "name", nameValue);
2066 napi_set_named_property(workerEnv, object, "type", typeValue);
2067 argv[1] = object;
2068
2069 napi_call_function(workerEnv, workerGlobal, cb, sizeof(argv) / sizeof(argv[0]), argv, &result);
2070
2071 uv_sleep(200);
2072 Worker* worker = new Worker(env, nullptr);
2073 napi_wrap(env, result, worker, nullptr, nullptr, nullptr);
2074 worker->SetWorkerEnv(workerEnv);
2075 NativeEngine* workerEngine = reinterpret_cast<NativeEngine*>(workerEnv);
2076 workerEngine->MarkTaskPoolThread();
2077 napi_value exports = nullptr;
2078 napi_create_object(env, &exports);
2079 Worker::InitWorker(workerEnv, exports);
2080 worker->EraseWorker();
2081 ClearWorkerHandle(worker);
2082 NativeEngine::GetMainThreadEngine()->CheckAndSetWorkerVersion(WorkerVersion::NEW, WorkerVersion::OLD);
2083 ASSERT_TRUE(result != nullptr);
2084 }
2085
HWTEST_F(WorkersTest, InitWorkerTest004, testing::ext::TestSize.Level0)2086 HWTEST_F(WorkersTest, InitWorkerTest004, testing::ext::TestSize.Level0)
2087 {
2088 napi_env env = (napi_env)engine_;
2089 napi_env workerEnv = nullptr;
2090 napi_create_runtime(env, &workerEnv);
2091 napi_value workerGlobal = nullptr;
2092 napi_get_global(workerEnv, &workerGlobal);
2093 NativeEngine::GetMainThreadEngine()->CheckAndSetWorkerVersion(WorkerVersion::OLD, WorkerVersion::NONE);
2094 std::string funcName = "ThreadWorkerConstructor";
2095 napi_value cb = nullptr;
2096 napi_create_function(workerEnv, funcName.c_str(), funcName.size(), Worker::ThreadWorkerConstructor, nullptr, &cb);
2097
2098 napi_value result = nullptr;
2099 napi_value argv[2] = { nullptr };
2100 std::string script = "entry/ets/workers/@worker.ts";
2101 napi_create_string_utf8(workerEnv, script.c_str(), script.length(), &argv[0]);
2102 std::string type = "classic";
2103 std::string name = "WorkerThread";
2104 napi_value typeValue = nullptr;
2105 napi_value nameValue = nullptr;
2106 napi_create_string_utf8(workerEnv, name.c_str(), name.length(), &nameValue);
2107 napi_create_string_utf8(workerEnv, type.c_str(), type.length(), &typeValue);
2108
2109 napi_value object = nullptr;
2110 napi_create_object(workerEnv, &object);
2111
2112 napi_set_named_property(workerEnv, object, "name", nameValue);
2113 napi_set_named_property(workerEnv, object, "type", typeValue);
2114 argv[1] = object;
2115
2116 napi_call_function(workerEnv, workerGlobal, cb, sizeof(argv) / sizeof(argv[0]), argv, &result);
2117
2118 uv_sleep(200);
2119 Worker* worker = nullptr;
2120 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
2121 worker->SetWorkerEnv(workerEnv);
2122 NativeEngine* workerEngine = reinterpret_cast<NativeEngine*>(workerEnv);
2123 workerEngine->MarkWorkerThread();
2124 napi_value exports = nullptr;
2125 napi_create_object(workerEnv, &exports);
2126 Worker::InitWorker(workerEnv, exports);
2127 worker->EraseWorker();
2128 ClearWorkerHandle(worker);
2129 NativeEngine::GetMainThreadEngine()->CheckAndSetWorkerVersion(WorkerVersion::NEW, WorkerVersion::OLD);
2130 ASSERT_TRUE(result != nullptr);
2131 }
2132
HWTEST_F(WorkersTest, InitWorkerTest005, testing::ext::TestSize.Level0)2133 HWTEST_F(WorkersTest, InitWorkerTest005, testing::ext::TestSize.Level0)
2134 {
2135 napi_env env = (napi_env)engine_;
2136 napi_env workerEnv = nullptr;
2137 napi_create_runtime(env, &workerEnv);
2138 napi_value workerGlobal = nullptr;
2139 napi_get_global(workerEnv, &workerGlobal);
2140 NativeEngine::GetMainThreadEngine()->CheckAndSetWorkerVersion(WorkerVersion::OLD, WorkerVersion::NONE);
2141 std::string funcName = "LimitedWorkerConstructor";
2142 napi_value cb = nullptr;
2143 napi_create_function(workerEnv, funcName.c_str(), funcName.size(), Worker::LimitedWorkerConstructor, nullptr, &cb);
2144
2145 napi_value result = nullptr;
2146 napi_value argv[2] = { nullptr };
2147 std::string script = "entry/ets/workers/@worker.ts";
2148 napi_create_string_utf8(workerEnv, script.c_str(), script.length(), &argv[0]);
2149 std::string type = "classic";
2150 std::string name = "WorkerThread";
2151 napi_value typeValue = nullptr;
2152 napi_value nameValue = nullptr;
2153 napi_create_string_utf8(workerEnv, name.c_str(), name.length(), &nameValue);
2154 napi_create_string_utf8(workerEnv, type.c_str(), type.length(), &typeValue);
2155
2156 napi_value object = nullptr;
2157 napi_create_object(workerEnv, &object);
2158
2159 napi_set_named_property(workerEnv, object, "name", nameValue);
2160 napi_set_named_property(workerEnv, object, "type", typeValue);
2161 argv[1] = object;
2162
2163 napi_call_function(workerEnv, workerGlobal, cb, sizeof(argv) / sizeof(argv[0]), argv, &result);
2164
2165 uv_sleep(200);
2166 Worker* worker = nullptr;
2167 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
2168 worker->SetWorkerEnv(workerEnv);
2169 NativeEngine* workerEngine = reinterpret_cast<NativeEngine*>(workerEnv);
2170 workerEngine->MarkRestrictedWorkerThread();
2171 napi_value exports = nullptr;
2172 napi_create_object(workerEnv, &exports);
2173 Worker::InitWorker(workerEnv, exports);
2174 worker->EraseWorker();
2175 ClearWorkerHandle(worker);
2176 NativeEngine::GetMainThreadEngine()->CheckAndSetWorkerVersion(WorkerVersion::NEW, WorkerVersion::OLD);
2177 ASSERT_TRUE(result != nullptr);
2178 }
2179
HWTEST_F(WorkersTest, ConstructorTest001, testing::ext::TestSize.Level0)2180 HWTEST_F(WorkersTest, ConstructorTest001, testing::ext::TestSize.Level0)
2181 {
2182 napi_env env = WorkersTest::GetEnv();
2183 Worker *worker = new Worker(env, nullptr);
2184 ASSERT_TRUE(worker != nullptr);
2185 napi_env hostEnv = worker->GetHostEnv();
2186 ASSERT_TRUE(env == hostEnv);
2187 napi_env workerEnv = worker->GetWorkerEnv();
2188 ASSERT_TRUE(workerEnv == nullptr);
2189 delete worker;
2190 worker = nullptr;
2191 }
2192
HWTEST_F(WorkersTest, ConstructorTest002, testing::ext::TestSize.Level0)2193 HWTEST_F(WorkersTest, ConstructorTest002, testing::ext::TestSize.Level0)
2194 {
2195 napi_env env = (napi_env)engine_;
2196 napi_value global = nullptr;
2197 napi_get_global(env, &global);
2198
2199 std::string funcName = "LimitedWorkerConstructor";
2200 napi_value cb = nullptr;
2201 napi_create_function(env, funcName.c_str(), funcName.size(), Worker::LimitedWorkerConstructor, nullptr, &cb);
2202
2203 napi_value result = nullptr;
2204 napi_value argv[2] = { nullptr };
2205 std::string script = "entry/ets/workers/@worker.ts";
2206 napi_create_string_utf8(env, script.c_str(), script.length(), &argv[0]);
2207 std::string type = "classic";
2208 std::string name = "WorkerThread";
2209 napi_value typeValue = nullptr;
2210 napi_value nameValue = nullptr;
2211 napi_create_string_utf8(env, name.c_str(), name.length(), &nameValue);
2212 napi_create_string_utf8(env, type.c_str(), type.length(), &typeValue);
2213
2214 napi_value object = nullptr;
2215 napi_create_object(env, &object);
2216
2217 napi_set_named_property(env, object, "name", nameValue);
2218 napi_set_named_property(env, object, "type", typeValue);
2219 argv[1] = object;
2220
2221 napi_call_function(env, global, cb, sizeof(argv) / sizeof(argv[0]), argv, &result);
2222 uv_sleep(200);
2223 ASSERT_TRUE(result == nullptr);
2224 }
2225
HWTEST_F(WorkersTest, ConstructorTest003, testing::ext::TestSize.Level0)2226 HWTEST_F(WorkersTest, ConstructorTest003, testing::ext::TestSize.Level0)
2227 {
2228 napi_env env = (napi_env)engine_;
2229 napi_value global = nullptr;
2230 napi_get_global(env, &global);
2231
2232 std::string funcName = "ThreadWorkerConstructor";
2233 napi_value cb = nullptr;
2234 napi_create_function(env, funcName.c_str(), funcName.size(), Worker::ThreadWorkerConstructor, nullptr, &cb);
2235
2236 napi_value result = nullptr;
2237 napi_value argv[2] = { nullptr };
2238 std::string script = "entry/ets/workers/@worker.ts";
2239 napi_create_string_utf8(env, script.c_str(), script.length(), &argv[0]);
2240 std::string type = "classic";
2241 std::string name = "WorkerThread";
2242 napi_value typeValue = nullptr;
2243 napi_value nameValue = nullptr;
2244 napi_create_string_utf8(env, name.c_str(), name.length(), &nameValue);
2245 napi_create_string_utf8(env, type.c_str(), type.length(), &typeValue);
2246
2247 napi_value object = nullptr;
2248 napi_create_object(env, &object);
2249
2250 napi_set_named_property(env, object, "name", nameValue);
2251 napi_set_named_property(env, object, "type", typeValue);
2252 argv[1] = object;
2253
2254 napi_call_function(env, global, cb, sizeof(argv) / sizeof(argv[0]), argv, &result);
2255 uv_sleep(200);
2256 ASSERT_TRUE(result == nullptr);
2257 }
2258
HWTEST_F(WorkersTest, ConstructorTest004, testing::ext::TestSize.Level0)2259 HWTEST_F(WorkersTest, ConstructorTest004, testing::ext::TestSize.Level0)
2260 {
2261 napi_env env = (napi_env)engine_;
2262 napi_env workerEnv = nullptr;
2263 napi_create_runtime(env, &workerEnv);
2264 napi_value workerGlobal = nullptr;
2265 napi_get_global(workerEnv, &workerGlobal);
2266 NativeEngine::GetMainThreadEngine()->CheckAndSetWorkerVersion(WorkerVersion::OLD, WorkerVersion::NONE);
2267 std::string funcName = "ThreadWorkerConstructor";
2268 napi_value cb = nullptr;
2269 napi_create_function(workerEnv, funcName.c_str(), funcName.size(), Worker::ThreadWorkerConstructor, nullptr, &cb);
2270
2271 napi_value result = nullptr;
2272 napi_call_function(workerEnv, workerGlobal, cb, 0, nullptr, &result);
2273 uv_sleep(200);
2274 NativeEngine::GetMainThreadEngine()->CheckAndSetWorkerVersion(WorkerVersion::NEW, WorkerVersion::OLD);
2275 ASSERT_TRUE(result == nullptr);
2276 }
2277
HWTEST_F(WorkersTest, ConstructorTest005, testing::ext::TestSize.Level0)2278 HWTEST_F(WorkersTest, ConstructorTest005, testing::ext::TestSize.Level0)
2279 {
2280 napi_env env = (napi_env)engine_;
2281 napi_env workerEnv = nullptr;
2282 napi_create_runtime(env, &workerEnv);
2283 napi_value workerGlobal = nullptr;
2284 napi_get_global(workerEnv, &workerGlobal);
2285 NativeEngine::GetMainThreadEngine()->CheckAndSetWorkerVersion(WorkerVersion::OLD, WorkerVersion::NONE);
2286 std::string funcName = "ThreadWorkerConstructor";
2287 napi_value cb = nullptr;
2288 napi_create_function(workerEnv, funcName.c_str(), funcName.size(), Worker::ThreadWorkerConstructor, nullptr, &cb);
2289
2290 napi_value result = nullptr;
2291 napi_value argv[2] = { nullptr };
2292 int32_t script = 200;
2293 napi_create_int32(workerEnv, script, &argv[0]);
2294 std::string type = "classic";
2295 std::string name = "WorkerThread";
2296 napi_value typeValue = nullptr;
2297 napi_value nameValue = nullptr;
2298 napi_create_string_utf8(workerEnv, name.c_str(), name.length(), &nameValue);
2299 napi_create_string_utf8(workerEnv, type.c_str(), type.length(), &typeValue);
2300
2301 napi_value object = nullptr;
2302 napi_create_object(workerEnv, &object);
2303
2304 napi_set_named_property(workerEnv, object, "name", nameValue);
2305 napi_set_named_property(workerEnv, object, "type", typeValue);
2306 argv[1] = object;
2307
2308 napi_call_function(workerEnv, workerGlobal, cb, sizeof(argv) / sizeof(argv[0]), argv, &result);
2309 NativeEngine::GetMainThreadEngine()->CheckAndSetWorkerVersion(WorkerVersion::NEW, WorkerVersion::OLD);
2310 uv_sleep(200);
2311 ASSERT_TRUE(result == nullptr);
2312 }
2313
HWTEST_F(WorkersTest, ConstructorTest006, testing::ext::TestSize.Level0)2314 HWTEST_F(WorkersTest, ConstructorTest006, testing::ext::TestSize.Level0)
2315 {
2316 napi_env env = (napi_env)engine_;
2317 napi_env workerEnv = nullptr;
2318 napi_create_runtime(env, &workerEnv);
2319 napi_value workerGlobal = nullptr;
2320 napi_get_global(workerEnv, &workerGlobal);
2321 auto engine = reinterpret_cast<NativeEngine*>(workerEnv);
2322 engine->CheckAndSetWorkerVersion(WorkerVersion::NONE, WorkerVersion::OLD);
2323 Worker::ThreadWorkerConstructor(workerEnv, nullptr);
2324 napi_value exception = nullptr;
2325 napi_get_and_clear_last_exception(workerEnv, &exception);
2326 ASSERT_TRUE(exception != nullptr);
2327 engine->CheckAndSetWorkerVersion(WorkerVersion::OLD, WorkerVersion::NEW);
2328 Worker::WorkerConstructor(workerEnv, nullptr);
2329 napi_get_and_clear_last_exception(workerEnv, &exception);
2330 ASSERT_TRUE(exception != nullptr);
2331 }
2332
HWTEST_F(WorkersTest, ConstructorTest007, testing::ext::TestSize.Level0)2333 HWTEST_F(WorkersTest, ConstructorTest007, testing::ext::TestSize.Level0)
2334 {
2335 napi_env env = (napi_env)engine_;
2336 napi_env workerEnv = nullptr;
2337 napi_create_runtime(env, &workerEnv);
2338 napi_value workerGlobal = nullptr;
2339 napi_get_global(workerEnv, &workerGlobal);
2340 std::string funcName = "WorkerConstructor";
2341 napi_value cb = nullptr;
2342 napi_create_function(workerEnv, funcName.c_str(), funcName.size(), Worker::WorkerConstructor, nullptr, &cb);
2343
2344 napi_value result = nullptr;
2345 napi_value argv[2] = { nullptr };
2346 std::string script = "entry/ets/workers/@worker.ts";
2347 napi_create_string_utf8(workerEnv, script.c_str(), script.length(), &argv[0]);
2348 argv[1] = nullptr;
2349 napi_call_function(workerEnv, workerGlobal, cb, sizeof(argv) / sizeof(argv[0]), argv, &result);
2350 uv_sleep(200);
2351 ASSERT_TRUE(result != nullptr);
2352 napi_value exception = nullptr;
2353 napi_get_and_clear_last_exception(env, &exception);
2354 ASSERT_TRUE(exception != nullptr);
2355 }
2356
HWTEST_F(WorkersTest, ConstructorTest008, testing::ext::TestSize.Level0)2357 HWTEST_F(WorkersTest, ConstructorTest008, testing::ext::TestSize.Level0)
2358 {
2359 napi_env env = (napi_env)engine_;
2360 napi_env workerEnv = nullptr;
2361 napi_create_runtime(env, &workerEnv);
2362 napi_value workerGlobal = nullptr;
2363 napi_get_global(workerEnv, &workerGlobal);
2364 std::string funcName = "WorkerConstructor";
2365 napi_value cb = nullptr;
2366 napi_create_function(workerEnv, funcName.c_str(), funcName.size(), Worker::WorkerConstructor, nullptr, &cb);
2367
2368 napi_value result = nullptr;
2369 napi_value argv[3] = { nullptr };
2370 std::string script = "entry/ets/workers/@worker.ts";
2371 napi_create_string_utf8(workerEnv, script.c_str(), script.length(), &argv[0]);
2372 argv[1] = nullptr;
2373 napi_call_function(workerEnv, workerGlobal, cb, sizeof(argv) / sizeof(argv[0]), argv, &result);
2374 uv_sleep(200);
2375 ASSERT_TRUE(result != nullptr);
2376 napi_value exception = nullptr;
2377 napi_get_and_clear_last_exception(env, &exception);
2378 ASSERT_TRUE(exception == nullptr);
2379 }
2380
HWTEST_F(WorkersTest, ConstructorTest009, testing::ext::TestSize.Level0)2381 HWTEST_F(WorkersTest, ConstructorTest009, testing::ext::TestSize.Level0)
2382 {
2383 napi_env env = (napi_env)engine_;
2384 napi_env workerEnv = nullptr;
2385 napi_create_runtime(env, &workerEnv);
2386 napi_value workerGlobal = nullptr;
2387 napi_get_global(workerEnv, &workerGlobal);
2388 std::string funcName = "WorkerConstructor";
2389 napi_value cb = nullptr;
2390 napi_create_function(workerEnv, funcName.c_str(), funcName.size(), Worker::WorkerConstructor, nullptr, &cb);
2391
2392 napi_value result = nullptr;
2393 napi_value argv[2] = { nullptr };
2394 argv[0] = NapiHelper::CreateEmptyString(workerEnv);
2395 std::string type = "classic";
2396 napi_value typeValue = nullptr;
2397 napi_create_string_utf8(workerEnv, type.c_str(), type.length(), &typeValue);
2398 napi_value nameValue = NapiHelper::CreateEmptyString(workerEnv);;
2399
2400 napi_value object = nullptr;
2401 napi_create_object(workerEnv, &object);
2402
2403 napi_set_named_property(workerEnv, object, "name", nameValue);
2404 napi_set_named_property(workerEnv, object, "type", typeValue);
2405 argv[1] = object;
2406
2407 napi_call_function(workerEnv, workerGlobal, cb, sizeof(argv) / sizeof(argv[0]), argv, &result);
2408 uv_sleep(200);
2409 ASSERT_TRUE(result != nullptr);
2410 napi_value exception = nullptr;
2411 napi_get_and_clear_last_exception(env, &exception);
2412 ASSERT_TRUE(exception == nullptr);
2413 }
2414
HWTEST_F(WorkersTest, CheckWorkerArgs001, testing::ext::TestSize.Level0)2415 HWTEST_F(WorkersTest, CheckWorkerArgs001, testing::ext::TestSize.Level0)
2416 {
2417 napi_env env = (napi_env)engine_;
2418 napi_value undefined = NapiHelper::GetUndefinedValue(env);
2419 napi_value object1 = nullptr;
2420 napi_create_object(env, &object1);
2421 napi_set_named_property(env, object1, "name", undefined);
2422 napi_set_named_property(env, object1, "type", undefined);
2423 Worker::CheckWorkerArgs(env, object1);
2424
2425 uint32_t name2 = 100; //test 100
2426 napi_value nameValue2 = nullptr;
2427 napi_create_uint32(env, name2, &nameValue2);
2428 napi_value object2 = nullptr;
2429 napi_create_object(env, &object2);
2430 napi_set_named_property(env, object2, "name", nameValue2);
2431 Worker::CheckWorkerArgs(env, object2);
2432 napi_value exception = nullptr;
2433 napi_get_and_clear_last_exception(env, &exception);
2434 ASSERT_TRUE(exception == nullptr);
2435
2436 uint32_t type3 = 100; //test 100
2437 std::string name3 = "WorkerThread";
2438 napi_value typeValue3 = nullptr;
2439 napi_value nameValue3 = nullptr;
2440 napi_create_string_utf8(env, name3.c_str(), name3.length(), &nameValue3);
2441 napi_create_uint32(env, type3, &typeValue3);
2442 napi_value object3 = nullptr;
2443 napi_create_object(env, &object3);
2444 napi_set_named_property(env, object3, "name", nameValue3);
2445 napi_set_named_property(env, object3, "type", typeValue3);
2446 Worker::CheckWorkerArgs(env, object3);
2447 napi_get_and_clear_last_exception(env, &exception);
2448 ASSERT_TRUE(exception == nullptr);
2449 }
2450
HWTEST_F(WorkersTest, WorkerTest013, testing::ext::TestSize.Level0)2451 HWTEST_F(WorkersTest, WorkerTest013, testing::ext::TestSize.Level0)
2452 {
2453 napi_env env = (napi_env)engine_;
2454 napi_value global;
2455 napi_get_global(env, &global);
2456 napi_value result = nullptr;
2457 result = Worker_Constructor(env, global);
2458 Worker* worker = nullptr;
2459 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
2460 napi_value argv[1] = { nullptr };
2461 std::string message = "host";
2462 napi_create_string_utf8(env, message.c_str(), message.length(), &argv[0]);
2463 std::string funcName = "PostMessage";
2464 napi_value cb = nullptr;
2465 napi_create_function(env, funcName.c_str(), funcName.size(), Worker::PostMessage, worker, &cb);
2466 napi_call_function(env, global, cb, 0, nullptr, &result);
2467 napi_value exception = nullptr;
2468 napi_get_and_clear_last_exception(env, &exception);
2469 ASSERT_TRUE(exception != nullptr);
2470 cb = nullptr;
2471 napi_create_function(env, funcName.c_str(), funcName.size(), Worker::PostMessage, worker, &cb);
2472 UpdateWorkerState(worker, Worker::RunnerState::TERMINATEING);
2473 napi_call_function(env, global, cb, sizeof(argv) / sizeof(argv[0]), argv, &result);
2474 cb = nullptr;
2475 napi_create_function(env, funcName.c_str(), funcName.size(), Worker::PostMessage, worker, &cb);
2476 UpdateWorkerState(worker, Worker::RunnerState::TERMINATED);
2477 napi_call_function(env, global, cb, sizeof(argv) / sizeof(argv[0]), argv, &result);
2478 worker->EraseWorker();
2479 ClearWorkerHandle(worker);
2480 result = Worker_Terminate(env, global);
2481 ASSERT_TRUE(result != nullptr);
2482 }
2483
HWTEST_F(WorkersTest, WorkerTest014, testing::ext::TestSize.Level0)2484 HWTEST_F(WorkersTest, WorkerTest014, testing::ext::TestSize.Level0)
2485 {
2486 napi_env env = (napi_env)engine_;
2487 napi_value global;
2488 napi_get_global(env, &global);
2489 napi_value result = nullptr;
2490 napi_value argv[1] = { nullptr };
2491 std::string message = "host";
2492 napi_create_string_utf8(env, message.c_str(), message.length(), &argv[0]);
2493 std::string funcName = "PostMessage";
2494 napi_value cb = nullptr;
2495 napi_create_function(env, funcName.c_str(), funcName.size(), Worker::PostMessage, nullptr, &cb);
2496 napi_call_function(env, nullptr, cb, sizeof(argv) / sizeof(argv[0]), argv, &result);
2497 napi_value exception = nullptr;
2498 napi_get_and_clear_last_exception(env, &exception);
2499 ASSERT_TRUE(exception == nullptr);
2500 ASSERT_TRUE(result != nullptr);
2501 }
2502
HWTEST_F(WorkersTest, WorkerTest015, testing::ext::TestSize.Level0)2503 HWTEST_F(WorkersTest, WorkerTest015, testing::ext::TestSize.Level0)
2504 {
2505 napi_env env = (napi_env)engine_;
2506 napi_value global;
2507 napi_get_global(env, &global);
2508 napi_value result = nullptr;
2509 result = Worker_Constructor(env, global);
2510
2511 Worker* worker = nullptr;
2512 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
2513
2514 napi_value argv[2] = { nullptr };
2515 std::string message = "host";
2516 napi_create_string_utf8(env, message.c_str(), message.length(), &argv[0]);
2517 std::string arr = "arr";
2518 napi_create_string_utf8(env, arr.c_str(), arr.length(), &argv[1]);
2519 std::string funcName = "PostMessage";
2520 napi_value cb = nullptr;
2521 napi_create_function(env, funcName.c_str(), funcName.size(), Worker::PostMessage, worker, &cb);
2522 UpdateWorkerState(worker, Worker::RunnerState::RUNNING);
2523 napi_call_function(env, global, cb, sizeof(argv) / sizeof(argv[0]), argv, &result);
2524 napi_value exception = nullptr;
2525 napi_get_and_clear_last_exception(env, &exception);
2526 ASSERT_TRUE(exception != nullptr);
2527 worker->EraseWorker();
2528 ClearWorkerHandle(worker);
2529 result = Worker_Terminate(env, global);
2530 ASSERT_TRUE(result != nullptr);
2531 }
2532
HWTEST_F(WorkersTest, WorkerTest016, testing::ext::TestSize.Level0)2533 HWTEST_F(WorkersTest, WorkerTest016, testing::ext::TestSize.Level0)
2534 {
2535 napi_env env = (napi_env)engine_;
2536 napi_value global;
2537 napi_get_global(env, &global);
2538 napi_value result = nullptr;
2539 result = Worker_Constructor(env, global);
2540 Worker* worker = nullptr;
2541 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
2542
2543 napi_value argv[2] = { nullptr };
2544 std::string message = "host";
2545 napi_create_string_utf8(env, message.c_str(), message.length(), &argv[0]);
2546 napi_create_array_with_length(env, 1, &argv[1]);
2547 std::string funcName = "PostMessage";
2548 napi_value cb = nullptr;
2549 napi_create_function(env, funcName.c_str(), funcName.size(), Worker::PostMessage, worker, &cb);
2550 UpdateWorkerState(worker, Worker::RunnerState::RUNNING);
2551 napi_call_function(env, global, cb, sizeof(argv) / sizeof(argv[0]), argv, &result);
2552 napi_value exception = nullptr;
2553 napi_get_and_clear_last_exception(env, &exception);
2554 ASSERT_TRUE(exception == nullptr);
2555 worker->EraseWorker();
2556 ClearWorkerHandle(worker);
2557 result = Worker_Terminate(env, global);
2558 ASSERT_TRUE(result != nullptr);
2559 }
2560
HWTEST_F(WorkersTest, WorkerTest017, testing::ext::TestSize.Level0)2561 HWTEST_F(WorkersTest, WorkerTest017, testing::ext::TestSize.Level0)
2562 {
2563 napi_env env = (napi_env)engine_;
2564 napi_value global;
2565 napi_get_global(env, &global);
2566 napi_value result = nullptr;
2567 result = Worker_Constructor(env, global);
2568 Worker* worker = nullptr;
2569 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
2570
2571 napi_value argv[2] = {nullptr};
2572 std::string instanceName = "MainThread";
2573 napi_create_string_utf8(env, instanceName.c_str(), instanceName.length(), &argv[0]);
2574 napi_value obj = nullptr;
2575 napi_create_object(env, &obj);
2576 argv[1] = obj;
2577
2578 std::string funcName = "RegisterGlobalCallObject";
2579 napi_value cb = nullptr;
2580 napi_value callResult = nullptr;
2581 // ------- workerEnv---------
2582 napi_create_function(env, funcName.c_str(), funcName.size(),
2583 Worker::RegisterGlobalCallObject, worker, &cb);
2584 UpdateWorkerState(worker, Worker::RunnerState::RUNNING);
2585 napi_call_function(env, global, cb, 0, nullptr, &callResult);
2586 napi_value exception = nullptr;
2587 napi_get_and_clear_last_exception(env, &exception);
2588 ASSERT_TRUE(exception != nullptr);
2589 worker->EraseWorker();
2590 ClearWorkerHandle(worker);
2591 result = Worker_Terminate(env, global);
2592 ASSERT_TRUE(result != nullptr);
2593 }
2594
HWTEST_F(WorkersTest, WorkerTest018, testing::ext::TestSize.Level0)2595 HWTEST_F(WorkersTest, WorkerTest018, testing::ext::TestSize.Level0)
2596 {
2597 napi_env env = (napi_env)engine_;
2598 napi_value global;
2599 napi_get_global(env, &global);
2600 napi_value result = nullptr;
2601 result = Worker_Constructor(env, global);
2602 Worker* worker = nullptr;
2603 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
2604
2605 napi_value argv[2] = {nullptr};
2606 std::string instanceName = "MainThread";
2607 napi_create_string_utf8(env, instanceName.c_str(), instanceName.length(), &argv[0]);
2608 napi_value obj = nullptr;
2609 napi_create_object(env, &obj);
2610 argv[1] = obj;
2611
2612 std::string funcName = "RegisterGlobalCallObject";
2613 napi_value cb = nullptr;
2614 napi_value callResult = nullptr;
2615 // ------- workerEnv---------
2616 napi_create_function(env, funcName.c_str(), funcName.size(),
2617 Worker::RegisterGlobalCallObject, nullptr, &cb);
2618 UpdateWorkerState(worker, Worker::RunnerState::RUNNING);
2619 napi_call_function(env, nullptr, cb, sizeof(argv) / sizeof(argv[0]), argv, &callResult);
2620 napi_value exception = nullptr;
2621 napi_get_and_clear_last_exception(env, &exception);
2622 ASSERT_TRUE(exception != nullptr);
2623 worker->EraseWorker();
2624 ClearWorkerHandle(worker);
2625 result = Worker_Terminate(env, global);
2626 ASSERT_TRUE(result != nullptr);
2627 }
2628
HWTEST_F(WorkersTest, WorkerTest019, testing::ext::TestSize.Level0)2629 HWTEST_F(WorkersTest, WorkerTest019, testing::ext::TestSize.Level0)
2630 {
2631 napi_env env = (napi_env)engine_;
2632 napi_value global;
2633 napi_get_global(env, &global);
2634 napi_value result = nullptr;
2635 result = Worker_Constructor(env, global);
2636 Worker* worker = nullptr;
2637 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
2638
2639 napi_value argv[2] = {nullptr};
2640 std::string instanceName = "MainThread";
2641 napi_create_string_utf8(env, instanceName.c_str(), instanceName.length(), &argv[0]);
2642
2643 std::string funcName = "UnregisterGlobalCallObject";
2644 napi_create_string_utf8(env, funcName.c_str(), funcName.length(), &argv[1]);
2645 napi_value cb = nullptr;
2646 napi_value callResult = nullptr;
2647 // ------- workerEnv---------
2648 napi_create_function(env, funcName.c_str(), funcName.size(),
2649 Worker::UnregisterGlobalCallObject, worker, &cb);
2650 UpdateWorkerState(worker, Worker::RunnerState::RUNNING);
2651 napi_call_function(env, global, cb, sizeof(argv) / sizeof(argv[0]), argv, &callResult);
2652 napi_value exception = nullptr;
2653 napi_get_and_clear_last_exception(env, &exception);
2654 ASSERT_TRUE(exception != nullptr);
2655 worker->EraseWorker();
2656 ClearWorkerHandle(worker);
2657 result = Worker_Terminate(env, global);
2658 ASSERT_TRUE(result != nullptr);
2659 }
2660
HWTEST_F(WorkersTest, WorkerTest020, testing::ext::TestSize.Level0)2661 HWTEST_F(WorkersTest, WorkerTest020, testing::ext::TestSize.Level0)
2662 {
2663 napi_env env = (napi_env)engine_;
2664 napi_value global;
2665 napi_get_global(env, &global);
2666 napi_value result = nullptr;
2667 result = Worker_Constructor(env, global);
2668 Worker* worker = nullptr;
2669 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
2670
2671 napi_value argv[1] = {nullptr};
2672 std::string instanceName = "MainThread";
2673 napi_create_string_utf8(env, instanceName.c_str(), instanceName.length(), &argv[0]);
2674
2675 std::string funcName = "UnregisterGlobalCallObject";
2676 napi_value cb = nullptr;
2677 napi_value callResult = nullptr;
2678 // ------- workerEnv---------
2679 napi_create_function(env, funcName.c_str(), funcName.size(),
2680 Worker::UnregisterGlobalCallObject, worker, &cb);
2681 UpdateWorkerState(worker, Worker::RunnerState::RUNNING);
2682 napi_call_function(env, global, cb, 0, nullptr, &callResult);
2683 napi_value exception = nullptr;
2684 napi_get_and_clear_last_exception(env, &exception);
2685 ASSERT_TRUE(exception == nullptr);
2686 worker->EraseWorker();
2687 ClearWorkerHandle(worker);
2688 result = Worker_Terminate(env, global);
2689 ASSERT_TRUE(result != nullptr);
2690 }
2691
HWTEST_F(WorkersTest, WorkerTest021, testing::ext::TestSize.Level0)2692 HWTEST_F(WorkersTest, WorkerTest021, testing::ext::TestSize.Level0)
2693 {
2694 napi_env env = (napi_env)engine_;
2695 napi_value global;
2696 napi_get_global(env, &global);
2697 napi_value result = nullptr;
2698 result = Worker_Constructor(env, global);
2699 Worker* worker = nullptr;
2700 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
2701
2702 napi_value argv[1] = {nullptr};
2703 std::string instanceName = "MainThread";
2704 napi_create_string_utf8(env, instanceName.c_str(), instanceName.length(), &argv[0]);
2705
2706 std::string funcName = "UnregisterGlobalCallObject";
2707 napi_value cb = nullptr;
2708 napi_value callResult = nullptr;
2709 // ------- workerEnv---------
2710 napi_create_function(env, funcName.c_str(), funcName.size(),
2711 Worker::UnregisterGlobalCallObject, nullptr, &cb);
2712 UpdateWorkerState(worker, Worker::RunnerState::RUNNING);
2713 napi_call_function(env, nullptr, cb, sizeof(argv) / sizeof(argv[0]), argv, &callResult);
2714 napi_value exception = nullptr;
2715 napi_get_and_clear_last_exception(env, &exception);
2716 ASSERT_TRUE(exception != nullptr);
2717 worker->EraseWorker();
2718 ClearWorkerHandle(worker);
2719 result = Worker_Terminate(env, global);
2720 ASSERT_TRUE(result != nullptr);
2721 }
2722
HWTEST_F(WorkersTest, WorkerTest022, testing::ext::TestSize.Level0)2723 HWTEST_F(WorkersTest, WorkerTest022, testing::ext::TestSize.Level0)
2724 {
2725 napi_env env = (napi_env)engine_;
2726 napi_value global;
2727 napi_get_global(env, &global);
2728 napi_value result = nullptr;
2729 result = Worker_Constructor(env, global);
2730 Worker* worker = nullptr;
2731 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
2732
2733 napi_value argv[2] = {nullptr};
2734 std::string message = "host";
2735 napi_create_string_utf8(env, message.c_str(), message.length(), &argv[0]);
2736
2737 std::string funcName = "AddEventListener";
2738 napi_create_string_utf8(env, funcName.c_str(), funcName.length(), &argv[1]);
2739 napi_value cb = nullptr;
2740 napi_create_function(env, funcName.c_str(), funcName.size(), Worker::AddEventListener, worker, &cb);
2741 napi_call_function(env, global, cb, sizeof(argv) / sizeof(argv[0]), argv, &result);
2742 napi_value exception = nullptr;
2743 napi_get_and_clear_last_exception(env, &exception);
2744 ASSERT_TRUE(exception != nullptr);
2745 worker->EraseWorker();
2746 ClearWorkerHandle(worker);
2747 result = Worker_Terminate(env, global);
2748 ASSERT_TRUE(result != nullptr);
2749 }
2750
HWTEST_F(WorkersTest, WorkerTest023, testing::ext::TestSize.Level0)2751 HWTEST_F(WorkersTest, WorkerTest023, testing::ext::TestSize.Level0)
2752 {
2753 napi_env env = (napi_env)engine_;
2754 napi_value global;
2755 napi_get_global(env, &global);
2756 napi_value result = nullptr;
2757 result = Worker_Constructor(env, global);
2758 Worker* worker = nullptr;
2759 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
2760
2761 napi_value argv[1] = {nullptr};
2762 std::string message = "host";
2763 napi_create_string_utf8(env, message.c_str(), message.length(), &argv[0]);
2764
2765 std::string funcName = "AddEventListener";
2766 napi_value cb = nullptr;
2767 napi_create_function(env, funcName.c_str(), funcName.size(), Worker::AddEventListener, worker, &cb);
2768 napi_call_function(env, global, cb, sizeof(argv) / sizeof(argv[0]), argv, &result);
2769 napi_value exception = nullptr;
2770 napi_get_and_clear_last_exception(env, &exception);
2771 ASSERT_TRUE(exception != nullptr);
2772 worker->EraseWorker();
2773 ClearWorkerHandle(worker);
2774 result = Worker_Terminate(env, global);
2775 ASSERT_TRUE(result != nullptr);
2776 }
2777
HWTEST_F(WorkersTest, WorkerTest024, testing::ext::TestSize.Level0)2778 HWTEST_F(WorkersTest, WorkerTest024, testing::ext::TestSize.Level0)
2779 {
2780 napi_env env = (napi_env)engine_;
2781 napi_value global;
2782 napi_get_global(env, &global);
2783 napi_value result = nullptr;
2784 result = Worker_Constructor(env, global);
2785 Worker* worker = nullptr;
2786 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
2787
2788 napi_value argv[2] = {nullptr};
2789 std::string message = "host";
2790 napi_create_string_utf8(env, message.c_str(), message.length(), &argv[0]);
2791
2792 std::string funcName = "AddEventListener";
2793 napi_create_string_utf8(env, funcName.c_str(), funcName.length(), &argv[1]);
2794 napi_value cb = nullptr;
2795 napi_create_function(env, funcName.c_str(), funcName.size(), Worker::AddEventListener, nullptr, &cb);
2796 napi_call_function(env, nullptr, cb, sizeof(argv) / sizeof(argv[0]), argv, &result);
2797 napi_value exception = nullptr;
2798 napi_get_and_clear_last_exception(env, &exception);
2799 ASSERT_TRUE(exception != nullptr);
2800 worker->EraseWorker();
2801 ClearWorkerHandle(worker);
2802 result = Worker_Terminate(env, global);
2803 ASSERT_TRUE(result != nullptr);
2804 }
2805
HWTEST_F(WorkersTest, WorkerTest025, testing::ext::TestSize.Level0)2806 HWTEST_F(WorkersTest, WorkerTest025, testing::ext::TestSize.Level0)
2807 {
2808 napi_env env = (napi_env)engine_;
2809 napi_value global;
2810 napi_get_global(env, &global);
2811 napi_value result = nullptr;
2812 result = Worker_Constructor(env, global);
2813 Worker* worker = nullptr;
2814 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
2815
2816 napi_value argv[2] = {nullptr};
2817 std::string message = "host";
2818 napi_create_string_utf8(env, message.c_str(), message.length(), &argv[0]);
2819 auto func = [](napi_env env, napi_callback_info info) -> napi_value {
2820 return nullptr;
2821 };
2822 napi_value funcValue = nullptr;
2823 napi_create_function(env, "testFunc", NAPI_AUTO_LENGTH, func, nullptr, &funcValue);
2824 argv[1] = funcValue;
2825
2826 std::string funcName = "RemoveEventListener";
2827 napi_value cb = nullptr;
2828
2829 napi_create_function(env, funcName.c_str(), funcName.size(), Worker::RemoveEventListener, worker, &cb);
2830 napi_call_function(env, global, cb, 0, nullptr, &result);
2831 napi_value exception = nullptr;
2832 napi_get_and_clear_last_exception(env, &exception);
2833 ASSERT_TRUE(exception != nullptr);
2834 worker->EraseWorker();
2835 ClearWorkerHandle(worker);
2836 result = Worker_Terminate(env, global);
2837 ASSERT_TRUE(result != nullptr);
2838 }
2839
HWTEST_F(WorkersTest, WorkerTest026, testing::ext::TestSize.Level0)2840 HWTEST_F(WorkersTest, WorkerTest026, testing::ext::TestSize.Level0)
2841 {
2842 napi_env env = (napi_env)engine_;
2843 napi_value global;
2844 napi_get_global(env, &global);
2845 napi_value result = nullptr;
2846 result = Worker_Constructor(env, global);
2847 Worker* worker = nullptr;
2848 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
2849
2850 napi_value argv[2] = {nullptr};
2851 std::string message = "host";
2852 napi_create_string_utf8(env, message.c_str(), message.length(), &argv[0]);
2853 auto func = [](napi_env env, napi_callback_info info) -> napi_value {
2854 return nullptr;
2855 };
2856 napi_value funcValue = nullptr;
2857 napi_create_function(env, "testFunc", NAPI_AUTO_LENGTH, func, nullptr, &funcValue);
2858 argv[1] = funcValue;
2859
2860 std::string funcName = "RemoveEventListener";
2861 napi_value cb = nullptr;
2862
2863 napi_create_function(env, funcName.c_str(), funcName.size(), Worker::RemoveEventListener, nullptr, &cb);
2864 napi_call_function(env, nullptr, cb, sizeof(argv) / sizeof(argv[0]), argv, &result);
2865 napi_value exception = nullptr;
2866 napi_get_and_clear_last_exception(env, &exception);
2867 ASSERT_TRUE(exception == nullptr);
2868 worker->EraseWorker();
2869 ClearWorkerHandle(worker);
2870 result = Worker_Terminate(env, global);
2871 ASSERT_TRUE(result != nullptr);
2872 }
2873
HWTEST_F(WorkersTest, WorkerTest027, testing::ext::TestSize.Level0)2874 HWTEST_F(WorkersTest, WorkerTest027, testing::ext::TestSize.Level0)
2875 {
2876 napi_env env = (napi_env)engine_;
2877 napi_value global;
2878 napi_get_global(env, &global);
2879 napi_value result = nullptr;
2880 result = Worker_Constructor(env, global);
2881 Worker* worker = nullptr;
2882 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
2883
2884 napi_value argv[2] = {nullptr};
2885 std::string message = "host";
2886 napi_create_string_utf8(env, message.c_str(), message.length(), &argv[0]);
2887
2888 std::string funcName = "RemoveEventListener";
2889 napi_create_string_utf8(env, funcName.c_str(), funcName.length(), &argv[1]);
2890 napi_value cb = nullptr;
2891
2892 napi_create_function(env, funcName.c_str(), funcName.size(), Worker::RemoveEventListener, worker, &cb);
2893 napi_call_function(env, global, cb, sizeof(argv) / sizeof(argv[0]), argv, &result);
2894 napi_value exception = nullptr;
2895 napi_get_and_clear_last_exception(env, &exception);
2896 ASSERT_TRUE(exception != nullptr);
2897 worker->EraseWorker();
2898 ClearWorkerHandle(worker);
2899 result = Worker_Terminate(env, global);
2900 ASSERT_TRUE(result != nullptr);
2901 }
2902
HWTEST_F(WorkersTest, WorkerTest028, testing::ext::TestSize.Level0)2903 HWTEST_F(WorkersTest, WorkerTest028, testing::ext::TestSize.Level0)
2904 {
2905 napi_env env = (napi_env)engine_;
2906 napi_value global;
2907 napi_get_global(env, &global);
2908 napi_value result = nullptr;
2909 result = Worker_Constructor(env, global);
2910 Worker* worker = nullptr;
2911 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
2912 SetWorkerRef(worker, env);
2913 napi_value argv[1] = {nullptr};
2914 napi_value typeValue = nullptr;
2915 std::string type = "message";
2916 napi_create_string_utf8(env, type.c_str(), type.length(), &typeValue);
2917 napi_value object = nullptr;
2918 napi_create_object(env, &object);
2919 napi_set_named_property(env, object, "type", typeValue);
2920 argv[0] = object;
2921
2922 std::string funcName = "DispatchEvent";
2923 napi_value cb = nullptr;
2924 napi_create_function(env, funcName.c_str(), funcName.size(), Worker::DispatchEvent, worker, &cb);
2925 UpdateWorkerState(worker, Worker::RunnerState::RUNNING);
2926 napi_call_function(env, global, cb, sizeof(argv) / sizeof(argv[0]), argv, &result);
2927 napi_value exception = nullptr;
2928 napi_get_and_clear_last_exception(env, &exception);
2929 ASSERT_TRUE(exception == nullptr);
2930 worker->EraseWorker();
2931 ClearWorkerHandle(worker);
2932 result = Worker_Terminate(env, global);
2933 ASSERT_TRUE(result != nullptr);
2934 }
2935
HWTEST_F(WorkersTest, WorkerTest029, testing::ext::TestSize.Level0)2936 HWTEST_F(WorkersTest, WorkerTest029, testing::ext::TestSize.Level0)
2937 {
2938 napi_env env = (napi_env)engine_;
2939 napi_value global;
2940 napi_get_global(env, &global);
2941 napi_value result = nullptr;
2942 result = Worker_Constructor(env, global);
2943 Worker* worker = nullptr;
2944 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
2945
2946 std::string funcName = "DispatchEvent";
2947 napi_value cb = nullptr;
2948 napi_create_function(env, funcName.c_str(), funcName.size(), Worker::DispatchEvent, worker, &cb);
2949 UpdateWorkerState(worker, Worker::RunnerState::RUNNING);
2950 napi_call_function(env, global, cb, 0, nullptr, &result);
2951 napi_value exception = nullptr;
2952 napi_get_and_clear_last_exception(env, &exception);
2953 ASSERT_TRUE(exception != nullptr);
2954 worker->EraseWorker();
2955 ClearWorkerHandle(worker);
2956 result = Worker_Terminate(env, global);
2957 ASSERT_TRUE(result != nullptr);
2958 }
2959
HWTEST_F(WorkersTest, WorkerTest030, testing::ext::TestSize.Level0)2960 HWTEST_F(WorkersTest, WorkerTest030, testing::ext::TestSize.Level0)
2961 {
2962 napi_env env = (napi_env)engine_;
2963 napi_value global;
2964 napi_get_global(env, &global);
2965 napi_value result = nullptr;
2966 result = Worker_Constructor(env, global);
2967 Worker* worker = nullptr;
2968 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
2969 SetWorkerRef(worker, env);
2970 napi_value argv[1] = {nullptr};
2971 std::string type = "message";
2972 napi_create_string_utf8(env, type.c_str(), type.length(), &argv[0]);
2973
2974 std::string funcName = "DispatchEvent";
2975 napi_value cb = nullptr;
2976 napi_create_function(env, funcName.c_str(), funcName.size(), Worker::DispatchEvent, worker, &cb);
2977 UpdateWorkerState(worker, Worker::RunnerState::RUNNING);
2978 napi_call_function(env, global, cb, sizeof(argv) / sizeof(argv[0]), argv, &result);
2979 napi_value exception = nullptr;
2980 napi_get_and_clear_last_exception(env, &exception);
2981 ASSERT_TRUE(exception != nullptr);
2982 worker->EraseWorker();
2983 ClearWorkerHandle(worker);
2984 result = Worker_Terminate(env, global);
2985 ASSERT_TRUE(result != nullptr);
2986 }
2987
HWTEST_F(WorkersTest, WorkerTest031, testing::ext::TestSize.Level0)2988 HWTEST_F(WorkersTest, WorkerTest031, testing::ext::TestSize.Level0)
2989 {
2990 napi_env env = (napi_env)engine_;
2991 napi_value global;
2992 napi_get_global(env, &global);
2993 napi_value result = nullptr;
2994 result = Worker_Constructor(env, global);
2995 Worker* worker = nullptr;
2996 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
2997 SetWorkerRef(worker, env);
2998 napi_value argv[1] = {nullptr};
2999 napi_value typeValue = nullptr;
3000 std::string type = "message";
3001 napi_create_string_utf8(env, type.c_str(), type.length(), &typeValue);
3002 napi_value object = nullptr;
3003 napi_create_object(env, &object);
3004 napi_set_named_property(env, object, "type", typeValue);
3005 argv[0] = object;
3006 std::string funcName = "DispatchEvent";
3007 napi_value cb = nullptr;
3008 napi_create_function(env, funcName.c_str(), funcName.size(), Worker::DispatchEvent, nullptr, &cb);
3009 UpdateWorkerState(worker, Worker::RunnerState::RUNNING);
3010 napi_call_function(env, nullptr, cb, sizeof(argv) / sizeof(argv[0]), argv, &result);
3011 napi_value exception = nullptr;
3012 napi_get_and_clear_last_exception(env, &exception);
3013 ASSERT_TRUE(exception == nullptr);
3014 worker->EraseWorker();
3015 ClearWorkerHandle(worker);
3016 result = Worker_Terminate(env, global);
3017 ASSERT_TRUE(result != nullptr);
3018 }
3019
HWTEST_F(WorkersTest, WorkerTest032, testing::ext::TestSize.Level0)3020 HWTEST_F(WorkersTest, WorkerTest032, testing::ext::TestSize.Level0)
3021 {
3022 napi_env env = (napi_env)engine_;
3023 napi_value global;
3024 napi_get_global(env, &global);
3025 napi_value result = nullptr;
3026 result = Worker_Constructor(env, global);
3027 Worker* worker = nullptr;
3028 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
3029 SetWorkerRef(worker, env);
3030 napi_value argv[1] = {nullptr};
3031 napi_value typeValue = nullptr;
3032 uint32_t type = 100; //test 100
3033 napi_create_uint32(env, type, &typeValue);
3034 napi_value object = nullptr;
3035 napi_create_object(env, &object);
3036 napi_set_named_property(env, object, "type", typeValue);
3037 argv[0] = object;
3038 std::string funcName = "DispatchEvent";
3039 napi_value cb = nullptr;
3040 napi_create_function(env, funcName.c_str(), funcName.size(), Worker::DispatchEvent, worker, &cb);
3041 UpdateWorkerState(worker, Worker::RunnerState::RUNNING);
3042 napi_call_function(env, global, cb, sizeof(argv) / sizeof(argv[0]), argv, &result);
3043 napi_value exception = nullptr;
3044 napi_get_and_clear_last_exception(env, &exception);
3045 ASSERT_TRUE(exception != nullptr);
3046 worker->EraseWorker();
3047 ClearWorkerHandle(worker);
3048 result = Worker_Terminate(env, global);
3049 ASSERT_TRUE(result != nullptr);
3050 }
3051
HWTEST_F(WorkersTest, WorkerTest033, testing::ext::TestSize.Level0)3052 HWTEST_F(WorkersTest, WorkerTest033, testing::ext::TestSize.Level0)
3053 {
3054 napi_env env = (napi_env)engine_;
3055 napi_value global;
3056 napi_get_global(env, &global);
3057 napi_value result = nullptr;
3058 result = Worker_Constructor(env, global);
3059 Worker* worker = nullptr;
3060 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
3061 napi_value argv[1] = { nullptr };
3062 std::string funcName = "RemoveAllListener";
3063 napi_value cb = nullptr;
3064 napi_create_function(env, funcName.c_str(), funcName.size(), Worker::RemoveAllListener, nullptr, &cb);
3065 UpdateWorkerState(worker, Worker::RunnerState::RUNNING);
3066 napi_call_function(env, nullptr, cb, 1, argv, &result);
3067 napi_value exception = nullptr;
3068 napi_get_and_clear_last_exception(env, &exception);
3069 ASSERT_TRUE(exception == nullptr);
3070 worker->EraseWorker();
3071 ClearWorkerHandle(worker);
3072 result = Worker_Terminate(env, global);
3073 ASSERT_TRUE(result != nullptr);
3074 }
3075
HWTEST_F(WorkersTest, WorkerTest034, testing::ext::TestSize.Level0)3076 HWTEST_F(WorkersTest, WorkerTest034, testing::ext::TestSize.Level0)
3077 {
3078 napi_env env = (napi_env)engine_;
3079 napi_value global;
3080 napi_get_global(env, &global);
3081 napi_value result = nullptr;
3082 result = Worker_Constructor(env, global);
3083 Worker* worker = nullptr;
3084 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
3085 napi_value argv[1] = { nullptr };
3086 std::string message = "host";
3087 napi_create_string_utf8(env, message.c_str(), message.length(), &argv[0]);
3088 std::string funcName = "CancelTask";
3089 napi_value cb = nullptr;
3090 napi_create_function(env, funcName.c_str(), funcName.size(), Worker::CancelTask, nullptr, &cb);
3091 napi_call_function(env, nullptr, cb, sizeof(argv) / sizeof(argv[0]), argv, &result);
3092 worker->EraseWorker();
3093 ClearWorkerHandle(worker);
3094 result = Worker_Terminate(env, global);
3095 ASSERT_TRUE(result != nullptr);
3096 }
3097
HWTEST_F(WorkersTest, WorkerTest035, testing::ext::TestSize.Level0)3098 HWTEST_F(WorkersTest, WorkerTest035, testing::ext::TestSize.Level0)
3099 {
3100 napi_env env = (napi_env)engine_;
3101 napi_value global;
3102 napi_get_global(env, &global);
3103 napi_value result = nullptr;
3104 result = Worker_Constructor(env, global);
3105 Worker* worker = nullptr;
3106 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
3107 napi_value argv[1] = { nullptr };
3108 std::string message = "host";
3109 napi_create_string_utf8(env, message.c_str(), message.length(), &argv[0]);
3110 std::string funcName = "CancelTask";
3111 napi_value cb = nullptr;
3112 napi_create_function(env, funcName.c_str(), funcName.size(), Worker::CancelTask, worker, &cb);
3113 UpdateWorkerState(worker, Worker::RunnerState::TERMINATED);
3114 napi_call_function(env, global, cb, sizeof(argv) / sizeof(argv[0]), argv, &result);
3115 worker->EraseWorker();
3116 ClearWorkerHandle(worker);
3117 result = Worker_Terminate(env, global);
3118 ASSERT_TRUE(result != nullptr);
3119 }
3120
HWTEST_F(WorkersTest, WorkerTest036, testing::ext::TestSize.Level0)3121 HWTEST_F(WorkersTest, WorkerTest036, testing::ext::TestSize.Level0)
3122 {
3123 napi_env env = (napi_env)engine_;
3124 napi_value global;
3125 napi_get_global(env, &global);
3126 napi_value result = nullptr;
3127 result = Worker_Constructor(env, global);
3128 Worker* worker = nullptr;
3129 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
3130 napi_value argv[1] = { nullptr };
3131 std::string message = "host";
3132 napi_create_string_utf8(env, message.c_str(), message.length(), &argv[0]);
3133 std::string funcName = "CancelTask";
3134 napi_value cb = nullptr;
3135 napi_create_function(env, funcName.c_str(), funcName.size(), Worker::CancelTask, worker, &cb);
3136 UpdateWorkerState(worker, Worker::RunnerState::TERMINATEING);
3137 napi_call_function(env, global, cb, sizeof(argv) / sizeof(argv[0]), argv, &result);
3138 worker->EraseWorker();
3139 ClearWorkerHandle(worker);
3140 result = Worker_Terminate(env, global);
3141 ASSERT_TRUE(result != nullptr);
3142 }
3143
HWTEST_F(WorkersTest, WorkerTest037, testing::ext::TestSize.Level0)3144 HWTEST_F(WorkersTest, WorkerTest037, testing::ext::TestSize.Level0)
3145 {
3146 napi_env env = (napi_env)engine_;
3147 napi_value global;
3148 napi_get_global(env, &global);
3149 napi_value result = nullptr;
3150 result = Worker_Constructor(env, global);
3151 Worker* worker = nullptr;
3152 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
3153 napi_value argv[1] = { nullptr };
3154 std::string message = "host";
3155 napi_create_string_utf8(env, message.c_str(), message.length(), &argv[0]);
3156 std::string funcName = "CancelTask";
3157 napi_value cb = nullptr;
3158 napi_create_function(env, funcName.c_str(), funcName.size(), Worker::CancelTask, worker, &cb);
3159 UpdateWorkerState(worker, Worker::RunnerState::RUNNING);
3160 SetWorkerHostEnv(worker, env, true);
3161 napi_call_function(env, global, cb, sizeof(argv) / sizeof(argv[0]), argv, &result);
3162 SetWorkerHostEnv(worker, env, false);
3163 worker->EraseWorker();
3164 ClearWorkerHandle(worker);
3165 result = Worker_Terminate(env, global);
3166 ASSERT_TRUE(result != nullptr);
3167 }
3168
HWTEST_F(WorkersTest, WorkerTest038, testing::ext::TestSize.Level0)3169 HWTEST_F(WorkersTest, WorkerTest038, testing::ext::TestSize.Level0)
3170 {
3171 napi_env env = (napi_env)engine_;
3172 napi_value global;
3173 napi_get_global(env, &global);
3174 napi_value result = nullptr;
3175 result = Worker_Constructor(env, global);
3176 Worker* worker = nullptr;
3177 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
3178 napi_value argv[1] = { nullptr };
3179 std::string message = "host";
3180 napi_create_string_utf8(env, message.c_str(), message.length(), &argv[0]);
3181 std::string funcName = "PostMessageToHost";
3182 napi_value cb = nullptr;
3183 napi_create_function(env, funcName.c_str(), funcName.size(), Worker::PostMessageToHost, worker, &cb);
3184 napi_call_function(env, global, cb, 0, nullptr, &result);
3185 worker->EraseWorker();
3186 ClearWorkerHandle(worker);
3187 napi_value exception = nullptr;
3188 napi_get_and_clear_last_exception(env, &exception);
3189 ASSERT_TRUE(exception != nullptr);
3190 result = Worker_Terminate(env, global);
3191 ASSERT_TRUE(result != nullptr);
3192 }
3193
HWTEST_F(WorkersTest, WorkerTest039, testing::ext::TestSize.Level0)3194 HWTEST_F(WorkersTest, WorkerTest039, testing::ext::TestSize.Level0)
3195 {
3196 napi_env env = (napi_env)engine_;
3197 napi_value global;
3198 napi_get_global(env, &global);
3199 napi_value result = nullptr;
3200 result = Worker_Constructor(env, global);
3201 Worker* worker = nullptr;
3202 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
3203 napi_value argv[1] = { nullptr };
3204 std::string message = "host";
3205 napi_create_string_utf8(env, message.c_str(), message.length(), &argv[0]);
3206 std::string funcName = "PostMessageToHost";
3207 napi_value cb = nullptr;
3208 napi_create_function(env, funcName.c_str(), funcName.size(), Worker::PostMessageToHost, worker, &cb);
3209 UpdateWorkerState(worker, Worker::RunnerState::TERMINATED);
3210 napi_call_function(env, global, cb, sizeof(argv) / sizeof(argv[0]), argv, &result);
3211 worker->EraseWorker();
3212 ClearWorkerHandle(worker);
3213 napi_value exception = nullptr;
3214 napi_get_and_clear_last_exception(env, &exception);
3215 ASSERT_TRUE(exception == nullptr);
3216 result = Worker_Terminate(env, global);
3217 ASSERT_TRUE(result != nullptr);
3218 }
3219
HWTEST_F(WorkersTest, WorkerTest040, testing::ext::TestSize.Level0)3220 HWTEST_F(WorkersTest, WorkerTest040, testing::ext::TestSize.Level0)
3221 {
3222 napi_env env = (napi_env)engine_;
3223 napi_value global;
3224 napi_get_global(env, &global);
3225 napi_value result = nullptr;
3226 result = Worker_Constructor(env, global);
3227 Worker* worker = nullptr;
3228 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
3229 // ------- workerEnv---------
3230 napi_env workerEnv = nullptr;
3231 napi_create_runtime(env, &workerEnv);
3232 napi_value workerGlobal = nullptr;
3233 napi_get_global(workerEnv, &workerGlobal);
3234 std::string funcName = "GlobalCall";
3235 napi_value cb = nullptr;
3236 napi_value callResult = nullptr;
3237 // ------- workerEnv---------
3238 napi_create_function(workerEnv, funcName.c_str(), funcName.size(),
3239 Worker::GlobalCall, worker, &cb);
3240 UpdateWorkerState(worker, Worker::RunnerState::RUNNING);
3241 napi_call_function(workerEnv, workerGlobal, cb, 0, nullptr, &callResult);
3242 worker->EraseWorker();
3243 ClearWorkerHandle(worker);
3244 napi_value exception = nullptr;
3245 napi_get_and_clear_last_exception(env, &exception);
3246 ASSERT_TRUE(exception == nullptr);
3247 result = Worker_Terminate(env, global);
3248 ASSERT_TRUE(result != nullptr);
3249 }
3250
HWTEST_F(WorkersTest, WorkerTest041, testing::ext::TestSize.Level0)3251 HWTEST_F(WorkersTest, WorkerTest041, testing::ext::TestSize.Level0)
3252 {
3253 napi_env env = (napi_env)engine_;
3254 napi_value global;
3255 napi_get_global(env, &global);
3256 napi_value result = nullptr;
3257 result = Worker_Constructor(env, global);
3258 Worker* worker = nullptr;
3259 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
3260 // ------- workerEnv---------
3261 napi_env workerEnv = nullptr;
3262 napi_create_runtime(env, &workerEnv);
3263 napi_value workerGlobal = nullptr;
3264 napi_get_global(workerEnv, &workerGlobal);
3265 napi_value argv[3] = {nullptr};
3266 std::string instanceName = "host";
3267 std::string methodName = "postMessage";
3268 int32_t timeout = 300;
3269 napi_create_string_utf8(workerEnv, instanceName.c_str(), instanceName.length(), &argv[0]);
3270 napi_create_string_utf8(workerEnv, methodName.c_str(), methodName.length(), &argv[1]);
3271 napi_create_int32(workerEnv, timeout, &argv[2]);
3272 std::string funcName = "GlobalCall";
3273 napi_value cb = nullptr;
3274 napi_value callResult = nullptr;
3275 // ------- workerEnv---------
3276 napi_create_function(workerEnv, funcName.c_str(), funcName.size(),
3277 Worker::GlobalCall, nullptr, &cb);
3278 UpdateWorkerState(worker, Worker::RunnerState::RUNNING);
3279 napi_call_function(workerEnv, nullptr, cb, sizeof(argv) / sizeof(argv[0]), argv, &callResult);
3280 napi_value exception = nullptr;
3281 napi_get_and_clear_last_exception(env, &exception);
3282 ASSERT_TRUE(exception == nullptr);
3283 worker->EraseWorker();
3284 ClearWorkerHandle(worker);
3285 result = Worker_Terminate(env, global);
3286 ASSERT_TRUE(result != nullptr);
3287 }
3288
HWTEST_F(WorkersTest, WorkerTest042, testing::ext::TestSize.Level0)3289 HWTEST_F(WorkersTest, WorkerTest042, testing::ext::TestSize.Level0)
3290 {
3291 napi_env env = (napi_env)engine_;
3292 napi_value global;
3293 napi_get_global(env, &global);
3294 napi_value result = nullptr;
3295 result = Worker_Constructor(env, global);
3296 Worker* worker = nullptr;
3297 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
3298 // ------- workerEnv---------
3299 napi_env workerEnv = nullptr;
3300 napi_create_runtime(env, &workerEnv);
3301 napi_value workerGlobal = nullptr;
3302 napi_get_global(workerEnv, &workerGlobal);
3303 napi_value argv[3] = {nullptr};
3304 std::string instanceName = "host";
3305 std::string methodName = "postMessage";
3306 int32_t timeout = 300;
3307 napi_create_string_utf8(workerEnv, instanceName.c_str(), instanceName.length(), &argv[0]);
3308 napi_create_string_utf8(workerEnv, methodName.c_str(), methodName.length(), &argv[1]);
3309 napi_create_int32(workerEnv, timeout, &argv[2]);
3310 std::string funcName = "GlobalCall";
3311 napi_value cb = nullptr;
3312 napi_value callResult = nullptr;
3313 // ------- workerEnv---------
3314 napi_create_function(workerEnv, funcName.c_str(), funcName.size(),
3315 Worker::GlobalCall, worker, &cb);
3316 UpdateWorkerState(worker, Worker::RunnerState::TERMINATED);
3317 napi_call_function(workerEnv, workerGlobal, cb, sizeof(argv) / sizeof(argv[0]), argv, &callResult);
3318 napi_value exception = nullptr;
3319 napi_get_and_clear_last_exception(env, &exception);
3320 ASSERT_TRUE(exception == nullptr);
3321 worker->EraseWorker();
3322 ClearWorkerHandle(worker);
3323 result = Worker_Terminate(env, global);
3324 ASSERT_TRUE(result != nullptr);
3325 }
3326
HWTEST_F(WorkersTest, WorkerTest043, testing::ext::TestSize.Level0)3327 HWTEST_F(WorkersTest, WorkerTest043, testing::ext::TestSize.Level0)
3328 {
3329 napi_env env = (napi_env)engine_;
3330 napi_value global;
3331 napi_get_global(env, &global);
3332 napi_value result = nullptr;
3333 result = Worker_Constructor(env, global);
3334 Worker* worker = nullptr;
3335 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
3336 // ------- workerEnv---------
3337 napi_env workerEnv = nullptr;
3338 napi_create_runtime(env, &workerEnv);
3339 napi_value workerGlobal = nullptr;
3340 napi_get_global(workerEnv, &workerGlobal);
3341 napi_value argv[3] = {nullptr};
3342 std::string instanceName = "host";
3343 std::string methodName = "postMessage";
3344 int32_t timeout = 300;
3345 napi_create_string_utf8(workerEnv, instanceName.c_str(), instanceName.length(), &argv[0]);
3346 napi_create_string_utf8(workerEnv, methodName.c_str(), methodName.length(), &argv[2]);
3347 napi_create_int32(workerEnv, timeout, &argv[1]);
3348 std::string funcName = "GlobalCall";
3349 napi_value cb = nullptr;
3350 napi_value callResult = nullptr;
3351 // ------- workerEnv---------
3352 napi_create_function(workerEnv, funcName.c_str(), funcName.size(),
3353 Worker::GlobalCall, worker, &cb);
3354 UpdateWorkerState(worker, Worker::RunnerState::RUNNING);
3355 napi_call_function(workerEnv, workerGlobal, cb, sizeof(argv) / sizeof(argv[0]), argv, &callResult);
3356 napi_value exception = nullptr;
3357 napi_get_and_clear_last_exception(env, &exception);
3358 ASSERT_TRUE(exception == nullptr);
3359 worker->EraseWorker();
3360 ClearWorkerHandle(worker);
3361 result = Worker_Terminate(env, global);
3362 ASSERT_TRUE(result != nullptr);
3363 }
3364
HWTEST_F(WorkersTest, WorkerTest044, testing::ext::TestSize.Level0)3365 HWTEST_F(WorkersTest, WorkerTest044, testing::ext::TestSize.Level0)
3366 {
3367 napi_env env = (napi_env)engine_;
3368 napi_value global;
3369 napi_get_global(env, &global);
3370 napi_value result = nullptr;
3371 result = Worker_Constructor(env, global);
3372 Worker* worker = nullptr;
3373 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
3374 // ------- workerEnv---------
3375 napi_env workerEnv = nullptr;
3376 napi_create_runtime(env, &workerEnv);
3377 napi_value workerGlobal = nullptr;
3378 napi_get_global(workerEnv, &workerGlobal);
3379
3380 napi_value argv[3] = {nullptr};
3381 std::string instanceName = "host";
3382 std::string methodName = "postMessage";
3383 std::string timeout = "timeout";
3384 napi_create_string_utf8(workerEnv, instanceName.c_str(), instanceName.length(), &argv[0]);
3385 napi_create_string_utf8(workerEnv, methodName.c_str(), methodName.length(), &argv[1]);
3386 napi_create_string_utf8(workerEnv, timeout.c_str(), timeout.length(), &argv[2]);
3387
3388 std::string funcName = "GlobalCall";
3389 napi_value cb = nullptr;
3390 napi_value callResult = nullptr;
3391 // ------- workerEnv---------
3392 napi_create_function(workerEnv, funcName.c_str(), funcName.size(),
3393 Worker::GlobalCall, worker, &cb);
3394 UpdateWorkerState(worker, Worker::RunnerState::RUNNING);
3395 napi_call_function(workerEnv, workerGlobal, cb, sizeof(argv) / sizeof(argv[0]), argv, &callResult);
3396 napi_value exception = nullptr;
3397 napi_get_and_clear_last_exception(env, &exception);
3398 ASSERT_TRUE(exception == nullptr);
3399 worker->EraseWorker();
3400 ClearWorkerHandle(worker);
3401 result = Worker_Terminate(env, global);
3402 ASSERT_TRUE(result != nullptr);
3403 }
3404
HWTEST_F(WorkersTest, WorkerTest045, testing::ext::TestSize.Level0)3405 HWTEST_F(WorkersTest, WorkerTest045, testing::ext::TestSize.Level0)
3406 {
3407 napi_env env = (napi_env)engine_;
3408 napi_value global;
3409 napi_get_global(env, &global);
3410 napi_value result = nullptr;
3411 result = Worker_Constructor(env, global);
3412 Worker* worker = nullptr;
3413 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
3414 // ------- workerEnv---------
3415 napi_env workerEnv = nullptr;
3416 napi_create_runtime(env, &workerEnv);
3417 napi_value workerGlobal = nullptr;
3418 napi_get_global(workerEnv, &workerGlobal);
3419
3420 napi_value argv[3] = {nullptr};
3421 std::string instanceName = "host";
3422 std::string methodName = "postMessage";
3423 int32_t timeout = 300;
3424 napi_create_string_utf8(workerEnv, instanceName.c_str(), instanceName.length(), &argv[0]);
3425 napi_create_string_utf8(workerEnv, methodName.c_str(), methodName.length(), &argv[1]);
3426 napi_create_int32(workerEnv, timeout, &argv[2]);
3427
3428 std::string funcName = "GlobalCall";
3429 napi_value cb = nullptr;
3430 napi_value callResult = nullptr;
3431 // ------- workerEnv---------
3432 napi_create_function(workerEnv, funcName.c_str(), funcName.size(),
3433 Worker::GlobalCall, worker, &cb);
3434 UpdateWorkerState(worker, Worker::RunnerState::RUNNING);
3435 UpdateHostState(worker, Worker::HostState::INACTIVE);
3436 napi_call_function(workerEnv, workerGlobal, cb, sizeof(argv) / sizeof(argv[0]), argv, &callResult);
3437 napi_value exception = nullptr;
3438 napi_get_and_clear_last_exception(env, &exception);
3439 ASSERT_TRUE(exception == nullptr);
3440 worker->EraseWorker();
3441 ClearWorkerHandle(worker);
3442 result = Worker_Terminate(env, global);
3443 ASSERT_TRUE(result != nullptr);
3444 }
3445
HWTEST_F(WorkersTest, WorkerTest046, testing::ext::TestSize.Level0)3446 HWTEST_F(WorkersTest, WorkerTest046, testing::ext::TestSize.Level0)
3447 {
3448 napi_env env = (napi_env)engine_;
3449 napi_value global;
3450 napi_get_global(env, &global);
3451 napi_value result = nullptr;
3452 result = Worker_Constructor(env, global);
3453 Worker* worker = nullptr;
3454 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
3455 // ------- workerEnv---------
3456 napi_env workerEnv = nullptr;
3457 napi_create_runtime(env, &workerEnv);
3458 napi_value workerGlobal = nullptr;
3459 napi_get_global(workerEnv, &workerGlobal);
3460
3461 napi_value argv[3] = {nullptr};
3462 std::string instanceName = "host";
3463 std::string methodName = "postMessage";
3464 int32_t timeout = 300;
3465 napi_create_string_utf8(workerEnv, instanceName.c_str(), instanceName.length(), &argv[0]);
3466 napi_create_string_utf8(workerEnv, methodName.c_str(), methodName.length(), &argv[1]);
3467 napi_create_int32(workerEnv, timeout, &argv[2]);
3468
3469 std::string funcName = "GlobalCall";
3470 napi_value cb = nullptr;
3471 napi_value callResult = nullptr;
3472 // ------- workerEnv---------
3473 napi_create_function(workerEnv, funcName.c_str(), funcName.size(),
3474 Worker::GlobalCall, worker, &cb);
3475 UpdateWorkerState(worker, Worker::RunnerState::RUNNING);
3476 SetMainThread(worker, true);
3477 SetLimitedWorker(worker, false);
3478 napi_call_function(workerEnv, workerGlobal, cb, sizeof(argv) / sizeof(argv[0]), argv, &callResult);
3479 napi_value exception = nullptr;
3480 napi_get_and_clear_last_exception(env, &exception);
3481 ASSERT_TRUE(exception == nullptr);
3482 SetMainThread(worker, false);
3483 napi_call_function(workerEnv, workerGlobal, cb, sizeof(argv) / sizeof(argv[0]), argv, &callResult);
3484 napi_get_and_clear_last_exception(env, &exception);
3485 ASSERT_TRUE(exception == nullptr);
3486 SetMainThread(worker, true);
3487 SetLimitedWorker(worker, true);
3488 napi_call_function(workerEnv, workerGlobal, cb, sizeof(argv) / sizeof(argv[0]), argv, &callResult);
3489 napi_get_and_clear_last_exception(env, &exception);
3490 ASSERT_TRUE(exception == nullptr);
3491 worker->EraseWorker();
3492 ClearWorkerHandle(worker);
3493 result = Worker_Terminate(env, global);
3494 ASSERT_TRUE(result != nullptr);
3495 }
3496
HWTEST_F(WorkersTest, WorkerTest047, testing::ext::TestSize.Level0)3497 HWTEST_F(WorkersTest, WorkerTest047, testing::ext::TestSize.Level0)
3498 {
3499 napi_env env = (napi_env)engine_;
3500 napi_value global;
3501 napi_get_global(env, &global);
3502 napi_value result = nullptr;
3503 result = Worker_Constructor(env, global);
3504 Worker* worker = nullptr;
3505 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
3506 napi_value argv[1] = { nullptr };
3507 std::string message = "host";
3508 napi_create_string_utf8(env, message.c_str(), message.length(), &argv[0]);
3509 std::string funcName = "ParentPortCancelTask";
3510 napi_value cb = nullptr;
3511 napi_create_function(env, funcName.c_str(), funcName.size(), Worker::ParentPortCancelTask, nullptr, &cb);
3512 napi_call_function(env, nullptr, cb, sizeof(argv) / sizeof(argv[0]), argv, &result);
3513 worker->EraseWorker();
3514 ClearWorkerHandle(worker);
3515 result = Worker_Terminate(env, global);
3516 ASSERT_TRUE(result != nullptr);
3517 }
3518
HWTEST_F(WorkersTest, WorkerTest048, testing::ext::TestSize.Level0)3519 HWTEST_F(WorkersTest, WorkerTest048, testing::ext::TestSize.Level0)
3520 {
3521 napi_env env = (napi_env)engine_;
3522 napi_value global;
3523 napi_get_global(env, &global);
3524 napi_value result = nullptr;
3525 result = Worker_Constructor(env, global);
3526 Worker* worker = nullptr;
3527 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
3528 napi_value argv[1] = { nullptr };
3529 std::string message = "host";
3530 napi_create_string_utf8(env, message.c_str(), message.length(), &argv[0]);
3531 std::string funcName = "ParentPortCancelTask";
3532 napi_value cb = nullptr;
3533 napi_create_function(env, funcName.c_str(), funcName.size(), Worker::ParentPortCancelTask, worker, &cb);
3534 UpdateWorkerState(worker, Worker::RunnerState::TERMINATED);
3535 napi_call_function(env, global, cb, sizeof(argv) / sizeof(argv[0]), argv, &result);
3536 worker->EraseWorker();
3537 ClearWorkerHandle(worker);
3538 result = Worker_Terminate(env, global);
3539 ASSERT_TRUE(result != nullptr);
3540 }
3541
HWTEST_F(WorkersTest, WorkerTest049, testing::ext::TestSize.Level0)3542 HWTEST_F(WorkersTest, WorkerTest049, testing::ext::TestSize.Level0)
3543 {
3544 napi_env env = (napi_env)engine_;
3545 napi_value global;
3546 napi_get_global(env, &global);
3547 napi_value result = nullptr;
3548 result = Worker_Constructor(env, global);
3549 Worker* worker = nullptr;
3550 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
3551 napi_value argv[1] = { nullptr };
3552 std::string message = "host";
3553 napi_create_string_utf8(env, message.c_str(), message.length(), &argv[0]);
3554 std::string funcName = "ParentPortCancelTask";
3555 napi_value cb = nullptr;
3556 napi_create_function(env, funcName.c_str(), funcName.size(), Worker::ParentPortCancelTask, worker, &cb);
3557 UpdateWorkerState(worker, Worker::RunnerState::TERMINATEING);
3558 napi_call_function(env, global, cb, sizeof(argv) / sizeof(argv[0]), argv, &result);
3559 worker->EraseWorker();
3560 ClearWorkerHandle(worker);
3561 result = Worker_Terminate(env, global);
3562 ASSERT_TRUE(result != nullptr);
3563 }
3564
HWTEST_F(WorkersTest, WorkerTest050, testing::ext::TestSize.Level0)3565 HWTEST_F(WorkersTest, WorkerTest050, testing::ext::TestSize.Level0)
3566 {
3567 napi_env env = (napi_env)engine_;
3568 napi_value global;
3569 napi_get_global(env, &global);
3570 napi_value result = nullptr;
3571 result = Worker_Constructor(env, global);
3572 Worker* worker = nullptr;
3573 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
3574 napi_value argv[1] = { nullptr };
3575 std::string message = "host";
3576 napi_create_string_utf8(env, message.c_str(), message.length(), &argv[0]);
3577 std::string funcName = "ParentPortCancelTask";
3578 napi_value cb = nullptr;
3579 napi_create_function(env, funcName.c_str(), funcName.size(), Worker::ParentPortCancelTask, worker, &cb);
3580 UpdateWorkerState(worker, Worker::RunnerState::RUNNING);
3581 SetWorkerHostEnv(worker, env, true);
3582 napi_call_function(env, global, cb, sizeof(argv) / sizeof(argv[0]), argv, &result);
3583 SetWorkerHostEnv(worker, env, false);
3584 worker->EraseWorker();
3585 ClearWorkerHandle(worker);
3586 result = Worker_Terminate(env, global);
3587 ASSERT_TRUE(result != nullptr);
3588 }
3589
HWTEST_F(WorkersTest, WorkerTest051, testing::ext::TestSize.Level0)3590 HWTEST_F(WorkersTest, WorkerTest051, testing::ext::TestSize.Level0)
3591 {
3592 napi_env env = (napi_env)engine_;
3593 napi_value global;
3594 napi_get_global(env, &global);
3595 napi_value result = nullptr;
3596 result = Worker_Constructor(env, global);
3597 Worker* worker = nullptr;
3598 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
3599 std::string funcName = "ParentPortAddEventListener";
3600 napi_value cb = nullptr;
3601 napi_value callResult = nullptr;
3602 napi_create_function(env, funcName.c_str(), funcName.size(),
3603 Worker::ParentPortAddEventListener, worker, &cb);
3604 UpdateWorkerState(worker, Worker::RunnerState::RUNNING);
3605 napi_call_function(env, global, cb, 0, nullptr, &callResult);
3606 worker->EraseWorker();
3607 ClearWorkerHandle(worker);
3608 napi_value exception = nullptr;
3609 napi_get_and_clear_last_exception(env, &exception);
3610 ASSERT_TRUE(exception != nullptr);
3611 result = Worker_Terminate(env, global);
3612 ASSERT_TRUE(result != nullptr);
3613 }
3614
HWTEST_F(WorkersTest, WorkerTest052, testing::ext::TestSize.Level0)3615 HWTEST_F(WorkersTest, WorkerTest052, testing::ext::TestSize.Level0)
3616 {
3617 napi_env env = (napi_env)engine_;
3618 napi_value global;
3619 napi_get_global(env, &global);
3620 napi_value result = nullptr;
3621 result = Worker_Constructor(env, global);
3622 Worker* worker = nullptr;
3623 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
3624 napi_value argv[3] = {nullptr};
3625 std::string message = "host";
3626 napi_create_string_utf8(env, message.c_str(), message.length(), &argv[0]);
3627 std::string funcName = "ParentPortAddEventListener";
3628 napi_create_string_utf8(env, funcName.c_str(), funcName.length(), &argv[1]);
3629 napi_value myobject = nullptr;
3630 napi_create_object(env, &myobject);
3631 argv[2] = myobject;
3632 napi_value cb = nullptr;
3633 napi_value callResult = nullptr;
3634 napi_create_function(env, funcName.c_str(), funcName.size(),
3635 Worker::ParentPortAddEventListener, worker, &cb);
3636 UpdateWorkerState(worker, Worker::RunnerState::RUNNING);
3637 napi_call_function(env, global, cb, sizeof(argv) / sizeof(argv[0]), argv, &callResult);
3638 worker->EraseWorker();
3639 ClearWorkerHandle(worker);
3640 napi_value exception = nullptr;
3641 napi_get_and_clear_last_exception(env, &exception);
3642 ASSERT_TRUE(exception != nullptr);
3643 result = Worker_Terminate(env, global);
3644 ASSERT_TRUE(result != nullptr);
3645 }
3646
HWTEST_F(WorkersTest, WorkerTest053, testing::ext::TestSize.Level0)3647 HWTEST_F(WorkersTest, WorkerTest053, testing::ext::TestSize.Level0)
3648 {
3649 napi_env env = (napi_env)engine_;
3650 napi_value global;
3651 napi_get_global(env, &global);
3652 napi_value result = nullptr;
3653 result = Worker_Constructor(env, global);
3654 Worker* worker = nullptr;
3655 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
3656 napi_value argv[3] = {nullptr};
3657 std::string message = "host";
3658 napi_create_string_utf8(env, message.c_str(), message.length(), &argv[0]);
3659 auto func = [](napi_env env, napi_callback_info info) -> napi_value {
3660 return nullptr;
3661 };
3662 std::string funcName = "ParentPortAddEventListener";
3663 napi_value cb = nullptr;
3664 napi_value funcValue = nullptr;
3665 napi_create_function(env, "testFunc", NAPI_AUTO_LENGTH, func, nullptr, &funcValue);
3666 argv[1] = funcValue;
3667 ASSERT_TRUE(funcValue != nullptr);
3668 napi_value myobject = nullptr;
3669 napi_create_object(env, &myobject);
3670 argv[2] = myobject;
3671 napi_value callResult = nullptr;
3672 napi_create_function(env, funcName.c_str(), funcName.size(),
3673 Worker::ParentPortAddEventListener, nullptr, &cb);
3674 UpdateWorkerState(worker, Worker::RunnerState::RUNNING);
3675 napi_call_function(env, nullptr, cb, sizeof(argv) / sizeof(argv[0]), argv, &callResult);
3676 worker->EraseWorker();
3677 ClearWorkerHandle(worker);
3678 result = Worker_Terminate(env, global);
3679 ASSERT_TRUE(result != nullptr);
3680 }
3681
HWTEST_F(WorkersTest, WorkerTest054, testing::ext::TestSize.Level0)3682 HWTEST_F(WorkersTest, WorkerTest054, testing::ext::TestSize.Level0)
3683 {
3684 napi_env env = (napi_env)engine_;
3685 napi_value global;
3686 napi_get_global(env, &global);
3687 napi_value result = nullptr;
3688 result = Worker_Constructor(env, global);
3689 Worker* worker = nullptr;
3690 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
3691 napi_value argv[3] = {nullptr};
3692 std::string message = "host";
3693 napi_create_string_utf8(env, message.c_str(), message.length(), &argv[0]);
3694 auto func = [](napi_env env, napi_callback_info info) -> napi_value {
3695 return nullptr;
3696 };
3697 std::string funcName = "ParentPortAddEventListener";
3698 napi_value cb = nullptr;
3699 napi_value funcValue = nullptr;
3700 napi_create_function(env, "testFunc", NAPI_AUTO_LENGTH, func, nullptr, &funcValue);
3701 argv[1] = funcValue;
3702 ASSERT_TRUE(funcValue != nullptr);
3703 napi_value myobject = nullptr;
3704 napi_create_object(env, &myobject);
3705 argv[2] = myobject;
3706 napi_value callResult = nullptr;
3707 napi_create_function(env, funcName.c_str(), funcName.size(),
3708 Worker::ParentPortAddEventListener, worker, &cb);
3709 UpdateWorkerState(worker, Worker::RunnerState::TERMINATED);
3710 napi_call_function(env, global, cb, sizeof(argv) / sizeof(argv[0]), argv, &callResult);
3711 worker->EraseWorker();
3712 ClearWorkerHandle(worker);
3713 result = Worker_Terminate(env, global);
3714 ASSERT_TRUE(result != nullptr);
3715 }
3716
HWTEST_F(WorkersTest, WorkerTest055, testing::ext::TestSize.Level0)3717 HWTEST_F(WorkersTest, WorkerTest055, testing::ext::TestSize.Level0)
3718 {
3719 napi_env env = (napi_env)engine_;
3720 napi_value global;
3721 napi_get_global(env, &global);
3722 napi_value result = nullptr;
3723 result = Worker_Constructor(env, global);
3724 Worker* worker = nullptr;
3725 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
3726 napi_value argv[3] = {nullptr};
3727 std::string message = "host";
3728 napi_create_string_utf8(env, message.c_str(), message.length(), &argv[0]);
3729 auto func = [](napi_env env, napi_callback_info info) -> napi_value {
3730 return nullptr;
3731 };
3732 std::string funcName = "ParentPortAddEventListener";
3733 napi_value cb = nullptr;
3734 napi_value funcValue = nullptr;
3735 napi_create_function(env, "testFunc", NAPI_AUTO_LENGTH, func, nullptr, &funcValue);
3736 argv[1] = funcValue;
3737 ASSERT_TRUE(funcValue != nullptr);
3738 napi_value myobject = nullptr;
3739 napi_create_object(env, &myobject);
3740 napi_value onceValue = NapiHelper::CreateBooleanValue(env, true);
3741 napi_set_named_property(env, myobject, "once", onceValue);
3742 argv[2] = myobject;
3743 napi_value callResult = nullptr;
3744 napi_create_function(env, funcName.c_str(), funcName.size(),
3745 Worker::ParentPortAddEventListener, worker, &cb);
3746 UpdateWorkerState(worker, Worker::RunnerState::RUNNING);
3747 napi_call_function(env, global, cb, sizeof(argv) / sizeof(argv[0]), argv, &callResult);
3748 worker->EraseWorker();
3749 ClearWorkerHandle(worker);
3750 result = Worker_Terminate(env, global);
3751 ASSERT_TRUE(result != nullptr);
3752 }
3753
HWTEST_F(WorkersTest, WorkerTest056, testing::ext::TestSize.Level0)3754 HWTEST_F(WorkersTest, WorkerTest056, testing::ext::TestSize.Level0)
3755 {
3756 napi_env env = (napi_env)engine_;
3757 napi_value global;
3758 napi_get_global(env, &global);
3759 napi_value result = nullptr;
3760 result = Worker_Constructor(env, global);
3761 Worker* worker = nullptr;
3762 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
3763 napi_value argv[2] = {nullptr};
3764 std::string message = "host";
3765 napi_create_string_utf8(env, message.c_str(), message.length(), &argv[0]);
3766 auto func = [](napi_env env, napi_callback_info info) -> napi_value {
3767 return nullptr;
3768 };
3769 std::string funcName = "ParentPortAddEventListener";
3770 napi_value cb = nullptr;
3771 napi_value funcValue = nullptr;
3772 napi_create_function(env, "testFunc", NAPI_AUTO_LENGTH, func, nullptr, &funcValue);
3773 argv[1] = funcValue;
3774 ASSERT_TRUE(funcValue != nullptr);
3775 napi_value callResult = nullptr;
3776 napi_create_function(env, funcName.c_str(), funcName.size(),
3777 Worker::ParentPortAddEventListener, worker, &cb);
3778 UpdateWorkerState(worker, Worker::RunnerState::RUNNING);
3779 napi_call_function(env, global, cb, sizeof(argv) / sizeof(argv[0]), argv, &callResult);
3780 worker->EraseWorker();
3781 ClearWorkerHandle(worker);
3782 result = Worker_Terminate(env, global);
3783 ASSERT_TRUE(result != nullptr);
3784 }
3785
HWTEST_F(WorkersTest, WorkerTest057, testing::ext::TestSize.Level0)3786 HWTEST_F(WorkersTest, WorkerTest057, testing::ext::TestSize.Level0)
3787 {
3788 napi_env env = (napi_env)engine_;
3789 napi_value global;
3790 napi_get_global(env, &global);
3791 napi_value result = nullptr;
3792 result = Worker_Constructor(env, global);
3793 Worker* worker = nullptr;
3794 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
3795 napi_value argv[3] = {nullptr};
3796 std::string message = "host";
3797 napi_create_string_utf8(env, message.c_str(), message.length(), &argv[0]);
3798 auto func = [](napi_env env, napi_callback_info info) -> napi_value {
3799 return nullptr;
3800 };
3801 std::string funcName = "ParentPortAddEventListener";
3802 napi_value cb = nullptr;
3803 napi_value funcValue = nullptr;
3804 napi_create_function(env, "testFunc", NAPI_AUTO_LENGTH, func, nullptr, &funcValue);
3805 argv[1] = funcValue;
3806 ASSERT_TRUE(funcValue != nullptr);
3807 napi_create_string_utf8(env, funcName.c_str(), funcName.length(), &argv[2]);
3808 napi_value callResult = nullptr;
3809 napi_create_function(env, funcName.c_str(), funcName.size(),
3810 Worker::ParentPortAddEventListener, worker, &cb);
3811 UpdateWorkerState(worker, Worker::RunnerState::RUNNING);
3812 napi_call_function(env, global, cb, sizeof(argv) / sizeof(argv[0]), argv, &callResult);
3813 worker->EraseWorker();
3814 ClearWorkerHandle(worker);
3815 napi_value exception = nullptr;
3816 napi_get_and_clear_last_exception(env, &exception);
3817 ASSERT_TRUE(exception == nullptr);
3818 result = Worker_Terminate(env, global);
3819 ASSERT_TRUE(result != nullptr);
3820 }
3821
HWTEST_F(WorkersTest, WorkerTest058, testing::ext::TestSize.Level0)3822 HWTEST_F(WorkersTest, WorkerTest058, testing::ext::TestSize.Level0)
3823 {
3824 napi_env env = (napi_env)engine_;
3825 napi_value global;
3826 napi_get_global(env, &global);
3827 napi_value result = nullptr;
3828 result = Worker_Constructor(env, global);
3829 Worker* worker = nullptr;
3830 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
3831 // ------- workerEnv---------
3832 napi_env workerEnv = nullptr;
3833 napi_create_runtime(env, &workerEnv);
3834 napi_value workerGlobal = nullptr;
3835 napi_get_global(workerEnv, &workerGlobal);
3836 napi_value cb = nullptr;
3837 std::string funcName = "ParentPortDispatchEvent";
3838 napi_value callResult = nullptr;
3839 napi_create_function(workerEnv, funcName.c_str(), funcName.size(),
3840 Worker::ParentPortDispatchEvent, worker, &cb);
3841 napi_call_function(workerEnv, workerGlobal, cb, 0, nullptr, &callResult);
3842 worker->EraseWorker();
3843 ClearWorkerHandle(worker);
3844 napi_value exception = nullptr;
3845 napi_get_and_clear_last_exception(env, &exception);
3846 ASSERT_TRUE(exception == nullptr);
3847 result = Worker_Terminate(env, global);
3848 ASSERT_TRUE(result != nullptr);
3849 }
3850
HWTEST_F(WorkersTest, WorkerTest059, testing::ext::TestSize.Level0)3851 HWTEST_F(WorkersTest, WorkerTest059, testing::ext::TestSize.Level0)
3852 {
3853 napi_env env = (napi_env)engine_;
3854 napi_value global;
3855 napi_get_global(env, &global);
3856 napi_value result = nullptr;
3857 result = Worker_Constructor(env, global);
3858 Worker* worker = nullptr;
3859 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
3860 // ------- workerEnv---------
3861 napi_env workerEnv = nullptr;
3862 napi_create_runtime(env, &workerEnv);
3863 napi_value workerGlobal = nullptr;
3864 napi_get_global(workerEnv, &workerGlobal);
3865
3866 napi_value argv[1] = {nullptr};
3867 napi_value cb = nullptr;
3868 std::string funcName = "ParentPortDispatchEvent";
3869 const char* messageKeyStr = "type";
3870 napi_create_string_latin1(workerEnv, messageKeyStr, strlen(messageKeyStr), &argv[0]);
3871 napi_value callResult = nullptr;
3872 napi_create_function(workerEnv, funcName.c_str(), funcName.size(),
3873 Worker::ParentPortDispatchEvent, worker, &cb);
3874 napi_call_function(workerEnv, workerGlobal, cb, sizeof(argv) / sizeof(argv[0]), argv, &callResult);
3875 worker->EraseWorker();
3876 ClearWorkerHandle(worker);
3877 napi_value exception = nullptr;
3878 napi_get_and_clear_last_exception(env, &exception);
3879 ASSERT_TRUE(exception == nullptr);
3880 result = Worker_Terminate(env, global);
3881 ASSERT_TRUE(result != nullptr);
3882 }
3883
HWTEST_F(WorkersTest, WorkerTest060, testing::ext::TestSize.Level0)3884 HWTEST_F(WorkersTest, WorkerTest060, testing::ext::TestSize.Level0)
3885 {
3886 napi_env env = (napi_env)engine_;
3887 napi_value global;
3888 napi_get_global(env, &global);
3889 napi_value result = nullptr;
3890 result = Worker_Constructor(env, global);
3891 Worker* worker = nullptr;
3892 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
3893 // ------- workerEnv---------
3894 napi_env workerEnv = nullptr;
3895 napi_create_runtime(env, &workerEnv);
3896 napi_value workerGlobal = nullptr;
3897 napi_get_global(workerEnv, &workerGlobal);
3898
3899 napi_value argv[1] = {nullptr};
3900
3901 napi_value cb = nullptr;
3902 std::string funcName = "ParentPortDispatchEvent";
3903 napi_value typeValue = nullptr;
3904 uint32_t type = 100; //test 100
3905 napi_create_uint32(env, type, &typeValue);
3906 napi_value object = nullptr;
3907 napi_create_object(workerEnv, &object);
3908 napi_set_named_property(workerEnv, object, "type", typeValue);
3909 argv[0] = object;
3910 napi_value callResult = nullptr;
3911 napi_create_function(workerEnv, funcName.c_str(), funcName.size(),
3912 Worker::ParentPortDispatchEvent, worker, &cb);
3913 UpdateWorkerState(worker, Worker::RunnerState::RUNNING);
3914 napi_call_function(workerEnv, workerGlobal, cb, sizeof(argv) / sizeof(argv[0]), argv, &callResult);
3915 worker->EraseWorker();
3916 ClearWorkerHandle(worker);
3917 napi_value exception = nullptr;
3918 napi_get_and_clear_last_exception(env, &exception);
3919 ASSERT_TRUE(exception == nullptr);
3920 result = Worker_Terminate(env, global);
3921 ASSERT_TRUE(result != nullptr);
3922 }
3923
HWTEST_F(WorkersTest, WorkerTest061, testing::ext::TestSize.Level0)3924 HWTEST_F(WorkersTest, WorkerTest061, testing::ext::TestSize.Level0)
3925 {
3926 napi_env env = (napi_env)engine_;
3927 napi_value global;
3928 napi_get_global(env, &global);
3929 napi_value result = nullptr;
3930 result = Worker_Constructor(env, global);
3931 Worker* worker = nullptr;
3932 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
3933 // ------- workerEnv---------
3934 napi_env workerEnv = nullptr;
3935 napi_create_runtime(env, &workerEnv);
3936 napi_value workerGlobal = nullptr;
3937 napi_get_global(workerEnv, &workerGlobal);
3938 napi_value argv[1] = {nullptr};
3939 napi_value objresult = nullptr;
3940 napi_create_object(workerEnv, &objresult);
3941 napi_value cb = nullptr;
3942 std::string funcName = "ParentPortDispatchEvent";
3943 napi_value messageKey = nullptr;
3944 const char* messageKeyStr = "type";
3945 napi_create_string_latin1(workerEnv, messageKeyStr, strlen(messageKeyStr), &messageKey);
3946 napi_value messageValue = nullptr;
3947 const char* messageValueStr = "message";
3948 napi_create_string_latin1(workerEnv, messageValueStr, strlen(messageValueStr), &messageValue);
3949 napi_set_property(workerEnv, objresult, messageKey, messageValue);
3950 argv[0] = objresult;
3951 napi_value callResult = nullptr;
3952 napi_create_function(workerEnv, funcName.c_str(), funcName.size(),
3953 Worker::ParentPortDispatchEvent, nullptr, &cb);
3954 UpdateWorkerState(worker, Worker::RunnerState::RUNNING);
3955 napi_call_function(workerEnv, nullptr, cb, sizeof(argv) / sizeof(argv[0]), argv, &callResult);
3956 worker->EraseWorker();
3957 ClearWorkerHandle(worker);
3958 napi_value exception = nullptr;
3959 napi_get_and_clear_last_exception(env, &exception);
3960 ASSERT_TRUE(exception == nullptr);
3961 result = Worker_Terminate(env, global);
3962 ASSERT_TRUE(result != nullptr);
3963 }
3964
HWTEST_F(WorkersTest, WorkerTest062, testing::ext::TestSize.Level0)3965 HWTEST_F(WorkersTest, WorkerTest062, testing::ext::TestSize.Level0)
3966 {
3967 napi_env env = (napi_env)engine_;
3968 napi_value global;
3969 napi_get_global(env, &global);
3970 napi_value result = nullptr;
3971 result = Worker_Constructor(env, global);
3972 Worker* worker = nullptr;
3973 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
3974 // ------- workerEnv---------
3975 napi_env workerEnv = nullptr;
3976 napi_create_runtime(env, &workerEnv);
3977 napi_value workerGlobal = nullptr;
3978 napi_get_global(workerEnv, &workerGlobal);
3979
3980 napi_value argv[1] = {nullptr};
3981 napi_value objresult = nullptr;
3982 napi_create_object(workerEnv, &objresult);
3983 napi_value cb = nullptr;
3984 std::string funcName = "ParentPortDispatchEvent";
3985 napi_value messageKey = nullptr;
3986 const char* messageKeyStr = "type";
3987 napi_create_string_latin1(workerEnv, messageKeyStr, strlen(messageKeyStr), &messageKey);
3988 napi_value messageValue = nullptr;
3989 const char* messageValueStr = "message";
3990 napi_create_string_latin1(workerEnv, messageValueStr, strlen(messageValueStr), &messageValue);
3991 napi_set_property(workerEnv, objresult, messageKey, messageValue);
3992 argv[0] = objresult;
3993 napi_value callResult = nullptr;
3994 napi_create_function(workerEnv, funcName.c_str(), funcName.size(),
3995 Worker::ParentPortDispatchEvent, worker, &cb);
3996 UpdateWorkerState(worker, Worker::RunnerState::TERMINATED);
3997 napi_call_function(workerEnv, workerGlobal, cb, sizeof(argv) / sizeof(argv[0]), argv, &callResult);
3998 worker->EraseWorker();
3999 ClearWorkerHandle(worker);
4000 napi_value exception = nullptr;
4001 napi_get_and_clear_last_exception(env, &exception);
4002 ASSERT_TRUE(exception == nullptr);
4003 result = Worker_Terminate(env, global);
4004 ASSERT_TRUE(result != nullptr);
4005 }
4006
HWTEST_F(WorkersTest, WorkerTest063, testing::ext::TestSize.Level0)4007 HWTEST_F(WorkersTest, WorkerTest063, testing::ext::TestSize.Level0)
4008 {
4009 napi_env env = (napi_env)engine_;
4010 napi_value global;
4011 napi_get_global(env, &global);
4012 napi_value result = nullptr;
4013 result = Worker_Constructor(env, global);
4014 Worker* worker = nullptr;
4015 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
4016
4017 std::string funcName = "ParentPortRemoveEventListener";
4018 napi_value cb = nullptr;
4019
4020 napi_create_function(env, funcName.c_str(), funcName.size(),
4021 Worker::ParentPortRemoveEventListener, worker, &cb);
4022 napi_call_function(env, global, cb, 0, nullptr, &result);
4023 worker->EraseWorker();
4024 ClearWorkerHandle(worker);
4025 napi_value exception = nullptr;
4026 napi_get_and_clear_last_exception(env, &exception);
4027 ASSERT_TRUE(exception != nullptr);
4028 result = Worker_Terminate(env, global);
4029 ASSERT_TRUE(result != nullptr);
4030 }
4031
HWTEST_F(WorkersTest, WorkerTest064, testing::ext::TestSize.Level0)4032 HWTEST_F(WorkersTest, WorkerTest064, testing::ext::TestSize.Level0)
4033 {
4034 napi_env env = (napi_env)engine_;
4035 napi_value global;
4036 napi_get_global(env, &global);
4037 napi_value result = nullptr;
4038 result = Worker_Constructor(env, global);
4039 Worker* worker = nullptr;
4040 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
4041
4042 napi_value argv[2] = {nullptr};
4043 std::string message = "host";
4044 napi_create_string_utf8(env, message.c_str(), message.length(), &argv[0]);
4045 auto func = [](napi_env env, napi_callback_info info) -> napi_value {
4046 return nullptr;
4047 };
4048 napi_value funcValue = nullptr;
4049 napi_create_function(env, "testFunc", NAPI_AUTO_LENGTH, func, nullptr, &funcValue);
4050 argv[1] = funcValue;
4051
4052 std::string funcName = "ParentPortRemoveEventListener";
4053 napi_value cb = nullptr;
4054
4055 napi_create_function(env, funcName.c_str(), funcName.size(),
4056 Worker::ParentPortRemoveEventListener, nullptr, &cb);
4057 napi_call_function(env, nullptr, cb, sizeof(argv) / sizeof(argv[0]), argv, &result);
4058 worker->EraseWorker();
4059 ClearWorkerHandle(worker);
4060 napi_value exception = nullptr;
4061 napi_get_and_clear_last_exception(env, &exception);
4062 ASSERT_TRUE(exception == nullptr);
4063 result = Worker_Terminate(env, global);
4064 ASSERT_TRUE(result != nullptr);
4065 }
4066
HWTEST_F(WorkersTest, WorkerTest065, testing::ext::TestSize.Level0)4067 HWTEST_F(WorkersTest, WorkerTest065, testing::ext::TestSize.Level0)
4068 {
4069 napi_env env = (napi_env)engine_;
4070 napi_value global;
4071 napi_get_global(env, &global);
4072 napi_value result = nullptr;
4073 result = Worker_Constructor(env, global);
4074 Worker* worker = nullptr;
4075 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
4076
4077 napi_value argv[2] = {nullptr};
4078 std::string message = "host";
4079 napi_create_string_utf8(env, message.c_str(), message.length(), &argv[0]);
4080 auto func = [](napi_env env, napi_callback_info info) -> napi_value {
4081 return nullptr;
4082 };
4083 napi_value funcValue = nullptr;
4084 napi_create_function(env, "testFunc", NAPI_AUTO_LENGTH, func, nullptr, &funcValue);
4085 argv[1] = funcValue;
4086
4087 std::string funcName = "ParentPortRemoveEventListener";
4088 napi_value cb = nullptr;
4089
4090 napi_create_function(env, funcName.c_str(), funcName.size(),
4091 Worker::ParentPortRemoveEventListener, worker, &cb);
4092 UpdateWorkerState(worker, Worker::RunnerState::TERMINATED);
4093 napi_call_function(env, global, cb, sizeof(argv) / sizeof(argv[0]), argv, &result);
4094 worker->EraseWorker();
4095 ClearWorkerHandle(worker);
4096 napi_value exception = nullptr;
4097 napi_get_and_clear_last_exception(env, &exception);
4098 ASSERT_TRUE(exception == nullptr);
4099 result = Worker_Terminate(env, global);
4100 ASSERT_TRUE(result != nullptr);
4101 }
4102
HWTEST_F(WorkersTest, WorkerTest066, testing::ext::TestSize.Level0)4103 HWTEST_F(WorkersTest, WorkerTest066, testing::ext::TestSize.Level0)
4104 {
4105 napi_env env = (napi_env)engine_;
4106 napi_value global;
4107 napi_get_global(env, &global);
4108 napi_value result = nullptr;
4109 result = Worker_Constructor(env, global);
4110 Worker* worker = nullptr;
4111 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
4112
4113 napi_value argv[2] = {nullptr};
4114 std::string message = "host";
4115 napi_create_string_utf8(env, message.c_str(), message.length(), &argv[0]);
4116
4117 std::string funcName = "ParentPortRemoveEventListener";
4118 napi_create_string_utf8(env, funcName.c_str(), funcName.length(), &argv[1]);
4119 napi_value cb = nullptr;
4120
4121 napi_create_function(env, funcName.c_str(), funcName.size(),
4122 Worker::ParentPortRemoveEventListener, worker, &cb);
4123 napi_call_function(env, global, cb, sizeof(argv) / sizeof(argv[0]), argv, &result);
4124 worker->EraseWorker();
4125 ClearWorkerHandle(worker);
4126 napi_value exception = nullptr;
4127 napi_get_and_clear_last_exception(env, &exception);
4128 ASSERT_TRUE(exception != nullptr);
4129 result = Worker_Terminate(env, global);
4130 ASSERT_TRUE(result != nullptr);
4131 }
4132
HWTEST_F(WorkersTest, WorkerTest067, testing::ext::TestSize.Level0)4133 HWTEST_F(WorkersTest, WorkerTest067, testing::ext::TestSize.Level0)
4134 {
4135 napi_env env = (napi_env)engine_;
4136 napi_value global;
4137 napi_get_global(env, &global);
4138 napi_value result = nullptr;
4139 result = Worker_Constructor(env, global);
4140 Worker* worker = nullptr;
4141 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
4142
4143 napi_value argv[1] = {nullptr};
4144 std::string message = "host";
4145 napi_create_string_utf8(env, message.c_str(), message.length(), &argv[0]);
4146
4147 std::string funcName = "ParentPortRemoveEventListener";
4148 napi_value cb = nullptr;
4149
4150 napi_create_function(env, funcName.c_str(), funcName.size(),
4151 Worker::ParentPortRemoveEventListener, worker, &cb);
4152 napi_call_function(env, global, cb, sizeof(argv) / sizeof(argv[0]), argv, &result);
4153 worker->EraseWorker();
4154 ClearWorkerHandle(worker);
4155 napi_value exception = nullptr;
4156 napi_get_and_clear_last_exception(env, &exception);
4157 ASSERT_TRUE(exception == nullptr);
4158 result = Worker_Terminate(env, global);
4159 ASSERT_TRUE(result != nullptr);
4160 }
4161
HWTEST_F(WorkersTest, WorkerTest068, testing::ext::TestSize.Level0)4162 HWTEST_F(WorkersTest, WorkerTest068, testing::ext::TestSize.Level0)
4163 {
4164 napi_env env = (napi_env)engine_;
4165 napi_value global;
4166 napi_get_global(env, &global);
4167 napi_value result = nullptr;
4168 result = Worker_Constructor(env, global);
4169 Worker* worker = nullptr;
4170 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
4171 // ------- workerEnv---------
4172 napi_env workerEnv = nullptr;
4173 napi_create_runtime(env, &workerEnv);
4174 napi_value workerGlobal = nullptr;
4175 napi_get_global(workerEnv, &workerGlobal);
4176 napi_value argv[1] = {nullptr};
4177 std::string message = "host";
4178 napi_create_string_utf8(workerEnv, message.c_str(), message.length(), &argv[0]);
4179 std::string funcName = "ParentPortRemoveAllListener";
4180 napi_value cb = nullptr;
4181
4182 napi_value callResult = nullptr;
4183 // ------- workerEnv---------
4184 napi_create_function(workerEnv, funcName.c_str(), funcName.size(),
4185 Worker::ParentPortRemoveAllListener, nullptr, &cb);
4186 UpdateWorkerState(worker, Worker::RunnerState::RUNNING);
4187 napi_call_function(workerEnv, nullptr, cb, sizeof(argv) / sizeof(argv[0]), argv, &callResult);
4188 worker->EraseWorker();
4189 ClearWorkerHandle(worker);
4190 napi_value exception = nullptr;
4191 napi_get_and_clear_last_exception(env, &exception);
4192 ASSERT_TRUE(exception == nullptr);
4193 result = Worker_Terminate(env, global);
4194 ASSERT_TRUE(result != nullptr);
4195 }
4196
HWTEST_F(WorkersTest, WorkerTest069, testing::ext::TestSize.Level0)4197 HWTEST_F(WorkersTest, WorkerTest069, testing::ext::TestSize.Level0)
4198 {
4199 napi_env env = (napi_env)engine_;
4200 napi_value global;
4201 napi_get_global(env, &global);
4202 napi_value result = nullptr;
4203 result = Worker_Constructor(env, global);
4204 Worker* worker = nullptr;
4205 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
4206 // ------- workerEnv---------
4207 napi_env workerEnv = nullptr;
4208 napi_create_runtime(env, &workerEnv);
4209 napi_value workerGlobal = nullptr;
4210 napi_get_global(workerEnv, &workerGlobal);
4211 napi_value argv[1] = {nullptr};
4212 std::string message = "host";
4213 napi_create_string_utf8(workerEnv, message.c_str(), message.length(), &argv[0]);
4214 std::string funcName = "ParentPortRemoveAllListener";
4215 napi_value cb = nullptr;
4216
4217 napi_value callResult = nullptr;
4218 // ------- workerEnv---------
4219 napi_create_function(workerEnv, funcName.c_str(), funcName.size(),
4220 Worker::ParentPortRemoveAllListener, worker, &cb);
4221 UpdateWorkerState(worker, Worker::RunnerState::TERMINATED);
4222 napi_call_function(workerEnv, workerGlobal, cb, sizeof(argv) / sizeof(argv[0]), argv, &callResult);
4223 worker->EraseWorker();
4224 ClearWorkerHandle(worker);
4225 napi_value exception = nullptr;
4226 napi_get_and_clear_last_exception(env, &exception);
4227 ASSERT_TRUE(exception == nullptr);
4228 result = Worker_Terminate(env, global);
4229 ASSERT_TRUE(result != nullptr);
4230 }
4231
HWTEST_F(WorkersTest, WorkerTest070, testing::ext::TestSize.Level0)4232 HWTEST_F(WorkersTest, WorkerTest070, testing::ext::TestSize.Level0)
4233 {
4234 napi_env env = (napi_env)engine_;
4235 napi_value global;
4236 napi_get_global(env, &global);
4237 napi_value result = nullptr;
4238 result = Worker_Constructor(env, global);
4239 Worker* worker = nullptr;
4240 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
4241 RemoveGlobalCallObject(worker, env);
4242 napi_value exception = nullptr;
4243 napi_get_and_clear_last_exception(env, &exception);
4244 ASSERT_TRUE(exception == nullptr);
4245 }
4246
HWTEST_F(WorkersTest, WorkerTest071, testing::ext::TestSize.Level0)4247 HWTEST_F(WorkersTest, WorkerTest071, testing::ext::TestSize.Level0)
4248 {
4249 napi_env env = (napi_env)engine_;
4250 napi_value global;
4251 napi_get_global(env, &global);
4252 napi_value result = nullptr;
4253 result = Worker_Constructor(env, global);
4254 Worker* worker = nullptr;
4255 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
4256 TestHostOnMessageInner(worker, env);
4257 worker->EraseWorker();
4258 ClearWorkerHandle(worker);
4259 napi_value exception = nullptr;
4260 napi_get_and_clear_last_exception(env, &exception);
4261 ASSERT_TRUE(exception == nullptr);
4262 result = Worker_Terminate(env, global);
4263 ASSERT_TRUE(result != nullptr);
4264 }
4265
HWTEST_F(WorkersTest, WorkerTest072, testing::ext::TestSize.Level0)4266 HWTEST_F(WorkersTest, WorkerTest072, testing::ext::TestSize.Level0)
4267 {
4268 napi_env env = (napi_env)engine_;
4269 napi_value global;
4270 napi_get_global(env, &global);
4271 napi_value result = nullptr;
4272 result = Worker_Constructor(env, global);
4273 Worker* worker = nullptr;
4274 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
4275 HostOnGlobalCall(worker, env);
4276 worker->EraseWorker();
4277 ClearWorkerHandle(worker);
4278 napi_value exception = nullptr;
4279 napi_get_and_clear_last_exception(env, &exception);
4280 ASSERT_TRUE(exception == nullptr);
4281 result = Worker_Terminate(env, global);
4282 ASSERT_TRUE(result != nullptr);
4283 }
4284
HWTEST_F(WorkersTest, WorkerTest073, testing::ext::TestSize.Level0)4285 HWTEST_F(WorkersTest, WorkerTest073, testing::ext::TestSize.Level0)
4286 {
4287 napi_env env = (napi_env)engine_;
4288 napi_value global;
4289 napi_get_global(env, &global);
4290 napi_value result = nullptr;
4291 result = Worker_Constructor(env, global);
4292 Worker* worker = nullptr;
4293 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
4294 HostOnGlobalCallInner001(worker, env);
4295 worker->EraseWorker();
4296 ClearWorkerHandle(worker);
4297 napi_value exception = nullptr;
4298 napi_get_and_clear_last_exception(env, &exception);
4299 ASSERT_TRUE(exception == nullptr);
4300 result = Worker_Terminate(env, global);
4301 ASSERT_TRUE(result != nullptr);
4302 }
4303
HWTEST_F(WorkersTest, WorkerTest074, testing::ext::TestSize.Level0)4304 HWTEST_F(WorkersTest, WorkerTest074, testing::ext::TestSize.Level0)
4305 {
4306 napi_env env = (napi_env)engine_;
4307 napi_value global;
4308 napi_get_global(env, &global);
4309 napi_value result = nullptr;
4310 result = Worker_Constructor(env, global);
4311 Worker* worker = nullptr;
4312 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
4313 HostOnGlobalCallInner002(worker, env);
4314 worker->EraseWorker();
4315 ClearWorkerHandle(worker);
4316 napi_value exception = nullptr;
4317 napi_get_and_clear_last_exception(env, &exception);
4318 ASSERT_TRUE(exception == nullptr);
4319 result = Worker_Terminate(env, global);
4320 ASSERT_TRUE(result != nullptr);
4321 }
4322
HWTEST_F(WorkersTest, WorkerTest075, testing::ext::TestSize.Level0)4323 HWTEST_F(WorkersTest, WorkerTest075, testing::ext::TestSize.Level0)
4324 {
4325 napi_env env = (napi_env)engine_;
4326 napi_value global;
4327 napi_get_global(env, &global);
4328 napi_value result = nullptr;
4329 result = Worker_Constructor(env, global);
4330 Worker* worker = nullptr;
4331 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
4332 HostOnGlobalCallInner003(worker, env);
4333 worker->EraseWorker();
4334 ClearWorkerHandle(worker);
4335 napi_value exception = nullptr;
4336 napi_get_and_clear_last_exception(env, &exception);
4337 ASSERT_TRUE(exception == nullptr);
4338 result = Worker_Terminate(env, global);
4339 ASSERT_TRUE(result != nullptr);
4340 }
4341
HWTEST_F(WorkersTest, WorkerTest076, testing::ext::TestSize.Level0)4342 HWTEST_F(WorkersTest, WorkerTest076, testing::ext::TestSize.Level0)
4343 {
4344 napi_env env = (napi_env)engine_;
4345 napi_value global;
4346 napi_get_global(env, &global);
4347 napi_value result = nullptr;
4348 result = Worker_Constructor(env, global);
4349 Worker* worker = nullptr;
4350 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
4351 HostOnGlobalCallInner004(worker, env);
4352 worker->EraseWorker();
4353 ClearWorkerHandle(worker);
4354 napi_value exception = nullptr;
4355 napi_get_and_clear_last_exception(env, &exception);
4356 ASSERT_TRUE(exception != nullptr);
4357 result = Worker_Terminate(env, global);
4358 ASSERT_TRUE(result != nullptr);
4359 }
4360
HWTEST_F(WorkersTest, WorkerTest077, testing::ext::TestSize.Level0)4361 HWTEST_F(WorkersTest, WorkerTest077, testing::ext::TestSize.Level0)
4362 {
4363 napi_env env = (napi_env)engine_;
4364 napi_value global;
4365 napi_get_global(env, &global);
4366 napi_value result = nullptr;
4367 result = Worker_Constructor(env, global);
4368 Worker* worker = nullptr;
4369 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
4370 HostOnGlobalCallInner005(worker, env);
4371 worker->EraseWorker();
4372 ClearWorkerHandle(worker);
4373 napi_value exception = nullptr;
4374 napi_get_and_clear_last_exception(env, &exception);
4375 ASSERT_TRUE(exception == nullptr);
4376 result = Worker_Terminate(env, global);
4377 ASSERT_TRUE(result != nullptr);
4378 }
4379
HWTEST_F(WorkersTest, WorkerTest078, testing::ext::TestSize.Level0)4380 HWTEST_F(WorkersTest, WorkerTest078, testing::ext::TestSize.Level0)
4381 {
4382 napi_env env = (napi_env)engine_;
4383 napi_value global;
4384 napi_get_global(env, &global);
4385 napi_value result = nullptr;
4386 result = Worker_Constructor(env, global);
4387 Worker* worker = nullptr;
4388 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
4389 HostOnGlobalCallInner006(worker, env);
4390 worker->EraseWorker();
4391 ClearWorkerHandle(worker);
4392 napi_value exception = nullptr;
4393 napi_get_and_clear_last_exception(env, &exception);
4394 ASSERT_TRUE(exception == nullptr);
4395 result = Worker_Terminate(env, global);
4396 ASSERT_TRUE(result != nullptr);
4397 }
4398
HWTEST_F(WorkersTest, WorkerTest079, testing::ext::TestSize.Level0)4399 HWTEST_F(WorkersTest, WorkerTest079, testing::ext::TestSize.Level0)
4400 {
4401 napi_env env = (napi_env)engine_;
4402 napi_value global;
4403 napi_get_global(env, &global);
4404 napi_value result = nullptr;
4405 result = Worker_Constructor(env, global);
4406 Worker* worker = nullptr;
4407 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
4408 HandleGlobalCall(worker, env);
4409 worker->EraseWorker();
4410 ClearWorkerHandle(worker);
4411 napi_value exception = nullptr;
4412 napi_get_and_clear_last_exception(env, &exception);
4413 ASSERT_TRUE(exception == nullptr);
4414 result = Worker_Terminate(env, global);
4415 ASSERT_TRUE(result != nullptr);
4416 }
4417
HWTEST_F(WorkersTest, WorkerTest080, testing::ext::TestSize.Level0)4418 HWTEST_F(WorkersTest, WorkerTest080, testing::ext::TestSize.Level0)
4419 {
4420 napi_env env = (napi_env)engine_;
4421 napi_value global;
4422 napi_get_global(env, &global);
4423 napi_value result = nullptr;
4424 result = Worker_Constructor(env, global);
4425 Worker* worker = nullptr;
4426 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
4427 HostOnError(worker, env);
4428 worker->EraseWorker();
4429 ClearWorkerHandle(worker);
4430 napi_value exception = nullptr;
4431 napi_get_and_clear_last_exception(env, &exception);
4432 ASSERT_TRUE(exception == nullptr);
4433 result = Worker_Terminate(env, global);
4434 ASSERT_TRUE(result != nullptr);
4435 }
4436
HWTEST_F(WorkersTest, WorkerTest081, testing::ext::TestSize.Level0)4437 HWTEST_F(WorkersTest, WorkerTest081, testing::ext::TestSize.Level0)
4438 {
4439 napi_env env = (napi_env)engine_;
4440 napi_value global;
4441 napi_get_global(env, &global);
4442 napi_value result = nullptr;
4443 result = Worker_Constructor(env, global);
4444 Worker* worker = nullptr;
4445 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
4446 HostOnErrorInner(worker, env);
4447 worker->EraseWorker();
4448 ClearWorkerHandle(worker);
4449 napi_value exception = nullptr;
4450 napi_get_and_clear_last_exception(env, &exception);
4451 ASSERT_TRUE(exception == nullptr);
4452 result = Worker_Terminate(env, global);
4453 ASSERT_TRUE(result != nullptr);
4454 }
4455
HWTEST_F(WorkersTest, WorkerTest082, testing::ext::TestSize.Level0)4456 HWTEST_F(WorkersTest, WorkerTest082, testing::ext::TestSize.Level0)
4457 {
4458 napi_env env = (napi_env)engine_;
4459 napi_value global;
4460 napi_get_global(env, &global);
4461 napi_value result = nullptr;
4462 result = Worker_Constructor(env, global);
4463 Worker* worker = nullptr;
4464 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
4465 HostOnMessageErrorInner(worker, env);
4466 worker->EraseWorker();
4467 ClearWorkerHandle(worker);
4468 napi_value exception = nullptr;
4469 napi_get_and_clear_last_exception(env, &exception);
4470 ASSERT_TRUE(exception == nullptr);
4471 result = Worker_Terminate(env, global);
4472 ASSERT_TRUE(result != nullptr);
4473 }
4474
HWTEST_F(WorkersTest, WorkerTest083, testing::ext::TestSize.Level0)4475 HWTEST_F(WorkersTest, WorkerTest083, testing::ext::TestSize.Level0)
4476 {
4477 napi_env env = (napi_env)engine_;
4478 napi_value global;
4479 napi_get_global(env, &global);
4480 napi_value result = nullptr;
4481 result = Worker_Constructor(env, global);
4482 Worker* worker = nullptr;
4483 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
4484 PublishWorkerOverSignal(worker, env);
4485 napi_value exception = nullptr;
4486 napi_get_and_clear_last_exception(env, &exception);
4487 ASSERT_TRUE(exception == nullptr);
4488 ClearWorkerHandle(worker);
4489 result = Worker_Terminate(env, global);
4490 ASSERT_TRUE(result != nullptr);
4491 }
4492
HWTEST_F(WorkersTest, WorkerTest084, testing::ext::TestSize.Level0)4493 HWTEST_F(WorkersTest, WorkerTest084, testing::ext::TestSize.Level0)
4494 {
4495 napi_env env = (napi_env)engine_;
4496 napi_value global;
4497 napi_get_global(env, &global);
4498 napi_value result = nullptr;
4499 result = Worker_Constructor(env, global);
4500 Worker* worker = nullptr;
4501 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
4502 TestWorkerOnMessageInner(worker, env);
4503 worker->EraseWorker();
4504 ClearWorkerHandle(worker);
4505 napi_value exception = nullptr;
4506 napi_get_and_clear_last_exception(env, &exception);
4507 ASSERT_TRUE(exception == nullptr);
4508 result = Worker_Terminate(env, global);
4509 ASSERT_TRUE(result != nullptr);
4510 }
4511
HWTEST_F(WorkersTest, WorkerTest085, testing::ext::TestSize.Level0)4512 HWTEST_F(WorkersTest, WorkerTest085, testing::ext::TestSize.Level0)
4513 {
4514 napi_env env = (napi_env)engine_;
4515 napi_value global;
4516 napi_get_global(env, &global);
4517 napi_value result = nullptr;
4518 result = Worker_Constructor(env, global);
4519 Worker* worker = nullptr;
4520 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
4521 HandleEventListeners(worker, env);
4522 worker->EraseWorker();
4523 ClearWorkerHandle(worker);
4524 napi_value exception = nullptr;
4525 napi_get_and_clear_last_exception(env, &exception);
4526 ASSERT_TRUE(exception == nullptr);
4527 result = Worker_Terminate(env, global);
4528 ASSERT_TRUE(result != nullptr);
4529 }
4530
HWTEST_F(WorkersTest, WorkerTest086, testing::ext::TestSize.Level0)4531 HWTEST_F(WorkersTest, WorkerTest086, testing::ext::TestSize.Level0)
4532 {
4533 napi_env env = (napi_env)engine_;
4534 napi_value global;
4535 napi_get_global(env, &global);
4536 napi_value result = nullptr;
4537 result = Worker_Constructor(env, global);
4538 Worker* worker = nullptr;
4539 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
4540 HandleHostException(worker, env);
4541 worker->EraseWorker();
4542 ClearWorkerHandle(worker);
4543 napi_value exception = nullptr;
4544 napi_get_and_clear_last_exception(env, &exception);
4545 ASSERT_TRUE(exception == nullptr);
4546 result = Worker_Terminate(env, global);
4547 ASSERT_TRUE(result != nullptr);
4548 }
4549
HWTEST_F(WorkersTest, WorkerTest087, testing::ext::TestSize.Level0)4550 HWTEST_F(WorkersTest, WorkerTest087, testing::ext::TestSize.Level0)
4551 {
4552 napi_env env = (napi_env)engine_;
4553 napi_value global;
4554 napi_get_global(env, &global);
4555 napi_value result = nullptr;
4556 result = Worker_Constructor(env, global);
4557 Worker* worker = nullptr;
4558 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
4559 PostMessageToHostInner(worker, env);
4560 worker->EraseWorker();
4561 ClearWorkerHandle(worker);
4562 napi_value exception = nullptr;
4563 napi_get_and_clear_last_exception(env, &exception);
4564 ASSERT_TRUE(exception == nullptr);
4565 result = Worker_Terminate(env, global);
4566 ASSERT_TRUE(result != nullptr);
4567 }
4568
HWTEST_F(WorkersTest, WorkerTest088, testing::ext::TestSize.Level0)4569 HWTEST_F(WorkersTest, WorkerTest088, testing::ext::TestSize.Level0)
4570 {
4571 napi_env env = (napi_env)engine_;
4572 napi_value global;
4573 napi_get_global(env, &global);
4574 napi_value result = nullptr;
4575 result = Worker_Constructor(env, global);
4576 Worker* worker = nullptr;
4577 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
4578 RemoveListenerInner(worker, env);
4579 worker->EraseWorker();
4580 ClearWorkerHandle(worker);
4581 napi_value exception = nullptr;
4582 napi_get_and_clear_last_exception(env, &exception);
4583 ASSERT_TRUE(exception == nullptr);
4584 result = Worker_Terminate(env, global);
4585 ASSERT_TRUE(result != nullptr);
4586 }
4587
HWTEST_F(WorkersTest, WorkerTest089, testing::ext::TestSize.Level0)4588 HWTEST_F(WorkersTest, WorkerTest089, testing::ext::TestSize.Level0)
4589 {
4590 napi_env env = (napi_env)engine_;
4591 napi_value global;
4592 napi_get_global(env, &global);
4593 napi_value result = nullptr;
4594 result = Worker_Constructor(env, global);
4595 Worker* worker = nullptr;
4596 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
4597 ParentPortAddListenerInnerTest(worker, env);
4598 worker->EraseWorker();
4599 ClearWorkerHandle(worker);
4600 napi_value exception = nullptr;
4601 napi_get_and_clear_last_exception(env, &exception);
4602 ASSERT_TRUE(exception == nullptr);
4603 result = Worker_Terminate(env, global);
4604 ASSERT_TRUE(result != nullptr);
4605 }
4606
HWTEST_F(WorkersTest, WorkerTest090, testing::ext::TestSize.Level0)4607 HWTEST_F(WorkersTest, WorkerTest090, testing::ext::TestSize.Level0)
4608 {
4609 napi_env env = (napi_env)engine_;
4610 napi_value global;
4611 napi_get_global(env, &global);
4612 napi_value result = nullptr;
4613 result = Worker_Constructor(env, global);
4614 Worker* worker = nullptr;
4615 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
4616 ParentPortHandleEventListeners(worker, env);
4617 worker->EraseWorker();
4618 ClearWorkerHandle(worker);
4619 napi_value exception = nullptr;
4620 napi_get_and_clear_last_exception(env, &exception);
4621 ASSERT_TRUE(exception == nullptr);
4622 result = Worker_Terminate(env, global);
4623 ASSERT_TRUE(result != nullptr);
4624 }
4625
HWTEST_F(WorkersTest, WorkerTest091, testing::ext::TestSize.Level0)4626 HWTEST_F(WorkersTest, WorkerTest091, testing::ext::TestSize.Level0)
4627 {
4628 napi_env env = (napi_env)engine_;
4629 napi_value global;
4630 napi_get_global(env, &global);
4631 napi_value result = nullptr;
4632 result = Worker_Constructor(env, global);
4633 Worker* worker = nullptr;
4634 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
4635 DebuggerOnPostTask(worker, env);
4636 worker->EraseWorker();
4637 ClearWorkerHandle(worker);
4638 napi_value exception = nullptr;
4639 napi_get_and_clear_last_exception(env, &exception);
4640 ASSERT_TRUE(exception == nullptr);
4641 result = Worker_Terminate(env, global);
4642 ASSERT_TRUE(result != nullptr);
4643 }
4644
HWTEST_F(WorkersTest, WorkerTest092, testing::ext::TestSize.Level0)4645 HWTEST_F(WorkersTest, WorkerTest092, testing::ext::TestSize.Level0)
4646 {
4647 napi_env env = (napi_env)engine_;
4648 napi_value global;
4649 napi_get_global(env, &global);
4650 napi_value result = nullptr;
4651 result = Worker_Constructor(env, global);
4652 Worker* worker = nullptr;
4653 napi_unwrap(env, result, reinterpret_cast<void**>(&worker));
4654 CloseHostHandle(worker, env);
4655 worker->EraseWorker();
4656 ClearWorkerHandle(worker);
4657 napi_value exception = nullptr;
4658 napi_get_and_clear_last_exception(env, &exception);
4659 ASSERT_TRUE(exception == nullptr);
4660 result = Worker_Terminate(env, global);
4661 ASSERT_TRUE(result != nullptr);
4662 }
4663
HWTEST_F(WorkersTest, PostMessageTest004, testing::ext::TestSize.Level0)4664 HWTEST_F(WorkersTest, PostMessageTest004, testing::ext::TestSize.Level0)
4665 {
4666 napi_env env = WorkersTest::GetEnv();
4667 Worker *worker = new Worker(env, nullptr);
4668 UpdateMainThreadWorkerFlag(worker, false);
4669 ASSERT_TRUE(worker != nullptr);
4670 uv_loop_t *loop = nullptr;
4671 napi_status status = napi_get_uv_event_loop(env, &loop);
4672 ASSERT_TRUE(status == napi_ok);
4673 InitHostHandle(worker, loop);
4674
4675 std::thread t(WorkerThreadFunction, worker);
4676 t.detach();
4677 uint32_t number = 200; // 200 : test number
4678 napi_value numVal = nullptr;
4679 status = napi_create_uint32(env, number, &numVal);
4680 ASSERT_TRUE(status == napi_ok);
4681 void *data = nullptr;
4682 napi_value undefined = nullptr;
4683 napi_get_undefined(env, &undefined);
4684 status = napi_serialize(env, numVal, undefined, undefined, &data);
4685 ASSERT_TRUE(status == napi_ok);
4686 uv_sleep(1000); // 1000 : for post and receive message
4687 PostMessage(worker, data);
4688 uv_sleep(1000); // 1000 : for post and receive message
4689 }