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