github.com/julianthome/gore@v0.0.0-20231109011145-b3a6bbe6fe55/complete_test.go (about) 1 package gore 2 3 import ( 4 "strings" 5 "testing" 6 7 "github.com/stretchr/testify/assert" 8 "github.com/stretchr/testify/require" 9 10 "github.com/x-motemen/gore/gocode" 11 ) 12 13 func TestSession_completeWord(t *testing.T) { 14 if !gocode.Available() { 15 t.Skipf("gocode unavailable") 16 } 17 18 var stdout, stderr strings.Builder 19 s, err := NewSession(&stdout, &stderr) 20 t.Cleanup(func() { s.Clear() }) 21 require.NoError(t, err) 22 23 pre, cands, post := s.completeWord("", 0) 24 assert.Equal(t, "", pre) 25 assert.Equal(t, []string{" "}, cands) 26 assert.Equal(t, post, "") 27 28 pre, cands, post = s.completeWord(" x", 4) 29 assert.Equal(t, "", pre) 30 assert.Equal(t, []string{" "}, cands) 31 assert.Equal(t, post, "x") 32 33 pre, cands, post = s.completeWord(" : :", 4) 34 assert.Equal(t, "", pre) 35 assert.Equal(t, []string{ 36 " : :import ", 37 " : :type ", 38 " : :print", 39 " : :write ", 40 " : :clear", 41 " : :doc ", 42 " : :help", 43 " : :quit", 44 }, cands) 45 assert.Equal(t, post, "") 46 47 pre, cands, post = s.completeWord(" : : i", 6) 48 assert.Equal(t, "", pre) 49 assert.Equal(t, []string{" : : import "}, cands) 50 assert.Equal(t, post, "") 51 52 pre, cands, post = s.completeWord("::i t", 5) 53 assert.Equal(t, "::i ", pre) 54 assert.Equal(t, []string{"testing", "text", "time"}, cands) 55 assert.Equal(t, post, "") 56 57 pre, cands, post = s.completeWord("::i gor", 7) 58 assert.Equal(t, "::i ", pre) 59 assert.Equal(t, []string{"github.com/x-motemen/gore"}, cands) 60 assert.Equal(t, post, "") 61 62 pre, cands, post = s.completeWord(":i gore", 7) 63 assert.Equal(t, ":i ", pre) 64 assert.Equal(t, []string{"github.com/x-motemen/gore"}, cands) 65 assert.Equal(t, post, "") 66 67 pre, cands, post = s.completeWord(":i to", 5) 68 assert.Equal(t, ":i ", pre) 69 assert.Equal(t, []string{"golang.org/x/tools"}, cands) 70 assert.Equal(t, post, "") 71 72 pre, cands, post = s.completeWord(":i qu", 5) 73 assert.Equal(t, ":i ", pre) 74 assert.Equal(t, []string{"github.com/motemen/go-quickfix"}, cands) 75 assert.Equal(t, post, "") 76 77 pre, cands, post = s.completeWord(":i go-qu", 8) 78 assert.Equal(t, ":i ", pre) 79 assert.Equal(t, []string{"github.com/motemen/go-quickfix"}, cands) 80 assert.Equal(t, post, "") 81 82 pre, cands, post = s.completeWord(":i go-", 6) 83 assert.Equal(t, ":i ", pre) 84 assert.Equal(t, []string{ 85 "github.com/davecgh/go-spew", "github.com/mattn/go-runewidth", 86 "github.com/motemen/go-quickfix", "github.com/pmezard/go-difflib", 87 }, cands) 88 assert.Equal(t, post, "") 89 90 pre, cands, post = s.completeWord(":i x-", 5) 91 assert.Equal(t, ":i ", pre) 92 assert.Equal(t, []string{"github.com/x-motemen/gore"}, cands) 93 assert.Equal(t, post, "") 94 95 pre, cands, post = s.completeWord(":c", 2) 96 assert.Equal(t, "", pre) 97 assert.Equal(t, []string{":clear"}, cands) 98 assert.Equal(t, post, "") 99 100 pre, cands, post = s.completeWord(" : : q", 6) 101 assert.Equal(t, "", pre) 102 assert.Equal(t, []string{" : : quit"}, cands) 103 assert.Equal(t, post, "") 104 105 err = actionImport(s, "fmt") 106 require.NoError(t, err) 107 108 pre, cands, post = s.completeWord("fmt.p", 5) 109 assert.Equal(t, "fmt.", pre) 110 assert.Contains(t, cands, "Println(") 111 assert.Equal(t, post, "") 112 113 pre, cands, post = s.completeWord(" ::: doc f", 11) 114 assert.Equal(t, " ::: doc ", pre) 115 assert.Equal(t, []string{" fmt"}, cands) 116 assert.Equal(t, post, "") 117 }