Skip to content

Commit 654afa2

Browse files
committed
test: improve n-api array func coverage
- add coverage for napi_has_element - add coverage for napi_create_array_with_length PR-URL: #12890 Reviewed-By: Colin Ihrig <[email protected]> Reviewed-By: James M Snell <[email protected]>
1 parent 9fd22bc commit 654afa2

File tree

2 files changed

+82
-14
lines changed

2 files changed

+82
-14
lines changed

test/addons-napi/test_array/test.js

+17-5
Original file line numberDiff line numberDiff line change
@@ -19,19 +19,31 @@ const array = [
1919
]
2020
];
2121

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

2529
assert.throws(
2630
() => {
27-
test_array.Test(array, -2);
31+
test_array.TestGetElement(array, -2);
2832
},
29-
/Invalid index\. Expects a positive integer\./
33+
/^Error: assertion \(index >= 0\) failed: Invalid index\. Expects a positive integer\.$/
3034
);
3135

3236
array.forEach(function(element, index) {
33-
assert.strictEqual(test_array.Test(array, index), element);
37+
assert.strictEqual(test_array.TestGetElement(array, index), element);
3438
});
3539

3640

3741
assert.deepStrictEqual(test_array.New(array), array);
42+
43+
assert(test_array.TestHasElement(array, 0));
44+
assert.strictEqual(test_array.TestHasElement(array, array.length + 1), false);
45+
46+
assert(test_array.NewWithLength(0) instanceof Array);
47+
assert(test_array.NewWithLength(1) instanceof Array);
48+
// check max allowed length for an array 2^32 -1
49+
assert(test_array.NewWithLength(4294967295) instanceof Array);

test/addons-napi/test_array/test_array.c

+65-9
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
#include <string.h>
33
#include "../common.h"
44

5-
napi_value Test(napi_env env, napi_callback_info info) {
5+
napi_value TestGetElement(napi_env env, napi_callback_info info) {
66
size_t argc = 2;
77
napi_value args[2];
88
NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL));
@@ -37,17 +37,49 @@ napi_value Test(napi_env env, napi_callback_info info) {
3737
uint32_t length;
3838
NAPI_CALL(env, napi_get_array_length(env, array, &length));
3939

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

46-
return str;
42+
napi_value ret;
43+
NAPI_CALL(env, napi_get_element(env, array, index, &ret));
44+
45+
return ret;
46+
}
47+
48+
napi_value TestHasElement(napi_env env, napi_callback_info info) {
49+
size_t argc = 2;
50+
napi_value args[2];
51+
NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL));
52+
53+
NAPI_ASSERT(env, argc >= 2, "Wrong number of arguments");
54+
55+
napi_valuetype valuetype0;
56+
NAPI_CALL(env, napi_typeof(env, args[0], &valuetype0));
57+
58+
NAPI_ASSERT(env, valuetype0 == napi_object,
59+
"Wrong type of arguments. Expects an array as first argument.");
60+
61+
napi_valuetype valuetype1;
62+
NAPI_CALL(env, napi_typeof(env, args[1], &valuetype1));
63+
64+
NAPI_ASSERT(env, valuetype1 == napi_number,
65+
"Wrong type of arguments. Expects an integer as second argument.");
66+
67+
napi_value array = args[0];
68+
int32_t index;
69+
NAPI_CALL(env, napi_get_value_int32(env, args[1], &index));
70+
71+
bool isarray;
72+
NAPI_CALL(env, napi_is_array(env, array, &isarray));
73+
74+
if (!isarray) {
75+
return NULL;
4776
}
4877

78+
bool has_element;
79+
NAPI_CALL(env, napi_has_element(env, array, index, &has_element));
80+
4981
napi_value ret;
50-
NAPI_CALL(env, napi_get_element(env, array, index, &ret));
82+
NAPI_CALL(env, napi_get_boolean(env, has_element, &ret));
5183

5284
return ret;
5385
}
@@ -80,10 +112,34 @@ napi_value New(napi_env env, napi_callback_info info) {
80112
return ret;
81113
}
82114

115+
napi_value NewWithLength(napi_env env, napi_callback_info info) {
116+
size_t argc = 1;
117+
napi_value args[1];
118+
NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL));
119+
120+
NAPI_ASSERT(env, argc >= 1, "Wrong number of arguments");
121+
122+
napi_valuetype valuetype0;
123+
NAPI_CALL(env, napi_typeof(env, args[0], &valuetype0));
124+
125+
NAPI_ASSERT(env, valuetype0 == napi_number,
126+
"Wrong type of arguments. Expects an integer the first argument.");
127+
128+
int32_t array_length;
129+
NAPI_CALL(env, napi_get_value_int32(env, args[0], &array_length));
130+
131+
napi_value ret;
132+
NAPI_CALL(env, napi_create_array_with_length(env, array_length, &ret));
133+
134+
return ret;
135+
}
136+
83137
void Init(napi_env env, napi_value exports, napi_value module, void* priv) {
84138
napi_property_descriptor descriptors[] = {
85-
DECLARE_NAPI_PROPERTY("Test", Test),
139+
DECLARE_NAPI_PROPERTY("TestGetElement", TestGetElement),
140+
DECLARE_NAPI_PROPERTY("TestHasElement", TestHasElement),
86141
DECLARE_NAPI_PROPERTY("New", New),
142+
DECLARE_NAPI_PROPERTY("NewWithLength", NewWithLength),
87143
};
88144

89145
NAPI_CALL_RETURN_VOID(env, napi_define_properties(

0 commit comments

Comments
 (0)