Skip to content

Commit ba0edf1

Browse files
committed
plugin: improve testcases
Signed-off-by: Koichi Shiraishi <[email protected]>
1 parent 706ed43 commit ba0edf1

File tree

1 file changed

+34
-110
lines changed

1 file changed

+34
-110
lines changed

nvim/plugin/plugin_test.go

Lines changed: 34 additions & 110 deletions
Original file line numberDiff line numberDiff line change
@@ -1,131 +1,52 @@
11
package plugin_test
22

33
import (
4-
"context"
5-
"errors"
64
"fmt"
7-
"os"
8-
"path/filepath"
95
"strings"
106
"testing"
117

128
"github.com/neovim/go-client/nvim"
9+
"github.com/neovim/go-client/nvim/nvimtest"
1310
"github.com/neovim/go-client/nvim/plugin"
1411
)
1512

16-
func newChildProcess(tb testing.TB) (p *plugin.Plugin, cleanup func()) {
17-
tb.Helper()
18-
19-
env := []string{}
20-
if v := os.Getenv("VIM"); v != "" {
21-
env = append(env, "VIM="+v)
22-
}
23-
24-
ctx := context.Background()
25-
opts := []nvim.ChildProcessOption{
26-
nvim.ChildProcessCommand(nvim.BinaryName),
27-
nvim.ChildProcessArgs("-u", "NONE", "-n", "-i", "NONE", "--embed", "--headless"),
28-
nvim.ChildProcessContext(ctx),
29-
nvim.ChildProcessLogf(tb.Logf),
30-
nvim.ChildProcessEnv(env),
31-
}
32-
v, err := nvim.NewChildProcess(opts...)
33-
if err != nil {
34-
tb.Fatal(err)
35-
}
36-
37-
done := make(chan error, 1)
38-
go func() {
39-
done <- v.Serve()
40-
}()
41-
42-
cleanup = func() {
43-
if err := v.Close(); err != nil {
44-
tb.Fatal(err)
45-
}
46-
47-
err := <-done
48-
if err != nil {
49-
tb.Fatal(err)
50-
}
51-
52-
const nvimlogFile = ".nvimlog"
53-
wd, err := os.Getwd()
54-
if err != nil {
55-
tb.Fatal(err)
56-
}
57-
if walkErr := filepath.Walk(wd, func(path string, info os.FileInfo, err error) error {
58-
if err != nil {
59-
return err
60-
}
61-
62-
if info.IsDir() {
63-
return nil
64-
}
65-
66-
if fname := info.Name(); fname == nvimlogFile {
67-
if err := os.RemoveAll(path); err != nil {
68-
return fmt.Errorf("failed to remove %s file: %w", path, err)
69-
}
70-
}
71-
72-
return nil
73-
}); walkErr != nil && !os.IsNotExist(err) {
74-
tb.Fatal(fmt.Errorf("walkErr: %w", errors.Unwrap(walkErr)))
75-
}
76-
}
77-
78-
return plugin.New(v), cleanup
79-
}
80-
8113
func TestRegister(t *testing.T) {
82-
p, cleanup := newChildProcess(t)
83-
t.Cleanup(func() {
84-
cleanup()
85-
})
14+
p := plugin.New(nvimtest.NewChildProcess(t))
8615

8716
p.Handle("hello", func(s string) (string, error) {
8817
return "Hello, " + s, nil
8918
})
19+
9020
p.HandleFunction(&plugin.FunctionOptions{Name: "Hello"}, func(args []string) (string, error) {
9121
return "Hello, " + strings.Join(args, " "), nil
9222
})
9323

9424
if err := p.RegisterForTests(); err != nil {
95-
t.Fatal(err)
25+
t.Fatalf("register for test: %v", err)
9626
}
9727

98-
{
99-
result, err := p.Nvim.CommandOutput(":echo Hello('John', 'Doe')")
100-
if err != nil {
101-
t.Error(err)
102-
}
103-
expected := "Hello, John Doe"
104-
if result != expected {
105-
t.Errorf("Hello returned %q, want %q", result, expected)
106-
}
28+
result, err := p.Nvim.Exec(`:echo Hello('John', 'Doe')`, true)
29+
if err != nil {
30+
t.Fatalf("exec echo command: %v", err)
31+
}
32+
expected := `Hello, John Doe`
33+
if result != expected {
34+
t.Fatalf("Hello returned %q, want %q", result, expected)
10735
}
10836

109-
{
110-
cid := p.Nvim.ChannelID()
111-
112-
var result string
113-
if err := p.Nvim.Call("rpcrequest", &result, cid, "hello", "world"); err != nil {
114-
t.Fatal(err)
115-
}
116-
117-
expected := "Hello, world"
118-
if result != expected {
119-
t.Errorf("hello returned %q, want %q", result, expected)
120-
}
37+
cid := p.Nvim.ChannelID()
38+
var result2 string
39+
if err := p.Nvim.Call("rpcrequest", &result2, cid, "hello", "world"); err != nil {
40+
t.Fatalf("call rpcrequest(%v, %v, %v, %v): %v", &result2, cid, "hello", "world", err)
41+
}
42+
expected2 := "Hello, world"
43+
if result2 != expected2 {
44+
t.Fatalf("hello returned %q, want %q", result2, expected2)
12145
}
12246
}
12347

12448
func TestSubscribe(t *testing.T) {
125-
p, cleanup := newChildProcess(t)
126-
t.Cleanup(func() {
127-
cleanup()
128-
})
49+
p := plugin.New(nvimtest.NewChildProcess(t))
12950

13051
const event1 = "event1"
13152
eventFn1 := func(t *testing.T, v *nvim.Nvim) error {
@@ -141,6 +62,8 @@ func TestSubscribe(t *testing.T) {
14162
}
14263
})
14364
}
65+
p.Handle(event1, func() error { return eventFn1(t, p.Nvim) })
66+
14467
const event2 = "event2"
14568
eventFn2 := func(t *testing.T, v *nvim.Nvim) error {
14669
return v.RegisterHandler(event1, func(event ...interface{}) {
@@ -155,60 +78,61 @@ func TestSubscribe(t *testing.T) {
15578
}
15679
})
15780
}
158-
p.Handle(event1, func() error { return eventFn1(t, p.Nvim) })
15981
p.Handle(event2, func() error { return eventFn2(t, p.Nvim) })
16082

16183
if err := p.RegisterForTests(); err != nil {
162-
t.Fatal(err)
84+
t.Fatalf("register for test: %v", err)
16385
}
16486

16587
if err := p.Nvim.Subscribe(event1); err != nil {
166-
t.Fatal(err)
88+
t.Fatalf("subscribe(%v): %v", event1, err)
16789
}
90+
16891
b := p.Nvim.NewBatch()
16992
b.Subscribe(event2)
17093
if err := b.Execute(); err != nil {
171-
t.Fatal(err)
94+
t.Fatalf("batch execute: %v", err)
17295
}
17396

17497
// warm-up
17598
var result int
17699
if err := p.Nvim.Eval(fmt.Sprintf(`rpcnotify(0, %q)`, event1), &result); err != nil {
177-
t.Fatal(err)
100+
t.Fatalf("eval rpcnotify for warm-up of event1: %v", err)
178101
}
179102
if result != 1 {
180103
t.Fatalf("expect 1 but got %d", result)
181104
}
182105

183106
var result2 int
184107
if err := p.Nvim.Eval(fmt.Sprintf(`rpcnotify(0, %q, 1, 2, 3)`, event1), &result2); err != nil {
185-
t.Fatal(err)
108+
t.Fatalf("eval rpcnotify for event1: %v", err)
186109
}
187110
if result2 != 1 {
188111
t.Fatalf("expect 1 but got %d", result2)
189112
}
190113

191114
var result3 int
192115
if err := p.Nvim.Eval(fmt.Sprintf(`rpcnotify(0, %q, 4, 5, 6)`, event2), &result3); err != nil {
193-
t.Fatal(err)
116+
t.Fatalf("eval rpcnotify for event2: %v", err)
194117
}
195118
if result3 != 1 {
196119
t.Fatalf("expect 1 but got %d", result3)
197120
}
198121

199122
if err := p.Nvim.Unsubscribe(event1); err != nil {
200-
t.Fatal(err)
123+
t.Fatalf("unsubscribe event1: %v", err)
201124
}
125+
202126
b.Unsubscribe(event2)
203127
if err := b.Execute(); err != nil {
204-
t.Fatal(err)
128+
t.Fatalf("unsubscribe event2: %v", err)
205129
}
206130

207131
if err := p.Nvim.Eval(fmt.Sprintf(`rpcnotify(0, %q, 7, 8, 9)`, event1), nil); err != nil {
208-
t.Fatal(err)
132+
t.Fatalf("ensure rpcnotify to event1 is no-op: %v", err)
209133
}
210134

211135
if err := p.Nvim.Eval(fmt.Sprintf(`rpcnotify(0, %q, 10, 11, 12)`, event2), nil); err != nil {
212-
t.Fatal(err)
136+
t.Fatalf("ensure rpcnotify to event2 is no-op: %v", err)
213137
}
214138
}

0 commit comments

Comments
 (0)