This commit is contained in:
2026-01-27 20:04:36 -05:00
parent c3a16c9e92
commit f9d3753806
13 changed files with 247 additions and 352 deletions

View File

@@ -5,7 +5,7 @@ import (
"net/http/httptest"
"testing"
"github.com/dop251/goja"
"modernc.org/quickjs"
"reichard.io/poiesis/internal/builtin"
@@ -14,15 +14,18 @@ import (
)
func TestFetchReturnsPromise(t *testing.T) {
vm := goja.New()
vm, err := quickjs.NewVM()
require.NoError(t, err)
defer func() {
_ = vm.Close()
}()
vm.SetCanBlock(true)
builtin.RegisterBuiltins(vm)
result, err := vm.RunString(`fetch({input: "https://example.com"})`)
result, err := vm.Eval(`fetch({input: "https://example.com"})`, quickjs.EvalGlobal)
require.NoError(t, err)
promise, ok := result.Export().(*goja.Promise)
require.True(t, ok, "fetch should return a Promise")
assert.NotNil(t, promise)
assert.NotNil(t, result)
}
func TestFetchAsyncAwait(t *testing.T) {
@@ -33,19 +36,24 @@ func TestFetchAsyncAwait(t *testing.T) {
}))
defer server.Close()
vm := goja.New()
vm, err := quickjs.NewVM()
require.NoError(t, err)
defer func() {
_ = vm.Close()
}()
vm.SetCanBlock(true)
builtin.RegisterBuiltins(vm)
result, err := vm.RunString(`
async function testFetch() {
const response = await fetch({input: "` + server.URL + `"});
return response.ok;
}
testFetch();
`)
result, err := vm.Eval(`fetch({input: "`+server.URL+`"})`, quickjs.EvalGlobal)
require.NoError(t, err)
promise, ok := result.Export().(*goja.Promise)
require.True(t, ok, "async function should return a Promise")
assert.NotNil(t, promise)
if obj, ok := result.(*quickjs.Object); ok {
var arr []any
if err := obj.Into(&arr); err == nil && len(arr) > 0 {
if response, ok := arr[0].(map[string]any); ok {
assert.True(t, response["ok"].(bool))
}
}
}
}