MCPcopy Create free account
hub / github.com/buke/quickjs-go / TestContextAsync

Function TestContextAsync

context_test.go:972–1033  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

970}
971
972func TestContextAsync(t *testing.T) {
973 useStableOwnerHooksForLegacySubtests(t)
974
975 rt := NewRuntime()
976 defer rt.Close()
977 ctx := rt.NewContext()
978 defer ctx.Close()
979
980 t.Run("EventLoop", func(t *testing.T) {
981 result := ctx.Eval(`
982 var executed = false;
983 setTimeout(() => { executed = true; }, 10);
984 `)
985 defer result.Free()
986 require.False(t, result.IsException())
987
988 ctx.Loop()
989
990 executedResult := ctx.Eval(`executed`)
991 defer executedResult.Free()
992 require.False(t, executedResult.IsException())
993 require.True(t, executedResult.ToBool())
994 })
995
996 // Updated: Use Function + Promise instead of AsyncFunction
997 t.Run("AwaitPromises", func(t *testing.T) {
998 // Test successful promise using new Promise API
999 asyncTestFn := ctx.NewFunction(func(ctx *Context, this *Value, args []*Value) *Value {
1000 return ctx.NewPromise(func(resolve, reject func(*Value)) {
1001 resolve(ctx.NewString("awaited result"))
1002 })
1003 })
1004 ctx.Globals().Set("asyncTest", asyncTestFn)
1005
1006 promiseResult := ctx.Eval(`asyncTest()`)
1007 require.False(t, promiseResult.IsException())
1008 require.True(t, promiseResult.IsPromise())
1009
1010 awaitedResult := ctx.Await(promiseResult)
1011 defer awaitedResult.Free()
1012 require.False(t, awaitedResult.IsException())
1013 require.EqualValues(t, "awaited result", awaitedResult.ToString())
1014
1015 // Test rejected promise using new Promise API
1016 asyncRejectFn := ctx.NewFunction(func(ctx *Context, this *Value, args []*Value) *Value {
1017 return ctx.NewPromise(func(resolve, reject func(*Value)) {
1018 errorObj := ctx.NewError(errors.New("rejection reason"))
1019 defer errorObj.Free()
1020 reject(errorObj)
1021 })
1022 })
1023 ctx.Globals().Set("asyncReject", asyncRejectFn)
1024
1025 rejectPromise := ctx.Eval(`asyncReject()`)
1026 require.False(t, rejectPromise.IsException())
1027
1028 rejectedResult := ctx.Await(rejectPromise)
1029 defer rejectedResult.Free()

Callers

nothing calls this directly

Calls 15

CloseMethod · 0.95
NewContextMethod · 0.95
CloseMethod · 0.95
EvalMethod · 0.95
LoopMethod · 0.95
NewFunctionMethod · 0.95
NewPromiseMethod · 0.95
NewStringMethod · 0.95
GlobalsMethod · 0.95
AwaitMethod · 0.95
NewErrorMethod · 0.95
ExceptionMethod · 0.95

Tested by

no test coverage detected