| 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 10 matching lines...) Expand all Loading... |
| 21 | 21 |
| 22 @reflectiveTest | 22 @reflectiveTest |
| 23 class ElementReferencesTest extends AbstractSearchDomainTest { | 23 class ElementReferencesTest extends AbstractSearchDomainTest { |
| 24 Element searchElement; | 24 Element searchElement; |
| 25 | 25 |
| 26 void assertHasRef(SearchResultKind kind, String search, bool isPotential) { | 26 void assertHasRef(SearchResultKind kind, String search, bool isPotential) { |
| 27 assertHasResult(kind, search); | 27 assertHasResult(kind, search); |
| 28 expect(result.isPotential, isPotential); | 28 expect(result.isPotential, isPotential); |
| 29 } | 29 } |
| 30 | 30 |
| 31 Future findElementReferences(String search, bool includePotential) { | 31 Future findElementReferences(String search, bool includePotential) async { |
| 32 int offset = findOffset(search); | 32 int offset = findOffset(search); |
| 33 return waitForTasksFinished().then((_) { | 33 await waitForTasksFinished(); |
| 34 Request request = new SearchFindElementReferencesParams( | 34 Request request = new SearchFindElementReferencesParams( |
| 35 testFile, | 35 testFile, |
| 36 offset, | 36 offset, |
| 37 includePotential).toRequest('0'); | 37 includePotential).toRequest('0'); |
| 38 Response response = handleSuccessfulRequest(request); | 38 Response response = await waitResponse(request); |
| 39 var result = new SearchFindElementReferencesResult.fromResponse(response); | 39 var result = new SearchFindElementReferencesResult.fromResponse(response); |
| 40 searchId = result.id; | 40 searchId = result.id; |
| 41 searchElement = result.element; | 41 searchElement = result.element; |
| 42 results.clear(); | 42 if (searchId == null) { |
| 43 searchDone = false; | 43 return null; |
| 44 if (searchId == null) { | 44 } else { |
| 45 return null; | 45 return waitForSearchResults(); |
| 46 } else { | 46 } |
| 47 return waitForSearchResults(); | |
| 48 } | |
| 49 }); | |
| 50 } | 47 } |
| 51 | 48 |
| 52 test_constructor_named() { | 49 test_constructor_named() async { |
| 53 addTestFile(''' | 50 addTestFile(''' |
| 54 class A { | 51 class A { |
| 55 A.named(p); | 52 A.named(p); |
| 56 } | 53 } |
| 57 main() { | 54 main() { |
| 58 new A.named(1); | 55 new A.named(1); |
| 59 new A.named(2); | 56 new A.named(2); |
| 60 } | 57 } |
| 61 '''); | 58 '''); |
| 62 return findElementReferences('named(p)', false).then((_) { | 59 await findElementReferences('named(p)', false); |
| 63 expect(searchElement.kind, ElementKind.CONSTRUCTOR); | 60 expect(searchElement.kind, ElementKind.CONSTRUCTOR); |
| 64 assertHasResult(SearchResultKind.REFERENCE, '.named(1)', 6); | 61 assertHasResult(SearchResultKind.REFERENCE, '.named(1)', 6); |
| 65 assertHasResult(SearchResultKind.REFERENCE, '.named(2)', 6); | 62 assertHasResult(SearchResultKind.REFERENCE, '.named(2)', 6); |
| 66 }); | |
| 67 } | 63 } |
| 68 | 64 |
| 69 test_constructor_named_potential() { | 65 test_constructor_named_potential() async { |
| 70 // Constructors in other classes shouldn't be considered potential matches, | 66 // Constructors in other classes shouldn't be considered potential matches, |
| 71 // nor should unresolved method calls, since constructor call sites are | 67 // nor should unresolved method calls, since constructor call sites are |
| 72 // statically bound to their targets). | 68 // statically bound to their targets). |
| 73 addTestFile(''' | 69 addTestFile(''' |
| 74 class A { | 70 class A { |
| 75 A.named(p); // A | 71 A.named(p); // A |
| 76 } | 72 } |
| 77 class B { | 73 class B { |
| 78 B.named(p); | 74 B.named(p); |
| 79 } | 75 } |
| 80 f(x) { | 76 f(x) { |
| 81 new A.named(1); | 77 new A.named(1); |
| 82 new B.named(2); | 78 new B.named(2); |
| 83 x.named(3); | 79 x.named(3); |
| 84 } | 80 } |
| 85 '''); | 81 '''); |
| 86 return findElementReferences('named(p); // A', true).then((_) { | 82 await findElementReferences('named(p); // A', true); |
| 87 expect(searchElement.kind, ElementKind.CONSTRUCTOR); | 83 expect(searchElement.kind, ElementKind.CONSTRUCTOR); |
| 88 assertHasResult(SearchResultKind.DECLARATION, '.named(p)', 6); | 84 assertHasResult(SearchResultKind.DECLARATION, '.named(p)', 6); |
| 89 assertHasResult(SearchResultKind.REFERENCE, '.named(1)', 6); | 85 assertHasResult(SearchResultKind.REFERENCE, '.named(1)', 6); |
| 90 expect(results, hasLength(2)); | 86 expect(results, hasLength(2)); |
| 91 }); | |
| 92 } | 87 } |
| 93 | 88 |
| 94 test_constructor_unnamed() { | 89 test_constructor_unnamed() async { |
| 95 addTestFile(''' | 90 addTestFile(''' |
| 96 class A { | 91 class A { |
| 97 A(p); | 92 A(p); |
| 98 } | 93 } |
| 99 main() { | 94 main() { |
| 100 new A(1); | 95 new A(1); |
| 101 new A(2); | 96 new A(2); |
| 102 } | 97 } |
| 103 '''); | 98 '''); |
| 104 return findElementReferences('A(p)', false).then((_) { | 99 await findElementReferences('A(p)', false); |
| 105 expect(searchElement.kind, ElementKind.CONSTRUCTOR); | 100 expect(searchElement.kind, ElementKind.CONSTRUCTOR); |
| 106 assertHasResult(SearchResultKind.REFERENCE, '(1)', 0); | 101 assertHasResult(SearchResultKind.REFERENCE, '(1)', 0); |
| 107 assertHasResult(SearchResultKind.REFERENCE, '(2)', 0); | 102 assertHasResult(SearchResultKind.REFERENCE, '(2)', 0); |
| 108 }); | |
| 109 } | 103 } |
| 110 | 104 |
| 111 test_constructor_unnamed_potential() { | 105 test_constructor_unnamed_potential() async { |
| 112 // Constructors in other classes shouldn't be considered potential matches, | 106 // Constructors in other classes shouldn't be considered potential matches, |
| 113 // even if they are also unnamed (since constructor call sites are | 107 // even if they are also unnamed (since constructor call sites are |
| 114 // statically bound to their targets). | 108 // statically bound to their targets). |
| 115 // Also, assignments to local variables shouldn't be considered potential | 109 // Also, assignments to local variables shouldn't be considered potential |
| 116 // matches. | 110 // matches. |
| 117 addTestFile(''' | 111 addTestFile(''' |
| 118 class A { | 112 class A { |
| 119 A(p); // A | 113 A(p); // A |
| 120 } | 114 } |
| 121 class B { | 115 class B { |
| 122 B(p); | 116 B(p); |
| 123 foo() { | 117 foo() { |
| 124 int k; | 118 int k; |
| 125 k = 3; | 119 k = 3; |
| 126 } | 120 } |
| 127 } | 121 } |
| 128 main() { | 122 main() { |
| 129 new A(1); | 123 new A(1); |
| 130 new B(2); | 124 new B(2); |
| 131 } | 125 } |
| 132 '''); | 126 '''); |
| 133 return findElementReferences('A(p)', true).then((_) { | 127 await findElementReferences('A(p)', true); |
| 134 expect(searchElement.kind, ElementKind.CONSTRUCTOR); | 128 expect(searchElement.kind, ElementKind.CONSTRUCTOR); |
| 135 assertHasResult(SearchResultKind.DECLARATION, '(p); // A', 0); | 129 assertHasResult(SearchResultKind.DECLARATION, '(p); // A', 0); |
| 136 assertHasResult(SearchResultKind.REFERENCE, '(1)', 0); | 130 assertHasResult(SearchResultKind.REFERENCE, '(1)', 0); |
| 137 expect(results, hasLength(2)); | 131 expect(results, hasLength(2)); |
| 138 }); | |
| 139 } | 132 } |
| 140 | 133 |
| 141 test_field_explicit() { | 134 test_field_explicit() async { |
| 142 addTestFile(''' | 135 addTestFile(''' |
| 143 class A { | 136 class A { |
| 144 var fff; // declaration | 137 var fff; // declaration |
| 145 A(this.fff); // in constructor | 138 A(this.fff); // in constructor |
| 146 m() { | 139 m() { |
| 147 fff = 2; | 140 fff = 2; |
| 148 fff += 3; | 141 fff += 3; |
| 149 print(fff); // in m() | 142 print(fff); // in m() |
| 150 fff(); // in m() | 143 fff(); // in m() |
| 151 } | 144 } |
| 152 } | 145 } |
| 153 main(A a) { | 146 main(A a) { |
| 154 a.fff = 20; | 147 a.fff = 20; |
| 155 a.fff += 30; | 148 a.fff += 30; |
| 156 print(a.fff); // in main() | 149 print(a.fff); // in main() |
| 157 a.fff(); // in main() | 150 a.fff(); // in main() |
| 158 } | 151 } |
| 159 '''); | 152 '''); |
| 160 return findElementReferences('fff; // declaration', false).then((_) { | 153 await findElementReferences('fff; // declaration', false); |
| 161 expect(searchElement.kind, ElementKind.FIELD); | 154 expect(searchElement.kind, ElementKind.FIELD); |
| 162 expect(results, hasLength(10)); | 155 expect(results, hasLength(10)); |
| 163 assertHasResult(SearchResultKind.DECLARATION, 'fff; // declaration'); | 156 assertHasResult(SearchResultKind.DECLARATION, 'fff; // declaration'); |
| 164 assertHasResult(SearchResultKind.REFERENCE, 'fff); // in constructor'); | 157 assertHasResult(SearchResultKind.REFERENCE, 'fff); // in constructor'); |
| 165 // m() | 158 // m() |
| 166 assertHasResult(SearchResultKind.WRITE, 'fff = 2;'); | 159 assertHasResult(SearchResultKind.WRITE, 'fff = 2;'); |
| 167 assertHasResult(SearchResultKind.WRITE, 'fff += 3;'); | 160 assertHasResult(SearchResultKind.WRITE, 'fff += 3;'); |
| 168 assertHasResult(SearchResultKind.READ, 'fff); // in m()'); | 161 assertHasResult(SearchResultKind.READ, 'fff); // in m()'); |
| 169 assertHasResult(SearchResultKind.INVOCATION, 'fff(); // in m()'); | 162 assertHasResult(SearchResultKind.INVOCATION, 'fff(); // in m()'); |
| 170 // main() | 163 // main() |
| 171 assertHasResult(SearchResultKind.WRITE, 'fff = 20;'); | 164 assertHasResult(SearchResultKind.WRITE, 'fff = 20;'); |
| 172 assertHasResult(SearchResultKind.WRITE, 'fff += 30;'); | 165 assertHasResult(SearchResultKind.WRITE, 'fff += 30;'); |
| 173 assertHasResult(SearchResultKind.READ, 'fff); // in main()'); | 166 assertHasResult(SearchResultKind.READ, 'fff); // in main()'); |
| 174 assertHasResult(SearchResultKind.INVOCATION, 'fff(); // in main()'); | 167 assertHasResult(SearchResultKind.INVOCATION, 'fff(); // in main()'); |
| 175 }); | |
| 176 } | 168 } |
| 177 | 169 |
| 178 test_field_implicit() { | 170 test_field_implicit() async { |
| 179 addTestFile(''' | 171 addTestFile(''' |
| 180 class A { | 172 class A { |
| 181 var get fff => null; | 173 var get fff => null; |
| 182 void set fff(x) {} | 174 void set fff(x) {} |
| 183 m() { | 175 m() { |
| 184 print(fff); // in m() | 176 print(fff); // in m() |
| 185 fff = 1; | 177 fff = 1; |
| 186 } | 178 } |
| 187 } | 179 } |
| 188 main(A a) { | 180 main(A a) { |
| 189 print(a.fff); // in main() | 181 print(a.fff); // in main() |
| 190 a.fff = 10; | 182 a.fff = 10; |
| 191 } | 183 } |
| 192 '''); | 184 '''); |
| 193 return findElementReferences('fff =>', false).then((_) { | 185 { |
| 186 await findElementReferences('fff =>', false); |
| 194 expect(searchElement.kind, ElementKind.FIELD); | 187 expect(searchElement.kind, ElementKind.FIELD); |
| 195 expect(results, hasLength(4)); | 188 expect(results, hasLength(4)); |
| 196 assertHasResult(SearchResultKind.READ, 'fff); // in m()'); | 189 assertHasResult(SearchResultKind.READ, 'fff); // in m()'); |
| 197 assertHasResult(SearchResultKind.WRITE, 'fff = 1;'); | 190 assertHasResult(SearchResultKind.WRITE, 'fff = 1;'); |
| 198 assertHasResult(SearchResultKind.READ, 'fff); // in main()'); | 191 assertHasResult(SearchResultKind.READ, 'fff); // in main()'); |
| 199 assertHasResult(SearchResultKind.WRITE, 'fff = 10;'); | 192 assertHasResult(SearchResultKind.WRITE, 'fff = 10;'); |
| 200 return findElementReferences('fff(x) {}', false); | 193 } |
| 201 }).then((_) { | 194 { |
| 195 await findElementReferences('fff(x) {}', false); |
| 202 expect(results, hasLength(4)); | 196 expect(results, hasLength(4)); |
| 203 assertHasResult(SearchResultKind.READ, 'fff); // in m()'); | 197 assertHasResult(SearchResultKind.READ, 'fff); // in m()'); |
| 204 assertHasResult(SearchResultKind.WRITE, 'fff = 1;'); | 198 assertHasResult(SearchResultKind.WRITE, 'fff = 1;'); |
| 205 assertHasResult(SearchResultKind.READ, 'fff); // in main()'); | 199 assertHasResult(SearchResultKind.READ, 'fff); // in main()'); |
| 206 assertHasResult(SearchResultKind.WRITE, 'fff = 10;'); | 200 assertHasResult(SearchResultKind.WRITE, 'fff = 10;'); |
| 207 }); | 201 } |
| 208 } | 202 } |
| 209 | 203 |
| 210 test_field_inFormalParameter() { | 204 test_field_inFormalParameter() async { |
| 211 addTestFile(''' | 205 addTestFile(''' |
| 212 class A { | 206 class A { |
| 213 var fff; // declaration | 207 var fff; // declaration |
| 214 A(this.fff); // in constructor | 208 A(this.fff); // in constructor |
| 215 m() { | 209 m() { |
| 216 fff = 2; | 210 fff = 2; |
| 217 print(fff); // in m() | 211 print(fff); // in m() |
| 218 } | 212 } |
| 219 } | 213 } |
| 220 '''); | 214 '''); |
| 221 return findElementReferences('fff); // in constructor', false).then((_) { | 215 await findElementReferences('fff); // in constructor', false); |
| 222 expect(searchElement.kind, ElementKind.FIELD); | 216 expect(searchElement.kind, ElementKind.FIELD); |
| 223 expect(results, hasLength(4)); | 217 expect(results, hasLength(4)); |
| 224 assertHasResult(SearchResultKind.DECLARATION, 'fff; // declaration'); | 218 assertHasResult(SearchResultKind.DECLARATION, 'fff; // declaration'); |
| 225 assertHasResult(SearchResultKind.REFERENCE, 'fff); // in constructor'); | 219 assertHasResult(SearchResultKind.REFERENCE, 'fff); // in constructor'); |
| 226 assertHasResult(SearchResultKind.WRITE, 'fff = 2;'); | 220 assertHasResult(SearchResultKind.WRITE, 'fff = 2;'); |
| 227 assertHasResult(SearchResultKind.READ, 'fff); // in m()'); | 221 assertHasResult(SearchResultKind.READ, 'fff); // in m()'); |
| 228 }); | |
| 229 } | 222 } |
| 230 | 223 |
| 231 test_function() { | 224 test_function() async { |
| 232 addTestFile(''' | 225 addTestFile(''' |
| 233 fff(p) {} | 226 fff(p) {} |
| 234 main() { | 227 main() { |
| 235 fff(1); | 228 fff(1); |
| 236 print(fff); | 229 print(fff); |
| 237 } | 230 } |
| 238 '''); | 231 '''); |
| 239 return findElementReferences('fff(p) {}', false).then((_) { | 232 await findElementReferences('fff(p) {}', false); |
| 240 expect(searchElement.kind, ElementKind.FUNCTION); | 233 expect(searchElement.kind, ElementKind.FUNCTION); |
| 241 expect(results, hasLength(2)); | 234 expect(results, hasLength(2)); |
| 242 assertHasResult(SearchResultKind.INVOCATION, 'fff(1)'); | 235 assertHasResult(SearchResultKind.INVOCATION, 'fff(1)'); |
| 243 assertHasResult(SearchResultKind.REFERENCE, 'fff);'); | 236 assertHasResult(SearchResultKind.REFERENCE, 'fff);'); |
| 244 }); | |
| 245 } | 237 } |
| 246 | 238 |
| 247 test_hierarchy_field_explicit() { | 239 test_hierarchy_field_explicit() async { |
| 248 addTestFile(''' | 240 addTestFile(''' |
| 249 class A { | 241 class A { |
| 250 int fff; // in A | 242 int fff; // in A |
| 251 } | 243 } |
| 252 class B extends A { | 244 class B extends A { |
| 253 int fff; // in B | 245 int fff; // in B |
| 254 } | 246 } |
| 255 class C extends B { | 247 class C extends B { |
| 256 int fff; // in C | 248 int fff; // in C |
| 257 } | 249 } |
| 258 main(A a, B b, C c) { | 250 main(A a, B b, C c) { |
| 259 a.fff = 10; | 251 a.fff = 10; |
| 260 b.fff = 20; | 252 b.fff = 20; |
| 261 c.fff = 30; | 253 c.fff = 30; |
| 262 } | 254 } |
| 263 '''); | 255 '''); |
| 264 return findElementReferences('fff; // in B', false).then((_) { | 256 await findElementReferences('fff; // in B', false); |
| 265 expect(searchElement.kind, ElementKind.FIELD); | 257 expect(searchElement.kind, ElementKind.FIELD); |
| 266 assertHasResult(SearchResultKind.DECLARATION, 'fff; // in A'); | 258 assertHasResult(SearchResultKind.DECLARATION, 'fff; // in A'); |
| 267 assertHasResult(SearchResultKind.DECLARATION, 'fff; // in B'); | 259 assertHasResult(SearchResultKind.DECLARATION, 'fff; // in B'); |
| 268 assertHasResult(SearchResultKind.DECLARATION, 'fff; // in C'); | 260 assertHasResult(SearchResultKind.DECLARATION, 'fff; // in C'); |
| 269 assertHasResult(SearchResultKind.WRITE, 'fff = 10;'); | 261 assertHasResult(SearchResultKind.WRITE, 'fff = 10;'); |
| 270 assertHasResult(SearchResultKind.WRITE, 'fff = 20;'); | 262 assertHasResult(SearchResultKind.WRITE, 'fff = 20;'); |
| 271 assertHasResult(SearchResultKind.WRITE, 'fff = 30;'); | 263 assertHasResult(SearchResultKind.WRITE, 'fff = 30;'); |
| 272 }); | |
| 273 } | 264 } |
| 274 | 265 |
| 275 test_hierarchy_method() { | 266 test_hierarchy_method() async { |
| 276 addTestFile(''' | 267 addTestFile(''' |
| 277 class A { | 268 class A { |
| 278 mmm() {} // in A | 269 mmm() {} // in A |
| 279 } | 270 } |
| 280 class B extends A { | 271 class B extends A { |
| 281 mmm() {} // in B | 272 mmm() {} // in B |
| 282 } | 273 } |
| 283 class C extends B { | 274 class C extends B { |
| 284 mmm() {} // in C | 275 mmm() {} // in C |
| 285 } | 276 } |
| 286 main(A a, B b, C c) { | 277 main(A a, B b, C c) { |
| 287 a.mmm(10); | 278 a.mmm(10); |
| 288 b.mmm(20); | 279 b.mmm(20); |
| 289 c.mmm(30); | 280 c.mmm(30); |
| 290 } | 281 } |
| 291 '''); | 282 '''); |
| 292 return findElementReferences('mmm() {} // in B', false).then((_) { | 283 await findElementReferences('mmm() {} // in B', false); |
| 293 expect(searchElement.kind, ElementKind.METHOD); | 284 expect(searchElement.kind, ElementKind.METHOD); |
| 294 assertHasResult(SearchResultKind.INVOCATION, 'mmm(10)'); | 285 assertHasResult(SearchResultKind.INVOCATION, 'mmm(10)'); |
| 295 assertHasResult(SearchResultKind.INVOCATION, 'mmm(20)'); | 286 assertHasResult(SearchResultKind.INVOCATION, 'mmm(20)'); |
| 296 assertHasResult(SearchResultKind.INVOCATION, 'mmm(30)'); | 287 assertHasResult(SearchResultKind.INVOCATION, 'mmm(30)'); |
| 297 }); | |
| 298 } | 288 } |
| 299 | 289 |
| 300 test_label() { | 290 test_label() async { |
| 301 addTestFile(''' | 291 addTestFile(''' |
| 302 main() { | 292 main() { |
| 303 myLabel: | 293 myLabel: |
| 304 for (int i = 0; i < 10; i++) { | 294 for (int i = 0; i < 10; i++) { |
| 305 if (i == 2) { | 295 if (i == 2) { |
| 306 continue myLabel; // continue | 296 continue myLabel; // continue |
| 307 } | 297 } |
| 308 break myLabel; // break | 298 break myLabel; // break |
| 309 } | 299 } |
| 310 } | 300 } |
| 311 '''); | 301 '''); |
| 312 return findElementReferences('myLabel; // break', false).then((_) { | 302 await findElementReferences('myLabel; // break', false); |
| 313 expect(searchElement.kind, ElementKind.LABEL); | 303 expect(searchElement.kind, ElementKind.LABEL); |
| 314 expect(results, hasLength(3)); | 304 expect(results, hasLength(3)); |
| 315 assertHasResult(SearchResultKind.DECLARATION, 'myLabel:'); | 305 assertHasResult(SearchResultKind.DECLARATION, 'myLabel:'); |
| 316 assertHasResult(SearchResultKind.REFERENCE, 'myLabel; // continue'); | 306 assertHasResult(SearchResultKind.REFERENCE, 'myLabel; // continue'); |
| 317 assertHasResult(SearchResultKind.REFERENCE, 'myLabel; // break'); | 307 assertHasResult(SearchResultKind.REFERENCE, 'myLabel; // break'); |
| 318 }); | |
| 319 } | 308 } |
| 320 | 309 |
| 321 test_localVariable() { | 310 test_localVariable() async { |
| 322 addTestFile(''' | 311 addTestFile(''' |
| 323 main() { | 312 main() { |
| 324 var vvv = 1; | 313 var vvv = 1; |
| 325 print(vvv); | 314 print(vvv); |
| 326 vvv += 3; | 315 vvv += 3; |
| 327 vvv = 2; | 316 vvv = 2; |
| 328 vvv(); | 317 vvv(); |
| 329 } | 318 } |
| 330 '''); | 319 '''); |
| 331 return findElementReferences('vvv = 1', false).then((_) { | 320 await findElementReferences('vvv = 1', false); |
| 332 expect(searchElement.kind, ElementKind.LOCAL_VARIABLE); | 321 expect(searchElement.kind, ElementKind.LOCAL_VARIABLE); |
| 333 expect(results, hasLength(5)); | 322 expect(results, hasLength(5)); |
| 334 assertHasResult(SearchResultKind.DECLARATION, 'vvv = 1'); | 323 assertHasResult(SearchResultKind.DECLARATION, 'vvv = 1'); |
| 335 assertHasResult(SearchResultKind.READ, 'vvv);'); | 324 assertHasResult(SearchResultKind.READ, 'vvv);'); |
| 336 assertHasResult(SearchResultKind.READ_WRITE, 'vvv += 3'); | 325 assertHasResult(SearchResultKind.READ_WRITE, 'vvv += 3'); |
| 337 assertHasResult(SearchResultKind.WRITE, 'vvv = 2'); | 326 assertHasResult(SearchResultKind.WRITE, 'vvv = 2'); |
| 338 assertHasResult(SearchResultKind.INVOCATION, 'vvv();'); | 327 assertHasResult(SearchResultKind.INVOCATION, 'vvv();'); |
| 339 }); | |
| 340 } | 328 } |
| 341 | 329 |
| 342 test_method() { | 330 test_method() async { |
| 343 addTestFile(''' | 331 addTestFile(''' |
| 344 class A { | 332 class A { |
| 345 mmm(p) {} | 333 mmm(p) {} |
| 346 m() { | 334 m() { |
| 347 mmm(1); | 335 mmm(1); |
| 348 print(mmm); // in m() | 336 print(mmm); // in m() |
| 349 } | 337 } |
| 350 } | 338 } |
| 351 main(A a) { | 339 main(A a) { |
| 352 a.mmm(10); | 340 a.mmm(10); |
| 353 print(a.mmm); // in main() | 341 print(a.mmm); // in main() |
| 354 } | 342 } |
| 355 '''); | 343 '''); |
| 356 return findElementReferences('mmm(p) {}', false).then((_) { | 344 await findElementReferences('mmm(p) {}', false); |
| 357 expect(searchElement.kind, ElementKind.METHOD); | 345 expect(searchElement.kind, ElementKind.METHOD); |
| 358 expect(results, hasLength(4)); | 346 expect(results, hasLength(4)); |
| 359 assertHasResult(SearchResultKind.INVOCATION, 'mmm(1);'); | 347 assertHasResult(SearchResultKind.INVOCATION, 'mmm(1);'); |
| 360 assertHasResult(SearchResultKind.REFERENCE, 'mmm); // in m()'); | 348 assertHasResult(SearchResultKind.REFERENCE, 'mmm); // in m()'); |
| 361 assertHasResult(SearchResultKind.INVOCATION, 'mmm(10);'); | 349 assertHasResult(SearchResultKind.INVOCATION, 'mmm(10);'); |
| 362 assertHasResult(SearchResultKind.REFERENCE, 'mmm); // in main()'); | 350 assertHasResult(SearchResultKind.REFERENCE, 'mmm); // in main()'); |
| 363 }); | |
| 364 } | 351 } |
| 365 | 352 |
| 366 test_method_propagatedType() { | 353 test_method_propagatedType() async { |
| 367 addTestFile(''' | 354 addTestFile(''' |
| 368 class A { | 355 class A { |
| 369 mmm(p) {} | 356 mmm(p) {} |
| 370 } | 357 } |
| 371 main() { | 358 main() { |
| 372 var a = new A(); | 359 var a = new A(); |
| 373 a.mmm(10); | 360 a.mmm(10); |
| 374 print(a.mmm); | 361 print(a.mmm); |
| 375 } | 362 } |
| 376 '''); | 363 '''); |
| 377 return findElementReferences('mmm(p) {}', false).then((_) { | 364 await findElementReferences('mmm(p) {}', false); |
| 378 expect(searchElement.kind, ElementKind.METHOD); | 365 expect(searchElement.kind, ElementKind.METHOD); |
| 379 expect(results, hasLength(2)); | 366 expect(results, hasLength(2)); |
| 380 assertHasResult(SearchResultKind.INVOCATION, 'mmm(10);'); | 367 assertHasResult(SearchResultKind.INVOCATION, 'mmm(10);'); |
| 381 assertHasResult(SearchResultKind.REFERENCE, 'mmm);'); | 368 assertHasResult(SearchResultKind.REFERENCE, 'mmm);'); |
| 382 }); | |
| 383 } | 369 } |
| 384 | 370 |
| 385 test_noElement() { | 371 test_noElement() async { |
| 386 addTestFile(''' | 372 addTestFile(''' |
| 387 main() { | 373 main() { |
| 388 print(noElement); | 374 print(noElement); |
| 389 } | 375 } |
| 390 '''); | 376 '''); |
| 391 return findElementReferences('noElement', false).then((_) { | 377 await findElementReferences('noElement', false); |
| 392 expect(searchId, isNull); | 378 expect(searchId, isNull); |
| 393 }); | |
| 394 } | 379 } |
| 395 | 380 |
| 396 test_oneUnit_twoLibraries() { | 381 test_oneUnit_twoLibraries() async { |
| 397 var pathA = '/project/bin/libA.dart'; | 382 var pathA = '/project/bin/libA.dart'; |
| 398 var pathB = '/project/bin/libB.dart'; | 383 var pathB = '/project/bin/libB.dart'; |
| 399 var codeA = ''' | 384 var codeA = ''' |
| 400 library lib; | 385 library lib; |
| 401 part 'test.dart'; | 386 part 'test.dart'; |
| 402 main() { | 387 main() { |
| 403 fff(1); | 388 fff(1); |
| 404 } | 389 } |
| 405 '''; | 390 '''; |
| 406 var codeB = ''' | 391 var codeB = ''' |
| 407 library lib; | 392 library lib; |
| 408 part 'test.dart'; | 393 part 'test.dart'; |
| 409 main() { | 394 main() { |
| 410 fff(2); | 395 fff(2); |
| 411 } | 396 } |
| 412 '''; | 397 '''; |
| 413 addFile(pathA, codeA); | 398 addFile(pathA, codeA); |
| 414 addFile(pathB, codeB); | 399 addFile(pathB, codeB); |
| 415 addTestFile(''' | 400 addTestFile(''' |
| 416 part of lib; | 401 part of lib; |
| 417 fff(p) {} | 402 fff(p) {} |
| 418 '''); | 403 '''); |
| 419 return findElementReferences('fff(p) {}', false).then((_) { | 404 await findElementReferences('fff(p) {}', false); |
| 420 expect(searchElement.kind, ElementKind.FUNCTION); | 405 expect(searchElement.kind, ElementKind.FUNCTION); |
| 421 expect(results, hasLength(2)); | 406 expect(results, hasLength(2)); |
| 422 findResult( | 407 findResult( |
| 423 SearchResultKind.INVOCATION, | 408 SearchResultKind.INVOCATION, |
| 424 pathA, | 409 pathA, |
| 425 codeA.indexOf('fff(1)'), | 410 codeA.indexOf('fff(1)'), |
| 426 3, | 411 3, |
| 427 true); | 412 true); |
| 428 findResult( | 413 findResult( |
| 429 SearchResultKind.INVOCATION, | 414 SearchResultKind.INVOCATION, |
| 430 pathB, | 415 pathB, |
| 431 codeB.indexOf('fff(2)'), | 416 codeB.indexOf('fff(2)'), |
| 432 3, | 417 3, |
| 433 true); | 418 true); |
| 434 }); | |
| 435 } | 419 } |
| 436 | 420 |
| 437 test_oneUnit_zeroLibraries() { | 421 test_oneUnit_zeroLibraries() async { |
| 438 addTestFile(''' | 422 addTestFile(''' |
| 439 part of lib; | 423 part of lib; |
| 440 fff(p) {} | 424 fff(p) {} |
| 441 main() { | 425 main() { |
| 442 fff(10); | 426 fff(10); |
| 443 } | 427 } |
| 444 '''); | 428 '''); |
| 445 return findElementReferences('fff(p) {}', false).then((_) { | 429 await findElementReferences('fff(p) {}', false); |
| 446 expect(results, isEmpty); | 430 expect(results, isEmpty); |
| 447 }); | |
| 448 } | 431 } |
| 449 | 432 |
| 450 test_parameter() { | 433 test_parameter() async { |
| 451 addTestFile(''' | 434 addTestFile(''' |
| 452 main(ppp) { | 435 main(ppp) { |
| 453 print(ppp); | 436 print(ppp); |
| 454 ppp += 3; | 437 ppp += 3; |
| 455 ppp = 2; | 438 ppp = 2; |
| 456 ppp(); | 439 ppp(); |
| 457 } | 440 } |
| 458 '''); | 441 '''); |
| 459 return findElementReferences('ppp) {', false).then((_) { | 442 await findElementReferences('ppp) {', false); |
| 460 expect(searchElement.kind, ElementKind.PARAMETER); | 443 expect(searchElement.kind, ElementKind.PARAMETER); |
| 461 expect(results, hasLength(5)); | 444 expect(results, hasLength(5)); |
| 462 assertHasResult(SearchResultKind.DECLARATION, 'ppp) {'); | 445 assertHasResult(SearchResultKind.DECLARATION, 'ppp) {'); |
| 463 assertHasResult(SearchResultKind.READ, 'ppp);'); | 446 assertHasResult(SearchResultKind.READ, 'ppp);'); |
| 464 assertHasResult(SearchResultKind.READ_WRITE, 'ppp += 3'); | 447 assertHasResult(SearchResultKind.READ_WRITE, 'ppp += 3'); |
| 465 assertHasResult(SearchResultKind.WRITE, 'ppp = 2'); | 448 assertHasResult(SearchResultKind.WRITE, 'ppp = 2'); |
| 466 assertHasResult(SearchResultKind.INVOCATION, 'ppp();'); | 449 assertHasResult(SearchResultKind.INVOCATION, 'ppp();'); |
| 467 }); | |
| 468 } | 450 } |
| 469 | 451 |
| 470 test_path_inConstructor_named() { | 452 test_path_inConstructor_named() async { |
| 471 addTestFile(''' | 453 addTestFile(''' |
| 472 library my_lib; | 454 library my_lib; |
| 473 class A {} | 455 class A {} |
| 474 class B { | 456 class B { |
| 475 B.named() { | 457 B.named() { |
| 476 A a = null; | 458 A a = null; |
| 477 } | 459 } |
| 478 } | 460 } |
| 479 '''); | 461 '''); |
| 480 return findElementReferences('A {}', false).then((_) { | 462 await findElementReferences('A {}', false); |
| 481 assertHasResult(SearchResultKind.REFERENCE, 'A a = null;'); | 463 assertHasResult(SearchResultKind.REFERENCE, 'A a = null;'); |
| 482 expect(getPathString(result.path), ''' | 464 expect(getPathString(result.path), ''' |
| 483 LOCAL_VARIABLE a | 465 LOCAL_VARIABLE a |
| 484 CONSTRUCTOR named | 466 CONSTRUCTOR named |
| 485 CLASS B | 467 CLASS B |
| 486 COMPILATION_UNIT test.dart | 468 COMPILATION_UNIT test.dart |
| 487 LIBRARY my_lib'''); | 469 LIBRARY my_lib'''); |
| 488 }); | |
| 489 } | 470 } |
| 490 | 471 |
| 491 test_path_inConstructor_unnamed() { | 472 test_path_inConstructor_unnamed() async { |
| 492 addTestFile(''' | 473 addTestFile(''' |
| 493 library my_lib; | 474 library my_lib; |
| 494 class A {} | 475 class A {} |
| 495 class B { | 476 class B { |
| 496 B() { | 477 B() { |
| 497 A a = null; | 478 A a = null; |
| 498 } | 479 } |
| 499 } | 480 } |
| 500 '''); | 481 '''); |
| 501 return findElementReferences('A {}', false).then((_) { | 482 await findElementReferences('A {}', false); |
| 502 assertHasResult(SearchResultKind.REFERENCE, 'A a = null;'); | 483 assertHasResult(SearchResultKind.REFERENCE, 'A a = null;'); |
| 503 expect(getPathString(result.path), ''' | 484 expect(getPathString(result.path), ''' |
| 504 LOCAL_VARIABLE a | 485 LOCAL_VARIABLE a |
| 505 CONSTRUCTOR | 486 CONSTRUCTOR |
| 506 CLASS B | 487 CLASS B |
| 507 COMPILATION_UNIT test.dart | 488 COMPILATION_UNIT test.dart |
| 508 LIBRARY my_lib'''); | 489 LIBRARY my_lib'''); |
| 509 }); | |
| 510 } | 490 } |
| 511 | 491 |
| 512 test_path_inFunction() { | 492 test_path_inFunction() async { |
| 513 addTestFile(''' | 493 addTestFile(''' |
| 514 library my_lib; | 494 library my_lib; |
| 515 class A {} | 495 class A {} |
| 516 main() { | 496 main() { |
| 517 A a = null; | 497 A a = null; |
| 518 } | 498 } |
| 519 '''); | 499 '''); |
| 520 return findElementReferences('A {}', false).then((_) { | 500 await findElementReferences('A {}', false); |
| 521 assertHasResult(SearchResultKind.REFERENCE, 'A a = null;'); | 501 assertHasResult(SearchResultKind.REFERENCE, 'A a = null;'); |
| 522 expect(getPathString(result.path), ''' | 502 expect(getPathString(result.path), ''' |
| 523 LOCAL_VARIABLE a | 503 LOCAL_VARIABLE a |
| 524 FUNCTION main | 504 FUNCTION main |
| 525 COMPILATION_UNIT test.dart | 505 COMPILATION_UNIT test.dart |
| 526 LIBRARY my_lib'''); | 506 LIBRARY my_lib'''); |
| 527 }); | |
| 528 } | 507 } |
| 529 | 508 |
| 530 test_potential_disabled() { | 509 test_potential_disabled() async { |
| 531 addTestFile(''' | 510 addTestFile(''' |
| 532 class A { | 511 class A { |
| 533 test(p) {} | 512 test(p) {} |
| 534 } | 513 } |
| 535 main(A a, p) { | 514 main(A a, p) { |
| 536 a.test(1); | 515 a.test(1); |
| 537 p.test(2); | 516 p.test(2); |
| 538 } | 517 } |
| 539 '''); | 518 '''); |
| 540 return findElementReferences('test(p) {}', false).then((_) { | 519 await findElementReferences('test(p) {}', false); |
| 541 assertHasResult(SearchResultKind.INVOCATION, 'test(1);'); | 520 assertHasResult(SearchResultKind.INVOCATION, 'test(1);'); |
| 542 assertNoResult(SearchResultKind.INVOCATION, 'test(2);'); | 521 assertNoResult(SearchResultKind.INVOCATION, 'test(2);'); |
| 543 }); | |
| 544 } | 522 } |
| 545 | 523 |
| 546 test_potential_field() { | 524 test_potential_field() async { |
| 547 addTestFile(''' | 525 addTestFile(''' |
| 548 class A { | 526 class A { |
| 549 var test; // declaration | 527 var test; // declaration |
| 550 } | 528 } |
| 551 main(A a, p) { | 529 main(A a, p) { |
| 552 a.test = 1; | 530 a.test = 1; |
| 553 p.test = 2; | 531 p.test = 2; |
| 554 print(p.test); // p | 532 print(p.test); // p |
| 555 } | 533 } |
| 556 '''); | 534 '''); |
| 557 return findElementReferences('test; // declaration', true).then((_) { | 535 await findElementReferences('test; // declaration', true); |
| 558 { | 536 { |
| 559 assertHasResult(SearchResultKind.WRITE, 'test = 1;'); | 537 assertHasResult(SearchResultKind.WRITE, 'test = 1;'); |
| 560 expect(result.isPotential, isFalse); | 538 expect(result.isPotential, isFalse); |
| 561 } | 539 } |
| 562 { | 540 { |
| 563 assertHasResult(SearchResultKind.WRITE, 'test = 2;'); | 541 assertHasResult(SearchResultKind.WRITE, 'test = 2;'); |
| 564 expect(result.isPotential, isTrue); | 542 expect(result.isPotential, isTrue); |
| 565 } | 543 } |
| 566 { | 544 { |
| 567 assertHasResult(SearchResultKind.READ, 'test); // p'); | 545 assertHasResult(SearchResultKind.READ, 'test); // p'); |
| 568 expect(result.isPotential, isTrue); | 546 expect(result.isPotential, isTrue); |
| 569 } | 547 } |
| 570 }); | |
| 571 } | 548 } |
| 572 | 549 |
| 573 test_potential_method() { | 550 test_potential_method() async { |
| 574 addTestFile(''' | 551 addTestFile(''' |
| 575 class A { | 552 class A { |
| 576 test(p) {} | 553 test(p) {} |
| 577 } | 554 } |
| 578 main(A a, p) { | 555 main(A a, p) { |
| 579 a.test(1); | 556 a.test(1); |
| 580 p.test(2); | 557 p.test(2); |
| 581 } | 558 } |
| 582 '''); | 559 '''); |
| 583 return findElementReferences('test(p) {}', true).then((_) { | 560 await findElementReferences('test(p) {}', true); |
| 584 { | 561 { |
| 585 assertHasResult(SearchResultKind.INVOCATION, 'test(1);'); | 562 assertHasResult(SearchResultKind.INVOCATION, 'test(1);'); |
| 586 expect(result.isPotential, isFalse); | 563 expect(result.isPotential, isFalse); |
| 587 } | 564 } |
| 588 { | 565 { |
| 589 assertHasResult(SearchResultKind.INVOCATION, 'test(2);'); | 566 assertHasResult(SearchResultKind.INVOCATION, 'test(2);'); |
| 590 expect(result.isPotential, isTrue); | 567 expect(result.isPotential, isTrue); |
| 591 } | 568 } |
| 592 }); | |
| 593 } | 569 } |
| 594 | 570 |
| 595 test_potential_method_definedInSubclass() { | 571 test_potential_method_definedInSubclass() async { |
| 596 addTestFile(''' | 572 addTestFile(''' |
| 597 class Base { | 573 class Base { |
| 598 methodInBase() { | 574 methodInBase() { |
| 599 test(1); | 575 test(1); |
| 600 } | 576 } |
| 601 } | 577 } |
| 602 class Derived extends Base { | 578 class Derived extends Base { |
| 603 test(_) {} // of Derived | 579 test(_) {} // of Derived |
| 604 methodInDerived() { | 580 methodInDerived() { |
| 605 test(2); | 581 test(2); |
| 606 } | 582 } |
| 607 } | 583 } |
| 608 globalFunction(Base b) { | 584 globalFunction(Base b) { |
| 609 b.test(3); | 585 b.test(3); |
| 610 } | 586 } |
| 611 '''); | 587 '''); |
| 612 return findElementReferences('test(_) {} // of Derived', true).then((_) { | 588 await findElementReferences('test(_) {} // of Derived', true); |
| 613 assertHasRef(SearchResultKind.INVOCATION, 'test(1);', true); | 589 assertHasRef(SearchResultKind.INVOCATION, 'test(1);', true); |
| 614 assertHasRef(SearchResultKind.INVOCATION, 'test(2);', false); | 590 assertHasRef(SearchResultKind.INVOCATION, 'test(2);', false); |
| 615 assertHasRef(SearchResultKind.INVOCATION, 'test(3);', true); | 591 assertHasRef(SearchResultKind.INVOCATION, 'test(3);', true); |
| 616 }); | |
| 617 } | 592 } |
| 618 | 593 |
| 619 test_prefix() { | 594 test_prefix() async { |
| 620 addTestFile(''' | 595 addTestFile(''' |
| 621 import 'dart:async' as ppp; | 596 import 'dart:async' as ppp; |
| 622 main() { | 597 main() { |
| 623 ppp.Future a; | 598 ppp.Future a; |
| 624 ppp.Stream b; | 599 ppp.Stream b; |
| 625 } | 600 } |
| 626 '''); | 601 '''); |
| 627 return findElementReferences("ppp;", false).then((_) { | 602 await findElementReferences("ppp;", false); |
| 628 expect(searchElement.kind, ElementKind.PREFIX); | 603 expect(searchElement.kind, ElementKind.PREFIX); |
| 629 expect(searchElement.name, 'ppp'); | 604 expect(searchElement.name, 'ppp'); |
| 630 expect(searchElement.location.startLine, 1); | 605 expect(searchElement.location.startLine, 1); |
| 631 expect(results, hasLength(3)); | 606 expect(results, hasLength(3)); |
| 632 assertHasResult(SearchResultKind.DECLARATION, 'ppp;'); | 607 assertHasResult(SearchResultKind.DECLARATION, 'ppp;'); |
| 633 assertHasResult(SearchResultKind.REFERENCE, 'ppp.Future'); | 608 assertHasResult(SearchResultKind.REFERENCE, 'ppp.Future'); |
| 634 assertHasResult(SearchResultKind.REFERENCE, 'ppp.Stream'); | 609 assertHasResult(SearchResultKind.REFERENCE, 'ppp.Stream'); |
| 635 }); | |
| 636 } | 610 } |
| 637 | 611 |
| 638 test_prefix_null() { | 612 test_prefix_null() async { |
| 639 addTestFile(''' | 613 addTestFile(''' |
| 640 import 'dart:async'; | 614 import 'dart:async'; |
| 641 main() { | 615 main() { |
| 642 Future a; | 616 Future a; |
| 643 Stream b; | 617 Stream b; |
| 644 } | 618 } |
| 645 '''); | 619 '''); |
| 646 return findElementReferences("import ", false).then((_) { | 620 await findElementReferences("import ", false); |
| 647 expect(searchElement, isNull); | 621 expect(searchElement, isNull); |
| 648 }); | |
| 649 } | 622 } |
| 650 | 623 |
| 651 test_topLevelVariable_explicit() { | 624 test_topLevelVariable_explicit() async { |
| 652 addTestFile(''' | 625 addTestFile(''' |
| 653 var vvv = 1; | 626 var vvv = 1; |
| 654 main() { | 627 main() { |
| 655 print(vvv); | 628 print(vvv); |
| 656 vvv += 3; | 629 vvv += 3; |
| 657 vvv = 2; | 630 vvv = 2; |
| 658 vvv(); | 631 vvv(); |
| 659 } | 632 } |
| 660 '''); | 633 '''); |
| 661 return findElementReferences('vvv = 1', false).then((_) { | 634 await findElementReferences('vvv = 1', false); |
| 662 expect(searchElement.kind, ElementKind.TOP_LEVEL_VARIABLE); | 635 expect(searchElement.kind, ElementKind.TOP_LEVEL_VARIABLE); |
| 663 expect(results, hasLength(5)); | 636 expect(results, hasLength(5)); |
| 664 assertHasResult(SearchResultKind.DECLARATION, 'vvv = 1;'); | 637 assertHasResult(SearchResultKind.DECLARATION, 'vvv = 1;'); |
| 665 assertHasResult(SearchResultKind.READ, 'vvv);'); | 638 assertHasResult(SearchResultKind.READ, 'vvv);'); |
| 666 assertHasResult(SearchResultKind.WRITE, 'vvv += 3'); | 639 assertHasResult(SearchResultKind.WRITE, 'vvv += 3'); |
| 667 assertHasResult(SearchResultKind.WRITE, 'vvv = 2'); | 640 assertHasResult(SearchResultKind.WRITE, 'vvv = 2'); |
| 668 assertHasResult(SearchResultKind.INVOCATION, 'vvv();'); | 641 assertHasResult(SearchResultKind.INVOCATION, 'vvv();'); |
| 669 }); | |
| 670 } | 642 } |
| 671 | 643 |
| 672 test_topLevelVariable_implicit() { | 644 test_topLevelVariable_implicit() async { |
| 673 addTestFile(''' | 645 addTestFile(''' |
| 674 get vvv => null; | 646 get vvv => null; |
| 675 set vvv(x) {} | 647 set vvv(x) {} |
| 676 main() { | 648 main() { |
| 677 print(vvv); | 649 print(vvv); |
| 678 vvv = 1; | 650 vvv = 1; |
| 679 } | 651 } |
| 680 '''); | 652 '''); |
| 681 return findElementReferences('vvv =>', false).then((_) { | 653 { |
| 654 await findElementReferences('vvv =>', false); |
| 682 expect(searchElement.kind, ElementKind.TOP_LEVEL_VARIABLE); | 655 expect(searchElement.kind, ElementKind.TOP_LEVEL_VARIABLE); |
| 683 expect(results, hasLength(2)); | 656 expect(results, hasLength(2)); |
| 684 assertHasResult(SearchResultKind.READ, 'vvv);'); | 657 assertHasResult(SearchResultKind.READ, 'vvv);'); |
| 685 assertHasResult(SearchResultKind.WRITE, 'vvv = 1;'); | 658 assertHasResult(SearchResultKind.WRITE, 'vvv = 1;'); |
| 686 return findElementReferences('vvv(x) {}', false); | 659 } |
| 687 }).then((_) { | 660 { |
| 661 await findElementReferences('vvv(x) {}', false); |
| 688 expect(results, hasLength(2)); | 662 expect(results, hasLength(2)); |
| 689 assertHasResult(SearchResultKind.READ, 'vvv);'); | 663 assertHasResult(SearchResultKind.READ, 'vvv);'); |
| 690 assertHasResult(SearchResultKind.WRITE, 'vvv = 1;'); | 664 assertHasResult(SearchResultKind.WRITE, 'vvv = 1;'); |
| 691 }); | 665 } |
| 692 } | 666 } |
| 693 | 667 |
| 694 test_typeReference_class() { | 668 test_typeReference_class() async { |
| 695 addTestFile(''' | 669 addTestFile(''' |
| 696 main() { | 670 main() { |
| 697 int a = 1; | 671 int a = 1; |
| 698 int b = 2; | 672 int b = 2; |
| 699 } | 673 } |
| 700 '''); | 674 '''); |
| 701 return findElementReferences('int a', false).then((_) { | 675 await findElementReferences('int a', false); |
| 702 expect(searchElement.kind, ElementKind.CLASS); | 676 expect(searchElement.kind, ElementKind.CLASS); |
| 703 assertHasResult(SearchResultKind.REFERENCE, 'int a'); | 677 assertHasResult(SearchResultKind.REFERENCE, 'int a'); |
| 704 assertHasResult(SearchResultKind.REFERENCE, 'int b'); | 678 assertHasResult(SearchResultKind.REFERENCE, 'int b'); |
| 705 }); | |
| 706 } | 679 } |
| 707 | 680 |
| 708 test_typeReference_functionType() { | 681 test_typeReference_functionType() async { |
| 709 addTestFile(''' | 682 addTestFile(''' |
| 710 typedef F(); | 683 typedef F(); |
| 711 main(F f) { | 684 main(F f) { |
| 712 } | 685 } |
| 713 '''); | 686 '''); |
| 714 return findElementReferences('F()', false).then((_) { | 687 await findElementReferences('F()', false); |
| 715 expect(searchElement.kind, ElementKind.FUNCTION_TYPE_ALIAS); | 688 expect(searchElement.kind, ElementKind.FUNCTION_TYPE_ALIAS); |
| 716 expect(results, hasLength(1)); | 689 expect(results, hasLength(1)); |
| 717 assertHasResult(SearchResultKind.REFERENCE, 'F f'); | 690 assertHasResult(SearchResultKind.REFERENCE, 'F f'); |
| 718 }); | |
| 719 } | 691 } |
| 720 | 692 |
| 721 test_typeReference_typeVariable() { | 693 test_typeReference_typeVariable() async { |
| 722 addTestFile(''' | 694 addTestFile(''' |
| 723 class A<T> { | 695 class A<T> { |
| 724 T f; | 696 T f; |
| 725 T m() => null; | 697 T m() => null; |
| 726 } | 698 } |
| 727 '''); | 699 '''); |
| 728 return findElementReferences('T> {', false).then((_) { | 700 await findElementReferences('T> {', false); |
| 729 expect(searchElement.kind, ElementKind.TYPE_PARAMETER); | 701 expect(searchElement.kind, ElementKind.TYPE_PARAMETER); |
| 730 expect(results, hasLength(2)); | 702 expect(results, hasLength(2)); |
| 731 assertHasResult(SearchResultKind.REFERENCE, 'T f;'); | 703 assertHasResult(SearchResultKind.REFERENCE, 'T f;'); |
| 732 assertHasResult(SearchResultKind.REFERENCE, 'T m()'); | 704 assertHasResult(SearchResultKind.REFERENCE, 'T m()'); |
| 733 }); | |
| 734 } | 705 } |
| 735 } | 706 } |
| OLD | NEW |