Skip to content

Commit

Permalink
test: improve n-api array func coverage
Browse files Browse the repository at this point in the history
- add coverage for napi_has_element
- add coverage for napi_create_array_with_length

PR-URL: nodejs#12890
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
  • Loading branch information
mhdawson authored and Gabriel Schulhof committed Apr 10, 2018
1 parent b69818d commit 17d8b55
Show file tree
Hide file tree
Showing 2 changed files with 82 additions and 14 deletions.
22 changes: 17 additions & 5 deletions test/addons-napi/test_array/test.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,19 +19,31 @@ const array = [
]
];

assert.strictEqual(test_array.Test(array, array.length + 1),
'Index out of bound!');
assert.throws(
() => {
test_array.TestGetElement(array, array.length + 1);
},
/^Error: assertion \(\(\(uint32_t\)index < length\)\) failed: Index out of bounds!$/
);

assert.throws(
() => {
test_array.Test(array, -2);
test_array.TestGetElement(array, -2);
},
/Invalid index\. Expects a positive integer\./
/^Error: assertion \(index >= 0\) failed: Invalid index\. Expects a positive integer\.$/
);

array.forEach(function(element, index) {
assert.strictEqual(test_array.Test(array, index), element);
assert.strictEqual(test_array.TestGetElement(array, index), element);
});


assert.deepStrictEqual(test_array.New(array), array);

assert(test_array.TestHasElement(array, 0));
assert.strictEqual(test_array.TestHasElement(array, array.length + 1), false);

assert(test_array.NewWithLength(0) instanceof Array);
assert(test_array.NewWithLength(1) instanceof Array);
// check max allowed length for an array 2^32 -1
assert(test_array.NewWithLength(4294967295) instanceof Array);
74 changes: 65 additions & 9 deletions test/addons-napi/test_array/test_array.c
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
#include <string.h>
#include "../common.h"

napi_value Test(napi_env env, napi_callback_info info) {
napi_value TestGetElement(napi_env env, napi_callback_info info) {
size_t argc = 2;
napi_value args[2];
NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL));
Expand Down Expand Up @@ -37,17 +37,49 @@ napi_value Test(napi_env env, napi_callback_info info) {
uint32_t length;
NAPI_CALL(env, napi_get_array_length(env, array, &length));

if ((uint32_t)index >= length) {
napi_value str;
const char* str_val = "Index out of bound!";
size_t str_len = strlen(str_val);
NAPI_CALL(env, napi_create_string_utf8(env, str_val, str_len, &str));
NAPI_ASSERT(env, ((uint32_t)index < length), "Index out of bounds!");

return str;
napi_value ret;
NAPI_CALL(env, napi_get_element(env, array, index, &ret));

return ret;
}

napi_value TestHasElement(napi_env env, napi_callback_info info) {
size_t argc = 2;
napi_value args[2];
NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL));

NAPI_ASSERT(env, argc >= 2, "Wrong number of arguments");

napi_valuetype valuetype0;
NAPI_CALL(env, napi_typeof(env, args[0], &valuetype0));

NAPI_ASSERT(env, valuetype0 == napi_object,
"Wrong type of arguments. Expects an array as first argument.");

napi_valuetype valuetype1;
NAPI_CALL(env, napi_typeof(env, args[1], &valuetype1));

NAPI_ASSERT(env, valuetype1 == napi_number,
"Wrong type of arguments. Expects an integer as second argument.");

napi_value array = args[0];
int32_t index;
NAPI_CALL(env, napi_get_value_int32(env, args[1], &index));

bool isarray;
NAPI_CALL(env, napi_is_array(env, array, &isarray));

if (!isarray) {
return NULL;
}

bool has_element;
NAPI_CALL(env, napi_has_element(env, array, index, &has_element));

napi_value ret;
NAPI_CALL(env, napi_get_element(env, array, index, &ret));
NAPI_CALL(env, napi_get_boolean(env, has_element, &ret));

return ret;
}
Expand Down Expand Up @@ -80,10 +112,34 @@ napi_value New(napi_env env, napi_callback_info info) {
return ret;
}

napi_value NewWithLength(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 valuetype0;
NAPI_CALL(env, napi_typeof(env, args[0], &valuetype0));

NAPI_ASSERT(env, valuetype0 == napi_number,
"Wrong type of arguments. Expects an integer the first argument.");

int32_t array_length;
NAPI_CALL(env, napi_get_value_int32(env, args[0], &array_length));

napi_value ret;
NAPI_CALL(env, napi_create_array_with_length(env, array_length, &ret));

return ret;
}

void Init(napi_env env, napi_value exports, napi_value module, void* priv) {
napi_property_descriptor descriptors[] = {
DECLARE_NAPI_PROPERTY("Test", Test),
DECLARE_NAPI_PROPERTY("TestGetElement", TestGetElement),
DECLARE_NAPI_PROPERTY("TestHasElement", TestHasElement),
DECLARE_NAPI_PROPERTY("New", New),
DECLARE_NAPI_PROPERTY("NewWithLength", NewWithLength),
};

NAPI_CALL_RETURN_VOID(env, napi_define_properties(
Expand Down

0 comments on commit 17d8b55

Please sign in to comment.