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  }