@@ -44,25 +44,16 @@ func main() {
4444 fmt.Println(add__1("Hello", "World"))
4545}
4646`
47- Run (t , files , func (t * testing.T , env * Env ) {
48- env .OpenFile ("def.gop" )
49- loc := env .GoToDefinition (env .RegexpSearch ("def.gop" , `add` ))
50- refs , err := env .Editor .References (env .Ctx , loc )
51- if err != nil {
52- t .Fatalf ("references on (*s).Error failed: %v" , err )
53- }
54- var buf strings.Builder
55- for _ , ref := range refs {
56- fmt .Fprintf (& buf , "%s %s\n " , env .Sandbox .Workdir .URIToPath (ref .URI ), ref .Range )
57- }
58- got := buf .String ()
59- want := "def.gop 0:5-0:8\n " + // overload decl
60- "test.gop 0:8-0:11\n " + // overload int call
61- "test.gop 1:8-1:11\n " // overload string call
62- if diff := cmp .Diff (want , got ); diff != "" {
63- t .Errorf ("unexpected references on (*s).Error (-want +got):\n %s" , diff )
64- }
65- })
47+ testCases := []refTest {
48+ {
49+ "def.gop" , "add" , []string {
50+ "def.gop 0:5-0:8" , // overload decl
51+ "test.gop 0:8-0:11" , // overload int call
52+ "test.gop 1:8-1:11" , // overload string call
53+ },
54+ },
55+ }
56+ runFindRefTest (t , files , testCases )
6657}
6758
6859func TestReferencesOnOverloadDecl2 (t * testing.T ) {
@@ -113,47 +104,29 @@ func main() {
113104 fmt.Println(mulFloat(1.2, 3.14))
114105}
115106`
116- // goxls: overload decl reference
117- Run (t , files , func (t * testing.T , env * Env ) {
118- env .OpenFile ("def.gop" )
119- loc := env .GoToDefinition (env .RegexpSearch ("def.gop" , `func (mul) = \(` ))
120- refs , err := env .Editor .References (env .Ctx , loc )
121- if err != nil {
122- t .Fatalf ("references on (*s).Error failed: %v" , err )
123- }
124- var buf strings.Builder
125- for _ , ref := range refs {
126- fmt .Fprintf (& buf , "%s %s\n " , env .Sandbox .Workdir .URIToPath (ref .URI ), ref .Range )
127- }
128- got := buf .String ()
129- want := "def.gop 8:5-8:8\n " + // overload defintion
130- "test.gop 0:8-0:11\n " + // overload int call
131- "test.gop 1:8-1:11\n " + // overload string call
132- "test.gop 2:8-2:11\n " // overload float call
133- if diff := cmp .Diff (want , got ); diff != "" {
134- t .Errorf ("unexpected references on (*s).Error (-want +got):\n %s" , diff )
135- }
136- })
137- // goxls: overload member reference
138- Run (t , files , func (t * testing.T , env * Env ) {
139- env .OpenFile ("def.gop" )
140- loc := env .GoToDefinition (env .RegexpSearch ("def.gop" , `func mul = \(\n\s+(mulInt)` ))
141- refs , err := env .Editor .References (env .Ctx , loc )
142- if err != nil {
143- t .Fatalf ("references on (*s).Error failed: %v" , err )
144- }
145- var buf strings.Builder
146- for _ , ref := range refs {
147- fmt .Fprintf (& buf , "%s %s\n " , env .Sandbox .Workdir .URIToPath (ref .URI ), ref .Range )
148- }
149- got := buf .String ()
150- want := "def.gop 0:5-0:11\n " + // mulInt
151- "def.gop 9:4-9:10\n " + // overload mulInt
152- "test.gop 0:8-0:11\n " // use overload mulInt
153- if diff := cmp .Diff (want , got ); diff != "" {
154- t .Errorf ("unexpected references on (*s).Error (-want +got):\n %s" , diff )
155- }
156- })
107+
108+ testCases := []refTest {
109+ // goxls: overload reference
110+ {
111+ "def.gop" , `func (mul) = \(` ,
112+ []string {
113+ "def.gop 8:5-8:8" , // overload defintion
114+ "test.gop 0:8-0:11" , // overload int call
115+ "test.gop 1:8-1:11" , // overload string call
116+ "test.gop 2:8-2:11" , // overload float call
117+ },
118+ },
119+ // goxls: overload member reference
120+ {
121+ "def.gop" , `func mul = \(\n\s+(mulInt)` ,
122+ []string {
123+ "def.gop 0:5-0:11" , // mulInt
124+ "def.gop 9:4-9:10" , // overload mulInt
125+ "test.gop 0:8-0:11" , // use overload mulInt
126+ },
127+ },
128+ }
129+ runFindRefTest (t , files , testCases )
157130}
158131
159132func TestReferencesOnOverloadDecl3 (t * testing.T ) {
@@ -202,42 +175,51 @@ var c = a.mulFoo(a)
202175func main() {
203176}
204177`
178+ testCases := []refTest {
179+ {
180+ "def.gop" , `func \(foo\)\.(mul) = \(` ,
181+ []string {
182+ "def.gop 8:11-8:14" ,
183+ "test.gop 1:10-1:13" ,
184+ "test.gop 2:10-2:13" ,
185+ },
186+ },
187+ {
188+ "def.gop" , `\(foo\)\.(mulInt)` ,
189+ []string {
190+ "def.gop 2:14-2:20" ,
191+ "def.gop 9:10-9:16" ,
192+ "test.gop 1:10-1:13" ,
193+ },
194+ },
195+ }
196+ runFindRefTest (t , files , testCases )
197+ }
198+
199+ type refTest struct {
200+ defineFile string
201+ defineLocReg string
202+ refLocs []string
203+ }
204+
205+ func runFindRefTest (t * testing.T , files string , testCase []refTest ) {
205206 Run (t , files , func (t * testing.T , env * Env ) {
206- env .OpenFile ("def.gop" )
207- loc := env .GoToDefinition (env .RegexpSearch ("def.gop" , `func \(foo\)\.(mul) = \(` ))
208- refs , err := env .Editor .References (env .Ctx , loc )
209- if err != nil {
210- t .Fatalf ("references on (*s).Error failed: %v" , err )
211- }
212- var buf strings.Builder
213- for _ , ref := range refs {
214- fmt .Fprintf (& buf , "%s %s\n " , env .Sandbox .Workdir .URIToPath (ref .URI ), ref .Range )
215- }
216- got := buf .String ()
217- want := "def.gop 8:11-8:14\n " +
218- "test.gop 1:10-1:13\n " +
219- "test.gop 2:10-2:13\n "
220- if diff := cmp .Diff (want , got ); diff != "" {
221- t .Errorf ("unexpected references on (*s).Error (-want +got):\n %s" , diff )
222- }
223- })
224- Run (t , files , func (t * testing.T , env * Env ) {
225- env .OpenFile ("def.gop" )
226- loc := env .GoToDefinition (env .RegexpSearch ("def.gop" , `\(foo\)\.(mulInt)` ))
227- refs , err := env .Editor .References (env .Ctx , loc )
228- if err != nil {
229- t .Fatalf ("references on (*s).Error failed: %v" , err )
230- }
231- var buf strings.Builder
232- for _ , ref := range refs {
233- fmt .Fprintf (& buf , "%s %s\n " , env .Sandbox .Workdir .URIToPath (ref .URI ), ref .Range )
234- }
235- got := buf .String ()
236- want := "def.gop 2:14-2:20\n " +
237- "def.gop 9:10-9:16\n " +
238- "test.gop 1:10-1:13\n "
239- if diff := cmp .Diff (want , got ); diff != "" {
240- t .Errorf ("unexpected references on (*s).Error (-want +got):\n %s" , diff )
207+ for _ , test := range testCase {
208+ env .OpenFile (test .defineFile )
209+ loc := env .GoToDefinition (env .RegexpSearch (test .defineFile , test .defineLocReg ))
210+ refs , err := env .Editor .References (env .Ctx , loc )
211+ if err != nil {
212+ t .Fatalf ("references on (*s).Error failed: %v" , err )
213+ }
214+ var buf strings.Builder
215+ for _ , ref := range refs {
216+ fmt .Fprintf (& buf , "%s %s\n " , env .Sandbox .Workdir .URIToPath (ref .URI ), ref .Range )
217+ }
218+ got := buf .String ()
219+ want := strings .Join (test .refLocs , "\n " ) + "\n "
220+ if diff := cmp .Diff (want , got ); diff != "" {
221+ t .Errorf ("unexpected references on (*s).Error (-want +got):\n %s" , diff )
222+ }
241223 }
242224 })
243225}
0 commit comments