TestScripts was failing with 'exit status 127' because test scripts use 'exec sh -c bd ...' which spawns a shell subprocess that doesn't have access to the script engine's registered bd command. Solution: Add the temp directory containing the built bd binary to the PATH environment variable when running tests, so shell subprocesses can find the bd executable. This fixes the last remaining CI failures. Amp-Thread-ID: https://ampcode.com/threads/T-63ef3a7d-8efe-472d-97ed-6ac95bd8318b Co-authored-by: Amp <amp@ampcode.com>
42 lines
979 B
Go
42 lines
979 B
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"os"
|
|
"os/exec"
|
|
"path/filepath"
|
|
"runtime"
|
|
"testing"
|
|
"time"
|
|
|
|
"rsc.io/script"
|
|
"rsc.io/script/scripttest"
|
|
)
|
|
|
|
func TestScripts(t *testing.T) {
|
|
// Skip on Windows - test scripts use sh -c which requires Unix shell
|
|
if runtime.GOOS == "windows" {
|
|
t.Skip("scripttest uses Unix shell commands (sh -c), skipping on Windows")
|
|
}
|
|
|
|
// Build the bd binary
|
|
exeName := "bd"
|
|
binDir := t.TempDir()
|
|
exe := filepath.Join(binDir, exeName)
|
|
if err := exec.Command("go", "build", "-o", exe, ".").Run(); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
// Create minimal engine with default commands plus bd
|
|
timeout := 2 * time.Second
|
|
engine := script.NewEngine()
|
|
engine.Cmds["bd"] = script.Program(exe, nil, timeout)
|
|
|
|
// Add binDir to PATH so 'sh -c bd ...' works in test scripts
|
|
currentPath := os.Getenv("PATH")
|
|
env := []string{"PATH=" + binDir + ":" + currentPath}
|
|
|
|
// Run all tests
|
|
scripttest.Test(t, context.Background(), engine, env, "testdata/*.txt")
|
|
}
|