Skip to content

Commit c611899

Browse files
zcheejustinmk
authored andcommitted
test: add AttachBuffer testcases #46)
1 parent 8056758 commit c611899

File tree

1 file changed

+111
-0
lines changed

1 file changed

+111
-0
lines changed

nvim/nvim_test.go

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
package nvim
22

33
import (
4+
"bytes"
45
"errors"
56
"fmt"
67
"log"
78
"reflect"
89
"strings"
10+
"sync/atomic"
911
"testing"
1012
"time"
1113
)
@@ -379,6 +381,115 @@ func TestAPI(t *testing.T) {
379381
t.Errorf("HLByID(id, true)\n got %+v,\nwant %+v", hl, gui)
380382
}
381383
})
384+
385+
t.Run("buf_attach", func(t *testing.T) {
386+
buffer, err := v.CurrentBuffer()
387+
if err != nil {
388+
t.Fatal(err)
389+
}
390+
391+
// clear curret buffer text
392+
if err := v.SetBufferLines(buffer, 0, -1, true, bytes.Fields(nil)); err != nil {
393+
t.Fatal(err)
394+
}
395+
396+
type ChangedtickEvent struct {
397+
Buffer Buffer
398+
Changetick int64
399+
}
400+
type BufLinesEvent struct {
401+
Buffer Buffer
402+
Changetick int64
403+
FirstLine int64
404+
LastLine int64
405+
LineData string
406+
IsMultipart bool
407+
}
408+
409+
changedtickChan := make(chan *ChangedtickEvent)
410+
v.RegisterHandler("nvim_buf_changedtick_event", func(changedtickEvent ...interface{}) {
411+
ev := &ChangedtickEvent{
412+
Buffer: changedtickEvent[0].(Buffer),
413+
Changetick: changedtickEvent[1].(int64),
414+
}
415+
changedtickChan <- ev
416+
})
417+
418+
bufLinesChan := make(chan *BufLinesEvent)
419+
v.RegisterHandler("nvim_buf_lines_event", func(bufLinesEvent ...interface{}) {
420+
ev := &BufLinesEvent{
421+
Buffer: bufLinesEvent[0].(Buffer),
422+
Changetick: bufLinesEvent[1].(int64),
423+
FirstLine: bufLinesEvent[2].(int64),
424+
LastLine: bufLinesEvent[3].(int64),
425+
LineData: fmt.Sprint(bufLinesEvent[4]),
426+
IsMultipart: bufLinesEvent[5].(bool),
427+
}
428+
bufLinesChan <- ev
429+
})
430+
431+
ok, err := v.AttachBuffer(buffer, false, make(map[string]interface{}))
432+
if err != nil {
433+
t.Fatal(err)
434+
}
435+
if !ok {
436+
t.Fatal(errors.New("could not attach buffer"))
437+
}
438+
439+
changedtickExpected := &ChangedtickEvent{
440+
Buffer: 1,
441+
Changetick: 4,
442+
}
443+
bufLinesEventExpected := &BufLinesEvent{
444+
Buffer: 1,
445+
Changetick: 5,
446+
FirstLine: 0,
447+
LastLine: 1,
448+
LineData: "[test]",
449+
IsMultipart: false,
450+
}
451+
452+
var numEvent int64 // add and load should be atomically
453+
errc := make(chan error)
454+
done := make(chan struct{})
455+
go func() {
456+
for {
457+
select {
458+
default:
459+
if atomic.LoadInt64(&numEvent) == 2 { // end buf_attach test when handle 2 event
460+
done <- struct{}{}
461+
return
462+
}
463+
case changedtick := <-changedtickChan:
464+
if !reflect.DeepEqual(changedtick, changedtickExpected) {
465+
errc <- fmt.Errorf("changedtick = %+v, want %+v", changedtick, changedtickExpected)
466+
}
467+
atomic.AddInt64(&numEvent, 1)
468+
case bufLines := <-bufLinesChan:
469+
if expected := bufLinesEventExpected; !reflect.DeepEqual(bufLines, expected) {
470+
errc <- fmt.Errorf("bufLines = %+v, want %+v", bufLines, expected)
471+
}
472+
atomic.AddInt64(&numEvent, 1)
473+
}
474+
}
475+
}()
476+
477+
go func() {
478+
<-done
479+
close(errc)
480+
}()
481+
482+
test := []byte("test")
483+
if err := v.SetBufferLines(buffer, 0, -1, true, bytes.Fields(test)); err != nil {
484+
t.Fatal(err)
485+
}
486+
487+
for err := range errc {
488+
if err != nil {
489+
t.Fatal(err)
490+
}
491+
}
492+
})
382493
}
383494

384495
func TestDial(t *testing.T) {

0 commit comments

Comments
 (0)