//go:build scripttests // +build scripttests 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") }