Skip to content

Commit 48b9bfc

Browse files
author
Gabriel Schulhof
committed
test: cover napi_get/set/has_named_property()
Add test coverage for these N-APIs. PR-URL: #26947
1 parent 1859769 commit 48b9bfc

File tree

2 files changed

+111
-0
lines changed

2 files changed

+111
-0
lines changed

test/js-native-api/test_object/test.js

+4
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,14 @@ const object = {
1717
};
1818

1919
assert.strictEqual(test_object.Get(object, 'hello'), 'world');
20+
assert.strictEqual(test_object.GetNamed(object, 'hello'), 'world');
2021
assert.deepStrictEqual(test_object.Get(object, 'array'),
2122
[ 1, 94, 'str', 12.321, { test: 'obj in arr' } ]);
2223
assert.deepStrictEqual(test_object.Get(object, 'newObject'),
2324
{ test: 'obj in obj' });
2425

2526
assert(test_object.Has(object, 'hello'));
27+
assert(test_object.HasNamed(object, 'hello'));
2628
assert(test_object.Has(object, 'array'));
2729
assert(test_object.Has(object, 'newObject'));
2830

@@ -113,8 +115,10 @@ assert.strictEqual(newObject.test_string, 'test string');
113115
assert.strictEqual(test_object.Get(object2, sym1), '@@iterator');
114116
assert.strictEqual(test_object.Get(object2, sym2), sym3);
115117
assert(test_object.Set(object2, 'string', 'value'));
118+
assert(test_object.SetNamed(object2, 'named_string', 'value'));
116119
assert(test_object.Set(object2, sym4, 123));
117120
assert(test_object.Has(object2, 'string'));
121+
assert(test_object.HasNamed(object2, 'named_string'));
118122
assert(test_object.Has(object2, sym4));
119123
assert.strictEqual(test_object.Get(object2, 'string'), 'value');
120124
assert.strictEqual(test_object.Get(object2, sym4), 123);

test/js-native-api/test_object/test_object.c

+107
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,39 @@ static napi_value Get(napi_env env, napi_callback_info info) {
3030
return output;
3131
}
3232

33+
static napi_value GetNamed(napi_env env, napi_callback_info info) {
34+
size_t argc = 2;
35+
napi_value args[2];
36+
char key[256] = "";
37+
size_t key_length;
38+
NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL));
39+
40+
NAPI_ASSERT(env, argc >= 2, "Wrong number of arguments");
41+
42+
napi_valuetype valuetype0;
43+
NAPI_CALL(env, napi_typeof(env, args[0], &valuetype0));
44+
45+
NAPI_ASSERT(env, valuetype0 == napi_object,
46+
"Wrong type of arguments. Expects an object as first argument.");
47+
48+
napi_valuetype valuetype1;
49+
NAPI_CALL(env, napi_typeof(env, args[1], &valuetype1));
50+
51+
NAPI_ASSERT(env, valuetype1 == napi_string,
52+
"Wrong type of arguments. Expects a string as second.");
53+
54+
napi_value object = args[0];
55+
NAPI_CALL(env,
56+
napi_get_value_string_utf8(env, args[1], key, 255, &key_length));
57+
key[255] = 0;
58+
NAPI_ASSERT(env, key_length <= 255,
59+
"Cannot accommodate keys longer than 255 bytes");
60+
napi_value output;
61+
NAPI_CALL(env, napi_get_named_property(env, object, key, &output));
62+
63+
return output;
64+
}
65+
3366
static napi_value Set(napi_env env, napi_callback_info info) {
3467
size_t argc = 3;
3568
napi_value args[3];
@@ -57,6 +90,41 @@ static napi_value Set(napi_env env, napi_callback_info info) {
5790
return valuetrue;
5891
}
5992

93+
static napi_value SetNamed(napi_env env, napi_callback_info info) {
94+
size_t argc = 3;
95+
napi_value args[3];
96+
char key[256] = "";
97+
size_t key_length;
98+
NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL));
99+
100+
NAPI_ASSERT(env, argc >= 3, "Wrong number of arguments");
101+
102+
napi_valuetype valuetype0;
103+
NAPI_CALL(env, napi_typeof(env, args[0], &valuetype0));
104+
105+
NAPI_ASSERT(env, valuetype0 == napi_object,
106+
"Wrong type of arguments. Expects an object as first argument.");
107+
108+
napi_valuetype valuetype1;
109+
NAPI_CALL(env, napi_typeof(env, args[1], &valuetype1));
110+
111+
NAPI_ASSERT(env, valuetype1 == napi_string,
112+
"Wrong type of arguments. Expects a string as second.");
113+
114+
NAPI_CALL(env,
115+
napi_get_value_string_utf8(env, args[1], key, 255, &key_length));
116+
key[255] = 0;
117+
NAPI_ASSERT(env, key_length <= 255,
118+
"Cannot accommodate keys longer than 255 bytes");
119+
120+
NAPI_CALL(env, napi_set_named_property(env, args[0], key, args[2]));
121+
122+
napi_value valuetrue;
123+
NAPI_CALL(env, napi_get_boolean(env, true, &valuetrue));
124+
125+
return valuetrue;
126+
}
127+
60128
static napi_value Has(napi_env env, napi_callback_info info) {
61129
size_t argc = 2;
62130
napi_value args[2];
@@ -85,6 +153,42 @@ static napi_value Has(napi_env env, napi_callback_info info) {
85153
return ret;
86154
}
87155

156+
static napi_value HasNamed(napi_env env, napi_callback_info info) {
157+
size_t argc = 2;
158+
napi_value args[2];
159+
char key[256] = "";
160+
size_t key_length;
161+
NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL));
162+
163+
NAPI_ASSERT(env, argc >= 2, "Wrong number of arguments");
164+
165+
napi_valuetype valuetype0;
166+
NAPI_CALL(env, napi_typeof(env, args[0], &valuetype0));
167+
168+
NAPI_ASSERT(env, valuetype0 == napi_object,
169+
"Wrong type of arguments. Expects an object as first argument.");
170+
171+
napi_valuetype valuetype1;
172+
NAPI_CALL(env, napi_typeof(env, args[1], &valuetype1));
173+
174+
NAPI_ASSERT(env, valuetype1 == napi_string || valuetype1 == napi_symbol,
175+
"Wrong type of arguments. Expects a string as second.");
176+
177+
NAPI_CALL(env,
178+
napi_get_value_string_utf8(env, args[1], key, 255, &key_length));
179+
key[255] = 0;
180+
NAPI_ASSERT(env, key_length <= 255,
181+
"Cannot accommodate keys longer than 255 bytes");
182+
183+
bool has_property;
184+
NAPI_CALL(env, napi_has_named_property(env, args[0], key, &has_property));
185+
186+
napi_value ret;
187+
NAPI_CALL(env, napi_get_boolean(env, has_property, &ret));
188+
189+
return ret;
190+
}
191+
88192
static napi_value HasOwn(napi_env env, napi_callback_info info) {
89193
size_t argc = 2;
90194
napi_value args[2];
@@ -220,8 +324,11 @@ EXTERN_C_START
220324
napi_value Init(napi_env env, napi_value exports) {
221325
napi_property_descriptor descriptors[] = {
222326
DECLARE_NAPI_PROPERTY("Get", Get),
327+
DECLARE_NAPI_PROPERTY("GetNamed", GetNamed),
223328
DECLARE_NAPI_PROPERTY("Set", Set),
329+
DECLARE_NAPI_PROPERTY("SetNamed", SetNamed),
224330
DECLARE_NAPI_PROPERTY("Has", Has),
331+
DECLARE_NAPI_PROPERTY("HasNamed", HasNamed),
225332
DECLARE_NAPI_PROPERTY("HasOwn", HasOwn),
226333
DECLARE_NAPI_PROPERTY("Delete", Delete),
227334
DECLARE_NAPI_PROPERTY("New", New),

0 commit comments

Comments
 (0)