| 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.search.element_references; | 5 library test.search.element_references; |
| 6 | 6 |
| 7 import 'dart:async'; | 7 import 'dart:async'; |
| 8 | 8 |
| 9 import 'package:analysis_server/src/protocol.dart'; | 9 import 'package:analysis_server/src/protocol.dart'; |
| 10 import 'package:unittest/unittest.dart'; | 10 import 'package:unittest/unittest.dart'; |
| (...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 237 } | 237 } |
| 238 '''); | 238 '''); |
| 239 return findElementReferences('fff(p) {}', false).then((_) { | 239 return findElementReferences('fff(p) {}', false).then((_) { |
| 240 expect(searchElement.kind, ElementKind.FUNCTION); | 240 expect(searchElement.kind, ElementKind.FUNCTION); |
| 241 expect(results, hasLength(2)); | 241 expect(results, hasLength(2)); |
| 242 assertHasResult(SearchResultKind.INVOCATION, 'fff(1)'); | 242 assertHasResult(SearchResultKind.INVOCATION, 'fff(1)'); |
| 243 assertHasResult(SearchResultKind.REFERENCE, 'fff);'); | 243 assertHasResult(SearchResultKind.REFERENCE, 'fff);'); |
| 244 }); | 244 }); |
| 245 } | 245 } |
| 246 | 246 |
| 247 test_hierarchy_whenExtends_field() { | 247 test_hierarchy_field_explicit() { |
| 248 addTestFile(''' | 248 addTestFile(''' |
| 249 class A { | 249 class A { |
| 250 int mmm; | 250 int fff; // in A |
| 251 use_mmm_a() { | |
| 252 mmm = 1; | |
| 253 } | 251 } |
| 254 } | 252 class B extends A { |
| 255 class B extends A { | 253 int fff; // in B |
| 256 int mmm; | |
| 257 use_mmm_b() { | |
| 258 mmm = 2; | |
| 259 } | 254 } |
| 260 } | 255 class C extends B { |
| 261 class C extends B { | 256 int fff; // in C |
| 262 int mmm; // of C | |
| 263 use_mmm_c() { | |
| 264 mmm = 3; | |
| 265 } | 257 } |
| 266 } | 258 main(A a, B b, C c) { |
| 267 class D extends A { | 259 a.fff = 10; |
| 268 int mmm; | 260 b.fff = 20; |
| 269 use_mmm_d() { | 261 c.fff = 30; |
| 270 mmm = 4; | |
| 271 } | 262 } |
| 272 } | 263 '''); |
| 273 class E extends C { | 264 return findElementReferences('fff; // in B', false).then((_) { |
| 274 use_mmm_e() { | |
| 275 mmm = 5; | |
| 276 } | |
| 277 } | |
| 278 class F extends C { | |
| 279 int mmm; | |
| 280 use_mmm_f() { | |
| 281 mmm = 6; | |
| 282 mmm(6); | |
| 283 } | |
| 284 } | |
| 285 main(A a, B b, C c, D d, E e, F f) { | |
| 286 a.mmm = 10; | |
| 287 b.mmm = 20; | |
| 288 c.mmm = 30; | |
| 289 d.mmm = 40; | |
| 290 e.mmm = 50; | |
| 291 f.mmm = 60; | |
| 292 } | |
| 293 '''); | |
| 294 return findElementReferences('mmm; // of C', false).then((_) { | |
| 295 expect(searchElement.kind, ElementKind.FIELD); | 265 expect(searchElement.kind, ElementKind.FIELD); |
| 296 // unqualified | 266 assertHasResult(SearchResultKind.DECLARATION, 'fff; // in A'); |
| 297 { | 267 assertHasResult(SearchResultKind.DECLARATION, 'fff; // in B'); |
| 298 assertHasResult(SearchResultKind.WRITE, 'mmm = 1'); | 268 assertHasResult(SearchResultKind.DECLARATION, 'fff; // in C'); |
| 299 assertHasResult(SearchResultKind.WRITE, 'mmm = 2'); | 269 assertHasResult(SearchResultKind.WRITE, 'fff = 10;'); |
| 300 assertHasResult(SearchResultKind.WRITE, 'mmm = 3'); | 270 assertHasResult(SearchResultKind.WRITE, 'fff = 20;'); |
| 301 assertNoResult(SearchResultKind.WRITE, 'mmm = 4'); | 271 assertHasResult(SearchResultKind.WRITE, 'fff = 30;'); |
| 302 assertHasResult(SearchResultKind.WRITE, 'mmm = 5'); | |
| 303 assertNoResult(SearchResultKind.WRITE, 'mmm = 6'); | |
| 304 } | |
| 305 // qualified | |
| 306 { | |
| 307 assertHasResult(SearchResultKind.WRITE, 'mmm = 10'); | |
| 308 assertHasResult(SearchResultKind.WRITE, 'mmm = 20'); | |
| 309 assertHasResult(SearchResultKind.WRITE, 'mmm = 30'); | |
| 310 assertNoResult(SearchResultKind.WRITE, 'mmm = 40'); | |
| 311 assertHasResult(SearchResultKind.WRITE, 'mmm = 50'); | |
| 312 assertNoResult(SearchResultKind.WRITE, 'mmm = 60'); | |
| 313 } | |
| 314 }); | 272 }); |
| 315 } | 273 } |
| 316 | 274 |
| 317 test_hierarchy_whenExtends_method() { | 275 test_hierarchy_method() { |
| 318 // TODO(scheglov) ideally we need to remove D.mmm() declaration | |
| 319 // to actually test that we have fixed | |
| 320 // https://code.google.com/p/dart/issues/detail?id=19697 | |
| 321 addTestFile(''' | 276 addTestFile(''' |
| 322 class A { | 277 class A { |
| 323 mmm(_) {} | 278 mmm() {} // in A |
| 324 use_mmm_a() { | |
| 325 mmm(1); | |
| 326 } | |
| 327 } | 279 } |
| 328 class B extends A { | 280 class B extends A { |
| 329 mmm(_) {} | 281 mmm() {} // in B |
| 330 use_mmm_b() { | |
| 331 mmm(2); | |
| 332 } | |
| 333 } | 282 } |
| 334 class C extends B { | 283 class C extends B { |
| 335 mmm(_) {} // of C | 284 mmm() {} // in C |
| 336 use_mmm_c() { | |
| 337 mmm(3); | |
| 338 } | |
| 339 } | 285 } |
| 340 class D extends A { | 286 main(A a, B b, C c) { |
| 341 mmm(_) {} | |
| 342 use_mmm_d() { | |
| 343 mmm(4); | |
| 344 } | |
| 345 } | |
| 346 class E extends C { | |
| 347 use_mmm_e() { | |
| 348 mmm(5); | |
| 349 } | |
| 350 } | |
| 351 class F extends C { | |
| 352 mmm(_) {} | |
| 353 use_mmm_f() { | |
| 354 mmm(6); | |
| 355 } | |
| 356 } | |
| 357 main(A a, B b, C c, D d, E e, F f) { | |
| 358 a.mmm(10); | 287 a.mmm(10); |
| 359 b.mmm(20); | 288 b.mmm(20); |
| 360 c.mmm(30); | 289 c.mmm(30); |
| 361 d.mmm(40); | |
| 362 e.mmm(50); | |
| 363 f.mmm(60); | |
| 364 } | 290 } |
| 365 '''); | 291 '''); |
| 366 return findElementReferences('mmm(_) {} // of C', false).then((_) { | 292 return findElementReferences('mmm() {} // in B', false).then((_) { |
| 367 expect(searchElement.kind, ElementKind.METHOD); | 293 expect(searchElement.kind, ElementKind.METHOD); |
| 368 // unqualified | 294 assertHasResult(SearchResultKind.INVOCATION, 'mmm(10)'); |
| 369 { | 295 assertHasResult(SearchResultKind.INVOCATION, 'mmm(20)'); |
| 370 assertHasResult(SearchResultKind.INVOCATION, 'mmm(1)'); | 296 assertHasResult(SearchResultKind.INVOCATION, 'mmm(30)'); |
| 371 assertHasResult(SearchResultKind.INVOCATION, 'mmm(2)'); | |
| 372 assertHasResult(SearchResultKind.INVOCATION, 'mmm(3)'); | |
| 373 assertNoResult(SearchResultKind.INVOCATION, 'mmm(4)'); | |
| 374 assertHasResult(SearchResultKind.INVOCATION, 'mmm(5)'); | |
| 375 assertNoResult(SearchResultKind.INVOCATION, 'mmm(6)'); | |
| 376 } | |
| 377 // qualified | |
| 378 { | |
| 379 assertHasResult(SearchResultKind.INVOCATION, 'mmm(10)'); | |
| 380 assertHasResult(SearchResultKind.INVOCATION, 'mmm(20)'); | |
| 381 assertHasResult(SearchResultKind.INVOCATION, 'mmm(30)'); | |
| 382 assertNoResult(SearchResultKind.INVOCATION, 'mmm(40)'); | |
| 383 assertHasResult(SearchResultKind.INVOCATION, 'mmm(50)'); | |
| 384 assertNoResult(SearchResultKind.INVOCATION, 'mmm(60)'); | |
| 385 } | |
| 386 }); | 297 }); |
| 387 } | 298 } |
| 388 | 299 |
| 389 test_label() { | 300 test_label() { |
| 390 addTestFile(''' | 301 addTestFile(''' |
| 391 main() { | 302 main() { |
| 392 myLabel: | 303 myLabel: |
| 393 for (int i = 0; i < 10; i++) { | 304 for (int i = 0; i < 10; i++) { |
| 394 if (i == 2) { | 305 if (i == 2) { |
| 395 continue myLabel; // continue | 306 continue myLabel; // continue |
| (...skipping 388 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 784 } | 695 } |
| 785 '''); | 696 '''); |
| 786 return findElementReferences('T> {', false).then((_) { | 697 return findElementReferences('T> {', false).then((_) { |
| 787 expect(searchElement.kind, ElementKind.TYPE_PARAMETER); | 698 expect(searchElement.kind, ElementKind.TYPE_PARAMETER); |
| 788 expect(results, hasLength(2)); | 699 expect(results, hasLength(2)); |
| 789 assertHasResult(SearchResultKind.REFERENCE, 'T f;'); | 700 assertHasResult(SearchResultKind.REFERENCE, 'T f;'); |
| 790 assertHasResult(SearchResultKind.REFERENCE, 'T m()'); | 701 assertHasResult(SearchResultKind.REFERENCE, 'T m()'); |
| 791 }); | 702 }); |
| 792 } | 703 } |
| 793 } | 704 } |
| OLD | NEW |