diff options
author | Octavian Soldea <octavian.soldea@intel.com> | 2019-04-24 17:57:38 -0700 |
---|---|---|
committer | Rich Trott <rtrott@gmail.com> | 2019-05-13 16:27:13 -0700 |
commit | ddbaddcce108855f517308f7bd5d910379b59a3b (patch) | |
tree | 6ffbffbacef7ecc8e752556716e6e42a2c35a007 /test/js-native-api/test_object | |
parent | b3be0bf21aab2837d64b33e44a54a80230e50465 (diff) | |
download | android-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/test_object')
-rw-r--r-- | test/js-native-api/test_object/test.js | 27 | ||||
-rw-r--r-- | test/js-native-api/test_object/test_object.c | 188 |
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( |