OLD | NEW |
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 library test.analysis.notification.overrides; | 5 library test.analysis.notification.overrides; |
6 | 6 |
7 import 'dart:async'; | 7 import 'dart:async'; |
8 | 8 |
9 import 'package:analysis_server/plugin/protocol/protocol.dart'; | 9 import 'package:analysis_server/plugin/protocol/protocol.dart'; |
10 import 'package:analysis_server/src/constants.dart'; | 10 import 'package:analysis_server/src/constants.dart'; |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
114 overridesList = params.overrides; | 114 overridesList = params.overrides; |
115 } | 115 } |
116 } | 116 } |
117 } | 117 } |
118 | 118 |
119 void setUp() { | 119 void setUp() { |
120 super.setUp(); | 120 super.setUp(); |
121 createProject(); | 121 createProject(); |
122 } | 122 } |
123 | 123 |
124 test_afterAnalysis() { | 124 test_afterAnalysis() async { |
125 addTestFile(''' | 125 addTestFile(''' |
126 class A { | 126 class A { |
127 m() {} // in A | 127 m() {} // in A |
128 } | 128 } |
129 class B implements A { | 129 class B implements A { |
130 m() {} // in B | 130 m() {} // in B |
131 } | 131 } |
132 '''); | 132 '''); |
133 return waitForTasksFinished().then((_) { | 133 await waitForTasksFinished(); |
134 return prepareOverrides().then((_) { | 134 await prepareOverrides(); |
135 assertHasOverride('m() {} // in B'); | 135 assertHasOverride('m() {} // in B'); |
136 assertNoSuperMember(); | 136 assertNoSuperMember(); |
137 assertHasInterfaceMember('m() {} // in A'); | 137 assertHasInterfaceMember('m() {} // in A'); |
138 }); | |
139 }); | |
140 } | 138 } |
141 | 139 |
142 test_definedInInterface_ofInterface() { | 140 test_definedInInterface_ofInterface() async { |
143 addTestFile(''' | 141 addTestFile(''' |
144 class A { | 142 class A { |
145 m() {} // in A | 143 m() {} // in A |
146 } | 144 } |
147 class B implements A {} | 145 class B implements A {} |
148 class C implements B { | 146 class C implements B { |
149 m() {} // in C | 147 m() {} // in C |
150 } | 148 } |
151 '''); | 149 '''); |
152 return prepareOverrides().then((_) { | 150 await prepareOverrides(); |
153 assertHasOverride('m() {} // in C'); | 151 assertHasOverride('m() {} // in C'); |
154 assertNoSuperMember(); | 152 assertNoSuperMember(); |
155 assertHasInterfaceMember('m() {} // in A'); | 153 assertHasInterfaceMember('m() {} // in A'); |
156 }); | |
157 } | 154 } |
158 | 155 |
159 test_definedInInterface_ofSuper() { | 156 test_definedInInterface_ofSuper() async { |
160 addTestFile(''' | 157 addTestFile(''' |
161 class A { | 158 class A { |
162 m() {} // in A | 159 m() {} // in A |
163 } | 160 } |
164 class B implements A {} | 161 class B implements A {} |
165 class C extends B { | 162 class C extends B { |
166 m() {} // in C | 163 m() {} // in C |
167 } | 164 } |
168 '''); | 165 '''); |
169 return prepareOverrides().then((_) { | 166 await prepareOverrides(); |
170 assertHasOverride('m() {} // in C'); | 167 assertHasOverride('m() {} // in C'); |
171 assertNoSuperMember(); | 168 assertNoSuperMember(); |
172 assertHasInterfaceMember('m() {} // in A'); | 169 assertHasInterfaceMember('m() {} // in A'); |
173 }); | |
174 } | 170 } |
175 | 171 |
176 test_interface_method_direct_multiple() { | 172 test_interface_method_direct_multiple() async { |
177 addTestFile(''' | 173 addTestFile(''' |
178 class IA { | 174 class IA { |
179 m() {} // in IA | 175 m() {} // in IA |
180 } | 176 } |
181 class IB { | 177 class IB { |
182 m() {} // in IB | 178 m() {} // in IB |
183 } | 179 } |
184 class A implements IA, IB { | 180 class A implements IA, IB { |
185 m() {} // in A | 181 m() {} // in A |
186 } | 182 } |
187 '''); | 183 '''); |
188 return prepareOverrides().then((_) { | 184 await prepareOverrides(); |
189 assertHasOverride('m() {} // in A'); | 185 assertHasOverride('m() {} // in A'); |
190 assertNoSuperMember(); | 186 assertNoSuperMember(); |
191 assertHasInterfaceMember('m() {} // in IA'); | 187 assertHasInterfaceMember('m() {} // in IA'); |
192 assertHasInterfaceMember('m() {} // in IB'); | 188 assertHasInterfaceMember('m() {} // in IB'); |
193 }); | |
194 } | 189 } |
195 | 190 |
196 test_interface_method_direct_single() { | 191 test_interface_method_direct_single() async { |
197 addTestFile(''' | 192 addTestFile(''' |
198 class A { | 193 class A { |
199 m() {} // in A | 194 m() {} // in A |
200 } | 195 } |
201 class B implements A { | 196 class B implements A { |
202 m() {} // in B | 197 m() {} // in B |
203 } | 198 } |
204 '''); | 199 '''); |
205 return prepareOverrides().then((_) { | 200 await prepareOverrides(); |
206 assertHasOverride('m() {} // in B'); | 201 assertHasOverride('m() {} // in B'); |
207 assertNoSuperMember(); | 202 assertNoSuperMember(); |
208 assertHasInterfaceMember('m() {} // in A'); | 203 assertHasInterfaceMember('m() {} // in A'); |
209 }); | |
210 } | 204 } |
211 | 205 |
212 test_interface_method_indirect_single() { | 206 test_interface_method_indirect_single() async { |
213 addTestFile(''' | 207 addTestFile(''' |
214 class A { | 208 class A { |
215 m() {} // in A | 209 m() {} // in A |
216 } | 210 } |
217 class B extends A { | 211 class B extends A { |
218 } | 212 } |
219 class C implements B { | 213 class C implements B { |
220 m() {} // in C | 214 m() {} // in C |
221 } | 215 } |
222 '''); | 216 '''); |
223 return prepareOverrides().then((_) { | 217 await prepareOverrides(); |
224 assertHasOverride('m() {} // in C'); | 218 assertHasOverride('m() {} // in C'); |
225 assertNoSuperMember(); | 219 assertNoSuperMember(); |
226 assertHasInterfaceMember('m() {} // in A'); | 220 assertHasInterfaceMember('m() {} // in A'); |
227 }); | |
228 } | 221 } |
229 | 222 |
230 test_interface_stopWhenFound() { | 223 test_interface_stopWhenFound() async { |
231 addTestFile(''' | 224 addTestFile(''' |
232 class A { | 225 class A { |
233 m() {} // in A | 226 m() {} // in A |
234 } | 227 } |
235 class B extends A { | 228 class B extends A { |
236 m() {} // in B | 229 m() {} // in B |
237 } | 230 } |
238 class C implements B { | 231 class C implements B { |
239 m() {} // in C | 232 m() {} // in C |
240 } | 233 } |
241 '''); | 234 '''); |
242 return prepareOverrides().then((_) { | 235 await prepareOverrides(); |
243 assertHasOverride('m() {} // in C'); | 236 assertHasOverride('m() {} // in C'); |
244 expect(override.interfaceMembers, hasLength(1)); | 237 expect(override.interfaceMembers, hasLength(1)); |
245 assertHasInterfaceMember('m() {} // in B'); | 238 assertHasInterfaceMember('m() {} // in B'); |
246 }); | |
247 } | 239 } |
248 | 240 |
249 test_mix_sameMethod() { | 241 test_mix_sameMethod() async { |
250 addTestFile(''' | 242 addTestFile(''' |
251 class A { | 243 class A { |
252 m() {} // in A | 244 m() {} // in A |
253 } | 245 } |
254 abstract class B extends A { | 246 abstract class B extends A { |
255 } | 247 } |
256 class C extends A implements A { | 248 class C extends A implements A { |
257 m() {} // in C | 249 m() {} // in C |
258 } | 250 } |
259 '''); | 251 '''); |
260 return prepareOverrides().then((_) { | 252 await prepareOverrides(); |
261 assertHasOverride('m() {} // in C'); | 253 assertHasOverride('m() {} // in C'); |
262 assertHasSuperElement('m() {} // in A'); | 254 assertHasSuperElement('m() {} // in A'); |
263 assertNoInterfaceMembers(); | 255 assertNoInterfaceMembers(); |
264 }); | |
265 } | 256 } |
266 | 257 |
267 test_mix_sameMethod_Object_hashCode() { | 258 test_mix_sameMethod_Object_hashCode() async { |
268 addTestFile(''' | 259 addTestFile(''' |
269 class A {} | 260 class A {} |
270 abstract class B {} | 261 abstract class B {} |
271 class C extends A implements A { | 262 class C extends A implements A { |
272 int get hashCode => 42; | 263 int get hashCode => 42; |
273 } | 264 } |
274 '''); | 265 '''); |
275 return prepareOverrides().then((_) { | 266 await prepareOverrides(); |
276 assertHasOverride('hashCode => 42;'); | 267 assertHasOverride('hashCode => 42;'); |
277 expect(override.superclassMember, isNotNull); | 268 expect(override.superclassMember, isNotNull); |
278 expect(override.interfaceMembers, isNull); | 269 expect(override.interfaceMembers, isNull); |
279 }); | |
280 } | 270 } |
281 | 271 |
282 test_staticMembers() { | 272 test_staticMembers() async { |
283 addTestFile(''' | 273 addTestFile(''' |
284 class A { | 274 class A { |
285 static int F = 0; | 275 static int F = 0; |
286 static void M() {} | 276 static void M() {} |
287 static int get G => 0; | 277 static int get G => 0; |
288 static void set S(int v) {} | 278 static void set S(int v) {} |
289 } | 279 } |
290 class B extends A { | 280 class B extends A { |
291 static int F = 0; | 281 static int F = 0; |
292 static void M() {} | 282 static void M() {} |
293 static int get G => 0; | 283 static int get G => 0; |
294 static void set S(int v) {} | 284 static void set S(int v) {} |
295 } | 285 } |
296 '''); | 286 '''); |
297 return prepareOverrides().then((_) { | 287 await prepareOverrides(); |
298 expect(overridesList, isEmpty); | 288 expect(overridesList, isEmpty); |
299 }); | |
300 } | 289 } |
301 | 290 |
302 test_super_fieldByField() { | 291 test_super_fieldByField() async { |
303 addTestFile(''' | 292 addTestFile(''' |
304 class A { | 293 class A { |
305 int fff; // in A | 294 int fff; // in A |
306 } | 295 } |
307 class B extends A { | 296 class B extends A { |
308 int fff; // in B | 297 int fff; // in B |
309 } | 298 } |
310 '''); | 299 '''); |
311 return prepareOverrides().then((_) { | 300 await prepareOverrides(); |
312 assertHasOverride('fff; // in B'); | 301 assertHasOverride('fff; // in B'); |
313 assertHasSuperElement('fff; // in A'); | 302 assertHasSuperElement('fff; // in A'); |
314 assertNoInterfaceMembers(); | 303 assertNoInterfaceMembers(); |
315 }); | |
316 } | 304 } |
317 | 305 |
318 test_super_fieldByGetter() { | 306 test_super_fieldByGetter() async { |
319 addTestFile(''' | 307 addTestFile(''' |
320 class A { | 308 class A { |
321 int fff; // in A | 309 int fff; // in A |
322 } | 310 } |
323 class B extends A { | 311 class B extends A { |
324 get fff => 0; // in B | 312 get fff => 0; // in B |
325 } | 313 } |
326 '''); | 314 '''); |
327 return prepareOverrides().then((_) { | 315 await prepareOverrides(); |
328 assertHasOverride('fff => 0; // in B'); | 316 assertHasOverride('fff => 0; // in B'); |
329 assertHasSuperElement('fff; // in A'); | 317 assertHasSuperElement('fff; // in A'); |
330 assertNoInterfaceMembers(); | 318 assertNoInterfaceMembers(); |
331 }); | |
332 } | 319 } |
333 | 320 |
334 test_super_fieldByMethod() { | 321 test_super_fieldByMethod() async { |
335 addTestFile(''' | 322 addTestFile(''' |
336 class A { | 323 class A { |
337 int fff; // in A | 324 int fff; // in A |
338 } | 325 } |
339 class B extends A { | 326 class B extends A { |
340 fff() {} // in B | 327 fff() {} // in B |
341 } | 328 } |
342 '''); | 329 '''); |
343 return prepareOverrides().then((_) { | 330 await prepareOverrides(); |
344 assertHasOverride('fff() {} // in B'); | 331 assertHasOverride('fff() {} // in B'); |
345 assertHasSuperElement('fff; // in A'); | 332 assertHasSuperElement('fff; // in A'); |
346 assertNoInterfaceMembers(); | 333 assertNoInterfaceMembers(); |
347 }); | |
348 } | 334 } |
349 | 335 |
350 test_super_fieldBySetter() { | 336 test_super_fieldBySetter() async { |
351 addTestFile(''' | 337 addTestFile(''' |
352 class A { | 338 class A { |
353 int fff; // in A | 339 int fff; // in A |
354 } | 340 } |
355 class B extends A { | 341 class B extends A { |
356 set fff(x) {} // in B | 342 set fff(x) {} // in B |
357 } | 343 } |
358 '''); | 344 '''); |
359 return prepareOverrides().then((_) { | 345 await prepareOverrides(); |
360 assertHasOverride('fff(x) {} // in B'); | 346 assertHasOverride('fff(x) {} // in B'); |
361 assertHasSuperElement('fff; // in A'); | 347 assertHasSuperElement('fff; // in A'); |
362 assertNoInterfaceMembers(); | 348 assertNoInterfaceMembers(); |
363 }); | |
364 } | 349 } |
365 | 350 |
366 test_super_getterByField() { | 351 test_super_getterByField() async { |
367 addTestFile(''' | 352 addTestFile(''' |
368 class A { | 353 class A { |
369 get fff => 0; // in A | 354 get fff => 0; // in A |
370 set fff(x) {} // in A | 355 set fff(x) {} // in A |
371 } | 356 } |
372 class B extends A { | 357 class B extends A { |
373 int fff; // in B | 358 int fff; // in B |
374 } | 359 } |
375 '''); | 360 '''); |
376 return prepareOverrides().then((_) { | 361 await prepareOverrides(); |
377 assertHasOverride('fff; // in B'); | 362 assertHasOverride('fff; // in B'); |
378 assertHasSuperElement('fff => 0; // in A'); | 363 assertHasSuperElement('fff => 0; // in A'); |
379 assertNoInterfaceMembers(); | 364 assertNoInterfaceMembers(); |
380 }); | |
381 } | 365 } |
382 | 366 |
383 test_super_getterByGetter() { | 367 test_super_getterByGetter() async { |
384 addTestFile(''' | 368 addTestFile(''' |
385 class A { | 369 class A { |
386 get fff => 0; // in A | 370 get fff => 0; // in A |
387 } | 371 } |
388 class B extends A { | 372 class B extends A { |
389 get fff => 0; // in B | 373 get fff => 0; // in B |
390 } | 374 } |
391 '''); | 375 '''); |
392 return prepareOverrides().then((_) { | 376 await prepareOverrides(); |
393 assertHasOverride('fff => 0; // in B'); | 377 assertHasOverride('fff => 0; // in B'); |
394 assertHasSuperElement('fff => 0; // in A'); | 378 assertHasSuperElement('fff => 0; // in A'); |
395 assertNoInterfaceMembers(); | 379 assertNoInterfaceMembers(); |
396 }); | |
397 } | 380 } |
398 | 381 |
399 test_super_method_direct() { | 382 test_super_method_direct() async { |
400 addTestFile(''' | 383 addTestFile(''' |
401 class A { | 384 class A { |
402 m() {} // in A | 385 m() {} // in A |
403 } | 386 } |
404 class B extends A { | 387 class B extends A { |
405 m() {} // in B | 388 m() {} // in B |
406 } | 389 } |
407 '''); | 390 '''); |
408 return prepareOverrides().then((_) { | 391 await prepareOverrides(); |
409 assertHasOverride('m() {} // in B'); | 392 assertHasOverride('m() {} // in B'); |
410 assertHasSuperElement('m() {} // in A'); | 393 assertHasSuperElement('m() {} // in A'); |
411 assertNoInterfaceMembers(); | 394 assertNoInterfaceMembers(); |
412 }); | |
413 } | 395 } |
414 | 396 |
415 test_super_method_indirect() { | 397 test_super_method_indirect() async { |
416 addTestFile(''' | 398 addTestFile(''' |
417 class A { | 399 class A { |
418 m() {} // in A | 400 m() {} // in A |
419 } | 401 } |
420 class B extends A { | 402 class B extends A { |
421 } | 403 } |
422 class C extends B { | 404 class C extends B { |
423 m() {} // in C | 405 m() {} // in C |
424 } | 406 } |
425 '''); | 407 '''); |
426 return prepareOverrides().then((_) { | 408 await prepareOverrides(); |
427 assertHasOverride('m() {} // in C'); | 409 assertHasOverride('m() {} // in C'); |
428 assertHasSuperElement('m() {} // in A'); | 410 assertHasSuperElement('m() {} // in A'); |
429 assertNoInterfaceMembers(); | 411 assertNoInterfaceMembers(); |
430 }); | |
431 } | 412 } |
432 | 413 |
433 test_super_method_superTypeCycle() { | 414 test_super_method_superTypeCycle() async { |
434 addTestFile(''' | 415 addTestFile(''' |
435 class A extends B { | 416 class A extends B { |
436 m() {} // in A | 417 m() {} // in A |
437 } | 418 } |
438 class B extends A { | 419 class B extends A { |
439 m() {} // in B | 420 m() {} // in B |
440 } | 421 } |
441 '''); | 422 '''); |
442 return prepareOverrides().then((_) { | 423 await prepareOverrides(); |
443 // must finish | 424 // must finish |
444 }); | |
445 } | 425 } |
446 | 426 |
447 test_super_setterBySetter() { | 427 test_super_setterBySetter() async { |
448 addTestFile(''' | 428 addTestFile(''' |
449 class A { | 429 class A { |
450 set fff(x) {} // in A | 430 set fff(x) {} // in A |
451 } | 431 } |
452 class B extends A { | 432 class B extends A { |
453 set fff(x) {} // in B | 433 set fff(x) {} // in B |
454 } | 434 } |
455 '''); | 435 '''); |
456 return prepareOverrides().then((_) { | 436 await prepareOverrides(); |
457 assertHasOverride('fff(x) {} // in B'); | 437 assertHasOverride('fff(x) {} // in B'); |
458 assertHasSuperElement('fff(x) {} // in A'); | 438 assertHasSuperElement('fff(x) {} // in A'); |
459 assertNoInterfaceMembers(); | 439 assertNoInterfaceMembers(); |
460 }); | |
461 } | 440 } |
462 } | 441 } |
OLD | NEW |