all repos

viye @ cf8afd92aed2f4da2448c272cbbb65f19b460f5b

my shot at reimplementing xiki

viye/internal/plumbing/files/files_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 files
2
3
import (
4
	"os"
5
	"path/filepath"
6
	"strings"
7
	"testing"
8
9
	"github.com/olexsmir/viye/internal/viye"
10
11
	"olexsmir.xyz/x/is"
12
)
13
14
func TestMatch(t *testing.T) {
15
	tests := []struct {
16
		p    string
17
		want bool
18
	}{
19
		{"~/foo", true},
20
		{"/tmp", true},
21
		{"/tmp/foo", true},
22
		{"./foo", true},
23
		{"./foo/bar", true},
24
		{"nope", false},
25
		{"$ ls", false},
26
		{"~", false},
27
		{".", false},
28
		{"..", false},
29
	}
30
	for _, tt := range tests {
31
		got := (&Tool{}).Match(&viye.Context{Path: []string{tt.p}})
32
		is.Equal(t, tt.want, got)
33
	}
34
}
35
36
func TestExecute(t *testing.T) {
37
	t.Run("list dir", func(t *testing.T) {
38
		dir := t.TempDir()
39
		os.WriteFile(filepath.Join(dir, "x"), nil, 0o644)
40
		ctx := &viye.Context{Path: []string{dir}, Dir: "."}
41
		got, err := (&Tool{}).Execute(ctx)
42
		is.Err(t, err, nil)
43
		is.Equal(t, "| x\n", got)
44
	})
45
46
	t.Run("navigate into subdir via full path", func(t *testing.T) {
47
		dir := t.TempDir()
48
		sub := filepath.Join(dir, "sub")
49
		os.Mkdir(sub, 0o755)
50
		os.WriteFile(filepath.Join(sub, "y"), nil, 0o644)
51
52
		v := viye.New()
53
		v.Register(&Tool{})
54
		var out strings.Builder
55
		err := v.Run(&out, []string{"viye", sub})
56
		is.Err(t, err, nil)
57
		is.Equal(t, "| y\n", out.String())
58
	})
59
60
	t.Run("non existent path", func(t *testing.T) {
61
		ctx := &viye.Context{Path: []string{"/nonexistent_foobar"}, Dir: "."}
62
		_, err := (&Tool{}).Execute(ctx)
63
		is.NotEqual(t, nil, err)
64
	})
65
}
66
67
func TestResolve(t *testing.T) {
68
	home, _ := os.UserHomeDir()
69
	tests := []struct{ p, dir, want string }{
70
		{"~", ".", home},
71
		{"~/foo", ".", filepath.Join(home, "foo")},
72
		{"/abs/path", ".", "/abs/path"},
73
		{"rel", "/base", "/base/rel"},
74
		{".", "/base", "/base"},
75
		{"..", "/base/sub", "/base"},
76
	}
77
	for _, tt := range tests {
78
		got := resolve(tt.p, tt.dir)
79
		is.Equal(t, tt.want, got)
80
	}
81
}
82
83
func TestListDir(t *testing.T) {
84
	dir := t.TempDir()
85
	os.Mkdir(filepath.Join(dir, "sub"), 0o755)
86
	os.WriteFile(filepath.Join(dir, "a.txt"), nil, 0o644)
87
88
	got, err := listDir(dir)
89
	is.Err(t, err, nil)
90
	is.Equal(t, "a.txt\nsub/\n", got)
91
}