PPysolate SpineREAD THE CODE · UNDERSTAND THE SYSTEM
章节目录
源码索引 / 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)
				}
			}
		})
	}
}