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 }