Skip to content

Commit b9e7146

Browse files
committed
Testing throw inside async functions nodejs.
1 parent d368e2e commit b9e7146

File tree

1 file changed

+111
-48
lines changed

1 file changed

+111
-48
lines changed

source/tests/metacall_node_async_test/source/metacall_node_async_test.cpp

Lines changed: 111 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,10 @@ TEST_F(metacall_node_async_test, DefaultConstructor)
5353
"function h() {\n"
5454
"\treturn new Promise((resolve) => resolve(34));\n"
5555
"}\n"
56-
"module.exports = { f, g, h };\n";
56+
"async function i() {\n"
57+
"\tthrow Error('Hi there!');\n"
58+
"}\n"
59+
"module.exports = { f, g, h, i };\n";
5760

5861
EXPECT_EQ((int)0, (int)metacall_load_from_memory("node", buffer, sizeof(buffer), NULL));
5962

@@ -70,29 +73,35 @@ TEST_F(metacall_node_async_test, DefaultConstructor)
7073

7174
/* Test resolve */
7275
void *future = metacall_await(
73-
"f", args, [](void *result, void *data) -> void * {
74-
EXPECT_NE((void *) NULL, (void *) result);
76+
"f",
77+
args,
78+
[](void *result, void *data) -> void * {
79+
EXPECT_NE((void *)NULL, (void *)result);
7580

76-
EXPECT_EQ((enum metacall_value_id) metacall_value_id(result), (enum metacall_value_id) METACALL_DOUBLE);
81+
EXPECT_EQ((enum metacall_value_id)metacall_value_id(result), (enum metacall_value_id)METACALL_DOUBLE);
7782

78-
EXPECT_EQ((double) 10.0, (double) metacall_value_to_double(result));
83+
EXPECT_EQ((double)10.0, (double)metacall_value_to_double(result));
7984

80-
EXPECT_NE((void *) NULL, (void *) data);
85+
EXPECT_NE((void *)NULL, (void *)data);
8186

82-
struct async_context * ctx = static_cast<struct async_context *>(data);
87+
struct async_context *ctx = static_cast<struct async_context *>(data);
8388

84-
EXPECT_EQ((int) 234, (int) ctx->value);
89+
EXPECT_EQ((int)234, (int)ctx->value);
8590

86-
printf("Resolve C Callback\n");
91+
printf("Resolve C Callback\n");
8792

88-
return metacall_value_create_double(15.0); }, [](void *, void *) -> void * {
89-
int this_should_never_be_executed = 0;
93+
return metacall_value_create_double(15.0);
94+
},
95+
[](void *, void *) -> void * {
96+
int this_should_never_be_executed = 0;
9097

91-
EXPECT_EQ((int) 1, (int) this_should_never_be_executed);
98+
EXPECT_EQ((int)1, (int)this_should_never_be_executed);
9299

93-
printf("Reject C Callback\n");
100+
printf("Reject C Callback\n");
94101

95-
return NULL; }, static_cast<void *>(&ctx));
102+
return NULL;
103+
},
104+
static_cast<void *>(&ctx));
96105

97106
EXPECT_NE((void *)NULL, (void *)future);
98107

@@ -102,31 +111,37 @@ TEST_F(metacall_node_async_test, DefaultConstructor)
102111

103112
/* Test reject */
104113
future = metacall_await(
105-
"g", args, [](void *, void *) -> void * {
106-
int this_should_never_be_executed = 0;
114+
"g",
115+
args,
116+
[](void *, void *) -> void * {
117+
int this_should_never_be_executed = 0;
107118

108-
EXPECT_EQ((int) 1, (int) this_should_never_be_executed);
119+
EXPECT_EQ((int)1, (int)this_should_never_be_executed);
109120

110-
printf("Resolve C Callback\n");
121+
printf("Resolve C Callback\n");
111122

112-
return NULL; }, [](void *result, void *data) -> void * {
113-
EXPECT_NE((void *) NULL, (void *) result);
123+
return NULL;
124+
},
125+
[](void *result, void *data) -> void * {
126+
EXPECT_NE((void *)NULL, (void *)result);
114127

115-
EXPECT_EQ((enum metacall_value_id) metacall_value_id(result), (enum metacall_value_id) METACALL_DOUBLE);
128+
EXPECT_EQ((enum metacall_value_id)metacall_value_id(result), (enum metacall_value_id)METACALL_DOUBLE);
116129

117-
EXPECT_EQ((double) 10.0, (double) metacall_value_to_double(result));
130+
EXPECT_EQ((double)10.0, (double)metacall_value_to_double(result));
118131

119-
EXPECT_NE((void *) NULL, (void *) data);
132+
EXPECT_NE((void *)NULL, (void *)data);
120133

121-
struct async_context * ctx = static_cast<struct async_context *>(data);
134+
struct async_context *ctx = static_cast<struct async_context *>(data);
122135

123-
EXPECT_EQ((int) 234, (int) ctx->value);
136+
EXPECT_EQ((int)234, (int)ctx->value);
124137

125-
printf("Reject C Callback\n");
138+
printf("Reject C Callback\n");
126139

127-
++success_callbacks;
140+
++success_callbacks;
128141

129-
return metacall_value_create_double(15.0); }, static_cast<void *>(&ctx));
142+
return metacall_value_create_double(15.0);
143+
},
144+
static_cast<void *>(&ctx));
130145

131146
EXPECT_NE((void *)NULL, (void *)future);
132147

@@ -144,21 +159,26 @@ TEST_F(metacall_node_async_test, DefaultConstructor)
144159
EXPECT_EQ((enum metacall_value_id)metacall_value_id(future), (enum metacall_value_id)METACALL_FUTURE);
145160

146161
void *ret = metacall_await_future(
147-
metacall_value_to_future(future), [](void *result, void *) -> void * {
148-
EXPECT_NE((void *) NULL, (void *) result);
162+
metacall_value_to_future(future),
163+
[](void *result, void *) -> void * {
164+
EXPECT_NE((void *)NULL, (void *)result);
149165

150-
EXPECT_EQ((enum metacall_value_id) metacall_value_id(result), (enum metacall_value_id) METACALL_DOUBLE);
166+
EXPECT_EQ((enum metacall_value_id)metacall_value_id(result), (enum metacall_value_id)METACALL_DOUBLE);
151167

152-
EXPECT_EQ((double) 34.0, (double) metacall_value_to_double(result));
168+
EXPECT_EQ((double)34.0, (double)metacall_value_to_double(result));
153169

154-
++success_callbacks;
170+
++success_callbacks;
155171

156-
return metacall_value_create_double(155.0); }, [](void *, void *) -> void * {
157-
int this_should_never_be_executed = 0;
172+
return metacall_value_create_double(155.0);
173+
},
174+
[](void *, void *) -> void * {
175+
int this_should_never_be_executed = 0;
158176

159-
EXPECT_EQ((int) 1, (int) this_should_never_be_executed);
177+
EXPECT_EQ((int)1, (int)this_should_never_be_executed);
160178

161-
return NULL; }, NULL);
179+
return NULL;
180+
},
181+
NULL);
162182

163183
metacall_value_destroy(future);
164184

@@ -167,25 +187,68 @@ TEST_F(metacall_node_async_test, DefaultConstructor)
167187
EXPECT_EQ((enum metacall_value_id)metacall_value_id(ret), (enum metacall_value_id)METACALL_FUTURE);
168188

169189
void *last = metacall_await_future(
170-
metacall_value_to_future(ret), [](void *result, void *) -> void * {
171-
EXPECT_NE((void *) NULL, (void *) result);
190+
metacall_value_to_future(ret),
191+
[](void *result, void *) -> void * {
192+
EXPECT_NE((void *)NULL, (void *)result);
172193

173-
EXPECT_EQ((enum metacall_value_id) metacall_value_id(result), (enum metacall_value_id) METACALL_DOUBLE);
194+
EXPECT_EQ((enum metacall_value_id)metacall_value_id(result), (enum metacall_value_id)METACALL_DOUBLE);
174195

175-
EXPECT_EQ((double) 155.0, (double) metacall_value_to_double(result));
196+
EXPECT_EQ((double)155.0, (double)metacall_value_to_double(result));
176197

177-
++success_callbacks;
198+
++success_callbacks;
178199

179-
return NULL; }, [](void *, void *) -> void * {
180-
int this_should_never_be_executed = 0;
200+
return NULL;
201+
},
202+
[](void *, void *) -> void * {
203+
int this_should_never_be_executed = 0;
181204

182-
EXPECT_EQ((int) 1, (int) this_should_never_be_executed);
205+
EXPECT_EQ((int)1, (int)this_should_never_be_executed);
183206

184-
return NULL; }, NULL);
207+
return NULL;
208+
},
209+
NULL);
185210

186211
metacall_value_destroy(last);
187212

188213
metacall_value_destroy(ret);
214+
215+
/* Test throw exception inside async function */
216+
future = metacall_await(
217+
"i",
218+
metacall_null_args,
219+
[](void *, void *) -> void * {
220+
int this_should_never_be_executed = 0;
221+
222+
EXPECT_EQ((int)1, (int)this_should_never_be_executed);
223+
224+
printf("Resolve C Callback\n");
225+
226+
return NULL;
227+
},
228+
[](void *result, void *data) -> void * {
229+
EXPECT_NE((void *)NULL, (void *)result);
230+
231+
EXPECT_EQ((enum metacall_value_id)metacall_value_id(result), (enum metacall_value_id)METACALL_EXCEPTION);
232+
233+
EXPECT_NE((void *)NULL, (void *)data);
234+
235+
struct async_context *ctx = static_cast<struct async_context *>(data);
236+
237+
EXPECT_EQ((int)234, (int)ctx->value);
238+
239+
printf("Reject C Callback\n");
240+
241+
++success_callbacks;
242+
243+
return metacall_value_create_double(15.0);
244+
},
245+
static_cast<void *>(&ctx));
246+
247+
EXPECT_NE((void *)NULL, (void *)future);
248+
249+
EXPECT_EQ((enum metacall_value_id)metacall_value_id(future), (enum metacall_value_id)METACALL_FUTURE);
250+
251+
metacall_value_destroy(future);
189252
}
190253
#endif /* OPTION_BUILD_LOADERS_NODE */
191254

@@ -194,8 +257,8 @@ TEST_F(metacall_node_async_test, DefaultConstructor)
194257
/* NodeJS */
195258
#if defined(OPTION_BUILD_LOADERS_NODE)
196259
{
197-
/* Total amount of successful callbacks must be 3 */
198-
EXPECT_EQ((int)success_callbacks, (int)3);
260+
/* Total amount of successful callbacks must be 4 */
261+
EXPECT_EQ((int)success_callbacks, (int)4);
199262
}
200263
#endif /* OPTION_BUILD_LOADERS_NODE */
201264
}

0 commit comments

Comments
 (0)