all repos

viye @ d5628995c0c986c52081d41dc6875c568c275fa8

my shot at reimplementing xiki

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

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