all repos

viye @ 089144fdd711d2f3e016714c6a1a7942330a1d36

my shot at reimplementing xiki

viye/internal/plumbing/shell/shell_test.go (view raw)

Oleksandr Smirnov Oleksandr Smirnov
olexsmir@gmail.com
refactor, 1 month ago
1
package shell
2
3
import (
4
	"os"
5
	"path/filepath"
6
	"testing"
7
8
	"github.com/olexsmir/viye/internal/viye"
9
10
	"olexsmir.xyz/x/is"
11
)
12
13
func TestMatch(t *testing.T) {
14
	tests := []struct {
15
		cmd  string
16
		args []string
17
		want bool
18
	}{
19
		{"", nil, false},
20
		{"$", nil, true},
21
		{"$", []string{"go", "run", "."}, true},
22
		{"$$", nil, true},
23
		{"$$", []string{"sleep", "10"}, true},
24
		{"kill", []string{"1234"}, true},
25
		{"kill", []string{"abc"}, true},
26
		{"kill", nil, false},
27
		{"kill", []string{"1", "2"}, false},
28
		{"mkdir", []string{"dir"}, true},
29
		{"mkdir", []string{"dir1", "dir2"}, true},
30
		{"mkdir", nil, false},
31
	}
32
	for _, tt := range tests {
33
		got := (&Tool{}).Match(&viye.Context{Cmd: tt.cmd, Args: tt.args})
34
		is.Equal(t, tt.want, got)
35
	}
36
}
37
38
func TestExecute(t *testing.T) {
39
	t.Run("cmd", func(t *testing.T) {
40
		got, err := (&Tool{}).Execute(&viye.Context{
41
			Path: []string{"$ echo hello"},
42
			Cmd:  "$",
43
			Args: []string{"echo", "hello"},
44
			Dir:  ".",
45
		})
46
		is.Err(t, err, nil)
47
		is.Equal(t, "| hello\n", got)
48
	})
49
50
	t.Run("bg cmd", func(t *testing.T) {
51
		got, err := (&Tool{}).Execute(&viye.Context{
52
			Path: []string{"$$ sleep 0"},
53
			Cmd:  "$$",
54
			Args: []string{"sleep", "0"},
55
			Dir:  ".",
56
		})
57
		is.Err(t, err, nil)
58
		if len(got) < 10 {
59
			t.Fatalf("got short output %q, expected pid string", got)
60
		}
61
	})
62
63
	t.Run("mkdir", func(t *testing.T) {
64
		dir := t.TempDir()
65
		got, err := (&Tool{}).Execute(&viye.Context{
66
			Path: []string{"mkdir sub"},
67
			Cmd:  "mkdir",
68
			Args: []string{"sub"},
69
			Dir:  dir,
70
		})
71
		is.Err(t, err, nil)
72
73
		_, err = os.Stat(filepath.Join(dir, "sub"))
74
		is.Err(t, err, nil)
75
		is.Equal(t, "| created "+filepath.Join(dir, "sub")+"\n", got)
76
	})
77
78
	t.Run("kill", func(t *testing.T) {
79
		_, err := (&Tool{}).Execute(&viye.Context{
80
			Path: []string{"kill 999999"},
81
			Cmd:  "kill",
82
			Args: []string{"999999"},
83
			Dir:  ".",
84
		})
85
		is.NotEqual(t, nil, err)
86
	})
87
}