package shell import ( "context" "strings" "testing" "time" ) func TestRun(t *testing.T) { ctx := context.Background() out, err := Run(ctx, "echo", "hello") if err != nil { t.Fatalf("unexpected error: %v", err) } if strings.TrimSpace(out) != "hello" { t.Errorf("expected output %q, got %q", "hello", strings.TrimSpace(out)) } } func TestRunNonZeroExit(t *testing.T) { ctx := context.Background() if _, err := Run(ctx, "false"); err == nil { t.Error("expected error for non-zero exit, got nil") } } func TestRunMissingBinary(t *testing.T) { ctx := context.Background() if _, err := Run(ctx, "this-binary-should-not-exist-butterrobot"); err == nil { t.Error("expected error for missing binary, got nil") } } func TestRunTimeout(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), 50*time.Millisecond) defer cancel() if _, err := Run(ctx, "sleep", "5"); err == nil { t.Error("expected error when context times out, got nil") } }