@@ -131,92 +131,6 @@ func TestProxy(t *testing.T) {
131131 "a_test.go:1:46" : "A int" ,
132132 },
133133 },
134- "go subdirectory in repo" : {
135- rootURI : "git://test/pkg?deadbeefdeadbeefdeadbeefdeadbeefdeadbeef#d" ,
136- mode : "go" ,
137- fs : map [string ]string {
138- "a.go" : "package d; func A() { A() }" ,
139- "d2/b.go" : `package d2; import "test/pkg/d"; func B() { d.A(); B() }` ,
140- },
141- wantHover : map [string ]string {
142- "a.go:1:17" : "func A()" ,
143- "a.go:1:23" : "func A()" ,
144- "d2/b.go:1:39" : "func B()" ,
145- "d2/b.go:1:47" : "func A()" ,
146- "d2/b.go:1:52" : "func B()" ,
147- },
148- wantDefinition : map [string ]string {
149- "a.go:1:17" : "git://test/pkg?deadbeefdeadbeefdeadbeefdeadbeefdeadbeef#d/a.go:1:17" ,
150- "a.go:1:23" : "git://test/pkg?deadbeefdeadbeefdeadbeefdeadbeefdeadbeef#d/a.go:1:17" ,
151- "d2/b.go:1:39" : "git://test/pkg?deadbeefdeadbeefdeadbeefdeadbeefdeadbeef#d/d2/b.go:1:39" ,
152- "d2/b.go:1:47" : "git://test/pkg?deadbeefdeadbeefdeadbeefdeadbeefdeadbeef#d/a.go:1:17" ,
153- "d2/b.go:1:52" : "git://test/pkg?deadbeefdeadbeefdeadbeefdeadbeefdeadbeef#d/d2/b.go:1:39" ,
154- },
155- wantXDefinition : map [string ]string {
156- "a.go:1:17" : "git://test/pkg?deadbeefdeadbeefdeadbeefdeadbeefdeadbeef#d/a.go:1:17 id:test/pkg/d/-/A name:A package:test/pkg/d packageName:d recv: vendor:false" ,
157- "a.go:1:23" : "git://test/pkg?deadbeefdeadbeefdeadbeefdeadbeefdeadbeef#d/a.go:1:17 id:test/pkg/d/-/A name:A package:test/pkg/d packageName:d recv: vendor:false" ,
158- "d2/b.go:1:39" : "git://test/pkg?deadbeefdeadbeefdeadbeefdeadbeefdeadbeef#d/d2/b.go:1:39 id:test/pkg/d/d2/-/B name:B package:test/pkg/d/d2 packageName:d2 recv: vendor:false" ,
159- "d2/b.go:1:47" : "git://test/pkg?deadbeefdeadbeefdeadbeefdeadbeefdeadbeef#d/a.go:1:17 id:test/pkg/d/-/A name:A package:test/pkg/d packageName:d recv: vendor:false" ,
160- "d2/b.go:1:52" : "git://test/pkg?deadbeefdeadbeefdeadbeefdeadbeefdeadbeef#d/d2/b.go:1:39 id:test/pkg/d/d2/-/B name:B package:test/pkg/d/d2 packageName:d2 recv: vendor:false" ,
161- },
162- wantSymbols : map [string ][]string {
163- "" : []string {"git://test/pkg?deadbeefdeadbeefdeadbeefdeadbeefdeadbeef#d/a.go:function:A:0:16" , "git://test/pkg?deadbeefdeadbeefdeadbeefdeadbeefdeadbeef#d/d2/b.go:function:B:0:38" },
164- "is:exported" : []string {"git://test/pkg?deadbeefdeadbeefdeadbeefdeadbeefdeadbeef#d/a.go:function:A:0:16" , "git://test/pkg?deadbeefdeadbeefdeadbeefdeadbeefdeadbeef#d/d2/b.go:function:B:0:38" },
165- },
166- wantXReferences : map [* lsext.WorkspaceReferencesParams ][]string {
167- // Non-matching name query.
168- {Query : lsext.SymbolDescriptor {"name" : "nope" }}: []string {},
169-
170- // Matching against invalid field name.
171- {Query : lsext.SymbolDescriptor {"nope" : "A" }}: []string {},
172-
173- // Matching against an invalid dirs hint.
174- {Query : lsext.SymbolDescriptor {"package" : "test/pkg/d" }, Hints : map [string ]interface {}{"dirs" : []string {"file:///src/test/pkg/d/d3" }}}: []string {},
175-
176- // Matching against a dirs hint with multiple dirs.
177- {Query : lsext.SymbolDescriptor {"package" : "test/pkg/d" }, Hints : map [string ]interface {}{"dirs" : []string {"file:///d2" , "file:///invalid" }}}: []string {
178- "git://test/pkg?deadbeefdeadbeefdeadbeefdeadbeefdeadbeef#d/d2/b.go:1:20-1:32 -> id:test/pkg/d name: package:test/pkg/d packageName:d recv: vendor:false" ,
179- "git://test/pkg?deadbeefdeadbeefdeadbeefdeadbeefdeadbeef#d/d2/b.go:1:47-1:48 -> id:test/pkg/d/-/A name:A package:test/pkg/d packageName:d recv: vendor:false" ,
180- },
181-
182- // Matching against a dirs hint.
183- {Query : lsext.SymbolDescriptor {"package" : "test/pkg/d" }, Hints : map [string ]interface {}{"dirs" : []string {"file:///d2" }}}: []string {
184- "git://test/pkg?deadbeefdeadbeefdeadbeefdeadbeefdeadbeef#d/d2/b.go:1:20-1:32 -> id:test/pkg/d name: package:test/pkg/d packageName:d recv: vendor:false" ,
185- "git://test/pkg?deadbeefdeadbeefdeadbeefdeadbeefdeadbeef#d/d2/b.go:1:47-1:48 -> id:test/pkg/d/-/A name:A package:test/pkg/d packageName:d recv: vendor:false" ,
186- },
187-
188- // Matching against single field.
189- {Query : lsext.SymbolDescriptor {"package" : "test/pkg/d" }}: []string {
190- "git://test/pkg?deadbeefdeadbeefdeadbeefdeadbeefdeadbeef#d/d2/b.go:1:20-1:32 -> id:test/pkg/d name: package:test/pkg/d packageName:d recv: vendor:false" ,
191- "git://test/pkg?deadbeefdeadbeefdeadbeefdeadbeefdeadbeef#d/d2/b.go:1:47-1:48 -> id:test/pkg/d/-/A name:A package:test/pkg/d packageName:d recv: vendor:false" ,
192- },
193-
194- // Matching against no fields.
195- {Query : lsext.SymbolDescriptor {}}: []string {
196- "git://test/pkg?deadbeefdeadbeefdeadbeefdeadbeefdeadbeef#d/d2/b.go:1:20-1:32 -> id:test/pkg/d name: package:test/pkg/d packageName:d recv: vendor:false" ,
197- "git://test/pkg?deadbeefdeadbeefdeadbeefdeadbeefdeadbeef#d/d2/b.go:1:47-1:48 -> id:test/pkg/d/-/A name:A package:test/pkg/d packageName:d recv: vendor:false" ,
198- },
199- {
200- Query : lsext.SymbolDescriptor {
201- "name" : "" ,
202- "package" : "test/pkg/d" ,
203- "packageName" : "d" ,
204- "recv" : "" ,
205- "vendor" : false ,
206- },
207- }: []string {"git://test/pkg?deadbeefdeadbeefdeadbeefdeadbeefdeadbeef#d/d2/b.go:1:20-1:32 -> id:test/pkg/d name: package:test/pkg/d packageName:d recv: vendor:false" },
208- {
209- Query : lsext.SymbolDescriptor {
210- "name" : "A" ,
211- "package" : "test/pkg/d" ,
212- "packageName" : "d" ,
213- "recv" : "" ,
214- "vendor" : false ,
215- },
216- }: []string {"git://test/pkg?deadbeefdeadbeefdeadbeefdeadbeefdeadbeef#d/d2/b.go:1:47-1:48 -> id:test/pkg/d/-/A name:A package:test/pkg/d packageName:d recv: vendor:false" },
217- },
218- wantXPackages : []string {"test/pkg/d" , "test/pkg/d/d2" },
219- },
220134 "go multiple packages in dir" : {
221135 rootURI : "git://test/pkg?deadbeefdeadbeefdeadbeefdeadbeefdeadbeef" ,
222136 mode : "go" ,
@@ -606,18 +520,32 @@ func yza() {}
606520 t .Fatal (err )
607521 }
608522
609- c , done := connectionToNewBuildServer (string (test .rootURI ), t )
610- defer done ()
523+ r := func (clientUsesFileSchemeWithinWorkspace bool ) {
524+ c , done := connectionToNewBuildServer (string (test .rootURI ), t , clientUsesFileSchemeWithinWorkspace )
525+ defer done ()
526+
527+ // Prepare the connection.
528+ var initializeParams lspext.InitializeParams
529+ if clientUsesFileSchemeWithinWorkspace {
530+ initializeParams = lspext.InitializeParams {
531+ InitializeParams : lsp.InitializeParams {RootURI : "file:///" },
532+ OriginalRootURI : test .rootURI ,
533+ }
534+ } else {
535+ initializeParams = lspext.InitializeParams {
536+ InitializeParams : lsp.InitializeParams {RootURI : test .rootURI },
537+ OriginalRootURI : "" ,
538+ }
539+ }
540+ if err := c .Call (ctx , "initialize" , initializeParams , nil ); err != nil {
541+ t .Fatal ("initialize:" , err )
542+ }
611543
612- // Prepare the connection.
613- if err := c .Call (ctx , "initialize" , lspext.InitializeParams {
614- InitializeParams : lsp.InitializeParams {RootURI : "file:///" },
615- OriginalRootURI : test .rootURI ,
616- }, nil ); err != nil {
617- t .Fatal ("initialize:" , err )
544+ lspTests (t , ctx , c , root , test .wantHover , test .wantDefinition , test .wantXDefinition , test .wantReferences , test .wantSymbols , test .wantXDependencies , test .wantXReferences , test .wantXPackages )
618545 }
619546
620- lspTests (t , ctx , c , root , test .wantHover , test .wantDefinition , test .wantXDefinition , test .wantReferences , test .wantSymbols , test .wantXDependencies , test .wantXReferences , test .wantXPackages )
547+ r (true )
548+ r (false )
621549 })
622550 }
623551}
@@ -649,7 +577,7 @@ func (c *pipeReadWriteCloser) Close() error {
649577 return err2
650578}
651579
652- func connectionToNewBuildServer (root string , t testing.TB ) (* jsonrpc2.Conn , func ()) {
580+ func connectionToNewBuildServer (root string , t testing.TB , rewriteURIs bool ) (* jsonrpc2.Conn , func ()) {
653581 rootURI , err := gituri .Parse (root )
654582 if err != nil {
655583 t .Fatal (err )
@@ -684,18 +612,22 @@ func connectionToNewBuildServer(root string, t testing.TB) (*jsonrpc2.Conn, func
684612
685613 onSend := func (req * jsonrpc2.Request , res * jsonrpc2.Response ) {
686614 if res == nil {
687- err := convertURIs (req .Params , RelWorkspaceURI )
688- if err != nil {
689- t .Fatal (err )
615+ if rewriteURIs {
616+ err := convertURIs (req .Params , RelWorkspaceURI )
617+ if err != nil {
618+ t .Fatal (err )
619+ }
690620 }
691621 }
692622 }
693623
694624 onRecv := func (req * jsonrpc2.Request , res * jsonrpc2.Response ) {
695625 if res != nil && res .Result != nil {
696- err := convertURIs (res .Result , AbsWorkspaceURI )
697- if err != nil {
698- t .Fatal (err )
626+ if rewriteURIs {
627+ err := convertURIs (res .Result , AbsWorkspaceURI )
628+ if err != nil {
629+ t .Fatal (err )
630+ }
699631 }
700632 }
701633 }
0 commit comments