all repos

viye @ 63835f54e77ecc1ae8e8ca126fffab519544f58e

my shot at reimplementing xiki

viye/plumbing/files/files_test.go (view raw)

Oleksandr Smirnov Oleksandr Smirnov
olexsmir@gmail.com
init, 2 months ago
1
package files
2
3
import (
4
	"os"
5
	"path/filepath"
6
	"strings"
7
	"testing"
8
9
	"github.com/olexsmir/viye/core"
10
)
11
12
func TestMatch(t *testing.T) {
13
	dir := t.TempDir()
14
	os.Mkdir(filepath.Join(dir, "sub"), 0o755)
15
	os.WriteFile(filepath.Join(dir, "f"), nil, 0o644)
16
17
	tests := []struct {
18
		p, dir string
19
		m      bool
20
	}{
21
		{"~", ".", true},
22
		{"/tmp", ".", true},
23
		{dir, ".", true},
24
		{"sub", dir, true},
25
		{"f", dir, true},
26
		{"nope", dir, false},
27
		{"$ ls", dir, false},
28
	}
29
	for _, tt := range tests {
30
		got := (&Tool{}).Match(&core.Context{Path: []string{tt.p}, Dir: tt.dir})
31
		if got != tt.m {
32
			t.Errorf("Match(%q, dir=%q) = %v; want %v", tt.p, tt.dir, got, tt.m)
33
		}
34
	}
35
}
36
37
func TestExecute(t *testing.T) {
38
	t.Run("list dir", func(t *testing.T) {
39
		dir := t.TempDir()
40
		os.WriteFile(filepath.Join(dir, "x"), nil, 0o644)
41
		ctx := &core.Context{Path: []string{dir}, Dir: "."}
42
		got, err := (&Tool{}).Execute(ctx)
43
		if err != nil {
44
			t.Fatal(err)
45
		}
46
		if got != "x\n" {
47
			t.Errorf("Execute = %q; want %q", got, "x\\n")
48
		}
49
	})
50
51
	t.Run("navigate into subdir", func(t *testing.T) {
52
		dir := t.TempDir()
53
		sub := filepath.Join(dir, "sub")
54
		os.Mkdir(sub, 0o755)
55
		os.WriteFile(filepath.Join(sub, "y"), nil, 0o644)
56
57
		v := core.New()
58
		v.Register(&Tool{})
59
		var out strings.Builder
60
		if err := v.Run(&out, []string{"viye", dir, "sub"}); err != nil {
61
			t.Fatal(err)
62
		}
63
		if out.String() != "y\n" {
64
			t.Errorf("Run = %q; want %q", out.String(), "y\\n")
65
		}
66
	})
67
68
	t.Run("non existent path", func(t *testing.T) {
69
		ctx := &core.Context{Path: []string{"/nonexistent_foobar"}, Dir: "."}
70
		if _, err := (&Tool{}).Execute(ctx); err == nil {
71
			t.Error("expected error")
72
		}
73
	})
74
}
75
76
func TestResolve(t *testing.T) {
77
	home, _ := os.UserHomeDir()
78
	tests := []struct {
79
		p, dir string
80
		want   string
81
	}{
82
		{"~", ".", home},
83
		{"~/foo", ".", filepath.Join(home, "foo")},
84
		{"/abs/path", ".", "/abs/path"},
85
		{"rel", "/base", "/base/rel"},
86
	}
87
	for _, tt := range tests {
88
		got := resolve(tt.p, tt.dir)
89
		if got != tt.want {
90
			t.Errorf("resolve(%q, %q) = %q; want %q", tt.p, tt.dir, got, tt.want)
91
		}
92
	}
93
}
94
95
func TestListDir(t *testing.T) {
96
	dir := t.TempDir()
97
	os.Mkdir(filepath.Join(dir, "sub"), 0o755)
98
	os.WriteFile(filepath.Join(dir, "a.txt"), nil, 0o644)
99
100
	got, err := listDir(dir)
101
	if err != nil {
102
		t.Fatal(err)
103
	}
104
	if got != "a.txt\nsub/\n" {
105
		t.Errorf("listDir = %q; want %q", got, "a.txt\\nsub/\\n")
106
	}
107
}