Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(146)

Side by Side Diff: pkg/analysis_server/test/services/completion/dart/optype_test.dart

Issue 2924703002: Move CompletionTarget and OpType for use by plugins (Closed)
Patch Set: Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
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
3 // BSD-style license that can be found in the LICENSE file.
4
5 import 'dart:async';
6
7 import 'package:analysis_server/src/protocol_server.dart';
8 import 'package:analysis_server/src/provisional/completion/dart/completion_targe t.dart';
9 import 'package:analysis_server/src/services/completion/dart/optype.dart';
10 import 'package:analyzer/src/dart/analysis/driver.dart';
11 import 'package:test/test.dart';
12 import 'package:test_reflective_loader/test_reflective_loader.dart';
13
14 import '../../../abstract_context.dart';
15
16 main() {
17 defineReflectiveSuite(() {
18 defineReflectiveTests(OpTypeTest);
19 });
20 }
21
22 @reflectiveTest
23 class OpTypeTest extends AbstractContextTest {
24 static const testpath = '/completionTest.dart';
25 int completionOffset;
26 OpType visitor;
27
28 void addTestSource(String content) {
29 completionOffset = content.indexOf('^');
30 expect(completionOffset, isNot(equals(-1)), reason: 'missing ^');
31 int nextOffset = content.indexOf('^', completionOffset + 1);
32 expect(nextOffset, equals(-1), reason: 'too many ^');
33 content = content.substring(0, completionOffset) +
34 content.substring(completionOffset + 1);
35 super.addSource(testpath, content);
36 }
37
38 Future<Null> assertOpType(
39 {bool caseLabel: false,
40 bool constructors: false,
41 bool namedArgs: false,
42 bool prefixed: false,
43 bool returnValue: false,
44 bool statementLabel: false,
45 bool staticMethodBody: false,
46 bool typeNames: false,
47 bool varNames: false,
48 bool voidReturn: false,
49 CompletionSuggestionKind kind:
50 CompletionSuggestionKind.INVOCATION}) async {
51 AnalysisResult analysisResult = await driver.getResult(testpath);
52
53 CompletionTarget completionTarget =
54 new CompletionTarget.forOffset(analysisResult.unit, completionOffset);
55 visitor = new OpType.forCompletion(completionTarget, completionOffset);
56
57 expect(visitor.includeCaseLabelSuggestions, caseLabel, reason: 'caseLabel');
58 expect(visitor.includeConstructorSuggestions, constructors,
59 reason: 'constructors');
60 expect(visitor.includeNamedArgumentSuggestions, namedArgs,
61 reason: 'namedArgs');
62 expect(visitor.includeReturnValueSuggestions, returnValue,
63 reason: 'returnValue');
64 expect(visitor.includeStatementLabelSuggestions, statementLabel,
65 reason: 'statementLabel');
66 expect(visitor.includeTypeNameSuggestions, typeNames, reason: 'typeNames');
67 expect(visitor.includeVarNameSuggestions, varNames, reason: 'varNames');
68 expect(visitor.includeVoidReturnSuggestions, voidReturn,
69 reason: 'voidReturn');
70 expect(visitor.inStaticMethodBody, staticMethodBody,
71 reason: 'staticMethodBody');
72 expect(visitor.isPrefixed, prefixed, reason: 'prefixed');
73 expect(visitor.suggestKind, kind, reason: 'suggestion kind');
74 }
75
76 test_Annotation() async {
77 // SimpleIdentifier Annotation MethodDeclaration ClassDeclaration
78 addTestSource('class C { @A^ }');
79 await assertOpType(returnValue: true, typeNames: true);
80 }
81
82 test_ArgumentList() async {
83 // ArgumentList MethodInvocation ExpressionStatement Block
84 addTestSource('void main() {expect(^)}');
85 // If "expect()" were resolved, then either namedArgs would be true
86 // or returnValue and typeNames would be true.
87 await assertOpType(namedArgs: true, returnValue: true, typeNames: true);
88 }
89
90 test_ArgumentList_constructor_named_resolved_1_0() async {
91 // ArgumentList InstanceCreationExpression ExpressionStatement Block
92 addTestSource(
93 'main() { new A.b(^); }'
94 'class A{ A.b({one, two}) {} }',
95 );
96 await assertOpType(namedArgs: true);
97 }
98
99 test_ArgumentList_constructor_named_resolved_1_1() async {
100 // ArgumentList InstanceCreationExpression ExpressionStatement Block
101 addTestSource(
102 'main() { new A.b(o^); }'
103 'class A { A.b({one, two}) {} }',
104 );
105 await assertOpType(namedArgs: true);
106 }
107
108 test_ArgumentList_constructor_resolved_1_0() async {
109 // ArgumentList InstanceCreationExpression ExpressionStatement Block
110 addTestSource(
111 'main() { new A(^); }'
112 'class A{ A({one, two}) {} }',
113 );
114 await assertOpType(namedArgs: true);
115 }
116
117 test_ArgumentList_constructor_resolved_1_1() async {
118 // ArgumentList InstanceCreationExpression ExpressionStatement Block
119 addTestSource(
120 'main() { new A(o^); }'
121 'class A { A({one, two}) {} }',
122 );
123 await assertOpType(namedArgs: true);
124 }
125
126 test_ArgumentList_factory_named_resolved_1_0() async {
127 // ArgumentList InstanceCreationExpression ExpressionStatement Block
128 addTestSource(
129 'main() { new A.b(^); }'
130 'class A{ factory A.b({one, two}) {} }',
131 );
132 await assertOpType(namedArgs: true);
133 }
134
135 test_ArgumentList_factory_named_resolved_1_1() async {
136 // ArgumentList InstanceCreationExpression ExpressionStatement Block
137 addTestSource(
138 'main() { new A.b(o^); }'
139 'class A { factory A.b({one, two}) {} }',
140 );
141 await assertOpType(namedArgs: true);
142 }
143
144 test_ArgumentList_factory_resolved_1_0() async {
145 // ArgumentList InstanceCreationExpression ExpressionStatement Block
146 addTestSource(
147 'main() { new A(^); }'
148 'class A{ factory A({one, two}) {} }',
149 );
150 await assertOpType(namedArgs: true);
151 }
152
153 test_ArgumentList_factory_resolved_1_1() async {
154 // ArgumentList InstanceCreationExpression ExpressionStatement Block
155 addTestSource(
156 'main() { new A(o^); }'
157 'class A { factory A({one, two}) {} }',
158 );
159 await assertOpType(namedArgs: true);
160 }
161
162 test_ArgumentList_method_resolved_1_0() async {
163 // ArgumentList MethodInvocation ExpressionStatement Block
164 addTestSource('main() { foo(^);} foo({one, two}) {}');
165 await assertOpType(namedArgs: true);
166 }
167
168 test_ArgumentList_method_resolved_1_1() async {
169 // ArgumentList MethodInvocation ExpressionStatement Block
170 addTestSource('main() { foo(o^);} foo({one, two}) {}');
171 await assertOpType(namedArgs: true);
172 }
173
174 test_ArgumentList_namedParam() async {
175 // SimpleIdentifier NamedExpression ArgumentList MethodInvocation
176 // ExpressionStatement
177 addTestSource('void main() {expect(foo: ^)}');
178 await assertOpType(returnValue: true, typeNames: true);
179 }
180
181 test_ArgumentList_prefixedIdentifier() async {
182 // SimpleIdentifier PrefixedIdentifier ArgumentList
183 addTestSource('void main() {expect(aa.^)}');
184 await assertOpType(returnValue: true, typeNames: true, prefixed: true);
185 }
186
187 test_ArgumentList_resolved() async {
188 // ArgumentList MethodInvocation ExpressionStatement Block
189 addTestSource('void main() {int.parse(^)}');
190 await assertOpType(returnValue: true, typeNames: true);
191 }
192
193 test_ArgumentList_resolved_2_0() async {
194 // ArgumentList MethodInvocation ExpressionStatement Block
195 addTestSource('void main() {int.parse("16", ^)}');
196 await assertOpType(namedArgs: true);
197 }
198
199 test_AsExpression() async {
200 // SimpleIdentifier TypeName AsExpression
201 addTestSource('class A {var b; X _c; foo() {var a; (a as ^).foo();}');
202 await assertOpType(typeNames: true);
203 }
204
205 test_AsIdentifier() async {
206 addTestSource('class A {var asdf; foo() {as^}');
207 await assertOpType(returnValue: true, typeNames: true, voidReturn: true);
208 }
209
210 test_AsIdentifier2() async {
211 addTestSource('class A {var asdf; foo() {A as^}');
212 await assertOpType();
213 }
214
215 test_Assert() async {
216 addTestSource('main() {assert(^)}');
217 await assertOpType(returnValue: true, typeNames: true);
218 }
219
220 test_AssignmentExpression_name() async {
221 // SimpleIdentifier VariableDeclaration VariableDeclarationList
222 // VariableDeclarationStatement Block
223 addTestSource('class A {} main() {int a; int ^b = 1;}');
224 await assertOpType(varNames: true);
225 }
226
227 test_AssignmentExpression_RHS() async {
228 // SimpleIdentifier VariableDeclaration VariableDeclarationList
229 // VariableDeclarationStatement Block
230 addTestSource('class A {} main() {int a; int b = ^}');
231 await assertOpType(returnValue: true, typeNames: true);
232 }
233
234 test_AssignmentExpression_type() async {
235 // SimpleIdentifier TypeName VariableDeclarationList
236 // VariableDeclarationStatement Block
237 addTestSource('''
238 main() {
239 int a;
240 ^ b = 1;}''');
241 // TODO (danrubel) When entering 1st of 2 identifiers on assignment LHS
242 // the user may be either (1) entering a type for the assignment
243 // or (2) starting a new statement.
244 // Consider suggesting only types
245 // if only spaces separates the 1st and 2nd identifiers.
246 await assertOpType(returnValue: true, typeNames: true, voidReturn: true);
247 }
248
249 test_AssignmentExpression_type_newline() async {
250 // SimpleIdentifier TypeName VariableDeclarationList
251 // VariableDeclarationStatement Block
252 addTestSource('''
253 main() {
254 int a;
255 ^
256 b = 1;}''');
257 // Allow non-types preceding an identifier on LHS of assignment
258 // if newline follows first identifier
259 // because user is probably starting a new statement
260 await assertOpType(returnValue: true, typeNames: true, voidReturn: true);
261 }
262
263 test_AssignmentExpression_type_partial() async {
264 // SimpleIdentifier TypeName VariableDeclarationList
265 // VariableDeclarationStatement Block
266 addTestSource('''
267 main() {
268 int a;
269 int^ b = 1;}''');
270 // TODO (danrubel) When entering 1st of 2 identifiers on assignment LHS
271 // the user may be either (1) entering a type for the assignment
272 // or (2) starting a new statement.
273 // Consider suggesting only types
274 // if only spaces separates the 1st and 2nd identifiers.
275 await assertOpType(returnValue: true, typeNames: true, voidReturn: true);
276 }
277
278 test_AssignmentExpression_type_partial_newline() async {
279 // SimpleIdentifier TypeName VariableDeclarationList
280 // VariableDeclarationStatement Block
281 addTestSource('''
282 main() {
283 int a;
284 i^
285 b = 1;}''');
286 // Allow non-types preceding an identifier on LHS of assignment
287 // if newline follows first identifier
288 // because user is probably starting a new statement
289 await assertOpType(returnValue: true, typeNames: true, voidReturn: true);
290 }
291
292 test_AwaitExpression() async {
293 // SimpleIdentifier AwaitExpression ExpressionStatement
294 addTestSource('main() async {A a; await ^}');
295 await assertOpType(returnValue: true, typeNames: true);
296 }
297
298 test_AwaitExpression2() async {
299 addTestSource('main() async {A a; await c^ await}');
300 await assertOpType(returnValue: true, typeNames: true);
301 }
302
303 test_AwaitExpression3() async {
304 addTestSource('main() async {A a; await ^ await foo;}');
305 await assertOpType(returnValue: true, typeNames: true);
306 }
307
308 test_AwaitExpression4() async {
309 addTestSource('main() async {A a; await ^ await bar();}');
310 await assertOpType(returnValue: true, typeNames: true);
311 }
312
313 test_AwaitExpression_assignment() async {
314 addTestSource('main() async {A a; int x = await ^}');
315 await assertOpType(returnValue: true, typeNames: true);
316 }
317
318 test_AwaitExpression_assignment2() async {
319 addTestSource('main() async {A a; int x = await ^ await foo;}');
320 await assertOpType(returnValue: true, typeNames: true);
321 }
322
323 test_AwaitExpression_assignment3() async {
324 addTestSource('main() async {A a; int x = await v^ int y = await foo;}');
325 await assertOpType(returnValue: true, typeNames: true);
326 }
327
328 test_BinaryExpression_LHS() async {
329 // SimpleIdentifier BinaryExpression VariableDeclaration
330 // VariableDeclarationList VariableDeclarationStatement
331 addTestSource('main() {int a = 1, b = ^ + 2;}');
332 await assertOpType(returnValue: true, typeNames: true);
333 }
334
335 test_BinaryExpression_RHS() async {
336 // SimpleIdentifier BinaryExpression VariableDeclaration
337 // VariableDeclarationList VariableDeclarationStatement
338 addTestSource('main() {int a = 1, b = 2 + ^;}');
339 await assertOpType(returnValue: true, typeNames: true);
340 }
341
342 test_BinaryExpression_RHS2() async {
343 // SimpleIdentifier BinaryExpression
344 addTestSource('main() {if (c < ^)}');
345 await assertOpType(returnValue: true, typeNames: true);
346 }
347
348 test_Block() async {
349 // Block BlockFunctionBody MethodDeclaration
350 addTestSource('''
351 class X {
352 a() {
353 var f;
354 localF(int arg1) { }
355 {var x;}
356 ^ var r;
357 }
358 }''');
359 await assertOpType(returnValue: true, typeNames: true, voidReturn: true);
360 }
361
362 test_Block_catch_1a() async {
363 // '}' Block BlockFunctionBody FunctionExpression
364 addTestSource('main() {try {} ^}');
365 // Only return 'on', 'catch', and 'finally' keywords
366 await assertOpType();
367 }
368
369 test_Block_catch_1b() async {
370 // [ExpressionStatement 'c'] Block BlockFunctionBody
371 addTestSource('main() {try {} c^}');
372 // Only return 'on', 'catch', and 'finally' keywords
373 await assertOpType();
374 }
375
376 test_Block_catch_1c() async {
377 // [EmptyStatement] Block BlockFunctionBody FunctionExpression
378 addTestSource('main() {try {} ^;}');
379 // Only return 'on', 'catch', and 'finally' keywords
380 await assertOpType();
381 }
382
383 test_Block_catch_1d() async {
384 // [VariableDeclarationStatement 'Foo foo'] Block BlockFunctionBody
385 addTestSource('main() {try {} ^ Foo foo;}');
386 // Only return 'on', 'catch', and 'finally' keywords
387 await assertOpType();
388 }
389
390 test_Block_catch_2a() async {
391 // '}' Block BlockFunctionBody FunctionExpression
392 addTestSource('main() {try {} catch () {} ^}');
393 await assertOpType(returnValue: true, typeNames: true, voidReturn: true);
394 }
395
396 test_Block_catch_2b() async {
397 // [ExpressionStatement 'c'] Block BlockFunctionBody
398 addTestSource('main() {try {} catch () {} c^}');
399 await assertOpType(returnValue: true, typeNames: true, voidReturn: true);
400 }
401
402 test_Block_catch_2c() async {
403 // [EmptyStatement] Block BlockFunctionBody FunctionExpression
404 addTestSource('main() {try {} catch () {} ^;}');
405 await assertOpType(returnValue: true, typeNames: true, voidReturn: true);
406 }
407
408 test_Block_catch_2d() async {
409 // [VariableDeclarationStatement 'Foo foo'] Block BlockFunctionBody
410 addTestSource('main() {try {} catch () {} ^ Foo foo;}');
411 await assertOpType(returnValue: true, typeNames: true, voidReturn: true);
412 }
413
414 test_Block_catch_3a() async {
415 // '}' Block BlockFunctionBody FunctionExpression
416 addTestSource('main() {try {} finally {} ^}');
417 await assertOpType(returnValue: true, typeNames: true, voidReturn: true);
418 }
419
420 test_Block_catch_3b() async {
421 // [ExpressionStatement 'c'] Block BlockFunctionBody
422 addTestSource('main() {try {} finally {} c^}');
423 await assertOpType(returnValue: true, typeNames: true, voidReturn: true);
424 }
425
426 test_Block_catch_3c() async {
427 // [EmptyStatement] Block BlockFunctionBody FunctionExpression
428 addTestSource('main() {try {} finally {} ^;}');
429 await assertOpType(returnValue: true, typeNames: true, voidReturn: true);
430 }
431
432 test_Block_catch_3d() async {
433 // [VariableDeclarationStatement 'Foo foo'] Block BlockFunctionBody
434 addTestSource('main() {try {} finally {} ^ Foo foo;}');
435 await assertOpType(returnValue: true, typeNames: true, voidReturn: true);
436 }
437
438 test_Block_empty() async {
439 // Block BlockFunctionBody MethodDeclaration ClassDeclaration
440 addTestSource('class A extends E implements I with M {a() {^}}');
441 await assertOpType(returnValue: true, typeNames: true, voidReturn: true);
442 }
443
444 test_Block_final() async {
445 addTestSource('main() {final ^}');
446 await assertOpType(typeNames: true);
447 }
448
449 test_Block_final2() async {
450 addTestSource('main() {final S^ v;}');
451 await assertOpType(typeNames: true);
452 }
453
454 test_Block_final3() async {
455 addTestSource('main() {final ^ v;}');
456 await assertOpType(typeNames: true);
457 }
458
459 test_Block_final_final() async {
460 addTestSource('main() {final ^ final S x;}');
461 await assertOpType(typeNames: true);
462 }
463
464 test_Block_final_final2() async {
465 addTestSource('main() {final S^ final S x;}');
466 await assertOpType(typeNames: true);
467 }
468
469 test_Block_identifier_partial() async {
470 addTestSource('class X {a() {var f; {var x;} D^ var r;} void b() { }}');
471 await assertOpType(returnValue: true, typeNames: true, voidReturn: true);
472 }
473
474 test_Block_keyword() async {
475 addTestSource('class C { static C get instance => null; } main() {C.in^}');
476 await assertOpType(
477 prefixed: true, returnValue: true, typeNames: true, voidReturn: true);
478 }
479
480 test_Block_static() async {
481 addTestSource('class A {static foo() {^}}');
482 await assertOpType(
483 returnValue: true,
484 typeNames: true,
485 staticMethodBody: true,
486 voidReturn: true);
487 }
488
489 test_Break_after_label() async {
490 addTestSource('main() { foo: while (true) { break foo ^ ; } }');
491 await assertOpType(/* No valid completions */);
492 }
493
494 test_Break_before_label() async {
495 addTestSource('main() { foo: while (true) { break ^ foo; } }');
496 await assertOpType(statementLabel: true);
497 }
498
499 test_Break_no_label() async {
500 addTestSource('main() { foo: while (true) { break ^; } }');
501 await assertOpType(statementLabel: true);
502 }
503
504 test_CascadeExpression_selector1() async {
505 // PropertyAccess CascadeExpression ExpressionStatement Block
506 addTestSource('''
507 // looks like a cascade to the parser
508 // but the user is trying to get completions for a non-cascade
509 main() {A a; a.^.z}''');
510 await assertOpType(
511 returnValue: true, typeNames: true, voidReturn: true, prefixed: true);
512 }
513
514 test_CascadeExpression_selector2() async {
515 // SimpleIdentifier PropertyAccess CascadeExpression ExpressionStatement
516 addTestSource('main() {A a; a..^z}');
517 await assertOpType(returnValue: true, voidReturn: true, prefixed: true);
518 }
519
520 test_CascadeExpression_selector2_withTrailingReturn() async {
521 // PropertyAccess CascadeExpression ExpressionStatement Block
522 addTestSource('main() {A a; a..^ return}');
523 await assertOpType(returnValue: true, voidReturn: true, prefixed: true);
524 }
525
526 test_CascadeExpression_target() async {
527 // SimpleIdentifier CascadeExpression ExpressionStatement
528 addTestSource('main() {A a; a^..b}');
529 await assertOpType(returnValue: true, typeNames: true, voidReturn: true);
530 }
531
532 test_catch_4a1() async {
533 addTestSource('main() {try {} ^ on SomeException {}}');
534 await assertOpType();
535 }
536
537 test_catch_4a2() async {
538 addTestSource('main() {try {} c^ on SomeException {}}');
539 await assertOpType();
540 }
541
542 test_catch_4b1() async {
543 addTestSource('main() {try {} ^ catch (e) {}}');
544 await assertOpType();
545 }
546
547 test_catch_4b2() async {
548 addTestSource('main() {try {} c^ catch (e) {}}');
549 await assertOpType();
550 }
551
552 test_catch_4c1() async {
553 addTestSource('main() {try {} ^ finally {}}');
554 await assertOpType();
555 }
556
557 test_catch_4c2() async {
558 addTestSource('main() {try {} c^ finally {}}');
559 await assertOpType();
560 }
561
562 test_catch_5a() async {
563 addTestSource('main() {try {} on ^ finally {}}');
564 await assertOpType(typeNames: true);
565 }
566
567 test_catch_5b() async {
568 addTestSource('main() {try {} on E^ finally {}}');
569 await assertOpType(typeNames: true);
570 }
571
572 test_CatchClause_onType() async {
573 // TypeName CatchClause TryStatement
574 addTestSource('class A {a() {try{var x;} on ^ {}}}');
575 await assertOpType(typeNames: true);
576 }
577
578 test_CatchClause_onType_noBrackets() async {
579 // TypeName CatchClause TryStatement
580 addTestSource('class A {a() {try{var x;} on ^}}');
581 await assertOpType(typeNames: true);
582 }
583
584 test_CatchClause_typed() async {
585 // Block CatchClause TryStatement
586 addTestSource('class A {a() {try{var x;} on E catch (e) {^}}}');
587 await assertOpType(returnValue: true, typeNames: true, voidReturn: true);
588 }
589
590 test_CatchClause_untyped() async {
591 // Block CatchClause TryStatement
592 addTestSource('class A {a() {try{var x;} catch (e, s) {^}}}');
593 await assertOpType(returnValue: true, typeNames: true, voidReturn: true);
594 }
595
596 test_ClassDeclaration_body() async {
597 // ClassDeclaration CompilationUnit
598 addTestSource('@deprecated class A {^}');
599 await assertOpType(typeNames: true);
600 }
601
602 test_ClassDeclaration_body2() async {
603 // SimpleIdentifier MethodDeclaration ClassDeclaration
604 addTestSource('@deprecated class A {^mth() {}}');
605 await assertOpType(typeNames: true);
606 }
607
608 test_Combinator_hide() async {
609 // SimpleIdentifier HideCombinator ImportDirective
610 addTestSource('''
611 import "/testAB.dart" hide ^;
612 class X {}''');
613 await assertOpType();
614 }
615
616 test_Combinator_show() async {
617 // SimpleIdentifier HideCombinator ImportDirective
618 addTestSource('''
619 import "/testAB.dart" show ^;
620 import "/testCD.dart";
621 class X {}''');
622 await assertOpType();
623 }
624
625 test_CommentReference() async {
626 // SimpleIdentifier CommentReference Comment MethodDeclaration
627 addTestSource('class A {/** [^] */ mth() {}');
628 await assertOpType(
629 returnValue: true,
630 typeNames: true,
631 voidReturn: true,
632 kind: CompletionSuggestionKind.IDENTIFIER);
633 }
634
635 test_ConditionalExpression_elseExpression() async {
636 // SimpleIdentifier ConditionalExpression ReturnStatement
637 addTestSource('class C {foo(){var f; {var x;} return a ? T1 : T^}}');
638 await assertOpType(returnValue: true, typeNames: true);
639 }
640
641 test_ConditionalExpression_elseExpression_empty() async {
642 // SimpleIdentifier ConditionalExpression ReturnStatement
643 addTestSource('class C {foo(){var f; {var x;} return a ? T1 : ^}}');
644 await assertOpType(returnValue: true, typeNames: true);
645 }
646
647 test_ConditionalExpression_partial_thenExpression() async {
648 // SimpleIdentifier ConditionalExpression ReturnStatement
649 addTestSource('class C {foo(){var f; {var x;} return a ? T^}}');
650 await assertOpType(returnValue: true, typeNames: true);
651 }
652
653 test_ConditionalExpression_partial_thenExpression_empty() async {
654 // SimpleIdentifier ConditionalExpression ReturnStatement
655 addTestSource('class C {foo(){var f; {var x;} return a ? ^}}');
656 await assertOpType(returnValue: true, typeNames: true);
657 }
658
659 test_ConditionalExpression_thenExpression() async {
660 // SimpleIdentifier ConditionalExpression ReturnStatement
661 addTestSource('class C {foo(){var f; {var x;} return a ? T^ : c}}');
662 await assertOpType(returnValue: true, typeNames: true);
663 }
664
665 test_ConstructorName() async {
666 // SimpleIdentifier PrefixedIdentifier TypeName ConstructorName
667 // InstanceCreationExpression
668 addTestSource('main() {new X.^}');
669 await assertOpType(constructors: true, prefixed: true);
670 }
671
672 test_ConstructorName_name_resolved() async {
673 // SimpleIdentifier PrefixedIdentifier TypeName ConstructorName
674 // InstanceCreationExpression
675 addTestSource('main() {new Str^ing.fromCharCodes([]);}');
676 await assertOpType(constructors: true);
677 }
678
679 test_ConstructorName_resolved() async {
680 // SimpleIdentifier PrefixedIdentifier TypeName ConstructorName
681 // InstanceCreationExpression
682 addTestSource('main() {new String.fr^omCharCodes([]);}');
683 await assertOpType(constructors: true, prefixed: true);
684 }
685
686 test_ConstructorName_unresolved() async {
687 // SimpleIdentifier PrefixedIdentifier TypeName ConstructorName
688 // InstanceCreationExpression
689 addTestSource('main() {new String.fr^omCharCodes([]);}');
690 await assertOpType(constructors: true, prefixed: true);
691 }
692
693 test_Continue_after_label() async {
694 addTestSource('main() { foo: while (true) { continue foo ^ ; } }');
695 await assertOpType(/* No valid completions */);
696 }
697
698 test_Continue_before_label() async {
699 addTestSource('main() { foo: while (true) { continue ^ foo; } }');
700 await assertOpType(statementLabel: true, caseLabel: true);
701 }
702
703 test_Continue_no_label() async {
704 addTestSource('main() { foo: while (true) { continue ^; } }');
705 await assertOpType(statementLabel: true, caseLabel: true);
706 }
707
708 test_DefaultFormalParameter_named_expression() async {
709 // DefaultFormalParameter FormalParameterList MethodDeclaration
710 addTestSource('class A {a(blat: ^) { }}');
711 await assertOpType(returnValue: true, typeNames: true);
712 }
713
714 test_DoStatement() async {
715 // SimpleIdentifier DoStatement Block
716 addTestSource('main() {do{} while(^x);}');
717 await assertOpType(returnValue: true, typeNames: true);
718 }
719
720 test_ExpressionFunctionBody() async {
721 // SimpleIdentifier ExpressionFunctionBody FunctionExpression
722 addTestSource('m(){[1].forEach((x)=>^x);}');
723 await assertOpType(returnValue: true, typeNames: true);
724 }
725
726 test_ExpressionStatement() async {
727 // ExpressionStatement Block BlockFunctionBody
728 addTestSource('n(){f(3);^}');
729 await assertOpType(returnValue: true, typeNames: true, voidReturn: true);
730 }
731
732 test_ExpressionStatement_name() async {
733 // ExpressionStatement Block BlockFunctionBody MethodDeclaration
734 addTestSource('class C {a() {C ^}}');
735 await assertOpType(varNames: true);
736 }
737
738 test_ExpressionStatement_name_semicolon() async {
739 // ExpressionStatement Block BlockFunctionBody MethodDeclaration
740 addTestSource('class C {a() {C ^;}}');
741 await assertOpType(varNames: true);
742 }
743
744 test_ExpressionStatement_prefixed_name() async {
745 // ExpressionStatement Block BlockFunctionBody MethodDeclaration
746 addTestSource('class C {a() {x.Y ^}}');
747 await assertOpType(varNames: true);
748 }
749
750 test_ExpressionStatement_prefixed_name_semicolon() async {
751 // ExpressionStatement Block BlockFunctionBody MethodDeclaration
752 addTestSource('class C {a() {x.Y ^;}}');
753 await assertOpType(varNames: true);
754 }
755
756 test_ExtendsClause() async {
757 // ExtendsClause ClassDeclaration
758 addTestSource('class x extends ^\n{}');
759 await assertOpType(typeNames: true);
760 }
761
762 test_FieldDeclaration_name_typed() async {
763 // SimpleIdentifier VariableDeclaration VariableDeclarationList
764 // FieldDeclaration
765 addTestSource('class C {A ^}');
766 await assertOpType(varNames: true);
767 }
768
769 test_FieldDeclaration_name_var() async {
770 // SimpleIdentifier VariableDeclaration VariableDeclarationList
771 // FieldDeclaration
772 addTestSource('class C {var ^}');
773 await assertOpType();
774 }
775
776 test_ForEachStatement() async {
777 // SimpleIdentifier ForEachStatement Block
778 addTestSource('main() {for(z in ^zs) {}}');
779 await assertOpType(returnValue: true, typeNames: true);
780 }
781
782 test_ForEachStatement_body_typed() async {
783 // Block ForEachStatement
784 addTestSource('main(args) {for (int foo in bar) {^}}');
785 await assertOpType(returnValue: true, typeNames: true, voidReturn: true);
786 }
787
788 test_ForEachStatement_body_untyped() async {
789 // Block ForEachStatement
790 addTestSource('main(args) {for (foo in bar) {^}}');
791 await assertOpType(returnValue: true, typeNames: true, voidReturn: true);
792 }
793
794 test_ForEachStatement_iterable() async {
795 // SimpleIdentifier ForEachStatement Block
796 addTestSource('main(args) {for (int foo in ^) {}}');
797 await assertOpType(returnValue: true, typeNames: true);
798 }
799
800 test_ForEachStatement_loopVariable() async {
801 // SimpleIdentifier ForEachStatement Block
802 addTestSource('main(args) {for (^ in args) {}}');
803 await assertOpType(typeNames: true);
804 }
805
806 test_ForEachStatement_loopVariable_name() async {
807 // DeclaredIdentifier ForEachStatement Block
808 addTestSource('main(args) {for (String ^ in args) {}}');
809 await assertOpType();
810 }
811
812 test_ForEachStatement_loopVariable_name2() async {
813 // DeclaredIdentifier ForEachStatement Block
814 addTestSource('main(args) {for (String f^ in args) {}}');
815 await assertOpType();
816 }
817
818 test_ForEachStatement_loopVariable_type() async {
819 // SimpleIdentifier ForEachStatement Block
820 addTestSource('main(args) {for (^ foo in args) {}}');
821 await assertOpType(typeNames: true);
822 }
823
824 test_ForEachStatement_loopVariable_type2() async {
825 // DeclaredIdentifier ForEachStatement Block
826 addTestSource('main(args) {for (S^ foo in args) {}}');
827 await assertOpType(typeNames: true);
828 }
829
830 test_FormalParameter_partialType() async {
831 // FormalParameterList MethodDeclaration
832 addTestSource('class A {a(b.^ f) { }}');
833 await assertOpType(returnValue: true, typeNames: true, prefixed: true);
834 }
835
836 test_FormalParameter_partialType2() async {
837 // FormalParameterList MethodDeclaration
838 addTestSource('class A {a(b.z^ f) { }}');
839 await assertOpType(returnValue: true, typeNames: true, prefixed: true);
840 }
841
842 test_FormalParameter_partialType3() async {
843 // FormalParameterList MethodDeclaration
844 addTestSource('class A {a(b.^) { }}');
845 await assertOpType(returnValue: true, typeNames: true, prefixed: true);
846 }
847
848 test_FormalParameterList() async {
849 // FormalParameterList MethodDeclaration
850 addTestSource('class A {a(^) { }}');
851 await assertOpType(typeNames: true);
852 }
853
854 test_ForStatement_condition() async {
855 // SimpleIdentifier ForStatement
856 addTestSource('main() {for (int index = 0; i^)}');
857 await assertOpType(returnValue: true, typeNames: true);
858 }
859
860 test_ForStatement_initializer() async {
861 // SimpleIdentifier ForStatement
862 addTestSource('main() {List a; for (^)}');
863 await assertOpType(typeNames: true);
864 }
865
866 test_ForStatement_initializer_inKeyword() async {
867 addTestSource('main() { for (var v i^) }');
868 await assertOpType();
869 }
870
871 test_ForStatement_initializer_type() async {
872 // SimpleIdentifier ForStatement
873 addTestSource('main() {List a; for (i^ v = 0;)}');
874 await assertOpType(typeNames: true);
875 }
876
877 test_ForStatement_initializer_variableNameEmpty_afterType() async {
878 addTestSource('main() { for (String ^) }');
879 await assertOpType(varNames: true);
880 }
881
882 test_ForStatement_updaters() async {
883 // SimpleIdentifier ForStatement
884 addTestSource('main() {for (int index = 0; index < 10; i^)}');
885 // TODO (danrubel) may want to exclude methods/functions with void return
886 await assertOpType(returnValue: true, typeNames: true, voidReturn: true);
887 }
888
889 test_ForStatement_updaters_prefix_expression() async {
890 // SimpleIdentifier PrefixExpression ForStatement
891 addTestSource('main() {for (int index = 0; index < 10; ++i^)}');
892 await assertOpType(returnValue: true, typeNames: true);
893 }
894
895 test_FunctionDeclaration1() async {
896 // SimpleIdentifier FunctionDeclaration CompilationUnit
897 addTestSource('const ^Fara();');
898 await assertOpType(typeNames: true);
899 }
900
901 test_FunctionDeclaration2() async {
902 // SimpleIdentifier FunctionDeclaration CompilationUnit
903 addTestSource('const F^ara();');
904 await assertOpType(typeNames: true);
905 }
906
907 test_FunctionDeclaration_inLineComment() async {
908 // Comment CompilationUnit
909 addTestSource('''
910 // normal comment ^
911 zoo(z) { } String name;''');
912 await assertOpType();
913 }
914
915 test_FunctionDeclaration_inLineComment2() async {
916 // Comment CompilationUnit
917 addTestSource('''
918 // normal ^comment
919 zoo(z) { } String name;''');
920 await assertOpType();
921 }
922
923 test_FunctionDeclaration_inLineComment3() async {
924 // Comment CompilationUnit
925 addTestSource('''
926 // normal comment ^
927 // normal comment 2
928 zoo(z) { } String name;''');
929 await assertOpType();
930 }
931
932 test_FunctionDeclaration_inLineComment4() async {
933 // Comment CompilationUnit
934 addTestSource('''
935 // normal comment
936 // normal comment 2^
937 zoo(z) { } String name;''');
938 await assertOpType();
939 }
940
941 test_FunctionDeclaration_inLineDocComment() async {
942 // Comment FunctionDeclaration CompilationUnit
943 addTestSource('''
944 /// some dartdoc ^
945 zoo(z) { } String name;''');
946 await assertOpType();
947 }
948
949 test_FunctionDeclaration_inLineDocComment2() async {
950 // Comment FunctionDeclaration CompilationUnit
951 addTestSource('''
952 /// some ^dartdoc
953 zoo(z) { } String name;''');
954 await assertOpType();
955 }
956
957 test_FunctionDeclaration_inStarComment() async {
958 // Comment CompilationUnit
959 addTestSource('/* ^ */ zoo(z) {} String name;');
960 await assertOpType();
961 }
962
963 test_FunctionDeclaration_inStarComment2() async {
964 // Comment CompilationUnit
965 addTestSource('/* *^/ zoo(z) {} String name;');
966 await assertOpType();
967 }
968
969 test_FunctionDeclaration_inStarDocComment() async {
970 // Comment FunctionDeclaration CompilationUnit
971 addTestSource('/** ^ */ zoo(z) { } String name; ');
972 await assertOpType();
973 }
974
975 test_FunctionDeclaration_inStarDocComment2() async {
976 // Comment FunctionDeclaration CompilationUnit
977 addTestSource('/** *^/ zoo(z) { } String name;');
978 await assertOpType();
979 }
980
981 test_FunctionDeclaration_returnType() async {
982 // CompilationUnit
983 addTestSource('^ zoo(z) { } String name;');
984 await assertOpType(typeNames: true);
985 }
986
987 test_FunctionDeclaration_returnType_afterLineComment() async {
988 // FunctionDeclaration CompilationUnit
989 addTestSource('''
990 // normal comment
991 ^ zoo(z) {} String name;''');
992 await assertOpType(typeNames: true);
993 }
994
995 test_FunctionDeclaration_returnType_afterLineComment2() async {
996 // FunctionDeclaration CompilationUnit
997 // TOD(danrubel) left align all test source
998 addTestSource('''
999 // normal comment
1000 ^ zoo(z) {} String name;''');
1001 await assertOpType(typeNames: true);
1002 }
1003
1004 test_FunctionDeclaration_returnType_afterLineDocComment() async {
1005 // SimpleIdentifier FunctionDeclaration CompilationUnit
1006 addTestSource('''
1007 /// some dartdoc
1008 ^ zoo(z) { } String name;''');
1009 await assertOpType(typeNames: true);
1010 }
1011
1012 test_FunctionDeclaration_returnType_afterLineDocComment2() async {
1013 // SimpleIdentifier FunctionDeclaration CompilationUnit
1014 addTestSource('''
1015 /// some dartdoc
1016 ^ zoo(z) { } String name;''');
1017 await assertOpType(typeNames: true);
1018 }
1019
1020 test_FunctionDeclaration_returnType_afterStarComment() async {
1021 // CompilationUnit
1022 addTestSource('/* */ ^ zoo(z) { } String name;');
1023 await assertOpType(typeNames: true);
1024 }
1025
1026 test_FunctionDeclaration_returnType_afterStarComment2() async {
1027 // CompilationUnit
1028 addTestSource('/* */^ zoo(z) { } String name;');
1029 await assertOpType(typeNames: true);
1030 }
1031
1032 test_FunctionDeclaration_returnType_afterStarDocComment() async {
1033 // FunctionDeclaration CompilationUnit
1034 addTestSource('/** */ ^ zoo(z) { } String name;');
1035 await assertOpType(typeNames: true);
1036 }
1037
1038 test_FunctionDeclaration_returnType_afterStarDocComment2() async {
1039 // FunctionDeclaration CompilationUnit
1040 addTestSource('/** */^ zoo(z) { } String name;');
1041 await assertOpType(typeNames: true);
1042 }
1043
1044 test_FunctionExpression() async {
1045 // BlockFunctionBody FunctionExpression FunctionDeclaration
1046 addTestSource('main()^ { int b = 2; b++; b. }');
1047 await assertOpType();
1048 }
1049
1050 test_FunctionExpressionInvocation() async {
1051 // ArgumentList FunctionExpressionInvocation ExpressionStatement
1052 addTestSource('main() { ((x) => x + 7)^(2) }');
1053 await assertOpType();
1054 }
1055
1056 test_FunctionTypeAlias() async {
1057 // SimpleIdentifier FunctionTypeAlias CompilationUnit
1058 addTestSource('typedef n^ ;');
1059 await assertOpType(typeNames: true);
1060 }
1061
1062 test_IfStatement() async {
1063 // EmptyStatement IfStatement Block BlockFunctionBody
1064 addTestSource('main(){var a; if (true) ^}');
1065 await assertOpType(returnValue: true, typeNames: true, voidReturn: true);
1066 }
1067
1068 test_IfStatement_condition() async {
1069 // SimpleIdentifier IfStatement Block BlockFunctionBody
1070 addTestSource('main(){var a; if (^)}');
1071 await assertOpType(returnValue: true, typeNames: true);
1072 }
1073
1074 test_IfStatement_empty() async {
1075 // SimpleIdentifier PrefixIdentifier IfStatement
1076 addTestSource('class A {foo() {A a; if (^) something}}');
1077 await assertOpType(returnValue: true, typeNames: true);
1078 }
1079
1080 test_IfStatement_invocation() async {
1081 // SimpleIdentifier PrefixIdentifier IfStatement
1082 addTestSource('main() {var a; if (a.^) something}');
1083 await assertOpType(returnValue: true, typeNames: true, prefixed: true);
1084 }
1085
1086 test_ImplementsClause() async {
1087 // ImplementsClause ClassDeclaration
1088 addTestSource('class x implements ^\n{}');
1089 await assertOpType(typeNames: true);
1090 }
1091
1092 test_ImportDirective_dart() async {
1093 // SimpleStringLiteral ImportDirective
1094 addTestSource('''
1095 import "dart^";
1096 main() {}''');
1097 await assertOpType();
1098 }
1099
1100 test_IndexExpression() async {
1101 addTestSource('class C {foo(){var f; {var x;} f[^]}}');
1102 await assertOpType(returnValue: true, typeNames: true);
1103 }
1104
1105 test_IndexExpression2() async {
1106 addTestSource('class C {foo(){var f; {var x;} f[T^]}}');
1107 await assertOpType(returnValue: true, typeNames: true);
1108 }
1109
1110 test_InstanceCreationExpression() async {
1111 // SimpleIdentifier TypeName ConstructorName InstanceCreationExpression
1112 addTestSource('class C {foo(){var f; {var x;} new ^}}');
1113 await assertOpType(constructors: true);
1114 }
1115
1116 test_InstanceCreationExpression_keyword() async {
1117 // InstanceCreationExpression ExpressionStatement Block
1118 addTestSource('class C {foo(){var f; {var x;} new^ }}');
1119 await assertOpType(returnValue: true, typeNames: true, voidReturn: true);
1120 }
1121
1122 test_InstanceCreationExpression_keyword2() async {
1123 // InstanceCreationExpression ExpressionStatement Block
1124 addTestSource('class C {foo(){var f; {var x;} new^ C();}}');
1125 await assertOpType(returnValue: true, typeNames: true, voidReturn: true);
1126 }
1127
1128 test_InstanceCreationExpression_trailingStmt() async {
1129 // SimpleIdentifier TypeName ConstructorName InstanceCreationExpression
1130 addTestSource('class C {foo(){var f; {var x;} new ^ int x = 7;}}');
1131 await assertOpType(constructors: true);
1132 }
1133
1134 test_InterpolationExpression() async {
1135 // SimpleIdentifier InterpolationExpression StringInterpolation
1136 addTestSource('main() {String name; print("hello \$^");}');
1137 await assertOpType(returnValue: true);
1138 }
1139
1140 test_InterpolationExpression_block() async {
1141 // SimpleIdentifier InterpolationExpression StringInterpolation
1142 addTestSource('main() {String name; print("hello \${n^}");}');
1143 await assertOpType(returnValue: true, typeNames: true);
1144 }
1145
1146 test_InterpolationExpression_prefix_selector() async {
1147 // SimpleIdentifier PrefixedIdentifier InterpolationExpression
1148 addTestSource('main() {String name; print("hello \${name.^}");}');
1149 await assertOpType(returnValue: true, typeNames: true, prefixed: true);
1150 }
1151
1152 test_InterpolationExpression_prefix_target() async {
1153 // SimpleIdentifier PrefixedIdentifier InterpolationExpression
1154 addTestSource('main() {String name; print("hello \${nam^e.length}");}');
1155 await assertOpType(returnValue: true, typeNames: true);
1156 }
1157
1158 test_IsExpression() async {
1159 // SimpleIdentifier TypeName IsExpression IfStatement
1160 addTestSource('main() {var x; if (x is ^) { }}');
1161 await assertOpType(typeNames: true);
1162 }
1163
1164 test_IsExpression_target() async {
1165 // IfStatement Block BlockFunctionBody
1166 addTestSource('main(){var a; if (^ is A)}');
1167 await assertOpType(returnValue: true, typeNames: true);
1168 }
1169
1170 test_IsExpression_type_partial() async {
1171 // SimpleIdentifier TypeName IsExpression IfStatement
1172 addTestSource('main(){var a; if (a is Obj^)}');
1173 await assertOpType(typeNames: true);
1174 }
1175
1176 test_Literal_list() async {
1177 // ']' ListLiteral ArgumentList MethodInvocation
1178 addTestSource('main() {var Some; print([^]);}');
1179 await assertOpType(returnValue: true, typeNames: true);
1180 }
1181
1182 test_Literal_list2() async {
1183 // SimpleIdentifier ListLiteral ArgumentList MethodInvocation
1184 addTestSource('main() {var Some; print([S^]);}');
1185 await assertOpType(returnValue: true, typeNames: true);
1186 }
1187
1188 test_Literal_string() async {
1189 // SimpleStringLiteral ExpressionStatement Block
1190 addTestSource('class A {a() {"hel^lo"}}');
1191 await assertOpType();
1192 }
1193
1194 test_MapLiteralEntry() async {
1195 // MapLiteralEntry MapLiteral VariableDeclaration
1196 addTestSource('foo = {^');
1197 await assertOpType(returnValue: true, typeNames: true);
1198 }
1199
1200 test_MapLiteralEntry1() async {
1201 // MapLiteralEntry MapLiteral VariableDeclaration
1202 addTestSource('foo = {T^');
1203 await assertOpType(returnValue: true, typeNames: true);
1204 }
1205
1206 test_MapLiteralEntry2() async {
1207 // SimpleIdentifier MapLiteralEntry MapLiteral VariableDeclaration
1208 addTestSource('foo = {7:T^};');
1209 await assertOpType(returnValue: true, typeNames: true);
1210 }
1211
1212 test_MethodDeclaration1() async {
1213 // SimpleIdentifier MethodDeclaration ClassDeclaration
1214 addTestSource('class Bar {const ^Fara();}');
1215 await assertOpType(typeNames: true);
1216 }
1217
1218 test_MethodDeclaration2() async {
1219 // SimpleIdentifier MethodDeclaration ClassDeclaration
1220 addTestSource('class Bar {const F^ara();}');
1221 await assertOpType(typeNames: true);
1222 }
1223
1224 test_MethodDeclaration_inLineComment() async {
1225 // Comment ClassDeclaration CompilationUnit
1226 addTestSource('''
1227 class C2 {
1228 // normal comment ^
1229 zoo(z) { } String name; }''');
1230 await assertOpType();
1231 }
1232
1233 test_MethodDeclaration_inLineComment2() async {
1234 // Comment ClassDeclaration CompilationUnit
1235 addTestSource('''
1236 class C2 {
1237 // normal ^comment
1238 zoo(z) { } String name; }''');
1239 await assertOpType();
1240 }
1241
1242 test_MethodDeclaration_inLineComment3() async {
1243 // Comment ClassDeclaration CompilationUnit
1244 addTestSource('''
1245 class C2 {
1246 // normal comment ^
1247 // normal comment 2
1248 zoo(z) { } String name; }''');
1249 await assertOpType();
1250 }
1251
1252 test_MethodDeclaration_inLineComment4() async {
1253 // Comment ClassDeclaration CompilationUnit
1254 addTestSource('''
1255 class C2 {
1256 // normal comment
1257 // normal comment 2^
1258 zoo(z) { } String name; }''');
1259 await assertOpType();
1260 }
1261
1262 test_MethodDeclaration_inLineDocComment() async {
1263 // Comment MethodDeclaration ClassDeclaration CompilationUnit
1264 addTestSource('''
1265 class C2 {
1266 /// some dartdoc ^
1267 zoo(z) { } String name; }''');
1268 await assertOpType();
1269 }
1270
1271 test_MethodDeclaration_inLineDocComment2() async {
1272 // Comment MethodDeclaration ClassDeclaration CompilationUnit
1273 addTestSource('''
1274 class C2 {
1275 /// some ^dartdoc
1276 zoo(z) { } String name; }''');
1277 await assertOpType();
1278 }
1279
1280 test_MethodDeclaration_inStarComment() async {
1281 // Comment ClassDeclaration CompilationUnit
1282 addTestSource('class C2 {/* ^ */ zoo(z) {} String name;}');
1283 await assertOpType();
1284 }
1285
1286 test_MethodDeclaration_inStarComment2() async {
1287 // Comment ClassDeclaration CompilationUnit
1288 addTestSource('class C2 {/* *^/ zoo(z) {} String name;}');
1289 await assertOpType();
1290 }
1291
1292 test_MethodDeclaration_inStarDocComment() async {
1293 // Comment MethodDeclaration ClassDeclaration CompilationUnit
1294 addTestSource('class C2 {/** ^ */ zoo(z) { } String name; }');
1295 await assertOpType();
1296 }
1297
1298 test_MethodDeclaration_inStarDocComment2() async {
1299 // Comment MethodDeclaration ClassDeclaration CompilationUnit
1300 addTestSource('class C2 {/** *^/ zoo(z) { } String name; }');
1301 await assertOpType();
1302 }
1303
1304 test_MethodDeclaration_returnType() async {
1305 // ClassDeclaration CompilationUnit
1306 addTestSource('class C2 {^ zoo(z) { } String name; }');
1307 await assertOpType(typeNames: true);
1308 }
1309
1310 test_MethodDeclaration_returnType_afterLineComment() async {
1311 // MethodDeclaration ClassDeclaration CompilationUnit
1312 addTestSource('''
1313 class C2 {
1314 // normal comment
1315 ^ zoo(z) {} String name;}''');
1316 await assertOpType(typeNames: true);
1317 }
1318
1319 test_MethodDeclaration_returnType_afterLineComment2() async {
1320 // MethodDeclaration ClassDeclaration CompilationUnit
1321 // TOD(danrubel) left align all test source
1322 addTestSource('''
1323 class C2 {
1324 // normal comment
1325 ^ zoo(z) {} String name;}''');
1326 await assertOpType(typeNames: true);
1327 }
1328
1329 test_MethodDeclaration_returnType_afterLineDocComment() async {
1330 // SimpleIdentifier MethodDeclaration ClassDeclaration CompilationUnit
1331 addTestSource('''
1332 class C2 {
1333 /// some dartdoc
1334 ^ zoo(z) { } String name; }''');
1335 await assertOpType(typeNames: true);
1336 }
1337
1338 test_MethodDeclaration_returnType_afterLineDocComment2() async {
1339 // SimpleIdentifier MethodDeclaration ClassDeclaration CompilationUnit
1340 addTestSource('''
1341 class C2 {
1342 /// some dartdoc
1343 ^ zoo(z) { } String name; }''');
1344 await assertOpType(typeNames: true);
1345 }
1346
1347 test_MethodDeclaration_returnType_afterStarComment() async {
1348 // ClassDeclaration CompilationUnit
1349 addTestSource('class C2 {/* */ ^ zoo(z) { } String name; }');
1350 await assertOpType(typeNames: true);
1351 }
1352
1353 test_MethodDeclaration_returnType_afterStarComment2() async {
1354 // ClassDeclaration CompilationUnit
1355 addTestSource('class C2 {/* */^ zoo(z) { } String name; }');
1356 await assertOpType(typeNames: true);
1357 }
1358
1359 test_MethodDeclaration_returnType_afterStarDocComment() async {
1360 // MethodDeclaration ClassDeclaration CompilationUnit
1361 addTestSource('class C2 {/** */ ^ zoo(z) { } String name; }');
1362 await assertOpType(typeNames: true);
1363 }
1364
1365 test_MethodDeclaration_returnType_afterStarDocComment2() async {
1366 // MethodDeclaration ClassDeclaration CompilationUnit
1367 addTestSource('class C2 {/** */^ zoo(z) { } String name; }');
1368 await assertOpType(typeNames: true);
1369 }
1370
1371 test_MethodInvocation_no_semicolon() async {
1372 // MethodInvocation ExpressionStatement Block
1373 addTestSource('''
1374 class A implements I {
1375 // no semicolon between completion point and next statement
1376 set _s2(I x) {x.^ m(null);}
1377 }''');
1378 await assertOpType(
1379 returnValue: true, typeNames: true, voidReturn: true, prefixed: true);
1380 }
1381
1382 test_PostfixExpression() async {
1383 // SimpleIdentifier PostfixExpression ForStatement
1384 addTestSource('int x = 0; main() {ax+^+;}');
1385 await assertOpType(returnValue: true, typeNames: true);
1386 }
1387
1388 test_PrefixedIdentifier_class_const() async {
1389 // SimpleIdentifier PrefixedIdentifier ExpressionStatement Block
1390 addTestSource('main() {A.^}');
1391 await assertOpType(
1392 returnValue: true, typeNames: true, voidReturn: true, prefixed: true);
1393 }
1394
1395 test_PrefixedIdentifier_class_imported() async {
1396 // SimpleIdentifier PrefixedIdentifier ExpressionStatement
1397 addTestSource('main() {A a; a.^}');
1398 await assertOpType(
1399 returnValue: true, typeNames: true, voidReturn: true, prefixed: true);
1400 }
1401
1402 test_PrefixedIdentifier_prefix() async {
1403 // SimpleIdentifier PrefixedIdentifier ExpressionStatement
1404 addTestSource('class X {foo(){A^.bar}}');
1405 await assertOpType(typeNames: true, returnValue: true, voidReturn: true);
1406 }
1407
1408 test_PropertyAccess_expression() async {
1409 // SimpleIdentifier MethodInvocation PropertyAccess ExpressionStatement
1410 addTestSource('class A {a() {"hello".to^String().length}}');
1411 await assertOpType(
1412 returnValue: true, typeNames: true, voidReturn: true, prefixed: true);
1413 }
1414
1415 test_PropertyAccess_noTarget() async {
1416 // SimpleIdentifier PropertyAccess ExpressionStatement
1417 addTestSource('main() {.^}');
1418 await assertOpType();
1419 }
1420
1421 test_PropertyAccess_noTarget2() async {
1422 // SimpleIdentifier PropertyAccess CascadeExpressions
1423 addTestSource('main() {.^.}');
1424 await assertOpType();
1425 }
1426
1427 test_PropertyAccess_noTarget3() async {
1428 // SimpleIdentifier PropertyAccess CascadeExpressions
1429 addTestSource('main() {..^}');
1430 await assertOpType();
1431 }
1432
1433 test_PropertyAccess_selector() async {
1434 // SimpleIdentifier PropertyAccess ExpressionStatement Block
1435 addTestSource('class A {a() {"hello".length.^}}');
1436 await assertOpType(
1437 returnValue: true, typeNames: true, voidReturn: true, prefixed: true);
1438 }
1439
1440 test_ReturnStatement() async {
1441 // ReturnStatement Block
1442 addTestSource('f() { var vvv = 42; return ^ }');
1443 await assertOpType(returnValue: true, typeNames: true);
1444 }
1445
1446 test_SimpleFormalParameter_closure() async {
1447 // SimpleIdentifier SimpleFormalParameter FormalParameterList
1448 addTestSource('mth() { PNGS.sort((String a, Str^) => a.compareTo(b)); }');
1449 await assertOpType(typeNames: true);
1450 }
1451
1452 test_SimpleFormalParameter_name1() async {
1453 // SimpleIdentifier SimpleFormalParameter FormalParameterList
1454 addTestSource('m(String na^) {}');
1455 await assertOpType(typeNames: false);
1456 }
1457
1458 test_SimpleFormalParameter_name2() async {
1459 // SimpleIdentifier SimpleFormalParameter FormalParameterList
1460 addTestSource('m(int first, String na^) {}');
1461 await assertOpType(typeNames: false);
1462 }
1463
1464 test_SimpleFormalParameter_type_optionalNamed() async {
1465 // SimpleIdentifier DefaultFormalParameter FormalParameterList
1466 addTestSource('m({Str^}) {}');
1467 await assertOpType(typeNames: true);
1468 }
1469
1470 test_SimpleFormalParameter_type_optionalPositional() async {
1471 // SimpleIdentifier DefaultFormalParameter FormalParameterList
1472 addTestSource('m([Str^]) {}');
1473 await assertOpType(typeNames: true);
1474 }
1475
1476 test_SimpleFormalParameter_type_withName() async {
1477 // SimpleIdentifier SimpleFormalParameter FormalParameterList
1478 addTestSource('m(Str^ name) {}');
1479 await assertOpType(typeNames: true);
1480 }
1481
1482 test_SimpleFormalParameter_type_withoutName1() async {
1483 // SimpleIdentifier SimpleFormalParameter FormalParameterList
1484 addTestSource('m(Str^) {}');
1485 await assertOpType(typeNames: true);
1486 }
1487
1488 test_SimpleFormalParameter_type_withoutName2() async {
1489 // FormalParameterList
1490 addTestSource('m(^) {}');
1491 await assertOpType(typeNames: true);
1492 }
1493
1494 test_SimpleFormalParameter_type_withoutName3() async {
1495 // SimpleIdentifier SimpleFormalParameter FormalParameterList
1496 addTestSource('m(int first, Str^) {}');
1497 await assertOpType(typeNames: true);
1498 }
1499
1500 test_SwitchCase_before() async {
1501 // SwitchCase SwitchStatement Block
1502 addTestSource('main() {switch(k) {^case 1:}}');
1503 await assertOpType();
1504 }
1505
1506 test_SwitchCase_between() async {
1507 // SwitchCase SwitchStatement Block
1508 addTestSource('main() {switch(k) {case 1: ^ case 2: return}}');
1509 await assertOpType(returnValue: true, typeNames: true, voidReturn: true);
1510 }
1511
1512 test_SwitchCase_expression1() async {
1513 // SimpleIdentifier SwitchCase SwitchStatement
1514 addTestSource('''m() {switch (x) {case ^D: return;}}''');
1515 await assertOpType(returnValue: true, typeNames: true);
1516 }
1517
1518 test_SwitchCase_expression2() async {
1519 // SimpleIdentifier SwitchCase SwitchStatement
1520 addTestSource('''m() {switch (x) {case ^}}''');
1521 await assertOpType(returnValue: true, typeNames: true);
1522 }
1523
1524 test_SwitchDefault_before() async {
1525 // SwitchDefault SwitchStatement Block
1526 addTestSource('main() {switch(k) { ^ default: return;}}');
1527 await assertOpType();
1528 }
1529
1530 test_SwitchDefault_between() async {
1531 // SwitchDefault SwitchStatement Block
1532 addTestSource('main() {switch(k) {case 1: ^ default: return;}}');
1533 await assertOpType(returnValue: true, typeNames: true, voidReturn: true);
1534 }
1535
1536 test_SwitchStatement_body_empty() async {
1537 // Token('}') SwitchStatement Block
1538 addTestSource('main() {switch(k) {^}}');
1539 await assertOpType();
1540 }
1541
1542 test_SwitchStatement_body_end() async {
1543 // Token('}') SwitchStatement Block
1544 addTestSource('main() {switch(k) {case 1:^}}');
1545 await assertOpType(returnValue: true, typeNames: true, voidReturn: true);
1546 }
1547
1548 test_SwitchStatement_body_end2() async {
1549 addTestSource('main() {switch(k) {case 1:as^}}');
1550 await assertOpType(returnValue: true, typeNames: true, voidReturn: true);
1551 }
1552
1553 test_SwitchStatement_expression1() async {
1554 // SimpleIdentifier SwitchStatement Block
1555 addTestSource('main() {switch(^k) {case 1:{}}}');
1556 await assertOpType(returnValue: true, typeNames: true);
1557 }
1558
1559 test_SwitchStatement_expression2() async {
1560 // SimpleIdentifier SwitchStatement Block
1561 addTestSource('main() {switch(k^) {case 1:{}}}');
1562 await assertOpType(returnValue: true, typeNames: true);
1563 }
1564
1565 test_SwitchStatement_expression_empty() async {
1566 // SimpleIdentifier SwitchStatement Block
1567 addTestSource('main() {switch(^) {case 1:{}}}');
1568 await assertOpType(returnValue: true, typeNames: true);
1569 }
1570
1571 test_ThisExpression_block() async {
1572 // MethodInvocation ExpressionStatement Block
1573 addTestSource('''
1574 class A implements I {
1575 // no semicolon between completion point and next statement
1576 set s1(I x) {} set _s2(I x) {this.^ m(null);}
1577 }''');
1578 await assertOpType(returnValue: true, voidReturn: true, prefixed: true);
1579 }
1580
1581 test_ThisExpression_constructor() async {
1582 // SimpleIdentifier PropertyAccess ExpressionStatement
1583 addTestSource('''
1584 class A implements I {
1585 A() {this.^}
1586 }''');
1587 await assertOpType(returnValue: true, voidReturn: true, prefixed: true);
1588 }
1589
1590 test_ThisExpression_constructor_param() async {
1591 // SimpleIdentifier FieldFormalParameter FormalParameterList
1592 addTestSource('''
1593 class A implements I {
1594 A(this.^) {}
1595 }''');
1596 await assertOpType(prefixed: true);
1597 }
1598
1599 test_ThisExpression_constructor_param2() async {
1600 // SimpleIdentifier FieldFormalParameter FormalParameterList
1601 addTestSource('''
1602 class A implements I {
1603 A(this.f^) {}
1604 }''');
1605 await assertOpType(prefixed: true);
1606 }
1607
1608 test_ThisExpression_constructor_param3() async {
1609 // SimpleIdentifier FieldFormalParameter FormalParameterList
1610 addTestSource('''
1611 class A implements I {
1612 A(this.^f) {}
1613 }''');
1614 await assertOpType(prefixed: true);
1615 }
1616
1617 test_ThisExpression_constructor_param4() async {
1618 // FieldFormalParameter FormalParameterList ConstructorDeclaration
1619 addTestSource('''
1620 class A implements I {
1621 A(Str^ this.foo) {}
1622 }''');
1623 await assertOpType(typeNames: true);
1624 }
1625
1626 test_ThrowExpression() async {
1627 // SimpleIdentifier ThrowExpression ExpressionStatement
1628 addTestSource('main() {throw ^;}');
1629 await assertOpType(returnValue: true, typeNames: true);
1630 }
1631
1632 test_TopLevelVariableDeclaration_typed_name() async {
1633 // SimpleIdentifier VariableDeclaration VariableDeclarationList
1634 // TopLevelVariableDeclaration
1635 // _OpTypeAstVisitor.visitVariableDeclarationList is executed with this
1636 // source, but _OpTypeAstVisitor.visitTopLevelVariableDeclaration is called
1637 // for test_TopLevelVariableDeclaration_typed_name_semicolon
1638 addTestSource('class A {} B ^');
1639 await assertOpType(varNames: true);
1640 }
1641
1642 test_TopLevelVariableDeclaration_typed_name_semicolon() async {
1643 // SimpleIdentifier VariableDeclaration VariableDeclarationList
1644 // TopLevelVariableDeclaration
1645 // See comment in test_TopLevelVariableDeclaration_typed_name
1646 addTestSource('class A {} B ^;');
1647 await assertOpType(varNames: true);
1648 }
1649
1650 test_TopLevelVariableDeclaration_untyped_name() async {
1651 // SimpleIdentifier VariableDeclaration VariableDeclarationList
1652 // TopLevelVariableDeclaration
1653 addTestSource('class A {} var ^');
1654 await assertOpType();
1655 }
1656
1657 test_TypeArgumentList() async {
1658 // SimpleIdentifier BinaryExpression ExpressionStatement
1659 addTestSource('main() { C<^> c; }');
1660 await assertOpType(typeNames: true);
1661 }
1662
1663 test_TypeArgumentList2() async {
1664 // TypeName TypeArgumentList TypeName
1665 addTestSource('main() { C<C^> c; }');
1666 await assertOpType(typeNames: true);
1667 }
1668
1669 test_TypeParameter() async {
1670 // SimpleIdentifier TypeParameter TypeParameterList
1671 addTestSource('class tezetst <String, ^List> {}');
1672 await assertOpType();
1673 }
1674
1675 test_TypeParameterList_empty() async {
1676 // SimpleIdentifier TypeParameter TypeParameterList
1677 addTestSource('class tezetst <^> {}');
1678 await assertOpType();
1679 }
1680
1681 test_VariableDeclaration_name() async {
1682 // SimpleIdentifier VariableDeclaration VariableDeclarationList
1683 // VariableDeclarationStatement Block
1684 addTestSource('main() {var ^}');
1685 await assertOpType();
1686 }
1687
1688 test_VariableDeclaration_name_hasSome_parameterizedType() async {
1689 // SimpleIdentifier VariableDeclaration VariableDeclarationList
1690 // VariableDeclarationStatement Block
1691 addTestSource('main() {List<int> m^}');
1692 await assertOpType(varNames: true);
1693 }
1694
1695 test_VariableDeclaration_name_hasSome_simpleType() async {
1696 // SimpleIdentifier VariableDeclaration VariableDeclarationList
1697 // VariableDeclarationStatement Block
1698 addTestSource('main() {String m^}');
1699 await assertOpType(varNames: true);
1700 }
1701
1702 test_VariableDeclarationList_final() async {
1703 // VariableDeclarationList VariableDeclarationStatement Block
1704 addTestSource('main() {final ^}');
1705 await assertOpType(typeNames: true);
1706 }
1707
1708 test_VariableDeclarationStatement_afterSemicolon() async {
1709 // VariableDeclarationStatement Block BlockFunctionBody
1710 addTestSource('class A {var a; x() {var b;^}}');
1711 await assertOpType(returnValue: true, typeNames: true, voidReturn: true);
1712 }
1713
1714 test_VariableDeclarationStatement_RHS() async {
1715 // SimpleIdentifier VariableDeclaration VariableDeclarationList
1716 // VariableDeclarationStatement
1717 addTestSource('class C {bar(){var f; {var x;} var e = ^}}');
1718 await assertOpType(returnValue: true, typeNames: true);
1719 }
1720
1721 test_VariableDeclarationStatement_RHS_missing_semicolon() async {
1722 // VariableDeclaration VariableDeclarationList
1723 // VariableDeclarationStatement
1724 addTestSource('class C {bar(){var f; {var x;} var e = ^ var g}}');
1725 await assertOpType(returnValue: true, typeNames: true);
1726 }
1727
1728 test_WhileStatement() async {
1729 // SimpleIdentifier WhileStatement Block
1730 addTestSource('mth() { while (b^) {} }}');
1731 await assertOpType(returnValue: true, typeNames: true);
1732 }
1733
1734 test_WithClause() async {
1735 // WithClause ClassDeclaration
1736 addTestSource('class x extends Object with ^\n{}');
1737 await assertOpType(typeNames: true);
1738 }
1739 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698