Skip to content

Commit ce56853

Browse files
author
Octavian Soldea
committed
test: propagate napi_status to JS
Re: nodejs#27945 (comment) This commit regards reporting to the JS level an actual event that happens when using suspected improper null arguments. It is better to report the exact reason from N-API to the JS level.
1 parent 63a0f4c commit ce56853

3 files changed

Lines changed: 33 additions & 18 deletions

File tree

test/js-native-api/common.h

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,3 +58,24 @@
5858

5959
#define DECLARE_NAPI_GETTER(name, func) \
6060
{ (name), NULL, NULL, (func), NULL, NULL, napi_default, NULL }
61+
62+
#define NAPI_STATUS_TO_STRING(status) \
63+
(status) == napi_ok ? "napi_ok" : \
64+
(status) == napi_invalid_arg ? "napi_invalid_arg" : \
65+
(status) == napi_object_expected ? "napi_object_expected" : \
66+
(status) == napi_string_expected ? "napi_string_expected" : \
67+
(status) == napi_name_expected ? "napi_name_expected" : \
68+
(status) == napi_function_expected ? "napi_function_expected" : \
69+
(status) == napi_number_expected ? "napi_number_expected" : \
70+
(status) == napi_boolean_expected ? "napi_boolean_expected" : \
71+
(status) == napi_array_expected ? "napi_array_expected" : \
72+
(status) == napi_generic_failure ? "napi_generic_failure" : \
73+
(status) == napi_pending_exception ? "napi_pending_exception" : \
74+
(status) == napi_cancelled ? "napi_cancelled" : \
75+
(status) == napi_escape_called_twice ? "napi_escape_called_twice" : \
76+
(status) == napi_handle_scope_mismatch ? "napi_handle_scope_mismatch" : \
77+
(status) == napi_callback_scope_mismatch ? "napi_callback_scope_mismatch" : \
78+
(status) == napi_queue_full ? "napi_queue_full" : \
79+
(status) == napi_closing ? "napi_closing" : \
80+
(status) == napi_bigint_expected ? "napi_bigint_expected" : \
81+
(status) == napi_date_expected ? "napi_date_expected" : "UNKNOWN_ERROR"

test/js-native-api/test_constructor/test.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,10 @@ assert.strictEqual(test_object.staticReadonlyAccessor1, undefined);
5353
// Verify that passing NULL to napi_define_class() results in the correct
5454
// error.
5555
assert.deepStrictEqual(TestConstructor.TestDefineClass(), {
56-
envIsNull: 'pass',
57-
nameIsNull: 'pass',
58-
cbIsNull: 'pass',
59-
cbDataIsNull: 'pass',
60-
propertiesIsNull: 'pass',
61-
resultIsNull: 'pass'
56+
envIsNull: 'napi_invalid_arg',
57+
nameIsNull: 'napi_invalid_arg',
58+
cbIsNull: 'napi_invalid_arg',
59+
cbDataIsNull: 'napi_ok',
60+
propertiesIsNull: 'napi_invalid_arg',
61+
resultIsNull: 'napi_invalid_arg'
6262
});

test/js-native-api/test_constructor/test_constructor.c

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,7 @@ static napi_value TestDefineClass(napi_env env,
7676
NAPI_CALL(env, napi_create_object(env, &return_value));
7777

7878
NAPI_CALL(env, napi_create_string_utf8(env,
79-
(ret[0] == napi_invalid_arg ?
80-
"pass" : "fail"),
79+
NAPI_STATUS_TO_STRING(ret[0]),
8180
NAPI_AUTO_LENGTH,
8281
&prop_value));
8382
NAPI_CALL(env, napi_set_named_property(env,
@@ -86,8 +85,7 @@ static napi_value TestDefineClass(napi_env env,
8685
prop_value));
8786

8887
NAPI_CALL(env, napi_create_string_utf8(env,
89-
(ret[1] == napi_invalid_arg ?
90-
"pass" : "fail"),
88+
NAPI_STATUS_TO_STRING(ret[1]),
9189
NAPI_AUTO_LENGTH,
9290
&prop_value));
9391
NAPI_CALL(env, napi_set_named_property(env,
@@ -96,8 +94,7 @@ static napi_value TestDefineClass(napi_env env,
9694
prop_value));
9795

9896
NAPI_CALL(env, napi_create_string_utf8(env,
99-
(ret[2] == napi_invalid_arg ?
100-
"pass" : "fail"),
97+
NAPI_STATUS_TO_STRING(ret[2]),
10198
NAPI_AUTO_LENGTH,
10299
&prop_value));
103100
NAPI_CALL(env, napi_set_named_property(env,
@@ -106,8 +103,7 @@ static napi_value TestDefineClass(napi_env env,
106103
prop_value));
107104

108105
NAPI_CALL(env, napi_create_string_utf8(env,
109-
(ret[3] == napi_ok ?
110-
"pass" : "fail"),
106+
NAPI_STATUS_TO_STRING(ret[3]),
111107
NAPI_AUTO_LENGTH,
112108
&prop_value));
113109
NAPI_CALL(env, napi_set_named_property(env,
@@ -116,8 +112,7 @@ static napi_value TestDefineClass(napi_env env,
116112
prop_value));
117113

118114
NAPI_CALL(env, napi_create_string_utf8(env,
119-
(ret[4] == napi_invalid_arg ?
120-
"pass" : "fail"),
115+
NAPI_STATUS_TO_STRING(ret[4]),
121116
NAPI_AUTO_LENGTH,
122117
&prop_value));
123118
NAPI_CALL(env, napi_set_named_property(env,
@@ -126,8 +121,7 @@ static napi_value TestDefineClass(napi_env env,
126121
prop_value));
127122

128123
NAPI_CALL(env, napi_create_string_utf8(env,
129-
(ret[5] == napi_invalid_arg ?
130-
"pass" : "fail"),
124+
NAPI_STATUS_TO_STRING(ret[5]),
131125
NAPI_AUTO_LENGTH,
132126
&prop_value));
133127
NAPI_CALL(env, napi_set_named_property(env,

0 commit comments

Comments
 (0)