Skip to content

Commit 6633d34

Browse files
committed
add tests for non-enumerable properties
1 parent 9917174 commit 6633d34

File tree

2 files changed

+82
-9
lines changed

2 files changed

+82
-9
lines changed

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

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ const object = {
1919
assert.strictEqual(test_object.Get(object, 'hello'), 'world');
2020
assert.strictEqual(test_object.GetNamed(object, 'hello'), 'world');
2121
assert.deepStrictEqual(test_object.Get(object, 'array'),
22-
[ 1, 94, 'str', 12.321, { test: 'obj in arr' } ]);
22+
[1, 94, 'str', 12.321, { test: 'obj in arr' }]);
2323
assert.deepStrictEqual(test_object.Get(object, 'newObject'),
2424
{ test: 'obj in obj' });
2525

@@ -54,7 +54,7 @@ assert.strictEqual(newObject.test_string, 'test string');
5454

5555
{
5656
// Verify that napi_has_own_property() fails if property is not a name.
57-
[true, false, null, undefined, {}, [], 0, 1, () => {}].forEach((value) => {
57+
[true, false, null, undefined, {}, [], 0, 1, () => { }].forEach((value) => {
5858
assert.throws(() => {
5959
test_object.HasOwn({}, value);
6060
}, /^Error: A string or symbol was expected$/);
@@ -238,7 +238,7 @@ assert.strictEqual(newObject.test_string, 'test string');
238238
value: 4,
239239
enumerable: false,
240240
writable: true,
241-
configurable: false
241+
configurable: true
242242
});
243243
Object.defineProperty(object, 'writable', {
244244
value: 4,
@@ -264,19 +264,33 @@ assert.strictEqual(newObject.test_string, 'test string');
264264
assert.deepStrictEqual(test_object.GetSymbolNames(object),
265265
[fooSymbol]);
266266

267-
assert.deepStrictEqual(test_object.GetWritableNames(object),
267+
assert.deepStrictEqual(test_object.GetEnumerableWritableNames(object),
268268
['5',
269269
'normal',
270270
'writable',
271271
fooSymbol,
272272
'inherited']);
273273

274-
assert.deepStrictEqual(test_object.GetConfigurableNames(object),
274+
assert.deepStrictEqual(test_object.GetOwnWritableNames(object),
275+
['5',
276+
'normal',
277+
'unenumerable',
278+
'writable',
279+
fooSymbol]);
280+
281+
assert.deepStrictEqual(test_object.GetEnumerableConfigurableNames(object),
275282
['5',
276283
'normal',
277284
'configurable',
278285
fooSymbol,
279286
'inherited']);
287+
288+
assert.deepStrictEqual(test_object.GetOwnConfigurableNames(object),
289+
['5',
290+
'normal',
291+
'unenumerable',
292+
'configurable',
293+
fooSymbol]);
280294
}
281295

282296
// Verify that passing NULL to napi_set_property() results in the correct

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

Lines changed: 63 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,8 @@ static napi_value GetSymbolNames(napi_env env, napi_callback_info info) {
106106
return output;
107107
}
108108

109-
static napi_value GetWritableNames(napi_env env, napi_callback_info info) {
109+
static napi_value GetEnumerableWritableNames(napi_env env,
110+
napi_callback_info info) {
110111
size_t argc = 1;
111112
napi_value args[1];
112113
NODE_API_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL));
@@ -134,7 +135,35 @@ static napi_value GetWritableNames(napi_env env, napi_callback_info info) {
134135
return output;
135136
}
136137

137-
static napi_value GetConfigurableNames(napi_env env, napi_callback_info info) {
138+
static napi_value GetOwnWritableNames(napi_env env, napi_callback_info info) {
139+
size_t argc = 1;
140+
napi_value args[1];
141+
NODE_API_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL));
142+
143+
NODE_API_ASSERT(env, argc >= 1, "Wrong number of arguments");
144+
145+
napi_valuetype value_type0;
146+
NODE_API_CALL(env, napi_typeof(env, args[0], &value_type0));
147+
148+
NODE_API_ASSERT(
149+
env,
150+
value_type0 == napi_object,
151+
"Wrong type of arguments. Expects an object as first argument.");
152+
153+
napi_value output;
154+
NODE_API_CALL(env,
155+
napi_get_all_property_names(env,
156+
args[0],
157+
napi_key_own_only,
158+
napi_key_writable,
159+
napi_key_numbers_to_strings,
160+
&output));
161+
162+
return output;
163+
}
164+
165+
static napi_value GetEnumerableConfigurableNames(napi_env env,
166+
napi_callback_info info) {
138167
size_t argc = 1;
139168
napi_value args[1];
140169
NODE_API_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL));
@@ -162,6 +191,34 @@ static napi_value GetConfigurableNames(napi_env env, napi_callback_info info) {
162191
return output;
163192
}
164193

194+
static napi_value GetOwnConfigurableNames(napi_env env,
195+
napi_callback_info info) {
196+
size_t argc = 1;
197+
napi_value args[1];
198+
NODE_API_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL));
199+
200+
NODE_API_ASSERT(env, argc >= 1, "Wrong number of arguments");
201+
202+
napi_valuetype value_type0;
203+
NODE_API_CALL(env, napi_typeof(env, args[0], &value_type0));
204+
205+
NODE_API_ASSERT(
206+
env,
207+
value_type0 == napi_object,
208+
"Wrong type of arguments. Expects an object as first argument.");
209+
210+
napi_value output;
211+
NODE_API_CALL(env,
212+
napi_get_all_property_names(env,
213+
args[0],
214+
napi_key_own_only,
215+
napi_key_configurable,
216+
napi_key_numbers_to_strings,
217+
&output));
218+
219+
return output;
220+
}
221+
165222
static napi_value Set(napi_env env, napi_callback_info info) {
166223
size_t argc = 3;
167224
napi_value args[3];
@@ -592,8 +649,10 @@ napi_value Init(napi_env env, napi_value exports) {
592649
DECLARE_NODE_API_PROPERTY("GetNamed", GetNamed),
593650
DECLARE_NODE_API_PROPERTY("GetPropertyNames", GetPropertyNames),
594651
DECLARE_NODE_API_PROPERTY("GetSymbolNames", GetSymbolNames),
595-
DECLARE_NODE_API_PROPERTY("GetWritableNames", GetWritableNames),
596-
DECLARE_NODE_API_PROPERTY("GetConfigurableNames", GetConfigurableNames),
652+
DECLARE_NODE_API_PROPERTY("GetEnumerableWritableNames", GetEnumerableWritableNames),
653+
DECLARE_NODE_API_PROPERTY("GetOwnWritableNames", GetOwnWritableNames),
654+
DECLARE_NODE_API_PROPERTY("GetEnumerableConfigurableNames", GetEnumerableConfigurableNames),
655+
DECLARE_NODE_API_PROPERTY("GetOwnConfigurableNames", GetOwnConfigurableNames),
597656
DECLARE_NODE_API_PROPERTY("Set", Set),
598657
DECLARE_NODE_API_PROPERTY("SetNamed", SetNamed),
599658
DECLARE_NODE_API_PROPERTY("Has", Has),

0 commit comments

Comments
 (0)