源码索引 / CURRENT IMPLEMENTATION
cmd/demo/main_test.go
70 行 · 构建时读取的实际文件,不是讲解用伪代码。
package main
import (
"context"
"encoding/json"
"os"
"reflect"
"testing"
"time"
spine "pysolate-spine"
)
// Run the documented source files using the actual CLI tool registry.
func TestWalkthroughPrograms(t *testing.T) {
wasm, err := os.ReadFile("../../dist/spine.wasm")
if err != nil {
t.Fatal(err)
}
ctx, cancel := context.WithTimeout(context.Background(), time.Minute)
defer cancel()
runner, err := spine.New(ctx, wasm, demoTools(), "lookup")
if err != nil {
t.Fatal(err)
}
defer runner.Close(context.Background())
inputs := map[string]any{"item": "book", "quantity": 2, "delivery": false}
cases := []struct {
name, file, want string
transformed bool
}{
{"independent", "order.py", `{"item":"book","total":47}`, true},
{"dependency", "dependency.py", `{"item":"pen","total":11}`, true},
{"branch", "branch.py", `42`, true},
{"error delivery", "error_delivery.py", `{"price":21,"caught":true}`, true},
{"fallback", "fallback.py", `24`, false},
}
for _, tc := range cases {
t.Run(tc.name, func(t *testing.T) {
code, err := os.ReadFile("../../examples/" + tc.file)
if err != nil {
t.Fatal(err)
}
var want any
if err = json.Unmarshal([]byte(tc.want), &want); err != nil {
t.Fatal(err)
}
for _, plm := range []bool{false, true} {
execute := runner.Run
if plm {
execute = runner.RunPLM
}
out, err := execute(ctx, string(code), inputs)
if err != nil {
t.Fatal(err)
}
var got any
if err = json.Unmarshal(out.Value, &got); err != nil {
t.Fatal(err)
}
if !reflect.DeepEqual(got, want) {
t.Fatalf("plm=%v: got %s, want %s", plm, out.Value, tc.want)
}
if (out.Transformed != "") != (plm && tc.transformed) {
t.Fatalf("plm=%v: unexpected rewrite state: %q", plm, out.Transformed)
}
}
})
}
}