From 62ff4e782bc057d277a7c41fa35a665e2aeca045 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Mon, 6 Jul 2026 23:56:32 +0300 Subject: initial package management --- internal/exec/exec_test.go | 69 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 internal/exec/exec_test.go (limited to 'internal/exec/exec_test.go') 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) + } + }) + } +} -- cgit v1.2.3