all repos

viye @ 0da33435eec3ff0b661e98fd06fbfb0729b81093

my shot at reimplementing xiki

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

Oleksandr Smirnov Oleksandr Smirnov
olexsmir@gmail.com
files: support ./ paths; add gobin; add json, 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
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
		{".", dir, true},
29
		{"..", dir, true},
30
	}
31
	for _, tt := range tests {
32
		got := (&Tool{}).Match(&viye.Context{Path: []string{tt.p}, Dir: tt.dir})
33
		if got != tt.m {
34
			t.Errorf("Match(%q, dir=%q) = %v; want %v", tt.p, tt.dir, got, tt.m)
35
		}
36
	}
37
}
38
39
func TestExecute(t *testing.T) {
40
	t.Run("list dir", func(t *testing.T) {
41
		dir := t.TempDir()
42
		os.WriteFile(filepath.Join(dir, "x"), nil, 0o644)
43
		ctx := &viye.Context{Path: []string{dir}, Dir: "."}
44
		got, err := (&Tool{}).Execute(ctx)
45
		if err != nil {
46
			t.Fatal(err)
47
		}
48
		if got != "x\n" {
49
			t.Errorf("Execute = %q; want %q", got, "x\\n")
50
		}
51
	})
52
53
	t.Run("navigate into subdir", func(t *testing.T) {
54
		dir := t.TempDir()
55
		sub := filepath.Join(dir, "sub")
56
		os.Mkdir(sub, 0o755)
57
		os.WriteFile(filepath.Join(sub, "y"), nil, 0o644)
58
59
		v := viye.New()
60
		v.Register(&Tool{})
61
		var out strings.Builder
62
		if err := v.Run(&out, []string{"viye", dir, "sub"}); err != nil {
63
			t.Fatal(err)
64
		}
65
		if out.String() != "y\n" {
66
			t.Errorf("Run = %q; want %q", out.String(), "y\\n")
67
		}
68
	})
69
70
	t.Run("non existent path", func(t *testing.T) {
71
		ctx := &viye.Context{Path: []string{"/nonexistent_foobar"}, Dir: "."}
72
		if _, err := (&Tool{}).Execute(ctx); err == nil {
73
			t.Error("expected error")
74
		}
75
	})
76
}
77
78
func TestResolve(t *testing.T) {
79
	home, _ := os.UserHomeDir()
80
	tests := []struct {
81
		p, dir string
82
		want   string
83
	}{
84
		{"~", ".", home},
85
		{"~/foo", ".", filepath.Join(home, "foo")},
86
		{"/abs/path", ".", "/abs/path"},
87
		{"rel", "/base", "/base/rel"},
88
		{".", "/base", "/base"},
89
		{"..", "/base/sub", "/base"},
90
	}
91
	for _, tt := range tests {
92
		got := resolve(tt.p, tt.dir)
93
		if got != tt.want {
94
			t.Errorf("resolve(%q, %q) = %q; want %q", tt.p, tt.dir, got, tt.want)
95
		}
96
	}
97
}
98
99
func TestListDir(t *testing.T) {
100
	dir := t.TempDir()
101
	os.Mkdir(filepath.Join(dir, "sub"), 0o755)
102
	os.WriteFile(filepath.Join(dir, "a.txt"), nil, 0o644)
103
104
	got, err := listDir(dir)
105
	if err != nil {
106
		t.Fatal(err)
107
	}
108
	if got != "a.txt\nsub/\n" {
109
		t.Errorf("listDir = %q; want %q", got, "a.txt\\nsub/\\n")
110
	}
111
}