From a003710d951ab8bcfc7d35693641b377ca3aa9b9 Mon Sep 17 00:00:00 2001 From: nqc Date: Sat, 6 Sep 2025 14:27:45 +0800 Subject: [PATCH 1/8] =?UTF-8?q?native=5Fcommon.h=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=AE=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: ningqicheng Change-Id: I4f9891b73179c9895304f5f2adbb36a2888994af --- interfaces/inner_api/napi/native_common.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/interfaces/inner_api/napi/native_common.h b/interfaces/inner_api/napi/native_common.h index 1d8e9b31c..fdb18e0ee 100644 --- a/interfaces/inner_api/napi/native_common.h +++ b/interfaces/inner_api/napi/native_common.h @@ -100,6 +100,12 @@ (name), nullptr, (func), nullptr, nullptr, nullptr, napi_default, nullptr \ } +// W-writable E-enumerable C-configurable napi_writable is WEC +#define DECLARE_NAPI_WRITABLE_FUNTION(name, func) \ + { \ + (name), nullptr, (func), nullptr, nullptr, nullptr, napi_writable, nullptr \ + } + // W-writable E-enumerable C-configurable napi_default_jsproperty is WEC #define DECLARE_NAPI_DEFAULT_PROPERTY_FUNCTION(name, func) \ { \ -- Gitee From 989514dcdfa373029ec9b5a9ed1488c651ec3594 Mon Sep 17 00:00:00 2001 From: nqc Date: Sat, 6 Sep 2025 17:59:44 +0800 Subject: [PATCH 2/8] =?UTF-8?q?native=5Fcommon.h=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=AE=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: ningqicheng ningqicheng@huawei.com Change-Id: I936354c0650e7a54778b02c148817034d2598de2 --- interfaces/inner_api/napi/native_common.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/interfaces/inner_api/napi/native_common.h b/interfaces/inner_api/napi/native_common.h index fdb18e0ee..eb09cdd21 100644 --- a/interfaces/inner_api/napi/native_common.h +++ b/interfaces/inner_api/napi/native_common.h @@ -100,11 +100,11 @@ (name), nullptr, (func), nullptr, nullptr, nullptr, napi_default, nullptr \ } -// W-writable E-enumerable C-configurable napi_writable is WEC -#define DECLARE_NAPI_WRITABLE_FUNTION(name, func) \ - { \ +// W-writable E-enumerable C-configurable napi_writable is WEC +#define DECLARE_NAPI_WRITABLE_FUNCTION(name, func) \ + { \ (name), nullptr, (func), nullptr, nullptr, nullptr, napi_writable, nullptr \ - } + } // W-writable E-enumerable C-configurable napi_default_jsproperty is WEC #define DECLARE_NAPI_DEFAULT_PROPERTY_FUNCTION(name, func) \ -- Gitee From 94681db7a12cc4737151a221dfc8dff160367de5 Mon Sep 17 00:00:00 2001 From: nqc Date: Sat, 6 Sep 2025 18:16:30 +0800 Subject: [PATCH 3/8] =?UTF-8?q?native=5Fcommon.h=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=AE=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: ningqicheng Change-Id: I3eae6973d9f701d28efbf8eba0a9cfcd6509eb4d --- interfaces/inner_api/napi/native_common.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interfaces/inner_api/napi/native_common.h b/interfaces/inner_api/napi/native_common.h index eb09cdd21..89032241b 100644 --- a/interfaces/inner_api/napi/native_common.h +++ b/interfaces/inner_api/napi/native_common.h @@ -100,7 +100,7 @@ (name), nullptr, (func), nullptr, nullptr, nullptr, napi_default, nullptr \ } -// W-writable E-enumerable C-configurable napi_writable is WEC +// W-writable E-enumerable C-configurable napi_writable #define DECLARE_NAPI_WRITABLE_FUNCTION(name, func) \ { \ (name), nullptr, (func), nullptr, nullptr, nullptr, napi_writable, nullptr \ -- Gitee From 742a342d0bea2d13cfee0bbd69f9feeda0f7829b Mon Sep 17 00:00:00 2001 From: nqc Date: Sat, 6 Sep 2025 18:40:08 +0800 Subject: [PATCH 4/8] =?UTF-8?q?native=5Fcommon.h=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=AE=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: ningqicheng Change-Id: I517cf1056a0b79b7f4c36fd8ff9bf26b6f3147e8 --- interfaces/inner_api/napi/native_common.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interfaces/inner_api/napi/native_common.h b/interfaces/inner_api/napi/native_common.h index 89032241b..eb09cdd21 100644 --- a/interfaces/inner_api/napi/native_common.h +++ b/interfaces/inner_api/napi/native_common.h @@ -100,7 +100,7 @@ (name), nullptr, (func), nullptr, nullptr, nullptr, napi_default, nullptr \ } -// W-writable E-enumerable C-configurable napi_writable +// W-writable E-enumerable C-configurable napi_writable is WEC #define DECLARE_NAPI_WRITABLE_FUNCTION(name, func) \ { \ (name), nullptr, (func), nullptr, nullptr, nullptr, napi_writable, nullptr \ -- Gitee From 1118c74de559ca0ac220686e54d50b80d63ef189 Mon Sep 17 00:00:00 2001 From: ningqicheng Date: Thu, 11 Sep 2025 15:17:17 +0800 Subject: [PATCH 5/8] =?UTF-8?q?=E6=B5=8B=E8=AF=95=E7=94=A8=E4=BE=8B?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: ningqicheng Change-Id: I89c838119b32c657b4ada0b349cb8eb2f0f072bd --- test/unittest/test_napi.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/test/unittest/test_napi.cpp b/test/unittest/test_napi.cpp index 7e05d9979..983116d60 100644 --- a/test/unittest/test_napi.cpp +++ b/test/unittest/test_napi.cpp @@ -2452,8 +2452,7 @@ HWTEST_F(NapiBasicTest, ObjectWrapperTest004, testing::ext::TestSize.Level1) 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.")); + ASSERT_EQ(napi_wrap(engine, object, data1, finalizer, nullptr, nullptr), napi_ok); }); t.join(); } @@ -2481,7 +2480,6 @@ HWTEST_F(NapiBasicTest, ObjectWrapperTest005, testing::ext::TestSize.Level1) 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(); } @@ -2507,7 +2505,6 @@ HWTEST_F(NapiBasicTest, ObjectWrapperTest006, testing::ext::TestSize.Level1) 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(); } -- Gitee From 347e3836916218c03794f595dbda6e529459036c Mon Sep 17 00:00:00 2001 From: ningqicheng Date: Thu, 11 Sep 2025 15:22:44 +0800 Subject: [PATCH 6/8] =?UTF-8?q?=E6=B5=8B=E8=AF=95=E7=94=A8=E4=BE=8B?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: ningqicheng Change-Id: I890a516890922fa37a41ab20586515473ed2f651 --- test/unittest/test_napi.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/unittest/test_napi.cpp b/test/unittest/test_napi.cpp index 983116d60..e09f70cd8 100644 --- a/test/unittest/test_napi.cpp +++ b/test/unittest/test_napi.cpp @@ -2452,7 +2452,7 @@ HWTEST_F(NapiBasicTest, ObjectWrapperTest004, testing::ext::TestSize.Level1) 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_EQ(napi_wrap(engine, object, data1, finalizer, nullptr, nullptr), napi_ok); }); t.join(); } -- Gitee From f6889cab4ed50841a4df5085032183f2b9437142 Mon Sep 17 00:00:00 2001 From: ningqicheng Date: Fri, 12 Sep 2025 09:46:07 +0800 Subject: [PATCH 7/8] =?UTF-8?q?napi=E6=8F=90=E4=BE=9Bwritable=E7=9A=84?= =?UTF-8?q?=E5=85=AC=E5=85=B1=E5=AE=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: ningqicheng Change-Id: I306d06ca919cd00585181f0360798e62438ee624 --- interfaces/inner_api/napi/native_common.h | 6 +++ test/unittest/test_napi.cpp | 56 +++++++++++++++++++++++ 2 files changed, 62 insertions(+) diff --git a/interfaces/inner_api/napi/native_common.h b/interfaces/inner_api/napi/native_common.h index 1d8e9b31c..fbb128514 100644 --- a/interfaces/inner_api/napi/native_common.h +++ b/interfaces/inner_api/napi/native_common.h @@ -100,6 +100,12 @@ (name), nullptr, (func), nullptr, nullptr, nullptr, napi_default, nullptr \ } +// W-writable E-enumerable C-configurable napi_writable is WEC +#define DECLARE_NAPI_WRITABLE_FUNCTION(name, func) \ + { \ + (name), nullptr, (func), nullptr, nullptr, nullptr, napi_writable, nullptr \ + } + // W-writable E-enumerable C-configurable napi_default_jsproperty is WEC #define DECLARE_NAPI_DEFAULT_PROPERTY_FUNCTION(name, func) \ { \ diff --git a/test/unittest/test_napi.cpp b/test/unittest/test_napi.cpp index e09f70cd8..c7f3beb46 100644 --- a/test/unittest/test_napi.cpp +++ b/test/unittest/test_napi.cpp @@ -14608,4 +14608,60 @@ HWTEST_F(NapiBasicTest, NapiQueueAsyncWorkWithQueueTest009, testing::ext::TestSi auto res = napi_queue_async_work_with_queue(env, work, napi_qos_default, reinterpret_cast(&TASKID)); ASSERT_EQ(res, napi_ok); +} + +static napi_value Func(napi_env env, napi_callback_info info) +{ + napi_value num = nullptr; + napi_create_int32(env, 666, &num); + return num; +} + +static napi_value NewFunc(napi_env env, napi_callback_info info) +{ + napi_value num = nullptr; + napi_create_int32(env, 42, &num); + return num; +} + + +HWTEST_F(NapiBasicTest, NapiFuncWritableTest001, testing::ext::TestSize.Level1) +{ + napi_env env = (napi_env)engine_; + napi_value excep = nullptr; + ASSERT_CHECK_CALL(napi_get_and_clear_last_exception(env, &excep)); + napi_value obj = nullptr; + napi_property_descriptor desc[] = { + DECLARE_NAPI_WRITABLE_FUNCTION("func", Func), + }; + ASSERT_CHECK_CALL(napi_create_object_with_properteis(env, &obj, 1, desc)); + napi_value origFunc = nullptr; + ASSERT_CHECK_CALL(napi_get_named_property(env, obj, "func", &origFunc)); + + napi_value recv = nullptr; + ASSERT_CHECK_CALL(napi_get_undefined(env, &recv)); + + napi_value result = nullptr; + ASSERT_CHECK_CALL(napi_call_function(env, recv, origFunc, 0, nullptr, &result)); + + int32_t firstRet = 0; + ASSERT_CHECK_ALL(napi_get_value_int32(env, result, &firstRet)); + ASSERT_EQ(firstRet, 666); + + napi_value newFunc = nullptr; + ASSERT_CHECK_CALL(napi_create_function(env,"newFunc", NAPI_AUTO_LENGTH, NewFunc, nullptr, &newFunc)); + ASSERT_CHECK_CALL(napi_set_named_property(env, obj, "func", newFunc)); + + napi_value currentFunc = nullptr; + ASSERT_CHECK_CALL(napi_get_named_property(env, obj, "func", ¤tFunc)); + + bool same = true; + ASSERT_CHECK_CALL(napi_strict_equals(env, currentFunc, origFunc, &same)); + ASSERT_FALSE(same); + result = nullptr; + ASSERT_CHECK_CALL(napi_call_function(env, recv, currentFunc, 0, nullptr, &result)); + + int32_t last = 0; + ASSERT_CHECK_CALL(napi_get_value_int32(env,result,&last)); + ASSERT_EQ(last, 42); } \ No newline at end of file -- Gitee From f2b3820df052cb706758d0ef43c77d40c5b542e8 Mon Sep 17 00:00:00 2001 From: ningqicheng Date: Fri, 12 Sep 2025 09:53:40 +0800 Subject: [PATCH 8/8] =?UTF-8?q?napi=E6=8F=90=E4=BE=9Bwritable=E7=9A=84?= =?UTF-8?q?=E5=85=AC=E5=85=B1=E5=AE=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: ningqicheng Change-Id: I01b230bb4edc7fb1340c104cd73bfff1a8f51b1d --- test/unittest/test_napi.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/test/unittest/test_napi.cpp b/test/unittest/test_napi.cpp index c7f3beb46..816661156 100644 --- a/test/unittest/test_napi.cpp +++ b/test/unittest/test_napi.cpp @@ -14624,7 +14624,11 @@ static napi_value NewFunc(napi_env env, napi_callback_info info) return num; } - +/** + * @tc.name: NapiFuncWritableTest001 + * @tc.desc: Test interface of napi_create_function with writable property + * @tc.type: FUNC + */ HWTEST_F(NapiBasicTest, NapiFuncWritableTest001, testing::ext::TestSize.Level1) { napi_env env = (napi_env)engine_; -- Gitee