@@ -228,4 +228,54 @@ async function foo(name) {
228
228
229
229
Assert . Equal ( expected , log . Select ( x => x . AsString ( ) ) . ToArray ( ) ) ;
230
230
}
231
+
232
+ [ Fact ]
233
+ public void ShouldPromiseBeResolved ( )
234
+ {
235
+ var log = new List < string > ( ) ;
236
+ Engine engine = new ( ) ;
237
+ engine . SetValue ( "log" , ( string str ) =>
238
+ {
239
+ log . Add ( str ) ;
240
+ } ) ;
241
+
242
+ const string Script = """
243
+ async function main() {
244
+ return new Promise(function (resolve) {
245
+ log('Promise!')
246
+ resolve(null)
247
+ }).then(function () {
248
+ log('Resolved!')
249
+ });
250
+ }
251
+ """ ;
252
+ var result = engine . Execute ( Script ) ;
253
+ var val = result . GetValue ( "main" ) ;
254
+ val . Call ( ) . UnwrapIfPromise ( ) ;
255
+ Assert . Equal ( 2 , log . Count ) ;
256
+ Assert . Equal ( "Promise!" , log [ 0 ] ) ;
257
+ Assert . Equal ( "Resolved!" , log [ 1 ] ) ;
258
+ }
259
+
260
+ [ Fact ]
261
+ public void ShouldPromiseBeResolved2 ( )
262
+ {
263
+ Engine engine = new ( ) ;
264
+ engine . SetValue ( "setTimeout" ,
265
+ ( Action action , int ms ) =>
266
+ {
267
+ Task . Delay ( ms ) . ContinueWith ( _ => action ( ) ) ;
268
+ } ) ;
269
+
270
+ const string Script = """
271
+ var delay = (ms) => new Promise(resolve => setTimeout(resolve, ms));
272
+ async function main() {
273
+ await delay(100);
274
+ return 1;
275
+ }
276
+ """ ;
277
+ var result = engine . Execute ( Script ) ;
278
+ var val = result . GetValue ( "main" ) . Call ( ) ;
279
+ Assert . Equal ( 1 , val . UnwrapIfPromise ( ) . AsInteger ( ) ) ;
280
+ }
231
281
}
0 commit comments