summaryrefslogtreecommitdiff
path: root/test/js-native-api/test_object
diff options
context:
space:
mode:
authorAnna Henningsen <anna@addaleax.net>2019-05-01 23:40:02 +0200
committerDaniel Bevenius <daniel.bevenius@gmail.com>2019-05-06 05:12:27 +0200
commit5c08481aa787c49b20d0e1b86b74745990243792 (patch)
tree9cb302bbfbfee2fa782a6930ab67a3fe9972d90b /test/js-native-api/test_object
parentd7d6526260c7d5f150e75f7a18135be28eda0d33 (diff)
downloadandroid-node-v8-5c08481aa787c49b20d0e1b86b74745990243792.tar.gz
android-node-v8-5c08481aa787c49b20d0e1b86b74745990243792.tar.bz2
android-node-v8-5c08481aa787c49b20d0e1b86b74745990243792.zip
n-api: make napi_get_property_names return strings
The documentation says that this method returns an array of strings. Currently, it does not do so for indices. Resolve that by telling V8 explicitly to convert to string. PR-URL: https://github.com/nodejs/node/pull/27524 Fixes: https://github.com/nodejs/node/issues/27496 Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Minwoo Jung <minwoo@nodesource.com> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Diffstat (limited to 'test/js-native-api/test_object')
-rw-r--r--test/js-native-api/test_object/test.js23
-rw-r--r--test/js-native-api/test_object/test_object.c20
2 files changed, 43 insertions, 0 deletions
diff --git a/test/js-native-api/test_object/test.js b/test/js-native-api/test_object/test.js
index 3047b1f58d..d6e15dcfce 100644
--- a/test/js-native-api/test_object/test.js
+++ b/test/js-native-api/test_object/test.js
@@ -202,3 +202,26 @@ assert.strictEqual(newObject.test_string, 'test string');
assert.strictEqual(test_object.Delete(obj, 'foo'), true);
assert.strictEqual(obj.foo, 'baz');
}
+
+{
+ // Verify that napi_get_property_names gets the right set of property names,
+ // i.e.: includes prototypes, only enumerable properties, skips symbols,
+ // and includes indices and converts them to strings.
+
+ const object = Object.create({
+ inherited: 1
+ });
+
+ object.normal = 2;
+ object[Symbol('foo')] = 3;
+ Object.defineProperty(object, 'unenumerable', {
+ value: 4,
+ enumerable: false,
+ writable: true,
+ configurable: true
+ });
+ object[5] = 5;
+
+ assert.deepStrictEqual(test_object.GetPropertyNames(object),
+ ['5', 'normal', 'inherited']);
+}
diff --git a/test/js-native-api/test_object/test_object.c b/test/js-native-api/test_object/test_object.c
index b6dbbd4dd3..30768bdc81 100644
--- a/test/js-native-api/test_object/test_object.c
+++ b/test/js-native-api/test_object/test_object.c
@@ -63,6 +63,25 @@ static napi_value GetNamed(napi_env env, napi_callback_info info) {
return output;
}
+static napi_value GetPropertyNames(napi_env env, napi_callback_info info) {
+ size_t argc = 1;
+ napi_value args[1];
+ NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL));
+
+ NAPI_ASSERT(env, argc >= 1, "Wrong number of arguments");
+
+ napi_valuetype value_type0;
+ NAPI_CALL(env, napi_typeof(env, args[0], &value_type0));
+
+ NAPI_ASSERT(env, value_type0 == napi_object,
+ "Wrong type of arguments. Expects an object as first argument.");
+
+ napi_value output;
+ NAPI_CALL(env, napi_get_property_names(env, args[0], &output));
+
+ return output;
+}
+
static napi_value Set(napi_env env, napi_callback_info info) {
size_t argc = 3;
napi_value args[3];
@@ -325,6 +344,7 @@ napi_value Init(napi_env env, napi_value exports) {
napi_property_descriptor descriptors[] = {
DECLARE_NAPI_PROPERTY("Get", Get),
DECLARE_NAPI_PROPERTY("GetNamed", GetNamed),
+ DECLARE_NAPI_PROPERTY("GetPropertyNames", GetPropertyNames),
DECLARE_NAPI_PROPERTY("Set", Set),
DECLARE_NAPI_PROPERTY("SetNamed", SetNamed),
DECLARE_NAPI_PROPERTY("Has", Has),