github.com/tiagovtristao/plz@v13.4.0+incompatible/tools/build_langserver/langserver/signature_test.go (about)

     1  package langserver
     2  
     3  import (
     4  	"context"
     5  	"testing"
     6  
     7  	"github.com/thought-machine/please/tools/build_langserver/lsp"
     8  
     9  	"github.com/stretchr/testify/assert"
    10  )
    11  
    12  func TestGetSignaturesEmptyCall(t *testing.T) {
    13  	ctx := context.Background()
    14  
    15  	sig := handler.getSignatures(ctx, sigURI, lsp.Position{Line: 0, Character: 10})
    16  	assert.Equal(t, 0, sig.ActiveParameter)
    17  	assert.True(t, paramInList(sig.Signatures[0].Parameters, "name:str"))
    18  	assert.True(t, paramInList(sig.Signatures[0].Parameters, "visibility:list=None"))
    19  
    20  	expectedLabel := "(name:str, srcs:list=[], asm_srcs:list=[], out:str=None, deps:list=[],\n" +
    21  		"              visibility:list=None, test_only:bool&testonly=False, static:bool=CONFIG.GO_DEFAULT_STATIC,\n" +
    22  		"              filter_srcs:bool=True, definitions:str|list|dict=None)"
    23  	assert.Equal(t, expectedLabel, sig.Signatures[0].Label)
    24  }
    25  
    26  func TestGetSignaturesTwoParams(t *testing.T) {
    27  	ctx := context.Background()
    28  
    29  	sig := handler.getSignatures(ctx, sigURI, lsp.Position{Line: 3, Character: 37})
    30  	assert.Equal(t, 7, sig.ActiveParameter)
    31  	assert.True(t, paramInList(sig.Signatures[0].Parameters, "name:str"))
    32  	assert.True(t, paramInList(sig.Signatures[0].Parameters, "visibility:list=None"))
    33  	assert.True(t, paramInList(sig.Signatures[0].Parameters, "test_only:bool&testonly=False"))
    34  }
    35  
    36  func TestGetSignaturesMethods(t *testing.T) {
    37  	ctx := context.Background()
    38  
    39  	// test for string method
    40  	sig := handler.getSignatures(ctx, sigURI, lsp.Position{Line: 5, Character: 27})
    41  	assert.Equal(t, 0, sig.ActiveParameter)
    42  	assert.True(t, paramInList(sig.Signatures[0].Parameters, "old:str"))
    43  	assert.False(t, paramInList(sig.Signatures[0].Parameters, "self:str"))
    44  
    45  	// test for dict method
    46  	sig = handler.getSignatures(ctx, sigURI, lsp.Position{Line: 6, Character: 19})
    47  	assert.Equal(t, 0, sig.ActiveParameter)
    48  	assert.True(t, paramInList(sig.Signatures[0].Parameters, "key:str"))
    49  	assert.True(t, paramInList(sig.Signatures[0].Parameters, "default=None"))
    50  	assert.False(t, paramInList(sig.Signatures[0].Parameters, "self:dict"))
    51  }
    52  
    53  func TestGetSignatureWithInCall(t *testing.T) {
    54  	ctx := context.Background()
    55  
    56  	sig := handler.getSignatures(ctx, sigURI, lsp.Position{Line: 10, Character: 14})
    57  	assert.Equal(t, 0, sig.ActiveParameter)
    58  	assert.True(t, paramInList(sig.Signatures[0].Parameters, "include:list"))
    59  	assert.True(t, paramInList(sig.Signatures[0].Parameters, "exclude:list&excludes=[]"))
    60  }
    61  
    62  func TestGetSignatureWithAssignment(t *testing.T) {
    63  	ctx := context.Background()
    64  
    65  	sig := handler.getSignatures(ctx, sigURI, lsp.Position{Line: 13, Character: 12})
    66  	assert.Equal(t, 0, sig.ActiveParameter)
    67  	assert.True(t, paramInList(sig.Signatures[0].Parameters, "include:list"))
    68  	assert.True(t, paramInList(sig.Signatures[0].Parameters, "exclude:list&excludes=[]"))
    69  }
    70  
    71  func TestGetSignatureWithSubinclude(t *testing.T) {
    72  	ctx := context.Background()
    73  
    74  	sig := handler.getSignatures(ctx, subincludeURI, lsp.Position{Line: 3, Character: 24})
    75  	assert.Equal(t, 1, sig.ActiveParameter)
    76  	assert.True(t, paramInList(sig.Signatures[0].Parameters, "expect_file_doesnt_exist=None"))
    77  	assert.True(t, paramInList(sig.Signatures[0].Parameters, "expected_output=None"))
    78  	assert.True(t, paramInList(sig.Signatures[0].Parameters, "pre_cmd=None"))
    79  }
    80  
    81  /***************************************
    82   * Helpers
    83   ***************************************/
    84  func paramInList(params []lsp.ParameterInformation, label string) bool {
    85  	for _, i := range params {
    86  		if i.Label == label {
    87  			return true
    88  		}
    89  	}
    90  
    91  	return false
    92  }