From 7e292dc8b948b7e54fcef819494275f870d6d8cf Mon Sep 17 00:00:00 2001 From: chentianyu Date: Fri, 12 Sep 2025 10:22:50 +0800 Subject: [PATCH] Revert "!2287 fix ut multi vm in main thread" https://gitee.com/openharmony/arkui_napi/issues/ICXNLR This reverts commit b0c281e85cd22babb3dec9dd9ef50b72d25f394f, reversing changes made to 353b1544b8e6ff63d20bf4aa5929a9d68ecbd734. Change-Id: Ib69d750c244e0299543d2e42010440492b89155e Signed-off-by: chentianyu --- test/unittest/engine/test_ark.cpp | 59 ++-- test/unittest/test_napi.cpp | 496 ++++++++++++---------------- test/unittest/test_napi_context.cpp | 87 +++-- 3 files changed, 277 insertions(+), 365 deletions(-) diff --git a/test/unittest/engine/test_ark.cpp b/test/unittest/engine/test_ark.cpp index 5d00fc15a..403e8fcda 100644 --- a/test/unittest/engine/test_ark.cpp +++ b/test/unittest/engine/test_ark.cpp @@ -205,12 +205,8 @@ HWTEST_F(NativeEngineTest, SuspendVM001, testing::ext::TestSize.Level0) HWTEST_F(NativeEngineTest, CreateRuntimeFunc001, testing::ext::TestSize.Level0) { - std::thread t([this]() { - auto result = engine_->CreateRuntime(true); - ASSERT_TRUE(result); - delete reinterpret_cast(result); - }); - t.join(); + auto result = engine_->CreateRuntime(true); + ASSERT_TRUE(result); } HWTEST_F(NativeEngineTest, ExecuteTranslateBySourceMapFunc001, testing::ext::TestSize.Level0) @@ -387,33 +383,30 @@ HWTEST_F(NativeEngineTest, RegisterWorkerEnvTest001, testing::ext::TestSize.Leve auto arkIdleMonitor = ArkIdleMonitor::GetInstance(); arkIdleMonitor->SetMainThreadEcmaVM(vm); - std::thread t([&arkIdleMonitor]() { - RuntimeOption option; - option.SetGcType(RuntimeOption::GC_TYPE::GEN_GC); - const int64_t poolSize = 0x1000000; // 16M - option.SetGcPoolSize(poolSize); - option.SetLogLevel(RuntimeOption::LOG_LEVEL::ERROR); - option.SetDebuggerLibraryPath(""); - auto workerVM1 = panda::JSNApi::CreateJSVM(option); - auto workerVM2 = panda::JSNApi::CreateJSVM(option); - ArkNativeEngine *workerEngine1 = new ArkNativeEngine(workerVM1, nullptr); - ArkNativeEngine *workerEngine2 = new ArkNativeEngine(workerVM2, nullptr); - napi_env wokerEnv1 = reinterpret_cast(workerEngine1); - napi_env wokerEnv2 = reinterpret_cast(workerEngine2); - - arkIdleMonitor->UnregisterWorkerEnv(wokerEnv1); - arkIdleMonitor->UnregisterWorkerEnv(wokerEnv2); - - arkIdleMonitor->RegisterWorkerEnv(wokerEnv1); - arkIdleMonitor->RegisterWorkerEnv(wokerEnv2); - - arkIdleMonitor->UnregisterWorkerEnv(wokerEnv1); - arkIdleMonitor->UnregisterWorkerEnv(wokerEnv2); - - delete workerEngine1; - delete workerEngine2; - }); - t.join(); + RuntimeOption option; + option.SetGcType(RuntimeOption::GC_TYPE::GEN_GC); + const int64_t poolSize = 0x1000000; // 16M + option.SetGcPoolSize(poolSize); + option.SetLogLevel(RuntimeOption::LOG_LEVEL::ERROR); + option.SetDebuggerLibraryPath(""); + auto workerVM1 = panda::JSNApi::CreateJSVM(option); + auto workerVM2 = panda::JSNApi::CreateJSVM(option); + ArkNativeEngine *workerEngine1 = new ArkNativeEngine(workerVM1, nullptr); + ArkNativeEngine *workerEngine2 = new ArkNativeEngine(workerVM2, nullptr); + napi_env wokerEnv1 = reinterpret_cast(workerEngine1); + napi_env wokerEnv2 = reinterpret_cast(workerEngine2); + + arkIdleMonitor->UnregisterWorkerEnv(wokerEnv1); + arkIdleMonitor->UnregisterWorkerEnv(wokerEnv2); + + arkIdleMonitor->RegisterWorkerEnv(wokerEnv1); + arkIdleMonitor->RegisterWorkerEnv(wokerEnv2); + + arkIdleMonitor->UnregisterWorkerEnv(wokerEnv1); + arkIdleMonitor->UnregisterWorkerEnv(wokerEnv2); + + delete workerEngine1; + delete workerEngine2; } /** diff --git a/test/unittest/test_napi.cpp b/test/unittest/test_napi.cpp index 7e05d9979..30bf6dc89 100644 --- a/test/unittest/test_napi.cpp +++ b/test/unittest/test_napi.cpp @@ -2439,23 +2439,20 @@ HWTEST_F(NapiBasicTest, ObjectWrapperTest003, testing::ext::TestSize.Level1) */ HWTEST_F(NapiBasicTest, ObjectWrapperTest004, testing::ext::TestSize.Level1) { - std::thread t([]() { - NativeEngineProxy engine; + NativeEngineProxy engine; - napi_value object = nullptr; - ASSERT_EQ(napi_create_object(engine, &object), napi_ok); - auto finalizer = [](napi_env, void* data, void*) { - delete reinterpret_cast(data); - }; - uint8_t* data0 = new uint8_t; - ASSERT_EQ(napi_wrap(engine, object, data0, finalizer, nullptr, nullptr), napi_ok); + napi_value object = nullptr; + ASSERT_EQ(napi_create_object(engine, &object), napi_ok); + auto finalizer = [](napi_env, void* data, void*) { + delete reinterpret_cast(data); + }; + uint8_t* data0 = new uint8_t; + ASSERT_EQ(napi_wrap(engine, object, data0, finalizer, nullptr, nullptr), napi_ok); - LoggerCollector collector(LogLevel::LOG_WARN, LOG_DOMAIN); - uint8_t* data1 = new uint8_t; - ASSERT_EQ(napi_wrap(engine, object, data1, finalizer, nullptr, nullptr), napi_ok); - ASSERT_TRUE(collector.Includes("napi_wrap: current js_object has been wrapped.")); - }); - t.join(); + LoggerCollector collector(LogLevel::LOG_WARN, LOG_DOMAIN); + uint8_t* data1 = new uint8_t; + ASSERT_EQ(napi_wrap(engine, object, data1, finalizer, nullptr, nullptr), napi_ok); + ASSERT_TRUE(collector.Includes("napi_wrap: current js_object has been wrapped.")); } /** @@ -2465,25 +2462,20 @@ HWTEST_F(NapiBasicTest, ObjectWrapperTest004, testing::ext::TestSize.Level1) */ HWTEST_F(NapiBasicTest, ObjectWrapperTest005, testing::ext::TestSize.Level1) { - std::thread t([]() { - NativeEngineProxy engine; + NativeEngineProxy engine; - napi_value object = nullptr; - ASSERT_EQ(napi_create_object(engine, &object), napi_ok); - auto finalizer = [](napi_env, void* data, void*) { - delete reinterpret_cast(data); - }; - uint8_t* data0 = new uint8_t; - ASSERT_EQ(napi_wrap_async_finalizer(engine, object, data0, finalizer, nullptr, nullptr, sizeof(data0)), - napi_ok); + napi_value object = nullptr; + ASSERT_EQ(napi_create_object(engine, &object), napi_ok); + auto finalizer = [](napi_env, void* data, void*) { + delete reinterpret_cast(data); + }; + uint8_t* data0 = new uint8_t; + ASSERT_EQ(napi_wrap_async_finalizer(engine, object, data0, finalizer, nullptr, nullptr, sizeof(data0)), napi_ok); - LoggerCollector collector(LogLevel::LOG_WARN, LOG_DOMAIN); - uint8_t* data1 = new uint8_t; - ASSERT_EQ(napi_wrap_async_finalizer(engine, object, data1, finalizer, nullptr, nullptr, sizeof(data0)), - napi_ok); - ASSERT_TRUE(collector.Includes("napi_wrap_async_finalizer: current js_object has been wrapped.")); - }); - t.join(); + LoggerCollector collector(LogLevel::LOG_WARN, LOG_DOMAIN); + uint8_t* data1 = new uint8_t; + ASSERT_EQ(napi_wrap_async_finalizer(engine, object, data1, finalizer, nullptr, nullptr, sizeof(data0)), napi_ok); + ASSERT_TRUE(collector.Includes("napi_wrap_async_finalizer: current js_object has been wrapped.")); } /** @@ -2493,23 +2485,20 @@ HWTEST_F(NapiBasicTest, ObjectWrapperTest005, testing::ext::TestSize.Level1) */ HWTEST_F(NapiBasicTest, ObjectWrapperTest006, testing::ext::TestSize.Level1) { - std::thread t([]() { - NativeEngineProxy engine; + NativeEngineProxy engine; - napi_value object = nullptr; - ASSERT_EQ(napi_create_object(engine, &object), napi_ok); - auto finalizer = [](napi_env, void* data, void*) { - delete reinterpret_cast(data); - }; - uint8_t* data0 = new uint8_t; - ASSERT_EQ(napi_wrap_with_size(engine, object, data0, finalizer, nullptr, nullptr, sizeof(data0)), napi_ok); + napi_value object = nullptr; + ASSERT_EQ(napi_create_object(engine, &object), napi_ok); + auto finalizer = [](napi_env, void* data, void*) { + delete reinterpret_cast(data); + }; + uint8_t* data0 = new uint8_t; + ASSERT_EQ(napi_wrap_with_size(engine, object, data0, finalizer, nullptr, nullptr, sizeof(data0)), napi_ok); - LoggerCollector collector(LogLevel::LOG_WARN, LOG_DOMAIN); - uint8_t* data1 = new uint8_t; - ASSERT_EQ(napi_wrap_with_size(engine, object, data1, finalizer, nullptr, nullptr, sizeof(data1)), napi_ok); - ASSERT_TRUE(collector.Includes("napi_wrap_with_size: current js_object has been wrapped.")); - }); - t.join(); + LoggerCollector collector(LogLevel::LOG_WARN, LOG_DOMAIN); + uint8_t* data1 = new uint8_t; + ASSERT_EQ(napi_wrap_with_size(engine, object, data1, finalizer, nullptr, nullptr, sizeof(data1)), napi_ok); + ASSERT_TRUE(collector.Includes("napi_wrap_with_size: current js_object has been wrapped.")); } /** @@ -2588,17 +2577,14 @@ HWTEST_F(NapiBasicTest, StrictEqualsTest003, testing::ext::TestSize.Level1) */ HWTEST_F(NapiBasicTest, CreateRuntimeTest001, testing::ext::TestSize.Level1) { - std::thread t([this]() { - napi_env env = (napi_env)engine_; + napi_env env = (napi_env)engine_; - napi_env newEnv = nullptr; - napi_status status = napi_create_runtime(env, &newEnv); - ASSERT_EQ(status, napi_ok); - if (newEnv != nullptr) { - delete reinterpret_cast(newEnv); - } - }); - t.join(); + napi_env newEnv = nullptr; + napi_status status = napi_create_runtime(env, &newEnv); + ASSERT_EQ(status, napi_ok); + if (newEnv != nullptr) { + delete reinterpret_cast(newEnv); + } } /** @@ -5572,14 +5558,11 @@ HWTEST_F(NapiBasicTest, runEventLoopTest002, testing::ext::TestSize.Level1) HWTEST_F(NapiBasicTest, runEventLoopTest003, testing::ext::TestSize.Level1) { ASSERT_NE(engine_, nullptr); - std::thread t([]() { - NativeEngineProxy engine; - engine->Deinit(); - napi_status res = napi_run_event_loop(napi_env(engine), napi_event_mode_nowait); - ASSERT_EQ(res, napi_invalid_arg); - engine->Init(); - }); - t.join(); + NativeEngineProxy engine; + engine->Deinit(); + napi_status res = napi_run_event_loop(napi_env(engine), napi_event_mode_nowait); + ASSERT_EQ(res, napi_invalid_arg); + engine->Init(); } /** @@ -5590,14 +5573,11 @@ HWTEST_F(NapiBasicTest, runEventLoopTest003, testing::ext::TestSize.Level1) HWTEST_F(NapiBasicTest, runEventLoopTest004, testing::ext::TestSize.Level1) { ASSERT_NE(engine_, nullptr); - std::thread t([]() { - NativeEngineProxy engine; - engine->Deinit(); - napi_status res = napi_run_event_loop(napi_env(engine), napi_event_mode_default); - engine->Init(); - ASSERT_EQ(res, napi_invalid_arg); - }); - t.join(); + NativeEngineProxy engine; + engine->Deinit(); + napi_status res = napi_run_event_loop(napi_env(engine), napi_event_mode_default); + engine->Init(); + ASSERT_EQ(res, napi_invalid_arg); } /** @@ -5711,14 +5691,11 @@ HWTEST_F(NapiBasicTest, stopEventLoopTest001, testing::ext::TestSize.Level1) HWTEST_F(NapiBasicTest, stopEventLoopTest002, testing::ext::TestSize.Level1) { ASSERT_NE(engine_, nullptr); - std::thread t([]() { - NativeEngineProxy engine; - engine->Deinit(); - napi_status res = napi_stop_event_loop(napi_env(engine)); - engine->Init(); - ASSERT_EQ(res, napi_invalid_arg); - }); - t.join(); + NativeEngineProxy engine; + engine->Deinit(); + napi_status res = napi_stop_event_loop(napi_env(engine)); + engine->Init(); + ASSERT_EQ(res, napi_invalid_arg); } /** @@ -12326,27 +12303,25 @@ HWTEST_F(NapiBasicTest, NapiGetNullTest004, testing::ext::TestSize.Level1) HWTEST_F(NapiBasicTest, NapiGetNullTest005, testing::ext::TestSize.Level1) { ASSERT_NE(engine_, nullptr); - std::thread t([]() { - NativeEngineProxy env1; - env1->Deinit(); - NativeEngineProxy env2; - env2->Deinit(); + napi_env env = reinterpret_cast(engine_); + NativeEngineProxy env1; + env1->Deinit(); + NativeEngineProxy env2; + env2->Deinit(); - napi_value result1 = nullptr; - napi_value result2 = nullptr; + napi_value result1 = nullptr; + napi_value result2 = nullptr; - napi_status res1 = napi_get_null(env1, &result1); - ASSERT_EQ(res1, napi_ok); + napi_status res1 = napi_get_null(env1, &result1); + ASSERT_EQ(res1, napi_ok); - napi_status res2 = napi_get_null(env2, &result2); - ASSERT_EQ(res2, napi_ok); - bool res3 = false; - napi_strict_equals(env1, result1, result2, &res3); - ASSERT_TRUE(res3); - env1->Init(); - env2->Init(); - }); - t.join(); + napi_status res2 = napi_get_null(env2, &result2); + ASSERT_EQ(res2, napi_ok); + bool res3 = false; + napi_strict_equals(env, result1, result2, &res3); + ASSERT_TRUE(res3); + env1->Init(); + env2->Init(); } /** @@ -12804,14 +12779,11 @@ void emptyFinalizeCb(napi_env env, void* data, void* hint) {} HWTEST_F(NapiBasicTest, NapiSetInstanceDataTest002, testing::ext::TestSize.Level1) { ASSERT_NE(engine_, nullptr); - std::thread t([]() { - NativeEngineProxy env; - void* data = nullptr; + NativeEngineProxy env; + void* data = nullptr; - napi_status res = napi_set_instance_data(env, data, emptyFinalizeCb, nullptr); - ASSERT_EQ(res, napi_ok); - }); - t.join(); + napi_status res = napi_set_instance_data(env, data, emptyFinalizeCb, nullptr); + ASSERT_EQ(res, napi_ok); } /** @@ -12822,15 +12794,12 @@ HWTEST_F(NapiBasicTest, NapiSetInstanceDataTest002, testing::ext::TestSize.Level HWTEST_F(NapiBasicTest, NapiSetInstanceDataTest003, testing::ext::TestSize.Level1) { ASSERT_NE(engine_, nullptr); - std::thread t([]() { - NativeEngineProxy env; - int dataValue = INT_FORTYTWO; - void* data = &dataValue; + NativeEngineProxy env; + int dataValue = INT_FORTYTWO; + void* data = &dataValue; - napi_status res = napi_set_instance_data(env, data, emptyFinalizeCb, nullptr); - ASSERT_EQ(res, napi_ok); - }); - t.join(); + napi_status res = napi_set_instance_data(env, data, emptyFinalizeCb, nullptr); + ASSERT_EQ(res, napi_ok); } /** @@ -12841,16 +12810,13 @@ HWTEST_F(NapiBasicTest, NapiSetInstanceDataTest003, testing::ext::TestSize.Level HWTEST_F(NapiBasicTest, NapiSetInstanceDataTest004, testing::ext::TestSize.Level1) { ASSERT_NE(engine_, nullptr); - std::thread t([]() { - NativeEngineProxy env; - int dataValue = INT_FORTYTWO; - void* data = &dataValue; - int hintValue = INT_HUNDRED; + NativeEngineProxy env; + int dataValue = INT_FORTYTWO; + void* data = &dataValue; + int hintValue = INT_HUNDRED; - napi_status res = napi_set_instance_data(env, data, nullptr, &hintValue); - ASSERT_EQ(res, napi_ok); - }); - t.join(); + napi_status res = napi_set_instance_data(env, data, nullptr, &hintValue); + ASSERT_EQ(res, napi_ok); } /** @@ -12875,21 +12841,18 @@ HWTEST_F(NapiBasicTest, NapiGetInstanceDataTest001, testing::ext::TestSize.Level HWTEST_F(NapiBasicTest, NapiGetInstanceDataTest002, testing::ext::TestSize.Level1) { ASSERT_NE(engine_, nullptr); - std::thread t([]() { - NativeEngineProxy env; + NativeEngineProxy env; - int dataValue = INT_FORTYTWO; - void* dataToSet = &dataValue; + int dataValue = INT_FORTYTWO; + void* dataToSet = &dataValue; - napi_status setRes = napi_set_instance_data(env, dataToSet, emptyFinalizeCb, nullptr); - ASSERT_EQ(setRes, napi_ok); + napi_status setRes = napi_set_instance_data(env, dataToSet, emptyFinalizeCb, nullptr); + ASSERT_EQ(setRes, napi_ok); - void* retrievedData; - napi_status getRes = napi_get_instance_data(env, &retrievedData); - ASSERT_EQ(getRes, napi_ok); - ASSERT_EQ(retrievedData, dataToSet); - }); - t.join(); + void* retrievedData; + napi_status getRes = napi_get_instance_data(env, &retrievedData); + ASSERT_EQ(getRes, napi_ok); + ASSERT_EQ(retrievedData, dataToSet); } /** @@ -12912,16 +12875,13 @@ HWTEST_F(NapiBasicTest, NapiGetInstanceDataTest003, testing::ext::TestSize.Level HWTEST_F(NapiBasicTest, NapiGetInstanceDataTest004, testing::ext::TestSize.Level1) { ASSERT_NE(engine_, nullptr); - std::thread t([]() { - NativeEngineProxy env; - env->Deinit(); - void* retrievedData = nullptr; - napi_status res = napi_get_instance_data(env, &retrievedData); - ASSERT_EQ(res, napi_ok); - ASSERT_EQ(retrievedData, nullptr); - env->Init(); - }); - t.join(); + NativeEngineProxy env; + env->Deinit(); + void* retrievedData = nullptr; + napi_status res = napi_get_instance_data(env, &retrievedData); + ASSERT_EQ(res, napi_ok); + ASSERT_EQ(retrievedData, nullptr); + env->Init(); } /** @@ -13582,11 +13542,8 @@ HWTEST_F(NapiBasicTest, NapiCoerceToNativeBindingObjectTest006, testing::ext::Te */ HWTEST_F(NapiBasicTest, NapiCreateArkRuntimeTest001, testing::ext::TestSize.Level1) { - std::thread t([]() { - auto res = napi_create_ark_runtime(nullptr); - ASSERT_EQ(res, napi_invalid_arg); - }); - t.join(); + auto res = napi_create_ark_runtime(nullptr); + ASSERT_EQ(res, napi_invalid_arg); } /** @@ -13596,14 +13553,11 @@ HWTEST_F(NapiBasicTest, NapiCreateArkRuntimeTest001, testing::ext::TestSize.Leve */ HWTEST_F(NapiBasicTest, NapiCreateArkRuntimeTest002, testing::ext::TestSize.Level1) { - std::thread t([]() { - auto temp = NativeCreateEnv::g_createNapiEnvCallback; - NativeCreateEnv::g_createNapiEnvCallback = nullptr; - auto res = napi_create_ark_runtime(nullptr); - NativeCreateEnv::g_createNapiEnvCallback = temp; - ASSERT_EQ(res, napi_invalid_arg); - }); - t.join(); + auto temp = NativeCreateEnv::g_createNapiEnvCallback; + NativeCreateEnv::g_createNapiEnvCallback = nullptr; + auto res = napi_create_ark_runtime(nullptr); + NativeCreateEnv::g_createNapiEnvCallback = temp; + ASSERT_EQ(res, napi_invalid_arg); } /** @@ -14120,16 +14074,13 @@ private: */ HWTEST_F(NapiBasicTest, AddCleanupFinalizerTest001, testing::ext::TestSize.Level1) { - std::thread t([]() { - NativeEngineProxy env; - FinalizerChecker* checker = new FinalizerChecker(); - void* testData = checker; + NativeEngineProxy env; + FinalizerChecker* checker = new FinalizerChecker(); + void* testData = checker; - napi_status status = napi_add_cleanup_finalizer(env, FinalizerChecker::Callback, testData); - EXPECT_EQ(status, napi_ok); - delete checker; - }); - t.join(); + napi_status status = napi_add_cleanup_finalizer(env, FinalizerChecker::Callback, testData); + EXPECT_EQ(status, napi_ok); + delete checker; } /** @@ -14139,17 +14090,14 @@ HWTEST_F(NapiBasicTest, AddCleanupFinalizerTest001, testing::ext::TestSize.Level */ HWTEST_F(NapiBasicTest, AddCleanupFinalizerTest002, testing::ext::TestSize.Level1) { - std::thread t([]() { - NativeEngineProxy engine; - void* testData = new char[10]; - CleanupFinalizerCallBack callback = [](void* arg) { - delete[] reinterpret_cast(arg); - }; + NativeEngineProxy engine; + void* testData = new char[10]; + CleanupFinalizerCallBack callback = [](void* arg) { + delete[] reinterpret_cast(arg); + }; - napi_status addStatus = engine->AddCleanupFinalizer(callback, testData); - EXPECT_EQ(addStatus, napi_ok); - }); - t.join(); + napi_status addStatus = engine->AddCleanupFinalizer(callback, testData); + EXPECT_EQ(addStatus, napi_ok); } /** @@ -14159,19 +14107,16 @@ HWTEST_F(NapiBasicTest, AddCleanupFinalizerTest002, testing::ext::TestSize.Level */ HWTEST_F(NapiBasicTest, RemoveCleanupFinalizerTest001, testing::ext::TestSize.Level1) { - std::thread t([]() { - NativeEngineProxy env; - FinalizerChecker* checker = new FinalizerChecker(); - void* testData = checker; + NativeEngineProxy env; + FinalizerChecker* checker = new FinalizerChecker(); + void* testData = checker; - napi_status addStatus = napi_add_cleanup_finalizer(env, FinalizerChecker::Callback, testData); - EXPECT_EQ(addStatus, napi_ok); + napi_status addStatus = napi_add_cleanup_finalizer(env, FinalizerChecker::Callback, testData); + EXPECT_EQ(addStatus, napi_ok); - napi_status removeStatus = napi_remove_cleanup_finalizer(env, FinalizerChecker::Callback, testData); - EXPECT_EQ(removeStatus, napi_ok); - delete checker; - }); - t.join(); + napi_status removeStatus = napi_remove_cleanup_finalizer(env, FinalizerChecker::Callback, testData); + EXPECT_EQ(removeStatus, napi_ok); + delete checker; } /** @@ -14181,21 +14126,18 @@ HWTEST_F(NapiBasicTest, RemoveCleanupFinalizerTest001, testing::ext::TestSize.Le */ HWTEST_F(NapiBasicTest, RemoveCleanupFinalizerTest002, testing::ext::TestSize.Level1) { - std::thread t([]() { - NativeEngineProxy engine; - void* testData = new char[10]; - CleanupFinalizerCallBack callback = [](void* arg) { - delete[] reinterpret_cast(arg); - }; + NativeEngineProxy engine; + void* testData = new char[10]; + CleanupFinalizerCallBack callback = [](void* arg) { + delete[] reinterpret_cast(arg); + }; - napi_status addStatus = engine->AddCleanupFinalizer(callback, testData); - EXPECT_EQ(addStatus, napi_ok); + napi_status addStatus = engine->AddCleanupFinalizer(callback, testData); + EXPECT_EQ(addStatus, napi_ok); - napi_status removeStatus = engine->RemoveCleanupFinalizer(callback, testData); - EXPECT_EQ(removeStatus, napi_ok); - delete[] reinterpret_cast(testData); - }); - t.join(); + napi_status removeStatus = engine->RemoveCleanupFinalizer(callback, testData); + EXPECT_EQ(removeStatus, napi_ok); + delete[] reinterpret_cast(testData); } /** @@ -14205,20 +14147,17 @@ HWTEST_F(NapiBasicTest, RemoveCleanupFinalizerTest002, testing::ext::TestSize.Le */ HWTEST_F(NapiBasicTest, RunInstanceFinalizerTest001, testing::ext::TestSize.Level1) { - std::thread t([]() { - NativeEngineProxy engine; - FinalizerChecker* checker = new FinalizerChecker(); - void* testData = checker; - CleanupFinalizerCallBack callback = FinalizerChecker::Callback; + NativeEngineProxy engine; + FinalizerChecker* checker = new FinalizerChecker(); + void* testData = checker; + CleanupFinalizerCallBack callback = FinalizerChecker::Callback; - napi_status addStatus = engine->AddCleanupFinalizer(callback, testData); - EXPECT_EQ(addStatus, napi_ok); + napi_status addStatus = engine->AddCleanupFinalizer(callback, testData); + EXPECT_EQ(addStatus, napi_ok); - engine->RunInstanceFinalizer(); - EXPECT_TRUE(checker->Called()); - delete checker; - }); - t.join(); + engine->RunInstanceFinalizer(); + EXPECT_TRUE(checker->Called()); + delete checker; } /** @@ -14228,23 +14167,20 @@ HWTEST_F(NapiBasicTest, RunInstanceFinalizerTest001, testing::ext::TestSize.Leve */ HWTEST_F(NapiBasicTest, RunInstanceFinalizer002, testing::ext::TestSize.Level1) { - std::thread t([]() { - NativeEngineProxy engine; - FinalizerChecker* checker = new FinalizerChecker(); - void* testData = checker; - CleanupFinalizerCallBack callback = FinalizerChecker::Callback; + NativeEngineProxy engine; + FinalizerChecker* checker = new FinalizerChecker(); + void* testData = checker; + CleanupFinalizerCallBack callback = FinalizerChecker::Callback; - napi_status addStatus = engine->AddCleanupFinalizer(callback, testData); - EXPECT_EQ(addStatus, napi_ok); + napi_status addStatus = engine->AddCleanupFinalizer(callback, testData); + EXPECT_EQ(addStatus, napi_ok); - napi_status removeStatus = engine->RemoveCleanupFinalizer(callback, testData); - EXPECT_EQ(removeStatus, napi_ok); + napi_status removeStatus = engine->RemoveCleanupFinalizer(callback, testData); + EXPECT_EQ(removeStatus, napi_ok); - engine->RunInstanceFinalizer(); - EXPECT_FALSE(checker->Called()); - delete checker; - }); - t.join(); + engine->RunInstanceFinalizer(); + EXPECT_FALSE(checker->Called()); + delete checker; } /** @@ -14254,44 +14190,41 @@ HWTEST_F(NapiBasicTest, RunInstanceFinalizer002, testing::ext::TestSize.Level1) */ HWTEST_F(NapiBasicTest, NapiEnvCleanupTest001, testing::ext::TestSize.Level1) { - std::thread t([]() { - NativeEngineProxy engine; - static bool workDone = false; - // make sure async work is done after cleanup hook - ASSERT_CHECK_CALL(napi_add_env_cleanup_hook( - engine, - [](void* data) { - NativeEngineProxy* proxy = reinterpret_cast(data); - napi_env env = *proxy; - napi_value taskName = nullptr; - ASSERT_CHECK_CALL(napi_create_string_utf8(env, __FUNCTION__, NAPI_AUTO_LENGTH, &taskName)); - napi_async_work* work = new napi_async_work; - static std::mutex cleanupMutex; - static std::condition_variable cond; - ASSERT_CHECK_CALL(napi_create_async_work( - env, nullptr, taskName, - [](napi_env, void*) { - std::unique_lock lock(cleanupMutex); - cond.notify_one(); - }, - [](napi_env env, napi_status, void* data) { - napi_async_work* work = reinterpret_cast(data); - ASSERT_CHECK_CALL(napi_delete_async_work(env, *work)); - delete work; - workDone = true; - }, - work, work)); - std::unique_lock lock(cleanupMutex); - ASSERT_CHECK_CALL(napi_queue_async_work(env, *work)); - cond.wait(lock); - }, - &engine)); - LoggerCollector collector(LogLevel::LOG_DEBUG); - engine->RunCleanup(); - ASSERT_TRUE(collector.Includes("CleanupHandles, request waiting:")); - ASSERT_TRUE(workDone); - }); - t.join(); + NativeEngineProxy engine; + static bool workDone = false; + // make sure async work is done after cleanup hook + ASSERT_CHECK_CALL(napi_add_env_cleanup_hook( + engine, + [](void* data) { + NativeEngineProxy* proxy = reinterpret_cast(data); + napi_env env = *proxy; + napi_value taskName = nullptr; + ASSERT_CHECK_CALL(napi_create_string_utf8(env, __FUNCTION__, NAPI_AUTO_LENGTH, &taskName)); + napi_async_work* work = new napi_async_work; + static std::mutex cleanupMutex; + static std::condition_variable cond; + ASSERT_CHECK_CALL(napi_create_async_work( + env, nullptr, taskName, + [](napi_env, void*) { + std::unique_lock lock(cleanupMutex); + cond.notify_one(); + }, + [](napi_env env, napi_status, void* data) { + napi_async_work* work = reinterpret_cast(data); + ASSERT_CHECK_CALL(napi_delete_async_work(env, *work)); + delete work; + workDone = true; + }, + work, work)); + std::unique_lock lock(cleanupMutex); + ASSERT_CHECK_CALL(napi_queue_async_work(env, *work)); + cond.wait(lock); + }, + &engine)); + LoggerCollector collector(LogLevel::LOG_DEBUG); + engine->RunCleanup(); + ASSERT_TRUE(collector.Includes("CleanupHandles, request waiting:")); + ASSERT_TRUE(workDone); } /** @@ -14414,24 +14347,21 @@ HWTEST_F(NapiBasicTest, ArkNativeReferenceTest005, testing::ext::TestSize.Level1 RefTestData* testData = new RefTestData; { - std::thread t([&testData]() { - NativeEngineProxy env; - testData->env_ = env; - napi_value val = nullptr; - ASSERT_CHECK_CALL(napi_create_object(env, &val)); - ASSERT_CHECK_CALL(napi_create_reference(env, val, 0, &testData->ref_)); - ASSERT_CHECK_CALL(napi_add_env_cleanup_hook( - env, - [](void* arg) { - RefTestData* data = reinterpret_cast(arg); - ASSERT_CHECK_CALL(napi_delete_reference(data->env_, data->ref_)); - data->ref_ = nullptr; - }, - testData)); - }); - t.join(); - } - testData->env_ = nullptr; + NativeEngineProxy env; + testData->env_ = env; + napi_value val = nullptr; + ASSERT_CHECK_CALL(napi_create_object(env, &val)); + ASSERT_CHECK_CALL(napi_create_reference(env, val, 0, &testData->ref_)); + ASSERT_CHECK_CALL(napi_add_env_cleanup_hook( + env, + [](void* arg) { + RefTestData* data = reinterpret_cast(arg); + ASSERT_CHECK_CALL(napi_delete_reference(data->env_, data->ref_)); + data->ref_ = nullptr; + }, + testData)); + } + testData->env_ = nullptr; ASSERT_EQ(testData->ref_, nullptr); delete testData; } diff --git a/test/unittest/test_napi_context.cpp b/test/unittest/test_napi_context.cpp index 20c4825de..1417a1b1f 100644 --- a/test/unittest/test_napi_context.cpp +++ b/test/unittest/test_napi_context.cpp @@ -246,19 +246,15 @@ HWTEST_F(NapiContextTest, NapiCreateContextTest005, testing::ext::TestSize.Level HWTEST_F(NapiContextTest, NapiCreateContextTest006, testing::ext::TestSize.Level1) { ASSERT_NE(engine_, nullptr); - std::thread t([]() { - NativeEngineProxy engine; - napi_env env = napi_env(engine); + napi_env env = reinterpret_cast(engine_); - NativeEngineProxy newEngine; - napi_env newEnv = napi_env(newEngine); - auto context = newEngine->context_; - (newEngine->context_).Empty(); - napi_status status = napi_create_ark_context(env, &newEnv); - EXPECT_EQ(status, napi_ok); - newEngine->context_ = context; - }); - t.join(); + NativeEngineProxy newEngine; + napi_env newEnv = napi_env(newEngine); + auto context = newEngine->context_; + (newEngine->context_).Empty(); + napi_status status = napi_create_ark_context(env, &newEnv); + EXPECT_EQ(status, napi_ok); + newEngine->context_ = context; } /** @@ -2082,24 +2078,21 @@ HWTEST_F(NapiContextTest, MapGetValuesWithMultiContext001, testing::ext::TestSiz */ HWTEST_F(NapiContextTest, CreateLimitRuntimeWithMultiContext001, testing::ext::TestSize.Level1) { - std::thread t([]() { - static bool executed = false; - BasicDeathTest( - []() { - NativeEngineProxy rootEngine; - NativeEngineProxy contextEngine(*rootEngine); - napi_env limitEnv = nullptr; - napi_create_limit_runtime(contextEngine, &limitEnv); - }, - [](std::string, std::string err) { - executed = true; - ASSERT_NE(err.find("(napi_create_limit_runtime)] multi-context does not support this interface"), - std::string::npos); - }) - .Run(); - ASSERT_TRUE(executed); - }); - t.join(); + static bool executed = false; + BasicDeathTest( + []() { + NativeEngineProxy rootEngine; + NativeEngineProxy contextEngine(*rootEngine); + napi_env limitEnv = nullptr; + napi_create_limit_runtime(contextEngine, &limitEnv); + }, + [](std::string, std::string err) { + executed = true; + ASSERT_NE(err.find("(napi_create_limit_runtime)] multi-context does not support this interface"), + std::string::npos); + }) + .Run(); + ASSERT_TRUE(executed); } /** @@ -2431,25 +2424,21 @@ HWTEST_F(NapiContextTest, SerializeInnerWithMultiContext006, testing::ext::TestS */ HWTEST_F(NapiContextTest, RunActorWithMultiContext001, testing::ext::TestSize.Level1) { - std::thread t([]() { - static bool executed = false; - BasicDeathTest( - []() { - NativeEngineProxy rootEngine; - NativeEngineProxy contextEngine(*rootEngine); - napi_value result = nullptr; - char buf[16] { 0 }; - napi_run_actor(contextEngine, "", buf, &result); - }, - [](std::string, std::string err) { - executed = true; - ASSERT_NE(err.find("(napi_run_actor)] multi-context does not support this interface"), - std::string::npos); - }) - .Run(); - ASSERT_TRUE(executed); - }); - t.join(); + static bool executed = false; + BasicDeathTest( + []() { + NativeEngineProxy rootEngine; + NativeEngineProxy contextEngine(*rootEngine); + napi_value result = nullptr; + char buf[16] { 0 }; + napi_run_actor(contextEngine, "", buf, &result); + }, + [](std::string, std::string err) { + executed = true; + ASSERT_NE(err.find("(napi_run_actor)] multi-context does not support this interface"), std::string::npos); + }) + .Run(); + ASSERT_TRUE(executed); } /** -- Gitee