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

     1  package langserver
     2  
     3  import (
     4  	"context"
     5  	"github.com/stretchr/testify/assert"
     6  	"path"
     7  	"src/core"
     8  	"testing"
     9  
    10  	"github.com/thought-machine/please/tools/build_langserver/lsp"
    11  )
    12  
    13  func TestGetDefinitionLocationOnBuildDefs(t *testing.T) {
    14  	ctx := context.Background()
    15  	core.FindRepoRoot()
    16  
    17  	// GOTO definition on buildDef deps (complete build label)
    18  	loc := handler.getDefinitionLocation(ctx, exampleBuildURI, lsp.Position{Line: 9, Character: 14})
    19  
    20  	expectedURI := lsp.DocumentURI("file://" + path.Join(core.RepoRoot, "src/fs/BUILD"))
    21  	expectedRange := lsp.Range{
    22  		Start: lsp.Position{Line: 0, Character: 0},
    23  		End:   lsp.Position{Line: 15, Character: 1},
    24  	}
    25  	assert.Equal(t, 1, len(loc))
    26  	assert.Equal(t, expectedURI, loc[0].URI)
    27  	assert.Equal(t, expectedRange, loc[0].Range)
    28  
    29  	// GOTO definition on third_party dir
    30  	loc = handler.getDefinitionLocation(ctx, exampleBuildURI, lsp.Position{Line: 13, Character: 21})
    31  	expectedURI = lsp.DocumentURI("file://" + path.Join(core.RepoRoot, "third_party/go/BUILD"))
    32  	expectedRange = lsp.Range{
    33  		Start: lsp.Position{Line: 617, Character: 0},
    34  		End:   lsp.Position{Line: 621, Character: 1},
    35  	}
    36  	assert.Equal(t, 1, len(loc))
    37  	assert.Equal(t, expectedURI, loc[0].URI)
    38  	assert.Equal(t, expectedRange, loc[0].Range)
    39  
    40  	// GOTO definition buildlabel for including all subpackages
    41  	// *Should return nil*
    42  	loc = handler.getDefinitionLocation(ctx, exampleBuildURI, lsp.Position{Line: 6, Character: 29})
    43  	assert.Equal(t, 0, len(loc))
    44  
    45  	// GOTO definition on list on the same line
    46  	loc = handler.getDefinitionLocation(ctx, exampleBuildURI, lsp.Position{Line: 6, Character: 58})
    47  	expectedURI = lsp.DocumentURI("file://" + path.Join(core.RepoRoot, "src/core/BUILD"))
    48  	expectedRange = lsp.Range{
    49  		Start: lsp.Position{Line: 10, Character: 0},
    50  		End:   lsp.Position{Line: 34, Character: 1},
    51  	}
    52  	assert.Equal(t, 1, len(loc))
    53  	assert.Equal(t, expectedURI, loc[0].URI)
    54  	assert.Equal(t, expectedRange, loc[0].Range)
    55  
    56  	// GOTO definition on relative label
    57  	analyzer.State.Config.Parse.BuildFileName = []string{"example.build", "BUILD"}
    58  	loc = handler.getDefinitionLocation(ctx, exampleBuildURI, lsp.Position{Line: 27, Character: 16})
    59  	expectedRange = lsp.Range{
    60  		Start: lsp.Position{Line: 0, Character: 0},
    61  		End:   lsp.Position{Line: 17, Character: 1},
    62  	}
    63  	assert.Equal(t, 1, len(loc))
    64  	//assert.Equal(t, exampleBuildURI, loc[0].URI)
    65  	assert.Equal(t, expectedRange, loc[0].Range)
    66  }
    67  
    68  func TestGetDefinitionLocationOnAssignments(t *testing.T) {
    69  	ctx := context.Background()
    70  
    71  	// GOTO definition on assignment list
    72  	loc := handler.getDefinitionLocation(ctx, assignBuildURI, lsp.Position{Line: 19, Character: 26})
    73  	expectedURI := lsp.DocumentURI("file://" + path.Join(core.RepoRoot, "src/fs/BUILD"))
    74  	expectedRange := lsp.Range{
    75  		Start: lsp.Position{Line: 0, Character: 0},
    76  		End:   lsp.Position{Line: 15, Character: 1},
    77  	}
    78  	assert.Equal(t, 1, len(loc))
    79  	assert.Equal(t, expectedURI, loc[0].URI)
    80  	assert.Equal(t, expectedRange, loc[0].Range)
    81  
    82  	loc = handler.getDefinitionLocation(ctx, assignBuildURI, lsp.Position{Line: 19, Character: 41})
    83  	expectedURI = lsp.DocumentURI("file://" + path.Join(core.RepoRoot, "src/core/BUILD"))
    84  	expectedRange = lsp.Range{
    85  		Start: lsp.Position{Line: 10, Character: 0},
    86  		End:   lsp.Position{Line: 34, Character: 1},
    87  	}
    88  	assert.Equal(t, 1, len(loc))
    89  	assert.Equal(t, expectedURI, loc[0].URI)
    90  	assert.Equal(t, expectedRange, loc[0].Range)
    91  
    92  	// GOTO definition on assignment string
    93  	loc = handler.getDefinitionLocation(ctx, assignBuildURI, lsp.Position{Line: 25, Character: 17})
    94  	expectedURI = lsp.DocumentURI("file://" + path.Join(core.RepoRoot, "src/fs/BUILD"))
    95  	expectedRange = lsp.Range{
    96  		Start: lsp.Position{Line: 0, Character: 0},
    97  		End:   lsp.Position{Line: 15, Character: 1},
    98  	}
    99  	assert.Equal(t, 1, len(loc))
   100  	assert.Equal(t, expectedURI, loc[0].URI)
   101  	assert.Equal(t, expectedRange, loc[0].Range)
   102  }
   103  
   104  func TestGetDefinitionOnSubIncludeArgument(t *testing.T) {
   105  	ctx := context.Background()
   106  
   107  	loc := handler.getDefinitionLocation(ctx, assignBuildURI, lsp.Position{Line: 6, Character: 33})
   108  	expectedURI := lsp.DocumentURI("file://" + path.Join(core.RepoRoot, "build_defs/BUILD"))
   109  	expectedRange := lsp.Range{
   110  		Start: lsp.Position{Line: 0, Character: 0},
   111  		End:   lsp.Position{Line: 4, Character: 1},
   112  	}
   113  	assert.Equal(t, 1, len(loc))
   114  	assert.Equal(t, expectedURI, loc[0].URI)
   115  	assert.Equal(t, expectedRange, loc[0].Range)
   116  }