Chromium Code Reviews| 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_field_explicit() { | 247 test_hierarchy_whenExtends_field() { |
| 248 addTestFile(''' | 248 addTestFile(''' |
| 249 class A { | 249 class A { |
| 250 int fff; // in A | 250 int mmm; |
| 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 } | |
| 272 } | |
| 273 class E extends C { | |
| 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; | |
| 262 } | 292 } |
| 263 '''); | 293 '''); |
| 264 return findElementReferences('fff; // in B', false).then((_) { | 294 return findElementReferences('mmm; // of C', false).then((_) { |
| 265 expect(searchElement.kind, ElementKind.FIELD); | 295 expect(searchElement.kind, ElementKind.FIELD); |
| 266 assertHasResult(SearchResultKind.DECLARATION, 'fff; // in A'); | 296 // unqualified |
| 267 assertHasResult(SearchResultKind.DECLARATION, 'fff; // in B'); | 297 { |
| 268 assertHasResult(SearchResultKind.DECLARATION, 'fff; // in C'); | 298 assertHasResult(SearchResultKind.WRITE, 'mmm = 1'); |
| 269 assertHasResult(SearchResultKind.WRITE, 'fff = 10;'); | 299 assertHasResult(SearchResultKind.WRITE, 'mmm = 2'); |
| 270 assertHasResult(SearchResultKind.WRITE, 'fff = 20;'); | 300 assertHasResult(SearchResultKind.WRITE, 'mmm = 3'); |
| 271 assertHasResult(SearchResultKind.WRITE, 'fff = 30;'); | 301 assertNoResult(SearchResultKind.WRITE, 'mmm = 4'); |
| 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 } | |
| 272 }); | 314 }); |
| 273 } | 315 } |
| 274 | 316 |
| 275 test_hierarchy_method() { | 317 test_hierarchy_whenExtends_method() { |
| 318 // TODO(scheglov) ideally we need to remove D.mmm() declaration | |
| 319 // to actually we fixed | |
| 320 // test that https://code.google.com/p/dart/issues/detail?id=19697 | |
|
Paul Berry
2014/09/15 21:55:39
I'm having trouble understanding this comment. It
| |
| 276 addTestFile(''' | 321 addTestFile(''' |
| 277 class A { | 322 class A { |
| 278 mmm() {} // in A | 323 mmm(_) {} |
| 324 use_mmm_a() { | |
| 325 mmm(1); | |
| 326 } | |
| 279 } | 327 } |
| 280 class B extends A { | 328 class B extends A { |
| 281 mmm() {} // in B | 329 mmm(_) {} |
| 330 use_mmm_b() { | |
| 331 mmm(2); | |
| 332 } | |
| 282 } | 333 } |
| 283 class C extends B { | 334 class C extends B { |
| 284 mmm() {} // in C | 335 mmm(_) {} // of C |
| 336 use_mmm_c() { | |
| 337 mmm(3); | |
| 338 } | |
| 285 } | 339 } |
| 286 main(A a, B b, C c) { | 340 class D extends A { |
| 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) { | |
| 287 a.mmm(10); | 358 a.mmm(10); |
| 288 b.mmm(20); | 359 b.mmm(20); |
| 289 c.mmm(30); | 360 c.mmm(30); |
| 361 d.mmm(40); | |
| 362 e.mmm(50); | |
| 363 f.mmm(60); | |
| 290 } | 364 } |
| 291 '''); | 365 '''); |
| 292 return findElementReferences('mmm() {} // in B', false).then((_) { | 366 return findElementReferences('mmm(_) {} // of C', false).then((_) { |
| 293 expect(searchElement.kind, ElementKind.METHOD); | 367 expect(searchElement.kind, ElementKind.METHOD); |
| 294 assertHasResult(SearchResultKind.INVOCATION, 'mmm(10)'); | 368 // unqualified |
| 295 assertHasResult(SearchResultKind.INVOCATION, 'mmm(20)'); | 369 { |
| 296 assertHasResult(SearchResultKind.INVOCATION, 'mmm(30)'); | 370 assertHasResult(SearchResultKind.INVOCATION, 'mmm(1)'); |
| 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 } | |
| 297 }); | 386 }); |
| 298 } | 387 } |
| 299 | 388 |
| 300 test_label() { | 389 test_label() { |
| 301 addTestFile(''' | 390 addTestFile(''' |
| 302 main() { | 391 main() { |
| 303 myLabel: | 392 myLabel: |
| 304 for (int i = 0; i < 10; i++) { | 393 for (int i = 0; i < 10; i++) { |
| 305 if (i == 2) { | 394 if (i == 2) { |
| 306 continue myLabel; // continue | 395 continue myLabel; // continue |
| (...skipping 388 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 695 } | 784 } |
| 696 '''); | 785 '''); |
| 697 return findElementReferences('T> {', false).then((_) { | 786 return findElementReferences('T> {', false).then((_) { |
| 698 expect(searchElement.kind, ElementKind.TYPE_PARAMETER); | 787 expect(searchElement.kind, ElementKind.TYPE_PARAMETER); |
| 699 expect(results, hasLength(2)); | 788 expect(results, hasLength(2)); |
| 700 assertHasResult(SearchResultKind.REFERENCE, 'T f;'); | 789 assertHasResult(SearchResultKind.REFERENCE, 'T f;'); |
| 701 assertHasResult(SearchResultKind.REFERENCE, 'T m()'); | 790 assertHasResult(SearchResultKind.REFERENCE, 'T m()'); |
| 702 }); | 791 }); |
| 703 } | 792 } |
| 704 } | 793 } |
| OLD | NEW |