(t *testing.T)
| 1033 | } |
| 1034 | |
| 1035 | func 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 |
nothing calls this directly
no test coverage detected