summaryrefslogtreecommitdiff
path: root/test/js-native-api
diff options
context:
space:
mode:
authorOctavian Soldea <octavian.soldea@intel.com>2019-04-24 17:57:38 -0700
committerRich Trott <rtrott@gmail.com>2019-05-13 16:27:13 -0700
commitddbaddcce108855f517308f7bd5d910379b59a3b (patch)
tree6ffbffbacef7ecc8e752556716e6e42a2c35a007 /test/js-native-api
parentb3be0bf21aab2837d64b33e44a54a80230e50465 (diff)
downloadandroid-node-v8-ddbaddcce108855f517308f7bd5d910379b59a3b.tar.gz
android-node-v8-ddbaddcce108855f517308f7bd5d910379b59a3b.tar.bz2
android-node-v8-ddbaddcce108855f517308f7bd5d910379b59a3b.zip
test: pass null params to napi_xxx_property()
For napi_set_property(), each one of the following arguments is checked: napi_env env, napi_value object, napi_value key, napi_value* value. For napi_has_property(), each one of the following arguments is checked: napi_env env, napi_value object, napi_value key, bool* result For napi_get_property, each one of the following arguments is checked: napi_env env, napi_value object, napi_value key, napi_value* result PR-URL: https://github.com/nodejs/node/pull/27628 Reviewed-By: Gabriel Schulhof <gabriel.schulhof@intel.com> Reviewed-By: Rich Trott <rtrott@gmail.com>
Diffstat (limited to 'test/js-native-api')
-rw-r--r--test/js-native-api/test_object/test.js27
-rw-r--r--test/js-native-api/test_object/test_object.c188
2 files changed, 215 insertions, 0 deletions
diff --git a/test/js-native-api/test_object/test.js b/test/js-native-api/test_object/test.js
index d6e15dcfce..b49cb04f32 100644
--- a/test/js-native-api/test_object/test.js
+++ b/test/js-native-api/test_object/test.js
@@ -225,3 +225,30 @@ assert.strictEqual(newObject.test_string, 'test string');
assert.deepStrictEqual(test_object.GetPropertyNames(object),
['5', 'normal', 'inherited']);
}
+
+// Verify that passing NULL to napi_set_property() results in the correct
+// error.
+assert.deepStrictEqual(test_object.TestSetProperty(), {
+ envIsNull: 'pass',
+ objectIsNull: 'pass',
+ keyIsNull: 'pass',
+ valueIsNull: 'pass'
+});
+
+// Verify that passing NULL to napi_has_property() results in the correct
+// error.
+assert.deepStrictEqual(test_object.TestHasProperty(), {
+ envIsNull: 'pass',
+ objectIsNull: 'pass',
+ keyIsNull: 'pass',
+ resultIsNull: 'pass'
+});
+
+// Verify that passing NULL to napi_get_property() results in the correct
+// error.
+assert.deepStrictEqual(test_object.TestGetProperty(), {
+ envIsNull: 'pass',
+ objectIsNull: 'pass',
+ keyIsNull: 'pass',
+ resultIsNull: 'pass'
+});
diff --git a/test/js-native-api/test_object/test_object.c b/test/js-native-api/test_object/test_object.c
index 30768bdc81..e3d2115600 100644
--- a/test/js-native-api/test_object/test_object.c
+++ b/test/js-native-api/test_object/test_object.c
@@ -339,6 +339,191 @@ static napi_value Unwrap(napi_env env, napi_callback_info info) {
return result;
}
+static napi_value TestSetProperty(napi_env env,
+ napi_callback_info info) {
+ napi_status ret[4];
+ napi_value object, key, value, prop_value;
+
+ NAPI_CALL(env, napi_create_object(env, &object));
+
+ NAPI_CALL(env, napi_create_string_utf8(env, "", NAPI_AUTO_LENGTH, &key));
+
+ NAPI_CALL(env, napi_create_object(env, &value));
+
+ ret[0] = napi_set_property(NULL, object, key, value);
+
+ ret[1] = napi_set_property(env, NULL, key, value);
+
+ ret[2] = napi_set_property(env, object, NULL, value);
+
+ ret[3] = napi_set_property(env, object, key, NULL);
+
+ NAPI_CALL(env, napi_create_string_utf8(env,
+ (ret[0] == napi_invalid_arg ?
+ "pass" : "fail"),
+ NAPI_AUTO_LENGTH,
+ &prop_value));
+ NAPI_CALL(env, napi_set_named_property(env,
+ object,
+ "envIsNull",
+ prop_value));
+
+ NAPI_CALL(env, napi_create_string_utf8(env,
+ (ret[1] == napi_invalid_arg ?
+ "pass" : "fail"),
+ NAPI_AUTO_LENGTH,
+ &prop_value));
+ NAPI_CALL(env, napi_set_named_property(env,
+ object,
+ "objectIsNull",
+ prop_value));
+
+ NAPI_CALL(env, napi_create_string_utf8(env,
+ (ret[2] == napi_invalid_arg ?
+ "pass" : "fail"),
+ NAPI_AUTO_LENGTH,
+ &prop_value));
+ NAPI_CALL(env, napi_set_named_property(env,
+ object,
+ "keyIsNull",
+ prop_value));
+
+ NAPI_CALL(env, napi_create_string_utf8(env,
+ (ret[3] == napi_invalid_arg ?
+ "pass" : "fail"),
+ NAPI_AUTO_LENGTH,
+ &prop_value));
+ NAPI_CALL(env, napi_set_named_property(env,
+ object,
+ "valueIsNull",
+ prop_value));
+
+ return object;
+}
+
+static napi_value TestHasProperty(napi_env env,
+ napi_callback_info info) {
+ napi_status ret[4];
+ napi_value object, key, prop_result;
+ bool result;
+
+ NAPI_CALL(env, napi_create_object(env, &object));
+
+ NAPI_CALL(env, napi_create_string_utf8(env, "", NAPI_AUTO_LENGTH, &key));
+
+ ret[0] = napi_has_property(NULL, object, key, &result);
+
+ ret[1] = napi_has_property(env, NULL, key, &result);
+
+ ret[2] = napi_has_property(env, object, NULL, &result);
+
+ ret[3] = napi_has_property(env, object, key, NULL);
+
+ NAPI_CALL(env, napi_create_string_utf8(env,
+ (ret[0] == napi_invalid_arg ?
+ "pass" : "fail"),
+ NAPI_AUTO_LENGTH,
+ &prop_result));
+ NAPI_CALL(env, napi_set_named_property(env,
+ object,
+ "envIsNull",
+ prop_result));
+
+ NAPI_CALL(env, napi_create_string_utf8(env,
+ (ret[1] == napi_invalid_arg ?
+ "pass" : "fail"),
+ NAPI_AUTO_LENGTH,
+ &prop_result));
+ NAPI_CALL(env, napi_set_named_property(env,
+ object,
+ "objectIsNull",
+ prop_result));
+
+ NAPI_CALL(env, napi_create_string_utf8(env,
+ (ret[2] == napi_invalid_arg ?
+ "pass" : "fail"),
+ NAPI_AUTO_LENGTH,
+ &prop_result));
+ NAPI_CALL(env, napi_set_named_property(env,
+ object,
+ "keyIsNull",
+ prop_result));
+
+ NAPI_CALL(env, napi_create_string_utf8(env,
+ (ret[3] == napi_invalid_arg ?
+ "pass" : "fail"),
+ NAPI_AUTO_LENGTH,
+ &prop_result));
+ NAPI_CALL(env, napi_set_named_property(env,
+ object,
+ "resultIsNull",
+ prop_result));
+
+ return object;
+}
+
+static napi_value TestGetProperty(napi_env env,
+ napi_callback_info info) {
+ napi_status ret[4];
+ napi_value object, key, result, prop_result;
+
+ NAPI_CALL(env, napi_create_object(env, &object));
+
+ NAPI_CALL(env, napi_create_string_utf8(env, "", NAPI_AUTO_LENGTH, &key));
+
+ NAPI_CALL(env, napi_create_object(env, &result));
+
+ ret[0] = napi_get_property(NULL, object, key, &result);
+
+ ret[1] = napi_get_property(env, NULL, key, &result);
+
+ ret[2] = napi_get_property(env, object, NULL, &result);
+
+ ret[3] = napi_get_property(env, object, key, NULL);
+
+ NAPI_CALL(env, napi_create_string_utf8(env,
+ (ret[0] == napi_invalid_arg ?
+ "pass" : "fail"),
+ NAPI_AUTO_LENGTH,
+ &prop_result));
+ NAPI_CALL(env, napi_set_named_property(env,
+ object,
+ "envIsNull",
+ prop_result));
+
+ NAPI_CALL(env, napi_create_string_utf8(env,
+ (ret[1] == napi_invalid_arg ?
+ "pass" : "fail"),
+ NAPI_AUTO_LENGTH,
+ &prop_result));
+ NAPI_CALL(env, napi_set_named_property(env,
+ object,
+ "objectIsNull",
+ prop_result));
+
+ NAPI_CALL(env, napi_create_string_utf8(env,
+ (ret[2] == napi_invalid_arg ?
+ "pass" : "fail"),
+ NAPI_AUTO_LENGTH,
+ &prop_result));
+ NAPI_CALL(env, napi_set_named_property(env,
+ object,
+ "keyIsNull",
+ prop_result));
+
+ NAPI_CALL(env, napi_create_string_utf8(env,
+ (ret[3] == napi_invalid_arg ?
+ "pass" : "fail"),
+ NAPI_AUTO_LENGTH,
+ &prop_result));
+ NAPI_CALL(env, napi_set_named_property(env,
+ object,
+ "resultIsNull",
+ prop_result));
+
+ return object;
+}
+
EXTERN_C_START
napi_value Init(napi_env env, napi_value exports) {
napi_property_descriptor descriptors[] = {
@@ -355,6 +540,9 @@ napi_value Init(napi_env env, napi_value exports) {
DECLARE_NAPI_PROPERTY("Inflate", Inflate),
DECLARE_NAPI_PROPERTY("Wrap", Wrap),
DECLARE_NAPI_PROPERTY("Unwrap", Unwrap),
+ DECLARE_NAPI_PROPERTY("TestSetProperty", TestSetProperty),
+ DECLARE_NAPI_PROPERTY("TestHasProperty", TestHasProperty),
+ DECLARE_NAPI_PROPERTY("TestGetProperty", TestGetProperty),
};
NAPI_CALL(env, napi_define_properties(