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

Function TestContextPromise

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

Source from the content-addressed store, hash-verified

1033}
1034
1035func TestContextPromise(t *testing.T) {
1036 useStableOwnerHooksForLegacySubtests(t)
1037
1038 rt := NewRuntime()
1039 defer rt.Close()
1040 ctx := rt.NewContext()
1041 defer ctx.Close()
1042
1043 t.Run("BasicPromise", func(t *testing.T) {
1044 // Test immediate resolve
1045 promise := ctx.NewPromise(func(resolve, reject func(*Value)) {
1046 resolve(ctx.NewString("success"))
1047 })
1048
1049 require.True(t, promise.IsPromise())
1050 require.Equal(t, PromiseFulfilled, promise.PromiseState())
1051
1052 result := promise.Await()
1053 defer result.Free()
1054 require.False(t, result.IsException())
1055 require.Equal(t, "success", result.ToString())
1056 })
1057
1058 t.Run("RejectedPromise", func(t *testing.T) {
1059 promise := ctx.NewPromise(func(resolve, reject func(*Value)) {
1060 errorObj := ctx.NewError(errors.New("error"))
1061 defer errorObj.Free()
1062 reject(errorObj)
1063 })
1064
1065 require.True(t, promise.IsPromise())
1066
1067 state := promise.PromiseState()
1068 require.Equal(t, PromiseRejected, state)
1069
1070 result := promise.Await()
1071 defer result.Free()
1072 require.True(t, result.IsException())
1073 })
1074
1075 t.Run("PromiseFunction", func(t *testing.T) {
1076 // Create function that returns Promise
1077 asyncFn := ctx.NewFunction(func(ctx *Context, this *Value, args []*Value) *Value {
1078 return ctx.NewPromise(func(resolve, reject func(*Value)) {
1079 if len(args) == 0 {
1080 errObj := ctx.NewError(errors.New("no arguments provided"))
1081 defer errObj.Free()
1082 reject(errObj)
1083 return
1084 }
1085 resolve(ctx.NewString("Hello " + args[0].ToString()))
1086 })
1087 })
1088
1089 // Test in JavaScript
1090 global := ctx.Globals()
1091 global.Set("asyncGreet", asyncFn)
1092

Callers

nothing calls this directly

Calls 15

CloseMethod · 0.95
NewContextMethod · 0.95
CloseMethod · 0.95
NewPromiseMethod · 0.95
NewStringMethod · 0.95
NewErrorMethod · 0.95
NewFunctionMethod · 0.95
GlobalsMethod · 0.95
EvalMethod · 0.95
NewInt32Method · 0.95
ScheduleMethod · 0.95
ProcessJobsMethod · 0.95

Tested by

no test coverage detected