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 <cjihrig@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
1 parent 9fd22bc commit 654afa2

2 files changed

Lines changed: 82 additions & 14 deletions

File tree

‎test/addons-napi/test_array/test.js‎

Lines changed: 17 additions & 5 deletions
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:Indexoutofbounds!$/
27+
);
2428

2529
assert.throws(
2630
()=>{
27-
test_array.Test(array,-2);
31+
test_array.TestGetElement(array,-2);
2832
},
29-
/Invalidindex\.Expectsapositiveinteger\./
33+
/^Error:assertion\(index>=0\)failed:Invalidindex\.Expectsapositiveinteger\.$/
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)instanceofArray);
47+
assert(test_array.NewWithLength(1)instanceofArray);
48+
// check max allowed length for an array 2^32 -1
49+
assert(test_array.NewWithLength(4294967295)instanceofArray);

‎test/addons-napi/test_array/test_array.c‎

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

5-
napi_valueTest(napi_envenv, napi_callback_infoinfo) {
5+
napi_valueTestGetElement(napi_envenv, napi_callback_infoinfo) {
66
size_targc=2;
77
napi_valueargs[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_tlength;
3838
NAPI_CALL(env, napi_get_array_length(env, array, &length));
3939

40-
if ((uint32_t)index >= length) {
41-
napi_valuestr;
42-
constchar*str_val="Index out of bound!";
43-
size_tstr_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-
returnstr;
42+
napi_valueret;
43+
NAPI_CALL(env, napi_get_element(env, array, index, &ret));
44+
45+
returnret;
46+
}
47+
48+
napi_valueTestHasElement(napi_envenv, napi_callback_infoinfo) {
49+
size_targc=2;
50+
napi_valueargs[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_valuetypevaluetype0;
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_valuetypevaluetype1;
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_valuearray=args[0];
68+
int32_tindex;
69+
NAPI_CALL(env, napi_get_value_int32(env, args[1], &index));
70+
71+
boolisarray;
72+
NAPI_CALL(env, napi_is_array(env, array, &isarray));
73+
74+
if (!isarray) {
75+
returnNULL;
4776
}
4877

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

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

115+
napi_valueNewWithLength(napi_envenv, napi_callback_infoinfo) {
116+
size_targc=1;
117+
napi_valueargs[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_valuetypevaluetype0;
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_tarray_length;
129+
NAPI_CALL(env, napi_get_value_int32(env, args[0], &array_length));
130+
131+
napi_valueret;
132+
NAPI_CALL(env, napi_create_array_with_length(env, array_length, &ret));
133+
134+
returnret;
135+
}
136+
83137
voidInit(napi_envenv, napi_valueexports, napi_valuemodule, void*priv) {
84138
napi_property_descriptordescriptors[] = {
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)