|
9 | 9 | . "golang.org/x/tools/gopls/internal/lsp/regtest" |
10 | 10 | ) |
11 | 11 |
|
12 | | -func TestReferencesOnOverloadDecl1(t *testing.T) { |
| 12 | +func TestRefOverloadDeclAnony(t *testing.T) { |
13 | 13 | const files = ` |
14 | 14 | -- go.mod -- |
15 | 15 | module mod.com |
@@ -44,28 +44,19 @@ func main() { |
44 | 44 | fmt.Println(add__1("Hello", "World")) |
45 | 45 | } |
46 | 46 | ` |
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) |
66 | 57 | } |
67 | 58 |
|
68 | | -func TestReferencesOnOverloadDecl2(t *testing.T) { |
| 59 | +func TestRefOverloadDeclNamedAndAnony(t *testing.T) { |
69 | 60 | const files = ` |
70 | 61 | -- go.mod -- |
71 | 62 | module mod.com |
@@ -113,50 +104,32 @@ func main() { |
113 | 104 | fmt.Println(mulFloat(1.2, 3.14)) |
114 | 105 | } |
115 | 106 | ` |
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) |
157 | 130 | } |
158 | 131 |
|
159 | | -func TestReferencesOnOverloadDecl3(t *testing.T) { |
| 132 | +func TestRefOverloadDeclMethod(t *testing.T) { |
160 | 133 | const files = ` |
161 | 134 | -- go.mod -- |
162 | 135 | module mod.com |
@@ -202,42 +175,51 @@ var c = a.mulFoo(a) |
202 | 175 | func main() { |
203 | 176 | } |
204 | 177 | ` |
| 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) { |
205 | 206 | 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 | + } |
241 | 223 | } |
242 | 224 | }) |
243 | 225 | } |
0 commit comments