summaryrefslogtreecommitdiff
path: root/internal/exec/exec_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/exec/exec_test.go')
-rw-r--r--internal/exec/exec_test.go69
1 files changed, 69 insertions, 0 deletions
diff --git a/internal/exec/exec_test.go b/internal/exec/exec_test.go
new file mode 100644
index 0000000..4dc6505
--- /dev/null
+++ b/internal/exec/exec_test.go
@@ -0,0 +1,69 @@
+package exec
+
+import (
+ "testing"
+)
+
+func TestRun(t *testing.T) {
+ tests := []struct {
+ name string
+ cmd string
+ args []string
+ wantStdout string
+ wantStderr string
+ wantExitCode int
+ wantErr bool
+ }{
+ {
+ name: "success",
+ cmd: "echo",
+ args: []string{"hello world"},
+ wantStdout: "hello world\n",
+ wantStderr: "",
+ wantExitCode: 0,
+ wantErr: false,
+ },
+ {
+ name: "fail-exit-code",
+ cmd: "ls",
+ args: []string{"/non-existent-directory-12345"},
+ wantStdout: "",
+ wantStderr: "", // ls stderr varies by OS, but should not be empty usually.
+ wantExitCode: 2, // Typical for ls non-existent
+ wantErr: false,
+ },
+ {
+ name: "fail-binary-not-found",
+ cmd: "non-existent-command-12345",
+ args: []string{},
+ wantStdout: "",
+ wantStderr: "",
+ wantExitCode: -1,
+ wantErr: true,
+ },
+ }
+
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ stdout, stderr, exitCode, err := Run(tt.cmd, tt.args...)
+
+ if (err != nil) != tt.wantErr {
+ t.Errorf("Run() error = %v, wantErr %v", err, tt.wantErr)
+ return
+ }
+
+ if exitCode != tt.wantExitCode {
+ t.Errorf("Run() exitCode = %v, want %v", exitCode, tt.wantExitCode)
+ }
+
+ if tt.name == "success" && stdout != tt.wantStdout {
+ t.Errorf("Run() stdout = %q, want %q", stdout, tt.wantStdout)
+ }
+
+ // For ls error, we just check that stderr is not empty since exact text varies
+ if tt.name == "fail-exit-code" && stderr == "" {
+ t.Errorf("Run() stderr = %q, want non-empty", stderr)
+ }
+ })
+ }
+}