107 lines
2.9 KiB
Go
107 lines
2.9 KiB
Go
package runner_test
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"strings"
|
|
"testing"
|
|
|
|
"lmika.dev/actions/wails-release/internal/runner"
|
|
)
|
|
|
|
func TestRealRunner_RunsCommandAndReturnsCombinedOutput(t *testing.T) {
|
|
r := runner.Real{}
|
|
out, err := r.Run(context.Background(), runner.Spec{Name: "echo", Args: []string{"hello"}})
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
if !strings.Contains(string(out), "hello") {
|
|
t.Fatalf("output %q does not contain 'hello'", out)
|
|
}
|
|
}
|
|
|
|
func TestRealRunner_NonZeroExitReturnsError(t *testing.T) {
|
|
r := runner.Real{}
|
|
_, err := r.Run(context.Background(), runner.Spec{Name: "false"})
|
|
if err == nil {
|
|
t.Fatal("expected error from `false`, got nil")
|
|
}
|
|
}
|
|
|
|
func TestFakeRunner_RecordsCallsAndReturnsConfiguredResult(t *testing.T) {
|
|
f := &runner.Fake{}
|
|
f.On("greet", []string{"alice"}).Return([]byte("hi alice"), nil)
|
|
f.On("fail", nil).Return(nil, errors.New("boom"))
|
|
|
|
out, err := f.Run(context.Background(), runner.Spec{Name: "greet", Args: []string{"alice"}})
|
|
if err != nil || string(out) != "hi alice" {
|
|
t.Fatalf("unexpected: out=%q err=%v", out, err)
|
|
}
|
|
|
|
_, err = f.Run(context.Background(), runner.Spec{Name: "fail"})
|
|
if err == nil {
|
|
t.Fatal("expected error from configured fake")
|
|
}
|
|
|
|
if len(f.Calls) != 2 {
|
|
t.Fatalf("expected 2 calls, got %d", len(f.Calls))
|
|
}
|
|
if f.Calls[0].Name != "greet" || f.Calls[0].Args[0] != "alice" {
|
|
t.Fatalf("unexpected first call: %+v", f.Calls[0])
|
|
}
|
|
}
|
|
|
|
func TestFakeRunner_UnconfiguredCallFailsLoudly(t *testing.T) {
|
|
f := &runner.Fake{}
|
|
_, err := f.Run(context.Background(), runner.Spec{Name: "unknown"})
|
|
if err == nil {
|
|
t.Fatal("expected error for unconfigured call")
|
|
}
|
|
}
|
|
|
|
func TestRealRunner_StdinIsPipedToCommand(t *testing.T) {
|
|
r := runner.Real{}
|
|
out, err := r.Run(context.Background(), runner.Spec{
|
|
Name: "cat",
|
|
Stdin: []byte("piped-payload"),
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
if !strings.Contains(string(out), "piped-payload") {
|
|
t.Fatalf("output %q does not contain piped payload", out)
|
|
}
|
|
}
|
|
|
|
func TestRealRunner_DirSetsWorkingDirectory(t *testing.T) {
|
|
dir := t.TempDir()
|
|
r := runner.Real{}
|
|
out, err := r.Run(context.Background(), runner.Spec{
|
|
Name: "pwd",
|
|
Dir: dir,
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
// macOS resolves /var/folders/... → /private/var/folders/... so just
|
|
// match the trailing tempdir name.
|
|
if !strings.Contains(string(out), dir[strings.LastIndex(dir, "/"):]) {
|
|
t.Fatalf("pwd output %q does not contain %q", out, dir)
|
|
}
|
|
}
|
|
|
|
func TestRealRunner_EnvReplacesProcessEnv(t *testing.T) {
|
|
r := runner.Real{}
|
|
out, err := r.Run(context.Background(), runner.Spec{
|
|
Name: "sh",
|
|
Args: []string{"-c", "echo $WAILS_TEST"},
|
|
Env: []string{"WAILS_TEST=hello-from-spec-env"},
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
if !strings.Contains(string(out), "hello-from-spec-env") {
|
|
t.Fatalf("output %q does not contain expected env value", out)
|
|
}
|
|
}
|