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

Side by Side Diff: pkg/analysis_server/test/services/correction/assist_test.dart

Issue 923103004: Return RequestErrorCode.NO_INDEX_GENERATED for search/refactoring requests. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 10 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 | Annotate | Revision Log
OLDNEW
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.services.correction.assist; 5 library test.services.correction.assist;
6 6
7 import 'package:analysis_server/src/protocol.dart'; 7 import 'package:analysis_server/src/protocol.dart';
8 import 'package:analysis_server/src/services/correction/assist.dart'; 8 import 'package:analysis_server/src/services/correction/assist.dart';
9 import 'package:analysis_server/src/services/index/index.dart';
10 import 'package:analysis_server/src/services/index/local_memory_index.dart';
11 import 'package:analysis_server/src/services/search/search_engine_internal.dart' ;
12 import 'package:analyzer/src/generated/source.dart'; 9 import 'package:analyzer/src/generated/source.dart';
13 import 'package:unittest/unittest.dart'; 10 import 'package:unittest/unittest.dart';
14 11
15 import '../../abstract_single_unit.dart'; 12 import '../../abstract_single_unit.dart';
16 import '../../reflective_tests.dart'; 13 import '../../reflective_tests.dart';
17 14
18 15
19 main() { 16 main() {
20 groupSep = ' | '; 17 groupSep = ' | ';
21 runReflectiveTests(AssistProcessorTest); 18 runReflectiveTests(AssistProcessorTest);
22 } 19 }
23 20
24 21
25 @reflectiveTest 22 @reflectiveTest
26 class AssistProcessorTest extends AbstractSingleUnitTest { 23 class AssistProcessorTest extends AbstractSingleUnitTest {
27 Index index;
28 SearchEngineImpl searchEngine;
29
30 int offset; 24 int offset;
31 int length; 25 int length;
32 26
33 Assist assist; 27 Assist assist;
34 SourceChange change; 28 SourceChange change;
35 String resultCode; 29 String resultCode;
36 LinkedEditGroup linkedPositionGroup; 30 LinkedEditGroup linkedPositionGroup;
37 31
38 /** 32 /**
39 * Asserts that there is an [Assist] of the given [kind] at [offset] which 33 * Asserts that there is an [Assist] of the given [kind] at [offset] which
(...skipping 16 matching lines...) Expand all
56 void assertHasAssistAt(String offsetSearch, AssistKind kind, 50 void assertHasAssistAt(String offsetSearch, AssistKind kind,
57 String expected) { 51 String expected) {
58 offset = findOffset(offsetSearch); 52 offset = findOffset(offsetSearch);
59 assertHasAssist(kind, expected); 53 assertHasAssist(kind, expected);
60 } 54 }
61 55
62 /** 56 /**
63 * Asserts that there is no [Assist] of the given [kind] at [offset]. 57 * Asserts that there is no [Assist] of the given [kind] at [offset].
64 */ 58 */
65 void assertNoAssist(AssistKind kind) { 59 void assertNoAssist(AssistKind kind) {
66 List<Assist> assists = 60 List<Assist> assists = computeAssists(testUnit, offset, length);
67 computeAssists(searchEngine, testUnit, offset, length);
68 for (Assist assist in assists) { 61 for (Assist assist in assists) {
69 if (assist.kind == kind) { 62 if (assist.kind == kind) {
70 throw fail('Unexpected assist $kind in\n${assists.join('\n')}'); 63 throw fail('Unexpected assist $kind in\n${assists.join('\n')}');
71 } 64 }
72 } 65 }
73 } 66 }
74 67
75 /** 68 /**
76 * Calls [assertNoAssist] at the offset of [offsetSearch] in [testCode]. 69 * Calls [assertNoAssist] at the offset of [offsetSearch] in [testCode].
77 */ 70 */
(...skipping 17 matching lines...) Expand all
95 88
96 List<LinkedEditSuggestion> expectedSuggestions(LinkedEditSuggestionKind kind, 89 List<LinkedEditSuggestion> expectedSuggestions(LinkedEditSuggestionKind kind,
97 List<String> values) { 90 List<String> values) {
98 return values.map((value) { 91 return values.map((value) {
99 return new LinkedEditSuggestion(value, kind); 92 return new LinkedEditSuggestion(value, kind);
100 }).toList(); 93 }).toList();
101 } 94 }
102 95
103 void setUp() { 96 void setUp() {
104 super.setUp(); 97 super.setUp();
105 index = createLocalMemoryIndex();
106 searchEngine = new SearchEngineImpl(index);
107 offset = 0; 98 offset = 0;
108 length = 0; 99 length = 0;
109 } 100 }
110 101
111 void test_addTypeAnnotation_classField_OK_final() { 102 void test_addTypeAnnotation_classField_OK_final() {
112 _indexTestUnit(''' 103 resolveTestUnit('''
113 class A { 104 class A {
114 final f = 0; 105 final f = 0;
115 } 106 }
116 '''); 107 ''');
117 assertHasAssistAt('final ', AssistKind.ADD_TYPE_ANNOTATION, ''' 108 assertHasAssistAt('final ', AssistKind.ADD_TYPE_ANNOTATION, '''
118 class A { 109 class A {
119 final int f = 0; 110 final int f = 0;
120 } 111 }
121 '''); 112 ''');
122 } 113 }
123 114
124 void test_addTypeAnnotation_classField_OK_int() { 115 void test_addTypeAnnotation_classField_OK_int() {
125 _indexTestUnit(''' 116 resolveTestUnit('''
126 class A { 117 class A {
127 var f = 0; 118 var f = 0;
128 } 119 }
129 '''); 120 ''');
130 assertHasAssistAt('var ', AssistKind.ADD_TYPE_ANNOTATION, ''' 121 assertHasAssistAt('var ', AssistKind.ADD_TYPE_ANNOTATION, '''
131 class A { 122 class A {
132 int f = 0; 123 int f = 0;
133 } 124 }
134 '''); 125 ''');
135 } 126 }
136 127
137 void test_addTypeAnnotation_declaredIdentifier_BAD_hasTypeAnnotation() { 128 void test_addTypeAnnotation_declaredIdentifier_BAD_hasTypeAnnotation() {
138 _indexTestUnit(''' 129 resolveTestUnit('''
139 main(List<String> items) { 130 main(List<String> items) {
140 for (String item in items) { 131 for (String item in items) {
141 } 132 }
142 } 133 }
143 '''); 134 ''');
144 assertNoAssistAt('item in', AssistKind.ADD_TYPE_ANNOTATION); 135 assertNoAssistAt('item in', AssistKind.ADD_TYPE_ANNOTATION);
145 } 136 }
146 137
147 void test_addTypeAnnotation_declaredIdentifier_BAD_inForEachBody() { 138 void test_addTypeAnnotation_declaredIdentifier_BAD_inForEachBody() {
148 _indexTestUnit(''' 139 resolveTestUnit('''
149 main(List<String> items) { 140 main(List<String> items) {
150 for (var item in items) { 141 for (var item in items) {
151 42; 142 42;
152 } 143 }
153 } 144 }
154 '''); 145 ''');
155 assertNoAssistAt('42;', AssistKind.ADD_TYPE_ANNOTATION); 146 assertNoAssistAt('42;', AssistKind.ADD_TYPE_ANNOTATION);
156 } 147 }
157 148
158 void test_addTypeAnnotation_declaredIdentifier_BAD_unknownType() { 149 void test_addTypeAnnotation_declaredIdentifier_BAD_unknownType() {
159 verifyNoTestUnitErrors = false; 150 verifyNoTestUnitErrors = false;
160 _indexTestUnit(''' 151 resolveTestUnit('''
161 main() { 152 main() {
162 for (var item in unknownList) { 153 for (var item in unknownList) {
163 } 154 }
164 } 155 }
165 '''); 156 ''');
166 assertNoAssistAt('item in', AssistKind.ADD_TYPE_ANNOTATION); 157 assertNoAssistAt('item in', AssistKind.ADD_TYPE_ANNOTATION);
167 } 158 }
168 159
169 void test_addTypeAnnotation_declaredIdentifier_generic_OK() { 160 void test_addTypeAnnotation_declaredIdentifier_generic_OK() {
170 _indexTestUnit(''' 161 resolveTestUnit('''
171 class A<T> { 162 class A<T> {
172 main(List<List<T>> items) { 163 main(List<List<T>> items) {
173 for (var item in items) { 164 for (var item in items) {
174 } 165 }
175 } 166 }
176 } 167 }
177 '''); 168 ''');
178 assertHasAssistAt('item in', AssistKind.ADD_TYPE_ANNOTATION, ''' 169 assertHasAssistAt('item in', AssistKind.ADD_TYPE_ANNOTATION, '''
179 class A<T> { 170 class A<T> {
180 main(List<List<T>> items) { 171 main(List<List<T>> items) {
181 for (List<T> item in items) { 172 for (List<T> item in items) {
182 } 173 }
183 } 174 }
184 } 175 }
185 '''); 176 ''');
186 } 177 }
187 178
188 void test_addTypeAnnotation_declaredIdentifier_OK() { 179 void test_addTypeAnnotation_declaredIdentifier_OK() {
189 _indexTestUnit(''' 180 resolveTestUnit('''
190 main(List<String> items) { 181 main(List<String> items) {
191 for (var item in items) { 182 for (var item in items) {
192 } 183 }
193 } 184 }
194 '''); 185 ''');
195 // on identifier 186 // on identifier
196 assertHasAssistAt('item in', AssistKind.ADD_TYPE_ANNOTATION, ''' 187 assertHasAssistAt('item in', AssistKind.ADD_TYPE_ANNOTATION, '''
197 main(List<String> items) { 188 main(List<String> items) {
198 for (String item in items) { 189 for (String item in items) {
199 } 190 }
200 } 191 }
201 '''); 192 ''');
202 // on "for" 193 // on "for"
203 assertHasAssistAt('for (', AssistKind.ADD_TYPE_ANNOTATION, ''' 194 assertHasAssistAt('for (', AssistKind.ADD_TYPE_ANNOTATION, '''
204 main(List<String> items) { 195 main(List<String> items) {
205 for (String item in items) { 196 for (String item in items) {
206 } 197 }
207 } 198 }
208 '''); 199 ''');
209 } 200 }
210 201
211 void test_addTypeAnnotation_declaredIdentifier_OK_addImport_dartUri() { 202 void test_addTypeAnnotation_declaredIdentifier_OK_addImport_dartUri() {
212 addSource('/my_lib.dart', r''' 203 addSource('/my_lib.dart', r'''
213 import 'dart:async'; 204 import 'dart:async';
214 List<Future<int>> getFutures() => null; 205 List<Future<int>> getFutures() => null;
215 '''); 206 ''');
216 _indexTestUnit(''' 207 resolveTestUnit('''
217 import 'my_lib.dart'; 208 import 'my_lib.dart';
218 main() { 209 main() {
219 for (var future in getFutures()) { 210 for (var future in getFutures()) {
220 } 211 }
221 } 212 }
222 '''); 213 ''');
223 assertHasAssistAt('future in', AssistKind.ADD_TYPE_ANNOTATION, ''' 214 assertHasAssistAt('future in', AssistKind.ADD_TYPE_ANNOTATION, '''
224 import 'my_lib.dart'; 215 import 'my_lib.dart';
225 import 'dart:async'; 216 import 'dart:async';
226 main() { 217 main() {
227 for (Future<int> future in getFutures()) { 218 for (Future<int> future in getFutures()) {
228 } 219 }
229 } 220 }
230 '''); 221 ''');
231 } 222 }
232 223
233 void test_addTypeAnnotation_declaredIdentifier_OK_final() { 224 void test_addTypeAnnotation_declaredIdentifier_OK_final() {
234 _indexTestUnit(''' 225 resolveTestUnit('''
235 main(List<String> items) { 226 main(List<String> items) {
236 for (final item in items) { 227 for (final item in items) {
237 } 228 }
238 } 229 }
239 '''); 230 ''');
240 assertHasAssistAt('item in', AssistKind.ADD_TYPE_ANNOTATION, ''' 231 assertHasAssistAt('item in', AssistKind.ADD_TYPE_ANNOTATION, '''
241 main(List<String> items) { 232 main(List<String> items) {
242 for (final String item in items) { 233 for (final String item in items) {
243 } 234 }
244 } 235 }
245 '''); 236 ''');
246 } 237 }
247 238
248 void test_addTypeAnnotation_local_generic_OK_literal() { 239 void test_addTypeAnnotation_local_generic_OK_literal() {
249 _indexTestUnit(''' 240 resolveTestUnit('''
250 class A { 241 class A {
251 main(List<int> items) { 242 main(List<int> items) {
252 var v = items; 243 var v = items;
253 } 244 }
254 } 245 }
255 '''); 246 ''');
256 assertHasAssistAt('v =', AssistKind.ADD_TYPE_ANNOTATION, ''' 247 assertHasAssistAt('v =', AssistKind.ADD_TYPE_ANNOTATION, '''
257 class A { 248 class A {
258 main(List<int> items) { 249 main(List<int> items) {
259 List<int> v = items; 250 List<int> v = items;
260 } 251 }
261 } 252 }
262 '''); 253 ''');
263 } 254 }
264 255
265 void test_addTypeAnnotation_local_generic_OK_local() { 256 void test_addTypeAnnotation_local_generic_OK_local() {
266 _indexTestUnit(''' 257 resolveTestUnit('''
267 class A<T> { 258 class A<T> {
268 main(List<T> items) { 259 main(List<T> items) {
269 var v = items; 260 var v = items;
270 } 261 }
271 } 262 }
272 '''); 263 ''');
273 assertHasAssistAt('v =', AssistKind.ADD_TYPE_ANNOTATION, ''' 264 assertHasAssistAt('v =', AssistKind.ADD_TYPE_ANNOTATION, '''
274 class A<T> { 265 class A<T> {
275 main(List<T> items) { 266 main(List<T> items) {
276 List<T> v = items; 267 List<T> v = items;
277 } 268 }
278 } 269 }
279 '''); 270 ''');
280 } 271 }
281 272
282 void test_addTypeAnnotation_local_OK_addImport_dartUri() { 273 void test_addTypeAnnotation_local_OK_addImport_dartUri() {
283 addSource('/my_lib.dart', r''' 274 addSource('/my_lib.dart', r'''
284 import 'dart:async'; 275 import 'dart:async';
285 Future<int> getFutureInt() => null; 276 Future<int> getFutureInt() => null;
286 '''); 277 ''');
287 _indexTestUnit(''' 278 resolveTestUnit('''
288 import 'my_lib.dart'; 279 import 'my_lib.dart';
289 main() { 280 main() {
290 var v = getFutureInt(); 281 var v = getFutureInt();
291 } 282 }
292 '''); 283 ''');
293 assertHasAssistAt('v =', AssistKind.ADD_TYPE_ANNOTATION, ''' 284 assertHasAssistAt('v =', AssistKind.ADD_TYPE_ANNOTATION, '''
294 import 'my_lib.dart'; 285 import 'my_lib.dart';
295 import 'dart:async'; 286 import 'dart:async';
296 main() { 287 main() {
297 Future<int> v = getFutureInt(); 288 Future<int> v = getFutureInt();
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
354 } 345 }
355 346
356 void test_addTypeAnnotation_local_OK_addImport_relUri() { 347 void test_addTypeAnnotation_local_OK_addImport_relUri() {
357 addSource('/aa/bbb/lib_a.dart', r''' 348 addSource('/aa/bbb/lib_a.dart', r'''
358 class MyClass {} 349 class MyClass {}
359 '''); 350 ''');
360 addSource('/ccc/lib_b.dart', r''' 351 addSource('/ccc/lib_b.dart', r'''
361 import '../aa/bbb/lib_a.dart'; 352 import '../aa/bbb/lib_a.dart';
362 MyClass newMyClass() => null; 353 MyClass newMyClass() => null;
363 '''); 354 ''');
364 _indexTestUnit(''' 355 resolveTestUnit('''
365 import 'ccc/lib_b.dart'; 356 import 'ccc/lib_b.dart';
366 main() { 357 main() {
367 var v = newMyClass(); 358 var v = newMyClass();
368 } 359 }
369 '''); 360 ''');
370 assertHasAssistAt('v =', AssistKind.ADD_TYPE_ANNOTATION, ''' 361 assertHasAssistAt('v =', AssistKind.ADD_TYPE_ANNOTATION, '''
371 import 'ccc/lib_b.dart'; 362 import 'ccc/lib_b.dart';
372 import 'aa/bbb/lib_a.dart'; 363 import 'aa/bbb/lib_a.dart';
373 main() { 364 main() {
374 MyClass v = newMyClass(); 365 MyClass v = newMyClass();
375 } 366 }
376 '''); 367 ''');
377 } 368 }
378 369
379 void test_addTypeAnnotation_local_OK_Function() { 370 void test_addTypeAnnotation_local_OK_Function() {
380 _indexTestUnit(''' 371 resolveTestUnit('''
381 main() { 372 main() {
382 var v = () => 1; 373 var v = () => 1;
383 } 374 }
384 '''); 375 ''');
385 assertHasAssistAt('v =', AssistKind.ADD_TYPE_ANNOTATION, ''' 376 assertHasAssistAt('v =', AssistKind.ADD_TYPE_ANNOTATION, '''
386 main() { 377 main() {
387 Function v = () => 1; 378 Function v = () => 1;
388 } 379 }
389 '''); 380 ''');
390 } 381 }
391 382
392 void test_addTypeAnnotation_local_OK_int() { 383 void test_addTypeAnnotation_local_OK_int() {
393 _indexTestUnit(''' 384 resolveTestUnit('''
394 main() { 385 main() {
395 var v = 0; 386 var v = 0;
396 } 387 }
397 '''); 388 ''');
398 assertHasAssistAt('v =', AssistKind.ADD_TYPE_ANNOTATION, ''' 389 assertHasAssistAt('v =', AssistKind.ADD_TYPE_ANNOTATION, '''
399 main() { 390 main() {
400 int v = 0; 391 int v = 0;
401 } 392 }
402 '''); 393 ''');
403 } 394 }
404 395
405 void test_addTypeAnnotation_local_OK_List() { 396 void test_addTypeAnnotation_local_OK_List() {
406 _indexTestUnit(''' 397 resolveTestUnit('''
407 main() { 398 main() {
408 var v = <String>[]; 399 var v = <String>[];
409 } 400 }
410 '''); 401 ''');
411 assertHasAssistAt('v =', AssistKind.ADD_TYPE_ANNOTATION, ''' 402 assertHasAssistAt('v =', AssistKind.ADD_TYPE_ANNOTATION, '''
412 main() { 403 main() {
413 List<String> v = <String>[]; 404 List<String> v = <String>[];
414 } 405 }
415 '''); 406 ''');
416 } 407 }
417 408
418 void test_addTypeAnnotation_local_OK_localType() { 409 void test_addTypeAnnotation_local_OK_localType() {
419 _indexTestUnit(''' 410 resolveTestUnit('''
420 class C {} 411 class C {}
421 C f() => null; 412 C f() => null;
422 main() { 413 main() {
423 var x = f(); 414 var x = f();
424 } 415 }
425 '''); 416 ''');
426 assertHasAssistAt('x =', AssistKind.ADD_TYPE_ANNOTATION, ''' 417 assertHasAssistAt('x =', AssistKind.ADD_TYPE_ANNOTATION, '''
427 class C {} 418 class C {}
428 C f() => null; 419 C f() => null;
429 main() { 420 main() {
430 C x = f(); 421 C x = f();
431 } 422 }
432 '''); 423 ''');
433 } 424 }
434 425
435 void test_addTypeAnnotation_local_OK_onInitializer() { 426 void test_addTypeAnnotation_local_OK_onInitializer() {
436 _indexTestUnit(''' 427 resolveTestUnit('''
437 main() { 428 main() {
438 var v = 123; 429 var v = 123;
439 } 430 }
440 '''); 431 ''');
441 assertHasAssistAt('23', AssistKind.ADD_TYPE_ANNOTATION, ''' 432 assertHasAssistAt('23', AssistKind.ADD_TYPE_ANNOTATION, '''
442 main() { 433 main() {
443 int v = 123; 434 int v = 123;
444 } 435 }
445 '''); 436 ''');
446 } 437 }
447 438
448 void test_addTypeAnnotation_local_OK_onName() { 439 void test_addTypeAnnotation_local_OK_onName() {
449 _indexTestUnit(''' 440 resolveTestUnit('''
450 main() { 441 main() {
451 var abc = 0; 442 var abc = 0;
452 } 443 }
453 '''); 444 ''');
454 assertHasAssistAt('bc', AssistKind.ADD_TYPE_ANNOTATION, ''' 445 assertHasAssistAt('bc', AssistKind.ADD_TYPE_ANNOTATION, '''
455 main() { 446 main() {
456 int abc = 0; 447 int abc = 0;
457 } 448 }
458 '''); 449 ''');
459 } 450 }
460 451
461 void test_addTypeAnnotation_local_OK_onVar() { 452 void test_addTypeAnnotation_local_OK_onVar() {
462 _indexTestUnit(''' 453 resolveTestUnit('''
463 main() { 454 main() {
464 var v = 0; 455 var v = 0;
465 } 456 }
466 '''); 457 ''');
467 assertHasAssistAt('var ', AssistKind.ADD_TYPE_ANNOTATION, ''' 458 assertHasAssistAt('var ', AssistKind.ADD_TYPE_ANNOTATION, '''
468 main() { 459 main() {
469 int v = 0; 460 int v = 0;
470 } 461 }
471 '''); 462 ''');
472 } 463 }
473 464
474 void test_addTypeAnnotation_local_OK_onVariableDeclarationStatement() { 465 void test_addTypeAnnotation_local_OK_onVariableDeclarationStatement() {
475 _indexTestUnit(''' 466 resolveTestUnit('''
476 main() { 467 main() {
477 var v = 123; // marker 468 var v = 123; // marker
478 } 469 }
479 '''); 470 ''');
480 assertHasAssistAt(' // marker', AssistKind.ADD_TYPE_ANNOTATION, ''' 471 assertHasAssistAt(' // marker', AssistKind.ADD_TYPE_ANNOTATION, '''
481 main() { 472 main() {
482 int v = 123; // marker 473 int v = 123; // marker
483 } 474 }
484 '''); 475 ''');
485 } 476 }
486 477
487 void test_addTypeAnnotation_local_wrong_hasTypeAnnotation() { 478 void test_addTypeAnnotation_local_wrong_hasTypeAnnotation() {
488 _indexTestUnit(''' 479 resolveTestUnit('''
489 main() { 480 main() {
490 int v = 42; 481 int v = 42;
491 } 482 }
492 '''); 483 ''');
493 assertNoAssistAt(' = 42', AssistKind.ADD_TYPE_ANNOTATION); 484 assertNoAssistAt(' = 42', AssistKind.ADD_TYPE_ANNOTATION);
494 } 485 }
495 486
496 void test_addTypeAnnotation_local_wrong_multiple() { 487 void test_addTypeAnnotation_local_wrong_multiple() {
497 _indexTestUnit(''' 488 resolveTestUnit('''
498 main() { 489 main() {
499 var a = 1, b = ''; 490 var a = 1, b = '';
500 } 491 }
501 '''); 492 ''');
502 assertNoAssistAt('var ', AssistKind.ADD_TYPE_ANNOTATION); 493 assertNoAssistAt('var ', AssistKind.ADD_TYPE_ANNOTATION);
503 } 494 }
504 495
505 void test_addTypeAnnotation_local_wrong_noValue() { 496 void test_addTypeAnnotation_local_wrong_noValue() {
506 verifyNoTestUnitErrors = false; 497 verifyNoTestUnitErrors = false;
507 _indexTestUnit(''' 498 resolveTestUnit('''
508 main() { 499 main() {
509 var v; 500 var v;
510 } 501 }
511 '''); 502 ''');
512 assertNoAssistAt('var ', AssistKind.ADD_TYPE_ANNOTATION); 503 assertNoAssistAt('var ', AssistKind.ADD_TYPE_ANNOTATION);
513 } 504 }
514 505
515 void test_addTypeAnnotation_local_wrong_null() { 506 void test_addTypeAnnotation_local_wrong_null() {
516 _indexTestUnit(''' 507 resolveTestUnit('''
517 main() { 508 main() {
518 var v = null; 509 var v = null;
519 } 510 }
520 '''); 511 ''');
521 assertNoAssistAt('var ', AssistKind.ADD_TYPE_ANNOTATION); 512 assertNoAssistAt('var ', AssistKind.ADD_TYPE_ANNOTATION);
522 } 513 }
523 514
524 void test_addTypeAnnotation_local_wrong_unknown() { 515 void test_addTypeAnnotation_local_wrong_unknown() {
525 verifyNoTestUnitErrors = false; 516 verifyNoTestUnitErrors = false;
526 _indexTestUnit(''' 517 resolveTestUnit('''
527 main() { 518 main() {
528 var v = unknownVar; 519 var v = unknownVar;
529 } 520 }
530 '''); 521 ''');
531 assertNoAssistAt('var ', AssistKind.ADD_TYPE_ANNOTATION); 522 assertNoAssistAt('var ', AssistKind.ADD_TYPE_ANNOTATION);
532 } 523 }
533 524
534 void test_addTypeAnnotation_parameter_BAD_hasExplicitType() { 525 void test_addTypeAnnotation_parameter_BAD_hasExplicitType() {
535 _indexTestUnit(''' 526 resolveTestUnit('''
536 foo(f(int p)) {} 527 foo(f(int p)) {}
537 main() { 528 main() {
538 foo((num test) {}); 529 foo((num test) {});
539 } 530 }
540 '''); 531 ''');
541 assertNoAssistAt('test', AssistKind.ADD_TYPE_ANNOTATION); 532 assertNoAssistAt('test', AssistKind.ADD_TYPE_ANNOTATION);
542 } 533 }
543 534
544 void test_addTypeAnnotation_parameter_BAD_noPropagatedType() { 535 void test_addTypeAnnotation_parameter_BAD_noPropagatedType() {
545 _indexTestUnit(''' 536 resolveTestUnit('''
546 foo(f(p)) {} 537 foo(f(p)) {}
547 main() { 538 main() {
548 foo((test) {}); 539 foo((test) {});
549 } 540 }
550 '''); 541 ''');
551 assertNoAssistAt('test', AssistKind.ADD_TYPE_ANNOTATION); 542 assertNoAssistAt('test', AssistKind.ADD_TYPE_ANNOTATION);
552 } 543 }
553 544
554 void test_addTypeAnnotation_parameter_OK() { 545 void test_addTypeAnnotation_parameter_OK() {
555 _indexTestUnit(''' 546 resolveTestUnit('''
556 foo(f(int p)) {} 547 foo(f(int p)) {}
557 main() { 548 main() {
558 foo((test) {}); 549 foo((test) {});
559 } 550 }
560 '''); 551 ''');
561 assertHasAssistAt('test', AssistKind.ADD_TYPE_ANNOTATION, ''' 552 assertHasAssistAt('test', AssistKind.ADD_TYPE_ANNOTATION, '''
562 foo(f(int p)) {} 553 foo(f(int p)) {}
563 main() { 554 main() {
564 foo((int test) {}); 555 foo((int test) {});
565 } 556 }
566 '''); 557 ''');
567 } 558 }
568 559
569 void test_addTypeAnnotation_topLevelField_OK_int() { 560 void test_addTypeAnnotation_topLevelField_OK_int() {
570 _indexTestUnit(''' 561 resolveTestUnit('''
571 var V = 0; 562 var V = 0;
572 '''); 563 ''');
573 assertHasAssistAt('var ', AssistKind.ADD_TYPE_ANNOTATION, ''' 564 assertHasAssistAt('var ', AssistKind.ADD_TYPE_ANNOTATION, '''
574 int V = 0; 565 int V = 0;
575 '''); 566 ''');
576 } 567 }
577 568
578 void test_addTypeAnnotation_topLevelField_wrong_multiple() { 569 void test_addTypeAnnotation_topLevelField_wrong_multiple() {
579 _indexTestUnit(''' 570 resolveTestUnit('''
580 var A = 1, V = ''; 571 var A = 1, V = '';
581 '''); 572 ''');
582 assertNoAssistAt('var ', AssistKind.ADD_TYPE_ANNOTATION); 573 assertNoAssistAt('var ', AssistKind.ADD_TYPE_ANNOTATION);
583 } 574 }
584 575
585 void test_addTypeAnnotation_topLevelField_wrong_noValue() { 576 void test_addTypeAnnotation_topLevelField_wrong_noValue() {
586 _indexTestUnit(''' 577 resolveTestUnit('''
587 var V; 578 var V;
588 '''); 579 ''');
589 assertNoAssistAt('var ', AssistKind.ADD_TYPE_ANNOTATION); 580 assertNoAssistAt('var ', AssistKind.ADD_TYPE_ANNOTATION);
590 } 581 }
591 582
592 void test_assignToLocalVariable() { 583 void test_assignToLocalVariable() {
593 _indexTestUnit(''' 584 resolveTestUnit('''
594 main() { 585 main() {
595 List<int> bytes; 586 List<int> bytes;
596 readBytes(); 587 readBytes();
597 } 588 }
598 List<int> readBytes() => <int>[]; 589 List<int> readBytes() => <int>[];
599 '''); 590 ''');
600 assertHasAssistAt('readBytes();', AssistKind.ASSIGN_TO_LOCAL_VARIABLE, ''' 591 assertHasAssistAt('readBytes();', AssistKind.ASSIGN_TO_LOCAL_VARIABLE, '''
601 main() { 592 main() {
602 List<int> bytes; 593 List<int> bytes;
603 var readBytes = readBytes(); 594 var readBytes = readBytes();
604 } 595 }
605 List<int> readBytes() => <int>[]; 596 List<int> readBytes() => <int>[];
606 '''); 597 ''');
607 _assertLinkedGroup( 598 _assertLinkedGroup(
608 change.linkedEditGroups[0], 599 change.linkedEditGroups[0],
609 ['readBytes = '], 600 ['readBytes = '],
610 expectedSuggestions( 601 expectedSuggestions(
611 LinkedEditSuggestionKind.VARIABLE, 602 LinkedEditSuggestionKind.VARIABLE,
612 ['list', 'bytes2', 'readBytes'])); 603 ['list', 'bytes2', 'readBytes']));
613 } 604 }
614 605
615 void test_assignToLocalVariable_alreadyAssignment() { 606 void test_assignToLocalVariable_alreadyAssignment() {
616 _indexTestUnit(''' 607 resolveTestUnit('''
617 main() { 608 main() {
618 var vvv; 609 var vvv;
619 vvv = 42; 610 vvv = 42;
620 } 611 }
621 '''); 612 ''');
622 assertNoAssistAt('vvv =', AssistKind.ASSIGN_TO_LOCAL_VARIABLE); 613 assertNoAssistAt('vvv =', AssistKind.ASSIGN_TO_LOCAL_VARIABLE);
623 } 614 }
624 615
625 void test_assignToLocalVariable_throw() { 616 void test_assignToLocalVariable_throw() {
626 _indexTestUnit(''' 617 resolveTestUnit('''
627 main() { 618 main() {
628 throw 42; 619 throw 42;
629 } 620 }
630 '''); 621 ''');
631 assertNoAssistAt('throw ', AssistKind.ASSIGN_TO_LOCAL_VARIABLE); 622 assertNoAssistAt('throw ', AssistKind.ASSIGN_TO_LOCAL_VARIABLE);
632 } 623 }
633 624
634 void test_assignToLocalVariable_void() { 625 void test_assignToLocalVariable_void() {
635 _indexTestUnit(''' 626 resolveTestUnit('''
636 main() { 627 main() {
637 f(); 628 f();
638 } 629 }
639 void f() {} 630 void f() {}
640 '''); 631 ''');
641 assertNoAssistAt('f();', AssistKind.ASSIGN_TO_LOCAL_VARIABLE); 632 assertNoAssistAt('f();', AssistKind.ASSIGN_TO_LOCAL_VARIABLE);
642 } 633 }
643 634
644 void test_convertToBlockBody_OK_closure() { 635 void test_convertToBlockBody_OK_closure() {
645 _indexTestUnit(''' 636 resolveTestUnit('''
646 setup(x) {} 637 setup(x) {}
647 main() { 638 main() {
648 setup(() => print('done')); 639 setup(() => print('done'));
649 } 640 }
650 '''); 641 ''');
651 assertHasAssistAt('() => print', AssistKind.CONVERT_INTO_BLOCK_BODY, ''' 642 assertHasAssistAt('() => print', AssistKind.CONVERT_INTO_BLOCK_BODY, '''
652 setup(x) {} 643 setup(x) {}
653 main() { 644 main() {
654 setup(() { 645 setup(() {
655 return print('done'); 646 return print('done');
656 }); 647 });
657 } 648 }
658 '''); 649 ''');
659 } 650 }
660 651
661 void test_convertToBlockBody_OK_constructor() { 652 void test_convertToBlockBody_OK_constructor() {
662 _indexTestUnit(''' 653 resolveTestUnit('''
663 class A { 654 class A {
664 factory A() => null; 655 factory A() => null;
665 } 656 }
666 '''); 657 ''');
667 assertHasAssistAt('A()', AssistKind.CONVERT_INTO_BLOCK_BODY, ''' 658 assertHasAssistAt('A()', AssistKind.CONVERT_INTO_BLOCK_BODY, '''
668 class A { 659 class A {
669 factory A() { 660 factory A() {
670 return null; 661 return null;
671 } 662 }
672 } 663 }
673 '''); 664 ''');
674 } 665 }
675 666
676 void test_convertToBlockBody_OK_method() { 667 void test_convertToBlockBody_OK_method() {
677 _indexTestUnit(''' 668 resolveTestUnit('''
678 class A { 669 class A {
679 mmm() => 123; 670 mmm() => 123;
680 } 671 }
681 '''); 672 ''');
682 assertHasAssistAt('mmm()', AssistKind.CONVERT_INTO_BLOCK_BODY, ''' 673 assertHasAssistAt('mmm()', AssistKind.CONVERT_INTO_BLOCK_BODY, '''
683 class A { 674 class A {
684 mmm() { 675 mmm() {
685 return 123; 676 return 123;
686 } 677 }
687 } 678 }
688 '''); 679 ''');
689 } 680 }
690 681
691 void test_convertToBlockBody_OK_onName() { 682 void test_convertToBlockBody_OK_onName() {
692 _indexTestUnit(''' 683 resolveTestUnit('''
693 fff() => 123; 684 fff() => 123;
694 '''); 685 ''');
695 assertHasAssistAt('fff()', AssistKind.CONVERT_INTO_BLOCK_BODY, ''' 686 assertHasAssistAt('fff()', AssistKind.CONVERT_INTO_BLOCK_BODY, '''
696 fff() { 687 fff() {
697 return 123; 688 return 123;
698 } 689 }
699 '''); 690 ''');
700 } 691 }
701 692
702 void test_convertToBlockBody_OK_onValue() { 693 void test_convertToBlockBody_OK_onValue() {
703 _indexTestUnit(''' 694 resolveTestUnit('''
704 fff() => 123; 695 fff() => 123;
705 '''); 696 ''');
706 assertHasAssistAt('23;', AssistKind.CONVERT_INTO_BLOCK_BODY, ''' 697 assertHasAssistAt('23;', AssistKind.CONVERT_INTO_BLOCK_BODY, '''
707 fff() { 698 fff() {
708 return 123; 699 return 123;
709 } 700 }
710 '''); 701 ''');
711 } 702 }
712 703
713 void test_convertToBlockBody_wrong_noEnclosingFunction() { 704 void test_convertToBlockBody_wrong_noEnclosingFunction() {
714 _indexTestUnit(''' 705 resolveTestUnit('''
715 var v = 123; 706 var v = 123;
716 '''); 707 ''');
717 assertNoAssistAt('v =', AssistKind.CONVERT_INTO_BLOCK_BODY); 708 assertNoAssistAt('v =', AssistKind.CONVERT_INTO_BLOCK_BODY);
718 } 709 }
719 710
720 void test_convertToBlockBody_wrong_notExpressionBlock() { 711 void test_convertToBlockBody_wrong_notExpressionBlock() {
721 _indexTestUnit(''' 712 resolveTestUnit('''
722 fff() { 713 fff() {
723 return 123; 714 return 123;
724 } 715 }
725 '''); 716 ''');
726 assertNoAssistAt('fff() {', AssistKind.CONVERT_INTO_BLOCK_BODY); 717 assertNoAssistAt('fff() {', AssistKind.CONVERT_INTO_BLOCK_BODY);
727 } 718 }
728 719
729 void test_convertToExpressionBody_OK_closure() { 720 void test_convertToExpressionBody_OK_closure() {
730 _indexTestUnit(''' 721 resolveTestUnit('''
731 setup(x) {} 722 setup(x) {}
732 main() { 723 main() {
733 setup(() { 724 setup(() {
734 return 42; 725 return 42;
735 }); 726 });
736 } 727 }
737 '''); 728 ''');
738 assertHasAssistAt('42;', AssistKind.CONVERT_INTO_EXPRESSION_BODY, ''' 729 assertHasAssistAt('42;', AssistKind.CONVERT_INTO_EXPRESSION_BODY, '''
739 setup(x) {} 730 setup(x) {}
740 main() { 731 main() {
741 setup(() => 42); 732 setup(() => 42);
742 } 733 }
743 '''); 734 ''');
744 } 735 }
745 736
746 void test_convertToExpressionBody_OK_constructor() { 737 void test_convertToExpressionBody_OK_constructor() {
747 _indexTestUnit(''' 738 resolveTestUnit('''
748 class A { 739 class A {
749 factory A() { 740 factory A() {
750 return null; 741 return null;
751 } 742 }
752 } 743 }
753 '''); 744 ''');
754 assertHasAssistAt('A()', AssistKind.CONVERT_INTO_EXPRESSION_BODY, ''' 745 assertHasAssistAt('A()', AssistKind.CONVERT_INTO_EXPRESSION_BODY, '''
755 class A { 746 class A {
756 factory A() => null; 747 factory A() => null;
757 } 748 }
758 '''); 749 ''');
759 } 750 }
760 751
761 void test_convertToExpressionBody_OK_function_onBlock() { 752 void test_convertToExpressionBody_OK_function_onBlock() {
762 _indexTestUnit(''' 753 resolveTestUnit('''
763 fff() { 754 fff() {
764 return 42; 755 return 42;
765 } 756 }
766 '''); 757 ''');
767 assertHasAssistAt('{', AssistKind.CONVERT_INTO_EXPRESSION_BODY, ''' 758 assertHasAssistAt('{', AssistKind.CONVERT_INTO_EXPRESSION_BODY, '''
768 fff() => 42; 759 fff() => 42;
769 '''); 760 ''');
770 } 761 }
771 762
772 void test_convertToExpressionBody_OK_function_onName() { 763 void test_convertToExpressionBody_OK_function_onName() {
773 _indexTestUnit(''' 764 resolveTestUnit('''
774 fff() { 765 fff() {
775 return 42; 766 return 42;
776 } 767 }
777 '''); 768 ''');
778 assertHasAssistAt('ff()', AssistKind.CONVERT_INTO_EXPRESSION_BODY, ''' 769 assertHasAssistAt('ff()', AssistKind.CONVERT_INTO_EXPRESSION_BODY, '''
779 fff() => 42; 770 fff() => 42;
780 '''); 771 ''');
781 } 772 }
782 773
783 void test_convertToExpressionBody_OK_method_onBlock() { 774 void test_convertToExpressionBody_OK_method_onBlock() {
784 _indexTestUnit(''' 775 resolveTestUnit('''
785 class A { 776 class A {
786 m() { // marker 777 m() { // marker
787 return 42; 778 return 42;
788 } 779 }
789 } 780 }
790 '''); 781 ''');
791 assertHasAssistAt( 782 assertHasAssistAt(
792 '{ // marker', 783 '{ // marker',
793 AssistKind.CONVERT_INTO_EXPRESSION_BODY, 784 AssistKind.CONVERT_INTO_EXPRESSION_BODY,
794 ''' 785 '''
795 class A { 786 class A {
796 m() => 42; 787 m() => 42;
797 } 788 }
798 '''); 789 ''');
799 } 790 }
800 791
801 void test_convertToExpressionBody_OK_topFunction_onReturnStatement() { 792 void test_convertToExpressionBody_OK_topFunction_onReturnStatement() {
802 _indexTestUnit(''' 793 resolveTestUnit('''
803 fff() { 794 fff() {
804 return 42; 795 return 42;
805 } 796 }
806 '''); 797 ''');
807 assertHasAssistAt('return', AssistKind.CONVERT_INTO_EXPRESSION_BODY, ''' 798 assertHasAssistAt('return', AssistKind.CONVERT_INTO_EXPRESSION_BODY, '''
808 fff() => 42; 799 fff() => 42;
809 '''); 800 ''');
810 } 801 }
811 802
812 void test_convertToExpressionBody_wrong_already() { 803 void test_convertToExpressionBody_wrong_already() {
813 _indexTestUnit(''' 804 resolveTestUnit('''
814 fff() => 42; 805 fff() => 42;
815 '''); 806 ''');
816 assertNoAssistAt('fff()', AssistKind.CONVERT_INTO_EXPRESSION_BODY); 807 assertNoAssistAt('fff()', AssistKind.CONVERT_INTO_EXPRESSION_BODY);
817 } 808 }
818 809
819 void test_convertToExpressionBody_wrong_moreThanOneStatement() { 810 void test_convertToExpressionBody_wrong_moreThanOneStatement() {
820 _indexTestUnit(''' 811 resolveTestUnit('''
821 fff() { 812 fff() {
822 var v = 42; 813 var v = 42;
823 return v; 814 return v;
824 } 815 }
825 '''); 816 ''');
826 assertNoAssistAt('fff()', AssistKind.CONVERT_INTO_EXPRESSION_BODY); 817 assertNoAssistAt('fff()', AssistKind.CONVERT_INTO_EXPRESSION_BODY);
827 } 818 }
828 819
829 void test_convertToExpressionBody_wrong_noEnclosingFunction() { 820 void test_convertToExpressionBody_wrong_noEnclosingFunction() {
830 _indexTestUnit(''' 821 resolveTestUnit('''
831 var V = 42; 822 var V = 42;
832 '''); 823 ''');
833 assertNoAssistAt('V = ', AssistKind.CONVERT_INTO_EXPRESSION_BODY); 824 assertNoAssistAt('V = ', AssistKind.CONVERT_INTO_EXPRESSION_BODY);
834 } 825 }
835 826
836 void test_convertToExpressionBody_wrong_noReturn() { 827 void test_convertToExpressionBody_wrong_noReturn() {
837 _indexTestUnit(''' 828 resolveTestUnit('''
838 fff() { 829 fff() {
839 var v = 42; 830 var v = 42;
840 } 831 }
841 '''); 832 ''');
842 assertNoAssistAt('fff()', AssistKind.CONVERT_INTO_EXPRESSION_BODY); 833 assertNoAssistAt('fff()', AssistKind.CONVERT_INTO_EXPRESSION_BODY);
843 } 834 }
844 835
845 void test_convertToExpressionBody_wrong_noReturnValue() { 836 void test_convertToExpressionBody_wrong_noReturnValue() {
846 _indexTestUnit(''' 837 resolveTestUnit('''
847 fff() { 838 fff() {
848 return; 839 return;
849 } 840 }
850 '''); 841 ''');
851 assertNoAssistAt('fff()', AssistKind.CONVERT_INTO_EXPRESSION_BODY); 842 assertNoAssistAt('fff()', AssistKind.CONVERT_INTO_EXPRESSION_BODY);
852 } 843 }
853 844
854 void test_convertToIsNot_OK_childOfIs_left() { 845 void test_convertToIsNot_OK_childOfIs_left() {
855 _indexTestUnit(''' 846 resolveTestUnit('''
856 main(p) { 847 main(p) {
857 !(p is String); 848 !(p is String);
858 } 849 }
859 '''); 850 ''');
860 assertHasAssistAt('p is', AssistKind.CONVERT_INTO_IS_NOT, ''' 851 assertHasAssistAt('p is', AssistKind.CONVERT_INTO_IS_NOT, '''
861 main(p) { 852 main(p) {
862 p is! String; 853 p is! String;
863 } 854 }
864 '''); 855 ''');
865 } 856 }
866 857
867 void test_convertToIsNot_OK_childOfIs_right() { 858 void test_convertToIsNot_OK_childOfIs_right() {
868 _indexTestUnit(''' 859 resolveTestUnit('''
869 main(p) { 860 main(p) {
870 !(p is String); 861 !(p is String);
871 } 862 }
872 '''); 863 ''');
873 assertHasAssistAt('String)', AssistKind.CONVERT_INTO_IS_NOT, ''' 864 assertHasAssistAt('String)', AssistKind.CONVERT_INTO_IS_NOT, '''
874 main(p) { 865 main(p) {
875 p is! String; 866 p is! String;
876 } 867 }
877 '''); 868 ''');
878 } 869 }
879 870
880 void test_convertToIsNot_OK_is() { 871 void test_convertToIsNot_OK_is() {
881 _indexTestUnit(''' 872 resolveTestUnit('''
882 main(p) { 873 main(p) {
883 !(p is String); 874 !(p is String);
884 } 875 }
885 '''); 876 ''');
886 assertHasAssistAt('is String', AssistKind.CONVERT_INTO_IS_NOT, ''' 877 assertHasAssistAt('is String', AssistKind.CONVERT_INTO_IS_NOT, '''
887 main(p) { 878 main(p) {
888 p is! String; 879 p is! String;
889 } 880 }
890 '''); 881 ''');
891 } 882 }
892 883
893 void test_convertToIsNot_OK_is_higherPrecedencePrefix() { 884 void test_convertToIsNot_OK_is_higherPrecedencePrefix() {
894 _indexTestUnit(''' 885 resolveTestUnit('''
895 main(p) { 886 main(p) {
896 !!(p is String); 887 !!(p is String);
897 } 888 }
898 '''); 889 ''');
899 assertHasAssistAt('is String', AssistKind.CONVERT_INTO_IS_NOT, ''' 890 assertHasAssistAt('is String', AssistKind.CONVERT_INTO_IS_NOT, '''
900 main(p) { 891 main(p) {
901 !(p is! String); 892 !(p is! String);
902 } 893 }
903 '''); 894 ''');
904 } 895 }
905 896
906 void test_convertToIsNot_OK_is_not_higherPrecedencePrefix() { 897 void test_convertToIsNot_OK_is_not_higherPrecedencePrefix() {
907 _indexTestUnit(''' 898 resolveTestUnit('''
908 main(p) { 899 main(p) {
909 !!(p is String); 900 !!(p is String);
910 } 901 }
911 '''); 902 ''');
912 assertHasAssistAt('!(p', AssistKind.CONVERT_INTO_IS_NOT, ''' 903 assertHasAssistAt('!(p', AssistKind.CONVERT_INTO_IS_NOT, '''
913 main(p) { 904 main(p) {
914 !(p is! String); 905 !(p is! String);
915 } 906 }
916 '''); 907 ''');
917 } 908 }
918 909
919 void test_convertToIsNot_OK_not() { 910 void test_convertToIsNot_OK_not() {
920 _indexTestUnit(''' 911 resolveTestUnit('''
921 main(p) { 912 main(p) {
922 !(p is String); 913 !(p is String);
923 } 914 }
924 '''); 915 ''');
925 assertHasAssistAt('!(p', AssistKind.CONVERT_INTO_IS_NOT, ''' 916 assertHasAssistAt('!(p', AssistKind.CONVERT_INTO_IS_NOT, '''
926 main(p) { 917 main(p) {
927 p is! String; 918 p is! String;
928 } 919 }
929 '''); 920 ''');
930 } 921 }
931 922
932 void test_convertToIsNot_OK_parentheses() { 923 void test_convertToIsNot_OK_parentheses() {
933 _indexTestUnit(''' 924 resolveTestUnit('''
934 main(p) { 925 main(p) {
935 !(p is String); 926 !(p is String);
936 } 927 }
937 '''); 928 ''');
938 assertHasAssistAt('(p is', AssistKind.CONVERT_INTO_IS_NOT, ''' 929 assertHasAssistAt('(p is', AssistKind.CONVERT_INTO_IS_NOT, '''
939 main(p) { 930 main(p) {
940 p is! String; 931 p is! String;
941 } 932 }
942 '''); 933 ''');
943 } 934 }
944 935
945 void test_convertToIsNot_wrong_is_alreadyIsNot() { 936 void test_convertToIsNot_wrong_is_alreadyIsNot() {
946 _indexTestUnit(''' 937 resolveTestUnit('''
947 main(p) { 938 main(p) {
948 p is! String; 939 p is! String;
949 } 940 }
950 '''); 941 ''');
951 assertNoAssistAt('is!', AssistKind.CONVERT_INTO_IS_NOT); 942 assertNoAssistAt('is!', AssistKind.CONVERT_INTO_IS_NOT);
952 } 943 }
953 944
954 void test_convertToIsNot_wrong_is_noEnclosingParenthesis() { 945 void test_convertToIsNot_wrong_is_noEnclosingParenthesis() {
955 _indexTestUnit(''' 946 resolveTestUnit('''
956 main(p) { 947 main(p) {
957 p is String; 948 p is String;
958 } 949 }
959 '''); 950 ''');
960 assertNoAssistAt('is String', AssistKind.CONVERT_INTO_IS_NOT); 951 assertNoAssistAt('is String', AssistKind.CONVERT_INTO_IS_NOT);
961 } 952 }
962 953
963 void test_convertToIsNot_wrong_is_noPrefix() { 954 void test_convertToIsNot_wrong_is_noPrefix() {
964 _indexTestUnit(''' 955 resolveTestUnit('''
965 main(p) { 956 main(p) {
966 (p is String); 957 (p is String);
967 } 958 }
968 '''); 959 ''');
969 assertNoAssistAt('is String', AssistKind.CONVERT_INTO_IS_NOT); 960 assertNoAssistAt('is String', AssistKind.CONVERT_INTO_IS_NOT);
970 } 961 }
971 962
972 void test_convertToIsNot_wrong_is_notIsExpression() { 963 void test_convertToIsNot_wrong_is_notIsExpression() {
973 _indexTestUnit(''' 964 resolveTestUnit('''
974 main(p) { 965 main(p) {
975 123 + 456; 966 123 + 456;
976 } 967 }
977 '''); 968 ''');
978 assertNoAssistAt('123 +', AssistKind.CONVERT_INTO_IS_NOT); 969 assertNoAssistAt('123 +', AssistKind.CONVERT_INTO_IS_NOT);
979 } 970 }
980 971
981 void test_convertToIsNot_wrong_is_notTheNotOperator() { 972 void test_convertToIsNot_wrong_is_notTheNotOperator() {
982 verifyNoTestUnitErrors = false; 973 verifyNoTestUnitErrors = false;
983 _indexTestUnit(''' 974 resolveTestUnit('''
984 main(p) { 975 main(p) {
985 ++(p is String); 976 ++(p is String);
986 } 977 }
987 '''); 978 ''');
988 assertNoAssistAt('is String', AssistKind.CONVERT_INTO_IS_NOT); 979 assertNoAssistAt('is String', AssistKind.CONVERT_INTO_IS_NOT);
989 } 980 }
990 981
991 void test_convertToIsNot_wrong_not_alreadyIsNot() { 982 void test_convertToIsNot_wrong_not_alreadyIsNot() {
992 _indexTestUnit(''' 983 resolveTestUnit('''
993 main(p) { 984 main(p) {
994 !(p is! String); 985 !(p is! String);
995 } 986 }
996 '''); 987 ''');
997 assertNoAssistAt('!(p', AssistKind.CONVERT_INTO_IS_NOT); 988 assertNoAssistAt('!(p', AssistKind.CONVERT_INTO_IS_NOT);
998 } 989 }
999 990
1000 void test_convertToIsNot_wrong_not_noEnclosingParenthesis() { 991 void test_convertToIsNot_wrong_not_noEnclosingParenthesis() {
1001 _indexTestUnit(''' 992 resolveTestUnit('''
1002 main(p) { 993 main(p) {
1003 !p; 994 !p;
1004 } 995 }
1005 '''); 996 ''');
1006 assertNoAssistAt('!p', AssistKind.CONVERT_INTO_IS_NOT); 997 assertNoAssistAt('!p', AssistKind.CONVERT_INTO_IS_NOT);
1007 } 998 }
1008 999
1009 void test_convertToIsNot_wrong_not_notIsExpression() { 1000 void test_convertToIsNot_wrong_not_notIsExpression() {
1010 _indexTestUnit(''' 1001 resolveTestUnit('''
1011 main(p) { 1002 main(p) {
1012 !(p == null); 1003 !(p == null);
1013 } 1004 }
1014 '''); 1005 ''');
1015 assertNoAssistAt('!(p', AssistKind.CONVERT_INTO_IS_NOT); 1006 assertNoAssistAt('!(p', AssistKind.CONVERT_INTO_IS_NOT);
1016 } 1007 }
1017 1008
1018 void test_convertToIsNot_wrong_not_notTheNotOperator() { 1009 void test_convertToIsNot_wrong_not_notTheNotOperator() {
1019 verifyNoTestUnitErrors = false; 1010 verifyNoTestUnitErrors = false;
1020 _indexTestUnit(''' 1011 resolveTestUnit('''
1021 main(p) { 1012 main(p) {
1022 ++(p is String); 1013 ++(p is String);
1023 } 1014 }
1024 '''); 1015 ''');
1025 assertNoAssistAt('++(', AssistKind.CONVERT_INTO_IS_NOT); 1016 assertNoAssistAt('++(', AssistKind.CONVERT_INTO_IS_NOT);
1026 } 1017 }
1027 1018
1028 void test_convertToIsNotEmpty_OK_on_isEmpty() { 1019 void test_convertToIsNotEmpty_OK_on_isEmpty() {
1029 _indexTestUnit(''' 1020 resolveTestUnit('''
1030 main(String str) { 1021 main(String str) {
1031 !str.isEmpty; 1022 !str.isEmpty;
1032 } 1023 }
1033 '''); 1024 ''');
1034 assertHasAssistAt('isEmpty', AssistKind.CONVERT_INTO_IS_NOT_EMPTY, ''' 1025 assertHasAssistAt('isEmpty', AssistKind.CONVERT_INTO_IS_NOT_EMPTY, '''
1035 main(String str) { 1026 main(String str) {
1036 str.isNotEmpty; 1027 str.isNotEmpty;
1037 } 1028 }
1038 '''); 1029 ''');
1039 } 1030 }
1040 1031
1041 void test_convertToIsNotEmpty_OK_on_str() { 1032 void test_convertToIsNotEmpty_OK_on_str() {
1042 _indexTestUnit(''' 1033 resolveTestUnit('''
1043 main(String str) { 1034 main(String str) {
1044 !str.isEmpty; 1035 !str.isEmpty;
1045 } 1036 }
1046 '''); 1037 ''');
1047 assertHasAssistAt('str.', AssistKind.CONVERT_INTO_IS_NOT_EMPTY, ''' 1038 assertHasAssistAt('str.', AssistKind.CONVERT_INTO_IS_NOT_EMPTY, '''
1048 main(String str) { 1039 main(String str) {
1049 str.isNotEmpty; 1040 str.isNotEmpty;
1050 } 1041 }
1051 '''); 1042 ''');
1052 } 1043 }
1053 1044
1054 void test_convertToIsNotEmpty_OK_propertyAccess() { 1045 void test_convertToIsNotEmpty_OK_propertyAccess() {
1055 _indexTestUnit(''' 1046 resolveTestUnit('''
1056 main(String str) { 1047 main(String str) {
1057 !'text'.isEmpty; 1048 !'text'.isEmpty;
1058 } 1049 }
1059 '''); 1050 ''');
1060 assertHasAssistAt('isEmpty', AssistKind.CONVERT_INTO_IS_NOT_EMPTY, ''' 1051 assertHasAssistAt('isEmpty', AssistKind.CONVERT_INTO_IS_NOT_EMPTY, '''
1061 main(String str) { 1052 main(String str) {
1062 'text'.isNotEmpty; 1053 'text'.isNotEmpty;
1063 } 1054 }
1064 '''); 1055 ''');
1065 } 1056 }
1066 1057
1067 void test_convertToIsNotEmpty_wrong_notInPrefixExpression() { 1058 void test_convertToIsNotEmpty_wrong_notInPrefixExpression() {
1068 _indexTestUnit(''' 1059 resolveTestUnit('''
1069 main(String str) { 1060 main(String str) {
1070 str.isEmpty; 1061 str.isEmpty;
1071 } 1062 }
1072 '''); 1063 ''');
1073 assertNoAssistAt('isEmpty;', AssistKind.CONVERT_INTO_IS_NOT_EMPTY); 1064 assertNoAssistAt('isEmpty;', AssistKind.CONVERT_INTO_IS_NOT_EMPTY);
1074 } 1065 }
1075 1066
1076 void test_convertToIsNotEmpty_wrong_notIsEmpty() { 1067 void test_convertToIsNotEmpty_wrong_notIsEmpty() {
1077 _indexTestUnit(''' 1068 resolveTestUnit('''
1078 main(int p) { 1069 main(int p) {
1079 !p.isEven; 1070 !p.isEven;
1080 } 1071 }
1081 '''); 1072 ''');
1082 assertNoAssistAt('isEven;', AssistKind.CONVERT_INTO_IS_NOT_EMPTY); 1073 assertNoAssistAt('isEven;', AssistKind.CONVERT_INTO_IS_NOT_EMPTY);
1083 } 1074 }
1084 1075
1085 void test_convertToIsNotEmpty_wrote_noIsNotEmpty() { 1076 void test_convertToIsNotEmpty_wrote_noIsNotEmpty() {
1086 _indexTestUnit(''' 1077 resolveTestUnit('''
1087 class A { 1078 class A {
1088 bool get isEmpty => false; 1079 bool get isEmpty => false;
1089 } 1080 }
1090 main(A a) { 1081 main(A a) {
1091 !a.isEmpty; 1082 !a.isEmpty;
1092 } 1083 }
1093 '''); 1084 ''');
1094 assertNoAssistAt('isEmpty;', AssistKind.CONVERT_INTO_IS_NOT_EMPTY); 1085 assertNoAssistAt('isEmpty;', AssistKind.CONVERT_INTO_IS_NOT_EMPTY);
1095 } 1086 }
1096 1087
1097 void test_exchangeBinaryExpressionArguments_OK_compare() { 1088 void test_exchangeBinaryExpressionArguments_OK_compare() {
1098 Map<String, String> operatorMap = { 1089 Map<String, String> operatorMap = {
1099 '<': '>', 1090 '<': '>',
1100 '<=': '>=', 1091 '<=': '>=',
1101 '>': '<', 1092 '>': '<',
1102 '>=': '<=' 1093 '>=': '<='
1103 }; 1094 };
1104 operatorMap.forEach((initialOperator, resultOperator) { 1095 operatorMap.forEach((initialOperator, resultOperator) {
1105 _indexTestUnit(''' 1096 resolveTestUnit('''
1106 bool main(int a, int b) { 1097 bool main(int a, int b) {
1107 return a $initialOperator b; 1098 return a $initialOperator b;
1108 } 1099 }
1109 '''); 1100 ''');
1110 assertHasAssistAt(initialOperator, AssistKind.EXCHANGE_OPERANDS, ''' 1101 assertHasAssistAt(initialOperator, AssistKind.EXCHANGE_OPERANDS, '''
1111 bool main(int a, int b) { 1102 bool main(int a, int b) {
1112 return b $resultOperator a; 1103 return b $resultOperator a;
1113 } 1104 }
1114 '''); 1105 ''');
1115 }); 1106 });
1116 } 1107 }
1117 1108
1118 void test_exchangeBinaryExpressionArguments_OK_extended_mixOperator_1() { 1109 void test_exchangeBinaryExpressionArguments_OK_extended_mixOperator_1() {
1119 _indexTestUnit(''' 1110 resolveTestUnit('''
1120 main() { 1111 main() {
1121 1 * 2 * 3 + 4; 1112 1 * 2 * 3 + 4;
1122 } 1113 }
1123 '''); 1114 ''');
1124 assertHasAssistAt('* 2', AssistKind.EXCHANGE_OPERANDS, ''' 1115 assertHasAssistAt('* 2', AssistKind.EXCHANGE_OPERANDS, '''
1125 main() { 1116 main() {
1126 2 * 3 * 1 + 4; 1117 2 * 3 * 1 + 4;
1127 } 1118 }
1128 '''); 1119 ''');
1129 } 1120 }
1130 1121
1131 void test_exchangeBinaryExpressionArguments_OK_extended_mixOperator_2() { 1122 void test_exchangeBinaryExpressionArguments_OK_extended_mixOperator_2() {
1132 _indexTestUnit(''' 1123 resolveTestUnit('''
1133 main() { 1124 main() {
1134 1 + 2 - 3 + 4; 1125 1 + 2 - 3 + 4;
1135 } 1126 }
1136 '''); 1127 ''');
1137 assertHasAssistAt('+ 2', AssistKind.EXCHANGE_OPERANDS, ''' 1128 assertHasAssistAt('+ 2', AssistKind.EXCHANGE_OPERANDS, '''
1138 main() { 1129 main() {
1139 2 + 1 - 3 + 4; 1130 2 + 1 - 3 + 4;
1140 } 1131 }
1141 '''); 1132 ''');
1142 } 1133 }
1143 1134
1144 void 1135 void
1145 test_exchangeBinaryExpressionArguments_OK_extended_sameOperator_afterFirst () { 1136 test_exchangeBinaryExpressionArguments_OK_extended_sameOperator_afterFirst () {
1146 _indexTestUnit(''' 1137 resolveTestUnit('''
1147 main() { 1138 main() {
1148 1 + 2 + 3; 1139 1 + 2 + 3;
1149 } 1140 }
1150 '''); 1141 ''');
1151 assertHasAssistAt('+ 2', AssistKind.EXCHANGE_OPERANDS, ''' 1142 assertHasAssistAt('+ 2', AssistKind.EXCHANGE_OPERANDS, '''
1152 main() { 1143 main() {
1153 2 + 3 + 1; 1144 2 + 3 + 1;
1154 } 1145 }
1155 '''); 1146 ''');
1156 } 1147 }
1157 1148
1158 void 1149 void
1159 test_exchangeBinaryExpressionArguments_OK_extended_sameOperator_afterSecon d() { 1150 test_exchangeBinaryExpressionArguments_OK_extended_sameOperator_afterSecon d() {
1160 _indexTestUnit(''' 1151 resolveTestUnit('''
1161 main() { 1152 main() {
1162 1 + 2 + 3; 1153 1 + 2 + 3;
1163 } 1154 }
1164 '''); 1155 ''');
1165 assertHasAssistAt('+ 3', AssistKind.EXCHANGE_OPERANDS, ''' 1156 assertHasAssistAt('+ 3', AssistKind.EXCHANGE_OPERANDS, '''
1166 main() { 1157 main() {
1167 3 + 1 + 2; 1158 3 + 1 + 2;
1168 } 1159 }
1169 '''); 1160 ''');
1170 } 1161 }
1171 1162
1172 void test_exchangeBinaryExpressionArguments_OK_simple_afterOperator() { 1163 void test_exchangeBinaryExpressionArguments_OK_simple_afterOperator() {
1173 _indexTestUnit(''' 1164 resolveTestUnit('''
1174 main() { 1165 main() {
1175 1 + 2; 1166 1 + 2;
1176 } 1167 }
1177 '''); 1168 ''');
1178 assertHasAssistAt(' 2', AssistKind.EXCHANGE_OPERANDS, ''' 1169 assertHasAssistAt(' 2', AssistKind.EXCHANGE_OPERANDS, '''
1179 main() { 1170 main() {
1180 2 + 1; 1171 2 + 1;
1181 } 1172 }
1182 '''); 1173 ''');
1183 } 1174 }
1184 1175
1185 void test_exchangeBinaryExpressionArguments_OK_simple_beforeOperator() { 1176 void test_exchangeBinaryExpressionArguments_OK_simple_beforeOperator() {
1186 _indexTestUnit(''' 1177 resolveTestUnit('''
1187 main() { 1178 main() {
1188 1 + 2; 1179 1 + 2;
1189 } 1180 }
1190 '''); 1181 ''');
1191 assertHasAssistAt('+ 2', AssistKind.EXCHANGE_OPERANDS, ''' 1182 assertHasAssistAt('+ 2', AssistKind.EXCHANGE_OPERANDS, '''
1192 main() { 1183 main() {
1193 2 + 1; 1184 2 + 1;
1194 } 1185 }
1195 '''); 1186 ''');
1196 } 1187 }
1197 1188
1198 void test_exchangeBinaryExpressionArguments_OK_simple_fullSelection() { 1189 void test_exchangeBinaryExpressionArguments_OK_simple_fullSelection() {
1199 _indexTestUnit(''' 1190 resolveTestUnit('''
1200 main() { 1191 main() {
1201 1 + 2; 1192 1 + 2;
1202 } 1193 }
1203 '''); 1194 ''');
1204 length = '1 + 2'.length; 1195 length = '1 + 2'.length;
1205 assertHasAssistAt('1 + 2', AssistKind.EXCHANGE_OPERANDS, ''' 1196 assertHasAssistAt('1 + 2', AssistKind.EXCHANGE_OPERANDS, '''
1206 main() { 1197 main() {
1207 2 + 1; 1198 2 + 1;
1208 } 1199 }
1209 '''); 1200 ''');
1210 } 1201 }
1211 1202
1212 void test_exchangeBinaryExpressionArguments_OK_simple_withLength() { 1203 void test_exchangeBinaryExpressionArguments_OK_simple_withLength() {
1213 _indexTestUnit(''' 1204 resolveTestUnit('''
1214 main() { 1205 main() {
1215 1 + 2; 1206 1 + 2;
1216 } 1207 }
1217 '''); 1208 ''');
1218 length = 2; 1209 length = 2;
1219 assertHasAssistAt('+ 2', AssistKind.EXCHANGE_OPERANDS, ''' 1210 assertHasAssistAt('+ 2', AssistKind.EXCHANGE_OPERANDS, '''
1220 main() { 1211 main() {
1221 2 + 1; 1212 2 + 1;
1222 } 1213 }
1223 '''); 1214 ''');
1224 } 1215 }
1225 1216
1226 void test_exchangeBinaryExpressionArguments_wrong_extraLength() { 1217 void test_exchangeBinaryExpressionArguments_wrong_extraLength() {
1227 _indexTestUnit(''' 1218 resolveTestUnit('''
1228 main() { 1219 main() {
1229 111 + 222; 1220 111 + 222;
1230 } 1221 }
1231 '''); 1222 ''');
1232 length = 3; 1223 length = 3;
1233 assertNoAssistAt('+ 222', AssistKind.EXCHANGE_OPERANDS); 1224 assertNoAssistAt('+ 222', AssistKind.EXCHANGE_OPERANDS);
1234 } 1225 }
1235 1226
1236 void test_exchangeBinaryExpressionArguments_wrong_onOperand() { 1227 void test_exchangeBinaryExpressionArguments_wrong_onOperand() {
1237 _indexTestUnit(''' 1228 resolveTestUnit('''
1238 main() { 1229 main() {
1239 111 + 222; 1230 111 + 222;
1240 } 1231 }
1241 '''); 1232 ''');
1242 length = 3; 1233 length = 3;
1243 assertNoAssistAt('11 +', AssistKind.EXCHANGE_OPERANDS); 1234 assertNoAssistAt('11 +', AssistKind.EXCHANGE_OPERANDS);
1244 } 1235 }
1245 1236
1246 void test_exchangeBinaryExpressionArguments_wrong_selectionWithBinary() { 1237 void test_exchangeBinaryExpressionArguments_wrong_selectionWithBinary() {
1247 _indexTestUnit(''' 1238 resolveTestUnit('''
1248 main() { 1239 main() {
1249 1 + 2 + 3; 1240 1 + 2 + 3;
1250 } 1241 }
1251 '''); 1242 ''');
1252 length = '1 + 2 + 3'.length; 1243 length = '1 + 2 + 3'.length;
1253 assertNoAssistAt('1 + 2 + 3', AssistKind.EXCHANGE_OPERANDS); 1244 assertNoAssistAt('1 + 2 + 3', AssistKind.EXCHANGE_OPERANDS);
1254 } 1245 }
1255 1246
1256 void test_importAddShow_BAD_hasShow() { 1247 void test_importAddShow_BAD_hasShow() {
1257 _indexTestUnit(''' 1248 resolveTestUnit('''
1258 import 'dart:math' show PI; 1249 import 'dart:math' show PI;
1259 main() { 1250 main() {
1260 PI; 1251 PI;
1261 } 1252 }
1262 '''); 1253 ''');
1263 assertNoAssistAt('import ', AssistKind.IMPORT_ADD_SHOW); 1254 assertNoAssistAt('import ', AssistKind.IMPORT_ADD_SHOW);
1264 } 1255 }
1265 1256
1266 void test_importAddShow_BAD_unresolvedUri() { 1257 void test_importAddShow_BAD_unresolvedUri() {
1267 _indexTestUnit(''' 1258 resolveTestUnit('''
1268 import '/no/such/lib.dart'; 1259 import '/no/such/lib.dart';
1269 '''); 1260 ''');
1270 assertNoAssistAt('import ', AssistKind.IMPORT_ADD_SHOW); 1261 assertNoAssistAt('import ', AssistKind.IMPORT_ADD_SHOW);
1271 } 1262 }
1272 1263
1273 void test_importAddShow_BAD_unused() { 1264 void test_importAddShow_BAD_unused() {
1274 _indexTestUnit(''' 1265 resolveTestUnit('''
1275 import 'dart:math'; 1266 import 'dart:math';
1276 '''); 1267 ''');
1277 assertNoAssistAt('import ', AssistKind.IMPORT_ADD_SHOW); 1268 assertNoAssistAt('import ', AssistKind.IMPORT_ADD_SHOW);
1278 } 1269 }
1279 1270
1280 void test_importAddShow_OK_hasUnresolvedIdentifier() { 1271 void test_importAddShow_OK_hasUnresolvedIdentifier() {
1281 _indexTestUnit(''' 1272 resolveTestUnit('''
1282 import 'dart:math'; 1273 import 'dart:math';
1283 main(x) { 1274 main(x) {
1284 PI; 1275 PI;
1285 return x.foo(); 1276 return x.foo();
1286 } 1277 }
1287 '''); 1278 ''');
1288 assertHasAssistAt('import ', AssistKind.IMPORT_ADD_SHOW, ''' 1279 assertHasAssistAt('import ', AssistKind.IMPORT_ADD_SHOW, '''
1289 import 'dart:math' show PI; 1280 import 'dart:math' show PI;
1290 main(x) { 1281 main(x) {
1291 PI; 1282 PI;
1292 return x.foo(); 1283 return x.foo();
1293 } 1284 }
1294 '''); 1285 ''');
1295 } 1286 }
1296 1287
1297 void test_importAddShow_OK_onDirective() { 1288 void test_importAddShow_OK_onDirective() {
1298 _indexTestUnit(''' 1289 resolveTestUnit('''
1299 import 'dart:math'; 1290 import 'dart:math';
1300 main() { 1291 main() {
1301 PI; 1292 PI;
1302 E; 1293 E;
1303 max(1, 2); 1294 max(1, 2);
1304 } 1295 }
1305 '''); 1296 ''');
1306 assertHasAssistAt('import ', AssistKind.IMPORT_ADD_SHOW, ''' 1297 assertHasAssistAt('import ', AssistKind.IMPORT_ADD_SHOW, '''
1307 import 'dart:math' show E, PI, max; 1298 import 'dart:math' show E, PI, max;
1308 main() { 1299 main() {
1309 PI; 1300 PI;
1310 E; 1301 E;
1311 max(1, 2); 1302 max(1, 2);
1312 } 1303 }
1313 '''); 1304 ''');
1314 } 1305 }
1315 1306
1316 void test_importAddShow_OK_onUri() { 1307 void test_importAddShow_OK_onUri() {
1317 _indexTestUnit(''' 1308 resolveTestUnit('''
1318 import 'dart:math'; 1309 import 'dart:math';
1319 main() { 1310 main() {
1320 PI; 1311 PI;
1321 E; 1312 E;
1322 max(1, 2); 1313 max(1, 2);
1323 } 1314 }
1324 '''); 1315 ''');
1325 assertHasAssistAt('art:math', AssistKind.IMPORT_ADD_SHOW, ''' 1316 assertHasAssistAt('art:math', AssistKind.IMPORT_ADD_SHOW, '''
1326 import 'dart:math' show E, PI, max; 1317 import 'dart:math' show E, PI, max;
1327 main() { 1318 main() {
1328 PI; 1319 PI;
1329 E; 1320 E;
1330 max(1, 2); 1321 max(1, 2);
1331 } 1322 }
1332 '''); 1323 ''');
1333 } 1324 }
1334 1325
1335 void test_introduceLocalTestedType_BAD_notBlock() { 1326 void test_introduceLocalTestedType_BAD_notBlock() {
1336 _indexTestUnit(''' 1327 resolveTestUnit('''
1337 main(p) { 1328 main(p) {
1338 if (p is String) 1329 if (p is String)
1339 print('not a block'); 1330 print('not a block');
1340 } 1331 }
1341 '''); 1332 ''');
1342 assertNoAssistAt('if (p', AssistKind.INTRODUCE_LOCAL_CAST_TYPE); 1333 assertNoAssistAt('if (p', AssistKind.INTRODUCE_LOCAL_CAST_TYPE);
1343 } 1334 }
1344 1335
1345 void test_introduceLocalTestedType_BAD_notIsExpression() { 1336 void test_introduceLocalTestedType_BAD_notIsExpression() {
1346 _indexTestUnit(''' 1337 resolveTestUnit('''
1347 main(p) { 1338 main(p) {
1348 if (p == null) { 1339 if (p == null) {
1349 } 1340 }
1350 } 1341 }
1351 '''); 1342 ''');
1352 assertNoAssistAt('if (p', AssistKind.INTRODUCE_LOCAL_CAST_TYPE); 1343 assertNoAssistAt('if (p', AssistKind.INTRODUCE_LOCAL_CAST_TYPE);
1353 } 1344 }
1354 1345
1355 void test_introduceLocalTestedType_OK_if() { 1346 void test_introduceLocalTestedType_OK_if() {
1356 _indexTestUnit(''' 1347 resolveTestUnit('''
1357 class MyTypeName {} 1348 class MyTypeName {}
1358 main(p) { 1349 main(p) {
1359 if (p is MyTypeName) { 1350 if (p is MyTypeName) {
1360 } 1351 }
1361 p = null; 1352 p = null;
1362 } 1353 }
1363 '''); 1354 ''');
1364 String expected = ''' 1355 String expected = '''
1365 class MyTypeName {} 1356 class MyTypeName {}
1366 main(p) { 1357 main(p) {
(...skipping 11 matching lines...) Expand all
1378 change.linkedEditGroups[0], 1369 change.linkedEditGroups[0],
1379 ['myTypeName = '], 1370 ['myTypeName = '],
1380 expectedSuggestions( 1371 expectedSuggestions(
1381 LinkedEditSuggestionKind.VARIABLE, 1372 LinkedEditSuggestionKind.VARIABLE,
1382 ['myTypeName', 'typeName', 'name'])); 1373 ['myTypeName', 'typeName', 'name']));
1383 // another good location 1374 // another good location
1384 assertHasAssistAt('if (p', AssistKind.INTRODUCE_LOCAL_CAST_TYPE, expected); 1375 assertHasAssistAt('if (p', AssistKind.INTRODUCE_LOCAL_CAST_TYPE, expected);
1385 } 1376 }
1386 1377
1387 void test_introduceLocalTestedType_OK_while() { 1378 void test_introduceLocalTestedType_OK_while() {
1388 _indexTestUnit(''' 1379 resolveTestUnit('''
1389 main(p) { 1380 main(p) {
1390 while (p is String) { 1381 while (p is String) {
1391 } 1382 }
1392 p = null; 1383 p = null;
1393 } 1384 }
1394 '''); 1385 ''');
1395 String expected = ''' 1386 String expected = '''
1396 main(p) { 1387 main(p) {
1397 while (p is String) { 1388 while (p is String) {
1398 String s = p; 1389 String s = p;
1399 } 1390 }
1400 p = null; 1391 p = null;
1401 } 1392 }
1402 '''; 1393 ''';
1403 assertHasAssistAt( 1394 assertHasAssistAt(
1404 'is String', 1395 'is String',
1405 AssistKind.INTRODUCE_LOCAL_CAST_TYPE, 1396 AssistKind.INTRODUCE_LOCAL_CAST_TYPE,
1406 expected); 1397 expected);
1407 assertHasAssistAt( 1398 assertHasAssistAt(
1408 'while (p', 1399 'while (p',
1409 AssistKind.INTRODUCE_LOCAL_CAST_TYPE, 1400 AssistKind.INTRODUCE_LOCAL_CAST_TYPE,
1410 expected); 1401 expected);
1411 } 1402 }
1412 1403
1413 void test_invalidSelection() { 1404 void test_invalidSelection() {
1414 _indexTestUnit(''); 1405 resolveTestUnit('');
1415 List<Assist> assists = computeAssists(searchEngine, testUnit, -1, 0); 1406 List<Assist> assists = computeAssists(testUnit, -1, 0);
1416 expect(assists, isEmpty); 1407 expect(assists, isEmpty);
1417 } 1408 }
1418 1409
1419 void test_invertIfStatement_blocks() { 1410 void test_invertIfStatement_blocks() {
1420 _indexTestUnit(''' 1411 resolveTestUnit('''
1421 main() { 1412 main() {
1422 if (true) { 1413 if (true) {
1423 0; 1414 0;
1424 } else { 1415 } else {
1425 1; 1416 1;
1426 } 1417 }
1427 } 1418 }
1428 '''); 1419 ''');
1429 assertHasAssistAt('if (', AssistKind.INVERT_IF_STATEMENT, ''' 1420 assertHasAssistAt('if (', AssistKind.INVERT_IF_STATEMENT, '''
1430 main() { 1421 main() {
1431 if (false) { 1422 if (false) {
1432 1; 1423 1;
1433 } else { 1424 } else {
1434 0; 1425 0;
1435 } 1426 }
1436 } 1427 }
1437 '''); 1428 ''');
1438 } 1429 }
1439 1430
1440 void test_invertIfStatement_statements() { 1431 void test_invertIfStatement_statements() {
1441 _indexTestUnit(''' 1432 resolveTestUnit('''
1442 main() { 1433 main() {
1443 if (true) 1434 if (true)
1444 0; 1435 0;
1445 else 1436 else
1446 1; 1437 1;
1447 } 1438 }
1448 '''); 1439 ''');
1449 assertHasAssistAt('if (', AssistKind.INVERT_IF_STATEMENT, ''' 1440 assertHasAssistAt('if (', AssistKind.INVERT_IF_STATEMENT, '''
1450 main() { 1441 main() {
1451 if (false) 1442 if (false)
1452 1; 1443 1;
1453 else 1444 else
1454 0; 1445 0;
1455 } 1446 }
1456 '''); 1447 ''');
1457 } 1448 }
1458 1449
1459 void test_joinIfStatementInner_OK_conditionAndOr() { 1450 void test_joinIfStatementInner_OK_conditionAndOr() {
1460 _indexTestUnit(''' 1451 resolveTestUnit('''
1461 main() { 1452 main() {
1462 if (1 == 1) { 1453 if (1 == 1) {
1463 if (2 == 2 || 3 == 3) { 1454 if (2 == 2 || 3 == 3) {
1464 print(0); 1455 print(0);
1465 } 1456 }
1466 } 1457 }
1467 } 1458 }
1468 '''); 1459 ''');
1469 assertHasAssistAt('if (1 ==', AssistKind.JOIN_IF_WITH_INNER, ''' 1460 assertHasAssistAt('if (1 ==', AssistKind.JOIN_IF_WITH_INNER, '''
1470 main() { 1461 main() {
1471 if (1 == 1 && (2 == 2 || 3 == 3)) { 1462 if (1 == 1 && (2 == 2 || 3 == 3)) {
1472 print(0); 1463 print(0);
1473 } 1464 }
1474 } 1465 }
1475 '''); 1466 ''');
1476 } 1467 }
1477 1468
1478 void test_joinIfStatementInner_OK_conditionInvocation() { 1469 void test_joinIfStatementInner_OK_conditionInvocation() {
1479 _indexTestUnit(''' 1470 resolveTestUnit('''
1480 main() { 1471 main() {
1481 if (isCheck()) { 1472 if (isCheck()) {
1482 if (2 == 2) { 1473 if (2 == 2) {
1483 print(0); 1474 print(0);
1484 } 1475 }
1485 } 1476 }
1486 } 1477 }
1487 bool isCheck() => false; 1478 bool isCheck() => false;
1488 '''); 1479 ''');
1489 assertHasAssistAt('if (isCheck', AssistKind.JOIN_IF_WITH_INNER, ''' 1480 assertHasAssistAt('if (isCheck', AssistKind.JOIN_IF_WITH_INNER, '''
1490 main() { 1481 main() {
1491 if (isCheck() && 2 == 2) { 1482 if (isCheck() && 2 == 2) {
1492 print(0); 1483 print(0);
1493 } 1484 }
1494 } 1485 }
1495 bool isCheck() => false; 1486 bool isCheck() => false;
1496 '''); 1487 ''');
1497 } 1488 }
1498 1489
1499 void test_joinIfStatementInner_OK_conditionOrAnd() { 1490 void test_joinIfStatementInner_OK_conditionOrAnd() {
1500 _indexTestUnit(''' 1491 resolveTestUnit('''
1501 main() { 1492 main() {
1502 if (1 == 1 || 2 == 2) { 1493 if (1 == 1 || 2 == 2) {
1503 if (3 == 3) { 1494 if (3 == 3) {
1504 print(0); 1495 print(0);
1505 } 1496 }
1506 } 1497 }
1507 } 1498 }
1508 '''); 1499 ''');
1509 assertHasAssistAt('if (1 ==', AssistKind.JOIN_IF_WITH_INNER, ''' 1500 assertHasAssistAt('if (1 ==', AssistKind.JOIN_IF_WITH_INNER, '''
1510 main() { 1501 main() {
1511 if ((1 == 1 || 2 == 2) && 3 == 3) { 1502 if ((1 == 1 || 2 == 2) && 3 == 3) {
1512 print(0); 1503 print(0);
1513 } 1504 }
1514 } 1505 }
1515 '''); 1506 ''');
1516 } 1507 }
1517 1508
1518 void test_joinIfStatementInner_OK_onCondition() { 1509 void test_joinIfStatementInner_OK_onCondition() {
1519 _indexTestUnit(''' 1510 resolveTestUnit('''
1520 main() { 1511 main() {
1521 if (1 == 1) { 1512 if (1 == 1) {
1522 if (2 == 2) { 1513 if (2 == 2) {
1523 print(0); 1514 print(0);
1524 } 1515 }
1525 } 1516 }
1526 } 1517 }
1527 '''); 1518 ''');
1528 assertHasAssistAt('1 ==', AssistKind.JOIN_IF_WITH_INNER, ''' 1519 assertHasAssistAt('1 ==', AssistKind.JOIN_IF_WITH_INNER, '''
1529 main() { 1520 main() {
1530 if (1 == 1 && 2 == 2) { 1521 if (1 == 1 && 2 == 2) {
1531 print(0); 1522 print(0);
1532 } 1523 }
1533 } 1524 }
1534 '''); 1525 ''');
1535 } 1526 }
1536 1527
1537 void test_joinIfStatementInner_OK_simpleConditions_block_block() { 1528 void test_joinIfStatementInner_OK_simpleConditions_block_block() {
1538 _indexTestUnit(''' 1529 resolveTestUnit('''
1539 main() { 1530 main() {
1540 if (1 == 1) { 1531 if (1 == 1) {
1541 if (2 == 2) { 1532 if (2 == 2) {
1542 print(0); 1533 print(0);
1543 } 1534 }
1544 } 1535 }
1545 } 1536 }
1546 '''); 1537 ''');
1547 assertHasAssistAt('if (1 ==', AssistKind.JOIN_IF_WITH_INNER, ''' 1538 assertHasAssistAt('if (1 ==', AssistKind.JOIN_IF_WITH_INNER, '''
1548 main() { 1539 main() {
1549 if (1 == 1 && 2 == 2) { 1540 if (1 == 1 && 2 == 2) {
1550 print(0); 1541 print(0);
1551 } 1542 }
1552 } 1543 }
1553 '''); 1544 ''');
1554 } 1545 }
1555 1546
1556 void test_joinIfStatementInner_OK_simpleConditions_block_single() { 1547 void test_joinIfStatementInner_OK_simpleConditions_block_single() {
1557 _indexTestUnit(''' 1548 resolveTestUnit('''
1558 main() { 1549 main() {
1559 if (1 == 1) { 1550 if (1 == 1) {
1560 if (2 == 2) 1551 if (2 == 2)
1561 print(0); 1552 print(0);
1562 } 1553 }
1563 } 1554 }
1564 '''); 1555 ''');
1565 assertHasAssistAt('if (1 ==', AssistKind.JOIN_IF_WITH_INNER, ''' 1556 assertHasAssistAt('if (1 ==', AssistKind.JOIN_IF_WITH_INNER, '''
1566 main() { 1557 main() {
1567 if (1 == 1 && 2 == 2) { 1558 if (1 == 1 && 2 == 2) {
1568 print(0); 1559 print(0);
1569 } 1560 }
1570 } 1561 }
1571 '''); 1562 ''');
1572 } 1563 }
1573 1564
1574 void test_joinIfStatementInner_OK_simpleConditions_single_blockMulti() { 1565 void test_joinIfStatementInner_OK_simpleConditions_single_blockMulti() {
1575 _indexTestUnit(''' 1566 resolveTestUnit('''
1576 main() { 1567 main() {
1577 if (1 == 1) { 1568 if (1 == 1) {
1578 if (2 == 2) { 1569 if (2 == 2) {
1579 print(1); 1570 print(1);
1580 print(2); 1571 print(2);
1581 print(3); 1572 print(3);
1582 } 1573 }
1583 } 1574 }
1584 } 1575 }
1585 '''); 1576 ''');
1586 assertHasAssistAt('if (1 ==', AssistKind.JOIN_IF_WITH_INNER, ''' 1577 assertHasAssistAt('if (1 ==', AssistKind.JOIN_IF_WITH_INNER, '''
1587 main() { 1578 main() {
1588 if (1 == 1 && 2 == 2) { 1579 if (1 == 1 && 2 == 2) {
1589 print(1); 1580 print(1);
1590 print(2); 1581 print(2);
1591 print(3); 1582 print(3);
1592 } 1583 }
1593 } 1584 }
1594 '''); 1585 ''');
1595 } 1586 }
1596 1587
1597 void test_joinIfStatementInner_OK_simpleConditions_single_blockOne() { 1588 void test_joinIfStatementInner_OK_simpleConditions_single_blockOne() {
1598 _indexTestUnit(''' 1589 resolveTestUnit('''
1599 main() { 1590 main() {
1600 if (1 == 1) 1591 if (1 == 1)
1601 if (2 == 2) { 1592 if (2 == 2) {
1602 print(0); 1593 print(0);
1603 } 1594 }
1604 } 1595 }
1605 '''); 1596 ''');
1606 assertHasAssistAt('if (1 ==', AssistKind.JOIN_IF_WITH_INNER, ''' 1597 assertHasAssistAt('if (1 ==', AssistKind.JOIN_IF_WITH_INNER, '''
1607 main() { 1598 main() {
1608 if (1 == 1 && 2 == 2) { 1599 if (1 == 1 && 2 == 2) {
1609 print(0); 1600 print(0);
1610 } 1601 }
1611 } 1602 }
1612 '''); 1603 ''');
1613 } 1604 }
1614 1605
1615 void test_joinIfStatementInner_wrong_innerNotIf() { 1606 void test_joinIfStatementInner_wrong_innerNotIf() {
1616 _indexTestUnit(''' 1607 resolveTestUnit('''
1617 main() { 1608 main() {
1618 if (1 == 1) { 1609 if (1 == 1) {
1619 print(0); 1610 print(0);
1620 } 1611 }
1621 } 1612 }
1622 '''); 1613 ''');
1623 assertNoAssistAt('if (1 ==', AssistKind.JOIN_IF_WITH_INNER); 1614 assertNoAssistAt('if (1 ==', AssistKind.JOIN_IF_WITH_INNER);
1624 } 1615 }
1625 1616
1626 void test_joinIfStatementInner_wrong_innerWithElse() { 1617 void test_joinIfStatementInner_wrong_innerWithElse() {
1627 _indexTestUnit(''' 1618 resolveTestUnit('''
1628 main() { 1619 main() {
1629 if (1 == 1) { 1620 if (1 == 1) {
1630 if (2 == 2) { 1621 if (2 == 2) {
1631 print(0); 1622 print(0);
1632 } else { 1623 } else {
1633 print(1); 1624 print(1);
1634 } 1625 }
1635 } 1626 }
1636 } 1627 }
1637 '''); 1628 ''');
1638 assertNoAssistAt('if (1 ==', AssistKind.JOIN_IF_WITH_INNER); 1629 assertNoAssistAt('if (1 ==', AssistKind.JOIN_IF_WITH_INNER);
1639 } 1630 }
1640 1631
1641 void test_joinIfStatementInner_wrong_targetNotIf() { 1632 void test_joinIfStatementInner_wrong_targetNotIf() {
1642 _indexTestUnit(''' 1633 resolveTestUnit('''
1643 main() { 1634 main() {
1644 print(0); 1635 print(0);
1645 } 1636 }
1646 '''); 1637 ''');
1647 assertNoAssistAt('print', AssistKind.JOIN_IF_WITH_INNER); 1638 assertNoAssistAt('print', AssistKind.JOIN_IF_WITH_INNER);
1648 } 1639 }
1649 1640
1650 void test_joinIfStatementInner_wrong_targetWithElse() { 1641 void test_joinIfStatementInner_wrong_targetWithElse() {
1651 _indexTestUnit(''' 1642 resolveTestUnit('''
1652 main() { 1643 main() {
1653 if (1 == 1) { 1644 if (1 == 1) {
1654 if (2 == 2) { 1645 if (2 == 2) {
1655 print(0); 1646 print(0);
1656 } 1647 }
1657 } else { 1648 } else {
1658 print(1); 1649 print(1);
1659 } 1650 }
1660 } 1651 }
1661 '''); 1652 ''');
1662 assertNoAssistAt('if (1 ==', AssistKind.JOIN_IF_WITH_INNER); 1653 assertNoAssistAt('if (1 ==', AssistKind.JOIN_IF_WITH_INNER);
1663 } 1654 }
1664 1655
1665 void test_joinIfStatementOuter_OK_conditionAndOr() { 1656 void test_joinIfStatementOuter_OK_conditionAndOr() {
1666 _indexTestUnit(''' 1657 resolveTestUnit('''
1667 main() { 1658 main() {
1668 if (1 == 1) { 1659 if (1 == 1) {
1669 if (2 == 2 || 3 == 3) { 1660 if (2 == 2 || 3 == 3) {
1670 print(0); 1661 print(0);
1671 } 1662 }
1672 } 1663 }
1673 } 1664 }
1674 '''); 1665 ''');
1675 assertHasAssistAt('if (2 ==', AssistKind.JOIN_IF_WITH_OUTER, ''' 1666 assertHasAssistAt('if (2 ==', AssistKind.JOIN_IF_WITH_OUTER, '''
1676 main() { 1667 main() {
1677 if (1 == 1 && (2 == 2 || 3 == 3)) { 1668 if (1 == 1 && (2 == 2 || 3 == 3)) {
1678 print(0); 1669 print(0);
1679 } 1670 }
1680 } 1671 }
1681 '''); 1672 ''');
1682 } 1673 }
1683 1674
1684 void test_joinIfStatementOuter_OK_conditionInvocation() { 1675 void test_joinIfStatementOuter_OK_conditionInvocation() {
1685 _indexTestUnit(''' 1676 resolveTestUnit('''
1686 main() { 1677 main() {
1687 if (1 == 1) { 1678 if (1 == 1) {
1688 if (isCheck()) { 1679 if (isCheck()) {
1689 print(0); 1680 print(0);
1690 } 1681 }
1691 } 1682 }
1692 } 1683 }
1693 bool isCheck() => false; 1684 bool isCheck() => false;
1694 '''); 1685 ''');
1695 assertHasAssistAt('if (isCheck', AssistKind.JOIN_IF_WITH_OUTER, ''' 1686 assertHasAssistAt('if (isCheck', AssistKind.JOIN_IF_WITH_OUTER, '''
1696 main() { 1687 main() {
1697 if (1 == 1 && isCheck()) { 1688 if (1 == 1 && isCheck()) {
1698 print(0); 1689 print(0);
1699 } 1690 }
1700 } 1691 }
1701 bool isCheck() => false; 1692 bool isCheck() => false;
1702 '''); 1693 ''');
1703 } 1694 }
1704 1695
1705 void test_joinIfStatementOuter_OK_conditionOrAnd() { 1696 void test_joinIfStatementOuter_OK_conditionOrAnd() {
1706 _indexTestUnit(''' 1697 resolveTestUnit('''
1707 main() { 1698 main() {
1708 if (1 == 1 || 2 == 2) { 1699 if (1 == 1 || 2 == 2) {
1709 if (3 == 3) { 1700 if (3 == 3) {
1710 print(0); 1701 print(0);
1711 } 1702 }
1712 } 1703 }
1713 } 1704 }
1714 '''); 1705 ''');
1715 assertHasAssistAt('if (3 == 3', AssistKind.JOIN_IF_WITH_OUTER, ''' 1706 assertHasAssistAt('if (3 == 3', AssistKind.JOIN_IF_WITH_OUTER, '''
1716 main() { 1707 main() {
1717 if ((1 == 1 || 2 == 2) && 3 == 3) { 1708 if ((1 == 1 || 2 == 2) && 3 == 3) {
1718 print(0); 1709 print(0);
1719 } 1710 }
1720 } 1711 }
1721 '''); 1712 ''');
1722 } 1713 }
1723 1714
1724 void test_joinIfStatementOuter_OK_onCondition() { 1715 void test_joinIfStatementOuter_OK_onCondition() {
1725 _indexTestUnit(''' 1716 resolveTestUnit('''
1726 main() { 1717 main() {
1727 if (1 == 1) { 1718 if (1 == 1) {
1728 if (2 == 2) { 1719 if (2 == 2) {
1729 print(0); 1720 print(0);
1730 } 1721 }
1731 } 1722 }
1732 } 1723 }
1733 '''); 1724 ''');
1734 assertHasAssistAt('if (2 == 2', AssistKind.JOIN_IF_WITH_OUTER, ''' 1725 assertHasAssistAt('if (2 == 2', AssistKind.JOIN_IF_WITH_OUTER, '''
1735 main() { 1726 main() {
1736 if (1 == 1 && 2 == 2) { 1727 if (1 == 1 && 2 == 2) {
1737 print(0); 1728 print(0);
1738 } 1729 }
1739 } 1730 }
1740 '''); 1731 ''');
1741 } 1732 }
1742 1733
1743 void test_joinIfStatementOuter_OK_simpleConditions_block_block() { 1734 void test_joinIfStatementOuter_OK_simpleConditions_block_block() {
1744 _indexTestUnit(''' 1735 resolveTestUnit('''
1745 main() { 1736 main() {
1746 if (1 == 1) { 1737 if (1 == 1) {
1747 if (2 == 2) { 1738 if (2 == 2) {
1748 print(0); 1739 print(0);
1749 } 1740 }
1750 } 1741 }
1751 } 1742 }
1752 '''); 1743 ''');
1753 assertHasAssistAt('if (2 == 2', AssistKind.JOIN_IF_WITH_OUTER, ''' 1744 assertHasAssistAt('if (2 == 2', AssistKind.JOIN_IF_WITH_OUTER, '''
1754 main() { 1745 main() {
1755 if (1 == 1 && 2 == 2) { 1746 if (1 == 1 && 2 == 2) {
1756 print(0); 1747 print(0);
1757 } 1748 }
1758 } 1749 }
1759 '''); 1750 ''');
1760 } 1751 }
1761 1752
1762 void test_joinIfStatementOuter_OK_simpleConditions_block_single() { 1753 void test_joinIfStatementOuter_OK_simpleConditions_block_single() {
1763 _indexTestUnit(''' 1754 resolveTestUnit('''
1764 main() { 1755 main() {
1765 if (1 == 1) { 1756 if (1 == 1) {
1766 if (2 == 2) 1757 if (2 == 2)
1767 print(0); 1758 print(0);
1768 } 1759 }
1769 } 1760 }
1770 '''); 1761 ''');
1771 assertHasAssistAt('if (2 == 2', AssistKind.JOIN_IF_WITH_OUTER, ''' 1762 assertHasAssistAt('if (2 == 2', AssistKind.JOIN_IF_WITH_OUTER, '''
1772 main() { 1763 main() {
1773 if (1 == 1 && 2 == 2) { 1764 if (1 == 1 && 2 == 2) {
1774 print(0); 1765 print(0);
1775 } 1766 }
1776 } 1767 }
1777 '''); 1768 ''');
1778 } 1769 }
1779 1770
1780 void test_joinIfStatementOuter_OK_simpleConditions_single_blockMulti() { 1771 void test_joinIfStatementOuter_OK_simpleConditions_single_blockMulti() {
1781 _indexTestUnit(''' 1772 resolveTestUnit('''
1782 main() { 1773 main() {
1783 if (1 == 1) { 1774 if (1 == 1) {
1784 if (2 == 2) { 1775 if (2 == 2) {
1785 print(1); 1776 print(1);
1786 print(2); 1777 print(2);
1787 print(3); 1778 print(3);
1788 } 1779 }
1789 } 1780 }
1790 } 1781 }
1791 '''); 1782 ''');
1792 assertHasAssistAt('if (2 == 2', AssistKind.JOIN_IF_WITH_OUTER, ''' 1783 assertHasAssistAt('if (2 == 2', AssistKind.JOIN_IF_WITH_OUTER, '''
1793 main() { 1784 main() {
1794 if (1 == 1 && 2 == 2) { 1785 if (1 == 1 && 2 == 2) {
1795 print(1); 1786 print(1);
1796 print(2); 1787 print(2);
1797 print(3); 1788 print(3);
1798 } 1789 }
1799 } 1790 }
1800 '''); 1791 ''');
1801 } 1792 }
1802 1793
1803 void test_joinIfStatementOuter_OK_simpleConditions_single_blockOne() { 1794 void test_joinIfStatementOuter_OK_simpleConditions_single_blockOne() {
1804 _indexTestUnit(''' 1795 resolveTestUnit('''
1805 main() { 1796 main() {
1806 if (1 == 1) 1797 if (1 == 1)
1807 if (2 == 2) { 1798 if (2 == 2) {
1808 print(0); 1799 print(0);
1809 } 1800 }
1810 } 1801 }
1811 '''); 1802 ''');
1812 assertHasAssistAt('if (2 == 2', AssistKind.JOIN_IF_WITH_OUTER, ''' 1803 assertHasAssistAt('if (2 == 2', AssistKind.JOIN_IF_WITH_OUTER, '''
1813 main() { 1804 main() {
1814 if (1 == 1 && 2 == 2) { 1805 if (1 == 1 && 2 == 2) {
1815 print(0); 1806 print(0);
1816 } 1807 }
1817 } 1808 }
1818 '''); 1809 ''');
1819 } 1810 }
1820 1811
1821 void test_joinIfStatementOuter_wrong_outerNotIf() { 1812 void test_joinIfStatementOuter_wrong_outerNotIf() {
1822 _indexTestUnit(''' 1813 resolveTestUnit('''
1823 main() { 1814 main() {
1824 if (1 == 1) { 1815 if (1 == 1) {
1825 print(0); 1816 print(0);
1826 } 1817 }
1827 } 1818 }
1828 '''); 1819 ''');
1829 assertNoAssistAt('if (1 == 1', AssistKind.JOIN_IF_WITH_OUTER); 1820 assertNoAssistAt('if (1 == 1', AssistKind.JOIN_IF_WITH_OUTER);
1830 } 1821 }
1831 1822
1832 void test_joinIfStatementOuter_wrong_outerWithElse() { 1823 void test_joinIfStatementOuter_wrong_outerWithElse() {
1833 _indexTestUnit(''' 1824 resolveTestUnit('''
1834 main() { 1825 main() {
1835 if (1 == 1) { 1826 if (1 == 1) {
1836 if (2 == 2) { 1827 if (2 == 2) {
1837 print(0); 1828 print(0);
1838 } 1829 }
1839 } else { 1830 } else {
1840 print(1); 1831 print(1);
1841 } 1832 }
1842 } 1833 }
1843 '''); 1834 ''');
1844 assertNoAssistAt('if (2 == 2', AssistKind.JOIN_IF_WITH_OUTER); 1835 assertNoAssistAt('if (2 == 2', AssistKind.JOIN_IF_WITH_OUTER);
1845 } 1836 }
1846 1837
1847 void test_joinIfStatementOuter_wrong_targetNotIf() { 1838 void test_joinIfStatementOuter_wrong_targetNotIf() {
1848 _indexTestUnit(''' 1839 resolveTestUnit('''
1849 main() { 1840 main() {
1850 print(0); 1841 print(0);
1851 } 1842 }
1852 '''); 1843 ''');
1853 assertNoAssistAt('print', AssistKind.JOIN_IF_WITH_OUTER); 1844 assertNoAssistAt('print', AssistKind.JOIN_IF_WITH_OUTER);
1854 } 1845 }
1855 1846
1856 void test_joinIfStatementOuter_wrong_targetWithElse() { 1847 void test_joinIfStatementOuter_wrong_targetWithElse() {
1857 _indexTestUnit(''' 1848 resolveTestUnit('''
1858 main() { 1849 main() {
1859 if (1 == 1) { 1850 if (1 == 1) {
1860 if (2 == 2) { 1851 if (2 == 2) {
1861 print(0); 1852 print(0);
1862 } else { 1853 } else {
1863 print(1); 1854 print(1);
1864 } 1855 }
1865 } 1856 }
1866 } 1857 }
1867 '''); 1858 ''');
1868 assertNoAssistAt('if (2 == 2', AssistKind.JOIN_IF_WITH_OUTER); 1859 assertNoAssistAt('if (2 == 2', AssistKind.JOIN_IF_WITH_OUTER);
1869 } 1860 }
1870 1861
1871 void test_joinVariableDeclaration_onAssignment_OK() { 1862 void test_joinVariableDeclaration_onAssignment_OK() {
1872 _indexTestUnit(''' 1863 resolveTestUnit('''
1873 main() { 1864 main() {
1874 var v; 1865 var v;
1875 v = 1; 1866 v = 1;
1876 } 1867 }
1877 '''); 1868 ''');
1878 assertHasAssistAt('v =', AssistKind.JOIN_VARIABLE_DECLARATION, ''' 1869 assertHasAssistAt('v =', AssistKind.JOIN_VARIABLE_DECLARATION, '''
1879 main() { 1870 main() {
1880 var v = 1; 1871 var v = 1;
1881 } 1872 }
1882 '''); 1873 ''');
1883 } 1874 }
1884 1875
1885 void test_joinVariableDeclaration_onAssignment_wrong_hasInitializer() { 1876 void test_joinVariableDeclaration_onAssignment_wrong_hasInitializer() {
1886 _indexTestUnit(''' 1877 resolveTestUnit('''
1887 main() { 1878 main() {
1888 var v = 1; 1879 var v = 1;
1889 v = 2; 1880 v = 2;
1890 } 1881 }
1891 '''); 1882 ''');
1892 assertNoAssistAt('v = 2', AssistKind.JOIN_VARIABLE_DECLARATION); 1883 assertNoAssistAt('v = 2', AssistKind.JOIN_VARIABLE_DECLARATION);
1893 } 1884 }
1894 1885
1895 void test_joinVariableDeclaration_onAssignment_wrong_notAdjacent() { 1886 void test_joinVariableDeclaration_onAssignment_wrong_notAdjacent() {
1896 _indexTestUnit(''' 1887 resolveTestUnit('''
1897 main() { 1888 main() {
1898 var v; 1889 var v;
1899 var bar; 1890 var bar;
1900 v = 1; 1891 v = 1;
1901 } 1892 }
1902 '''); 1893 ''');
1903 assertNoAssistAt('v = 1', AssistKind.JOIN_VARIABLE_DECLARATION); 1894 assertNoAssistAt('v = 1', AssistKind.JOIN_VARIABLE_DECLARATION);
1904 } 1895 }
1905 1896
1906 void test_joinVariableDeclaration_onAssignment_wrong_notAssignment() { 1897 void test_joinVariableDeclaration_onAssignment_wrong_notAssignment() {
1907 _indexTestUnit(''' 1898 resolveTestUnit('''
1908 main() { 1899 main() {
1909 var v; 1900 var v;
1910 v += 1; 1901 v += 1;
1911 } 1902 }
1912 '''); 1903 ''');
1913 assertNoAssistAt('v += 1', AssistKind.JOIN_VARIABLE_DECLARATION); 1904 assertNoAssistAt('v += 1', AssistKind.JOIN_VARIABLE_DECLARATION);
1914 } 1905 }
1915 1906
1916 void test_joinVariableDeclaration_onAssignment_wrong_notDeclaration() { 1907 void test_joinVariableDeclaration_onAssignment_wrong_notDeclaration() {
1917 _indexTestUnit(''' 1908 resolveTestUnit('''
1918 main(var v) { 1909 main(var v) {
1919 v = 1; 1910 v = 1;
1920 } 1911 }
1921 '''); 1912 ''');
1922 assertNoAssistAt('v = 1', AssistKind.JOIN_VARIABLE_DECLARATION); 1913 assertNoAssistAt('v = 1', AssistKind.JOIN_VARIABLE_DECLARATION);
1923 } 1914 }
1924 1915
1925 void test_joinVariableDeclaration_onAssignment_wrong_notLeftArgument() { 1916 void test_joinVariableDeclaration_onAssignment_wrong_notLeftArgument() {
1926 _indexTestUnit(''' 1917 resolveTestUnit('''
1927 main() { 1918 main() {
1928 var v; 1919 var v;
1929 1 + v; // marker 1920 1 + v; // marker
1930 } 1921 }
1931 '''); 1922 ''');
1932 assertNoAssistAt('v; // marker', AssistKind.JOIN_VARIABLE_DECLARATION); 1923 assertNoAssistAt('v; // marker', AssistKind.JOIN_VARIABLE_DECLARATION);
1933 } 1924 }
1934 1925
1935 void test_joinVariableDeclaration_onAssignment_wrong_notOneVariable() { 1926 void test_joinVariableDeclaration_onAssignment_wrong_notOneVariable() {
1936 _indexTestUnit(''' 1927 resolveTestUnit('''
1937 main() { 1928 main() {
1938 var v, v2; 1929 var v, v2;
1939 v = 1; 1930 v = 1;
1940 } 1931 }
1941 '''); 1932 ''');
1942 assertNoAssistAt('v = 1', AssistKind.JOIN_VARIABLE_DECLARATION); 1933 assertNoAssistAt('v = 1', AssistKind.JOIN_VARIABLE_DECLARATION);
1943 } 1934 }
1944 1935
1945 void test_joinVariableDeclaration_onAssignment_wrong_notResolved() { 1936 void test_joinVariableDeclaration_onAssignment_wrong_notResolved() {
1946 verifyNoTestUnitErrors = false; 1937 verifyNoTestUnitErrors = false;
1947 _indexTestUnit(''' 1938 resolveTestUnit('''
1948 main() { 1939 main() {
1949 var v; 1940 var v;
1950 x = 1; 1941 x = 1;
1951 } 1942 }
1952 '''); 1943 ''');
1953 assertNoAssistAt('x = 1', AssistKind.JOIN_VARIABLE_DECLARATION); 1944 assertNoAssistAt('x = 1', AssistKind.JOIN_VARIABLE_DECLARATION);
1954 } 1945 }
1955 1946
1956 void test_joinVariableDeclaration_onAssignment_wrong_notSameBlock() { 1947 void test_joinVariableDeclaration_onAssignment_wrong_notSameBlock() {
1957 _indexTestUnit(''' 1948 resolveTestUnit('''
1958 main() { 1949 main() {
1959 var v; 1950 var v;
1960 { 1951 {
1961 v = 1; 1952 v = 1;
1962 } 1953 }
1963 } 1954 }
1964 '''); 1955 ''');
1965 assertNoAssistAt('v = 1', AssistKind.JOIN_VARIABLE_DECLARATION); 1956 assertNoAssistAt('v = 1', AssistKind.JOIN_VARIABLE_DECLARATION);
1966 } 1957 }
1967 1958
1968 void test_joinVariableDeclaration_onDeclaration_OK_onName() { 1959 void test_joinVariableDeclaration_onDeclaration_OK_onName() {
1969 _indexTestUnit(''' 1960 resolveTestUnit('''
1970 main() { 1961 main() {
1971 var v; 1962 var v;
1972 v = 1; 1963 v = 1;
1973 } 1964 }
1974 '''); 1965 ''');
1975 assertHasAssistAt('v;', AssistKind.JOIN_VARIABLE_DECLARATION, ''' 1966 assertHasAssistAt('v;', AssistKind.JOIN_VARIABLE_DECLARATION, '''
1976 main() { 1967 main() {
1977 var v = 1; 1968 var v = 1;
1978 } 1969 }
1979 '''); 1970 ''');
1980 } 1971 }
1981 1972
1982 void test_joinVariableDeclaration_onDeclaration_OK_onType() { 1973 void test_joinVariableDeclaration_onDeclaration_OK_onType() {
1983 _indexTestUnit(''' 1974 resolveTestUnit('''
1984 main() { 1975 main() {
1985 int v; 1976 int v;
1986 v = 1; 1977 v = 1;
1987 } 1978 }
1988 '''); 1979 ''');
1989 assertHasAssistAt('int v', AssistKind.JOIN_VARIABLE_DECLARATION, ''' 1980 assertHasAssistAt('int v', AssistKind.JOIN_VARIABLE_DECLARATION, '''
1990 main() { 1981 main() {
1991 int v = 1; 1982 int v = 1;
1992 } 1983 }
1993 '''); 1984 ''');
1994 } 1985 }
1995 1986
1996 void test_joinVariableDeclaration_onDeclaration_OK_onVar() { 1987 void test_joinVariableDeclaration_onDeclaration_OK_onVar() {
1997 _indexTestUnit(''' 1988 resolveTestUnit('''
1998 main() { 1989 main() {
1999 var v; 1990 var v;
2000 v = 1; 1991 v = 1;
2001 } 1992 }
2002 '''); 1993 ''');
2003 assertHasAssistAt('var v', AssistKind.JOIN_VARIABLE_DECLARATION, ''' 1994 assertHasAssistAt('var v', AssistKind.JOIN_VARIABLE_DECLARATION, '''
2004 main() { 1995 main() {
2005 var v = 1; 1996 var v = 1;
2006 } 1997 }
2007 '''); 1998 ''');
2008 } 1999 }
2009 2000
2010 void test_joinVariableDeclaration_onDeclaration_wrong_hasInitializer() { 2001 void test_joinVariableDeclaration_onDeclaration_wrong_hasInitializer() {
2011 _indexTestUnit(''' 2002 resolveTestUnit('''
2012 main() { 2003 main() {
2013 var v = 1; 2004 var v = 1;
2014 v = 2; 2005 v = 2;
2015 } 2006 }
2016 '''); 2007 ''');
2017 assertNoAssistAt('v = 1', AssistKind.JOIN_VARIABLE_DECLARATION); 2008 assertNoAssistAt('v = 1', AssistKind.JOIN_VARIABLE_DECLARATION);
2018 } 2009 }
2019 2010
2020 void test_joinVariableDeclaration_onDeclaration_wrong_lastStatement() { 2011 void test_joinVariableDeclaration_onDeclaration_wrong_lastStatement() {
2021 _indexTestUnit(''' 2012 resolveTestUnit('''
2022 main() { 2013 main() {
2023 if (true) 2014 if (true)
2024 var v; 2015 var v;
2025 } 2016 }
2026 '''); 2017 ''');
2027 assertNoAssistAt('v;', AssistKind.JOIN_VARIABLE_DECLARATION); 2018 assertNoAssistAt('v;', AssistKind.JOIN_VARIABLE_DECLARATION);
2028 } 2019 }
2029 2020
2030 void 2021 void
2031 test_joinVariableDeclaration_onDeclaration_wrong_nextNotAssignmentExpressi on() { 2022 test_joinVariableDeclaration_onDeclaration_wrong_nextNotAssignmentExpressi on() {
2032 _indexTestUnit(''' 2023 resolveTestUnit('''
2033 main() { 2024 main() {
2034 var v; 2025 var v;
2035 42; 2026 42;
2036 } 2027 }
2037 '''); 2028 ''');
2038 assertNoAssistAt('v;', AssistKind.JOIN_VARIABLE_DECLARATION); 2029 assertNoAssistAt('v;', AssistKind.JOIN_VARIABLE_DECLARATION);
2039 } 2030 }
2040 2031
2041 void 2032 void
2042 test_joinVariableDeclaration_onDeclaration_wrong_nextNotExpressionStatemen t() { 2033 test_joinVariableDeclaration_onDeclaration_wrong_nextNotExpressionStatemen t() {
2043 _indexTestUnit(''' 2034 resolveTestUnit('''
2044 main() { 2035 main() {
2045 var v; 2036 var v;
2046 if (true) return; 2037 if (true) return;
2047 } 2038 }
2048 '''); 2039 ''');
2049 assertNoAssistAt('v;', AssistKind.JOIN_VARIABLE_DECLARATION); 2040 assertNoAssistAt('v;', AssistKind.JOIN_VARIABLE_DECLARATION);
2050 } 2041 }
2051 2042
2052 void 2043 void
2053 test_joinVariableDeclaration_onDeclaration_wrong_nextNotPureAssignment() { 2044 test_joinVariableDeclaration_onDeclaration_wrong_nextNotPureAssignment() {
2054 _indexTestUnit(''' 2045 resolveTestUnit('''
2055 main() { 2046 main() {
2056 var v; 2047 var v;
2057 v += 1; 2048 v += 1;
2058 } 2049 }
2059 '''); 2050 ''');
2060 assertNoAssistAt('v;', AssistKind.JOIN_VARIABLE_DECLARATION); 2051 assertNoAssistAt('v;', AssistKind.JOIN_VARIABLE_DECLARATION);
2061 } 2052 }
2062 2053
2063 void test_joinVariableDeclaration_onDeclaration_wrong_notOneVariable() { 2054 void test_joinVariableDeclaration_onDeclaration_wrong_notOneVariable() {
2064 _indexTestUnit(''' 2055 resolveTestUnit('''
2065 main() { 2056 main() {
2066 var v, v2; 2057 var v, v2;
2067 v = 1; 2058 v = 1;
2068 } 2059 }
2069 '''); 2060 ''');
2070 assertNoAssistAt('v, ', AssistKind.JOIN_VARIABLE_DECLARATION); 2061 assertNoAssistAt('v, ', AssistKind.JOIN_VARIABLE_DECLARATION);
2071 } 2062 }
2072 2063
2073 void test_removeTypeAnnotation_classField_OK() { 2064 void test_removeTypeAnnotation_classField_OK() {
2074 _indexTestUnit(''' 2065 resolveTestUnit('''
2075 class A { 2066 class A {
2076 int v = 1; 2067 int v = 1;
2077 } 2068 }
2078 '''); 2069 ''');
2079 assertHasAssistAt('v = ', AssistKind.REMOVE_TYPE_ANNOTATION, ''' 2070 assertHasAssistAt('v = ', AssistKind.REMOVE_TYPE_ANNOTATION, '''
2080 class A { 2071 class A {
2081 var v = 1; 2072 var v = 1;
2082 } 2073 }
2083 '''); 2074 ''');
2084 } 2075 }
2085 2076
2086 void test_removeTypeAnnotation_localVariable_OK() { 2077 void test_removeTypeAnnotation_localVariable_OK() {
2087 _indexTestUnit(''' 2078 resolveTestUnit('''
2088 main() { 2079 main() {
2089 int a = 1, b = 2; 2080 int a = 1, b = 2;
2090 } 2081 }
2091 '''); 2082 ''');
2092 assertHasAssistAt('int ', AssistKind.REMOVE_TYPE_ANNOTATION, ''' 2083 assertHasAssistAt('int ', AssistKind.REMOVE_TYPE_ANNOTATION, '''
2093 main() { 2084 main() {
2094 var a = 1, b = 2; 2085 var a = 1, b = 2;
2095 } 2086 }
2096 '''); 2087 ''');
2097 } 2088 }
2098 2089
2099 void test_removeTypeAnnotation_topLevelVariable_OK() { 2090 void test_removeTypeAnnotation_topLevelVariable_OK() {
2100 _indexTestUnit(''' 2091 resolveTestUnit('''
2101 int V = 1; 2092 int V = 1;
2102 '''); 2093 ''');
2103 assertHasAssistAt('int ', AssistKind.REMOVE_TYPE_ANNOTATION, ''' 2094 assertHasAssistAt('int ', AssistKind.REMOVE_TYPE_ANNOTATION, '''
2104 var V = 1; 2095 var V = 1;
2105 '''); 2096 ''');
2106 } 2097 }
2107 2098
2108 void test_replaceConditionalWithIfElse_OK_assignment() { 2099 void test_replaceConditionalWithIfElse_OK_assignment() {
2109 _indexTestUnit(''' 2100 resolveTestUnit('''
2110 main() { 2101 main() {
2111 var v; 2102 var v;
2112 v = true ? 111 : 222; 2103 v = true ? 111 : 222;
2113 } 2104 }
2114 '''); 2105 ''');
2115 // on conditional 2106 // on conditional
2116 assertHasAssistAt('11 :', AssistKind.REPLACE_CONDITIONAL_WITH_IF_ELSE, ''' 2107 assertHasAssistAt('11 :', AssistKind.REPLACE_CONDITIONAL_WITH_IF_ELSE, '''
2117 main() { 2108 main() {
2118 var v; 2109 var v;
2119 if (true) { 2110 if (true) {
(...skipping 10 matching lines...) Expand all
2130 if (true) { 2121 if (true) {
2131 v = 111; 2122 v = 111;
2132 } else { 2123 } else {
2133 v = 222; 2124 v = 222;
2134 } 2125 }
2135 } 2126 }
2136 '''); 2127 ''');
2137 } 2128 }
2138 2129
2139 void test_replaceConditionalWithIfElse_OK_return() { 2130 void test_replaceConditionalWithIfElse_OK_return() {
2140 _indexTestUnit(''' 2131 resolveTestUnit('''
2141 main() { 2132 main() {
2142 return true ? 111 : 222; 2133 return true ? 111 : 222;
2143 } 2134 }
2144 '''); 2135 ''');
2145 assertHasAssistAt( 2136 assertHasAssistAt(
2146 'return ', 2137 'return ',
2147 AssistKind.REPLACE_CONDITIONAL_WITH_IF_ELSE, 2138 AssistKind.REPLACE_CONDITIONAL_WITH_IF_ELSE,
2148 ''' 2139 '''
2149 main() { 2140 main() {
2150 if (true) { 2141 if (true) {
2151 return 111; 2142 return 111;
2152 } else { 2143 } else {
2153 return 222; 2144 return 222;
2154 } 2145 }
2155 } 2146 }
2156 '''); 2147 ''');
2157 } 2148 }
2158 2149
2159 void test_replaceConditionalWithIfElse_OK_variableDeclaration() { 2150 void test_replaceConditionalWithIfElse_OK_variableDeclaration() {
2160 _indexTestUnit(''' 2151 resolveTestUnit('''
2161 main() { 2152 main() {
2162 int a = 1, vvv = true ? 111 : 222, b = 2; 2153 int a = 1, vvv = true ? 111 : 222, b = 2;
2163 } 2154 }
2164 '''); 2155 ''');
2165 assertHasAssistAt('11 :', AssistKind.REPLACE_CONDITIONAL_WITH_IF_ELSE, ''' 2156 assertHasAssistAt('11 :', AssistKind.REPLACE_CONDITIONAL_WITH_IF_ELSE, '''
2166 main() { 2157 main() {
2167 int a = 1, vvv, b = 2; 2158 int a = 1, vvv, b = 2;
2168 if (true) { 2159 if (true) {
2169 vvv = 111; 2160 vvv = 111;
2170 } else { 2161 } else {
2171 vvv = 222; 2162 vvv = 222;
2172 } 2163 }
2173 } 2164 }
2174 '''); 2165 ''');
2175 } 2166 }
2176 2167
2177 void test_replaceConditionalWithIfElse_wrong_noEnclosingStatement() { 2168 void test_replaceConditionalWithIfElse_wrong_noEnclosingStatement() {
2178 _indexTestUnit(''' 2169 resolveTestUnit('''
2179 var v = true ? 111 : 222; 2170 var v = true ? 111 : 222;
2180 '''); 2171 ''');
2181 assertNoAssistAt('? 111', AssistKind.REPLACE_CONDITIONAL_WITH_IF_ELSE); 2172 assertNoAssistAt('? 111', AssistKind.REPLACE_CONDITIONAL_WITH_IF_ELSE);
2182 } 2173 }
2183 2174
2184 void test_replaceConditionalWithIfElse_wrong_notConditional() { 2175 void test_replaceConditionalWithIfElse_wrong_notConditional() {
2185 _indexTestUnit(''' 2176 resolveTestUnit('''
2186 main() { 2177 main() {
2187 var v = 42; 2178 var v = 42;
2188 } 2179 }
2189 '''); 2180 ''');
2190 assertNoAssistAt('v = 42', AssistKind.REPLACE_CONDITIONAL_WITH_IF_ELSE); 2181 assertNoAssistAt('v = 42', AssistKind.REPLACE_CONDITIONAL_WITH_IF_ELSE);
2191 } 2182 }
2192 2183
2193 void test_replaceIfElseWithConditional_OK_assignment() { 2184 void test_replaceIfElseWithConditional_OK_assignment() {
2194 _indexTestUnit(''' 2185 resolveTestUnit('''
2195 main() { 2186 main() {
2196 int vvv; 2187 int vvv;
2197 if (true) { 2188 if (true) {
2198 vvv = 111; 2189 vvv = 111;
2199 } else { 2190 } else {
2200 vvv = 222; 2191 vvv = 222;
2201 } 2192 }
2202 } 2193 }
2203 '''); 2194 ''');
2204 assertHasAssistAt( 2195 assertHasAssistAt(
2205 'if (true)', 2196 'if (true)',
2206 AssistKind.REPLACE_IF_ELSE_WITH_CONDITIONAL, 2197 AssistKind.REPLACE_IF_ELSE_WITH_CONDITIONAL,
2207 ''' 2198 '''
2208 main() { 2199 main() {
2209 int vvv; 2200 int vvv;
2210 vvv = true ? 111 : 222; 2201 vvv = true ? 111 : 222;
2211 } 2202 }
2212 '''); 2203 ''');
2213 } 2204 }
2214 2205
2215 void test_replaceIfElseWithConditional_OK_return() { 2206 void test_replaceIfElseWithConditional_OK_return() {
2216 _indexTestUnit(''' 2207 resolveTestUnit('''
2217 main() { 2208 main() {
2218 if (true) { 2209 if (true) {
2219 return 111; 2210 return 111;
2220 } else { 2211 } else {
2221 return 222; 2212 return 222;
2222 } 2213 }
2223 } 2214 }
2224 '''); 2215 ''');
2225 assertHasAssistAt( 2216 assertHasAssistAt(
2226 'if (true)', 2217 'if (true)',
2227 AssistKind.REPLACE_IF_ELSE_WITH_CONDITIONAL, 2218 AssistKind.REPLACE_IF_ELSE_WITH_CONDITIONAL,
2228 ''' 2219 '''
2229 main() { 2220 main() {
2230 return true ? 111 : 222; 2221 return true ? 111 : 222;
2231 } 2222 }
2232 '''); 2223 ''');
2233 } 2224 }
2234 2225
2235 void test_replaceIfElseWithConditional_wrong_expressionVsReturn() { 2226 void test_replaceIfElseWithConditional_wrong_expressionVsReturn() {
2236 _indexTestUnit(''' 2227 resolveTestUnit('''
2237 main() { 2228 main() {
2238 if (true) { 2229 if (true) {
2239 print(42); 2230 print(42);
2240 } else { 2231 } else {
2241 return; 2232 return;
2242 } 2233 }
2243 } 2234 }
2244 '''); 2235 ''');
2245 assertNoAssistAt('else', AssistKind.REPLACE_IF_ELSE_WITH_CONDITIONAL); 2236 assertNoAssistAt('else', AssistKind.REPLACE_IF_ELSE_WITH_CONDITIONAL);
2246 } 2237 }
2247 2238
2248 void test_replaceIfElseWithConditional_wrong_notIfStatement() { 2239 void test_replaceIfElseWithConditional_wrong_notIfStatement() {
2249 _indexTestUnit(''' 2240 resolveTestUnit('''
2250 main() { 2241 main() {
2251 print(0); 2242 print(0);
2252 } 2243 }
2253 '''); 2244 ''');
2254 assertNoAssistAt('print', AssistKind.REPLACE_IF_ELSE_WITH_CONDITIONAL); 2245 assertNoAssistAt('print', AssistKind.REPLACE_IF_ELSE_WITH_CONDITIONAL);
2255 } 2246 }
2256 2247
2257 void test_replaceIfElseWithConditional_wrong_notSingleStatememt() { 2248 void test_replaceIfElseWithConditional_wrong_notSingleStatememt() {
2258 _indexTestUnit(''' 2249 resolveTestUnit('''
2259 main() { 2250 main() {
2260 int vvv; 2251 int vvv;
2261 if (true) { 2252 if (true) {
2262 print(0); 2253 print(0);
2263 vvv = 111; 2254 vvv = 111;
2264 } else { 2255 } else {
2265 print(0); 2256 print(0);
2266 vvv = 222; 2257 vvv = 222;
2267 } 2258 }
2268 } 2259 }
2269 '''); 2260 ''');
2270 assertNoAssistAt('if (true)', AssistKind.REPLACE_IF_ELSE_WITH_CONDITIONAL); 2261 assertNoAssistAt('if (true)', AssistKind.REPLACE_IF_ELSE_WITH_CONDITIONAL);
2271 } 2262 }
2272 2263
2273 void test_splitAndCondition_OK_innerAndExpression() { 2264 void test_splitAndCondition_OK_innerAndExpression() {
2274 _indexTestUnit(''' 2265 resolveTestUnit('''
2275 main() { 2266 main() {
2276 if (1 == 1 && 2 == 2 && 3 == 3) { 2267 if (1 == 1 && 2 == 2 && 3 == 3) {
2277 print(0); 2268 print(0);
2278 } 2269 }
2279 } 2270 }
2280 '''); 2271 ''');
2281 assertHasAssistAt('&& 2 == 2', AssistKind.SPLIT_AND_CONDITION, ''' 2272 assertHasAssistAt('&& 2 == 2', AssistKind.SPLIT_AND_CONDITION, '''
2282 main() { 2273 main() {
2283 if (1 == 1) { 2274 if (1 == 1) {
2284 if (2 == 2 && 3 == 3) { 2275 if (2 == 2 && 3 == 3) {
2285 print(0); 2276 print(0);
2286 } 2277 }
2287 } 2278 }
2288 } 2279 }
2289 '''); 2280 ''');
2290 } 2281 }
2291 2282
2292 void test_splitAndCondition_OK_thenBlock() { 2283 void test_splitAndCondition_OK_thenBlock() {
2293 _indexTestUnit(''' 2284 resolveTestUnit('''
2294 main() { 2285 main() {
2295 if (true && false) { 2286 if (true && false) {
2296 print(0); 2287 print(0);
2297 if (3 == 3) { 2288 if (3 == 3) {
2298 print(1); 2289 print(1);
2299 } 2290 }
2300 } 2291 }
2301 } 2292 }
2302 '''); 2293 ''');
2303 assertHasAssistAt('&& false', AssistKind.SPLIT_AND_CONDITION, ''' 2294 assertHasAssistAt('&& false', AssistKind.SPLIT_AND_CONDITION, '''
2304 main() { 2295 main() {
2305 if (true) { 2296 if (true) {
2306 if (false) { 2297 if (false) {
2307 print(0); 2298 print(0);
2308 if (3 == 3) { 2299 if (3 == 3) {
2309 print(1); 2300 print(1);
2310 } 2301 }
2311 } 2302 }
2312 } 2303 }
2313 } 2304 }
2314 '''); 2305 ''');
2315 } 2306 }
2316 2307
2317 void test_splitAndCondition_OK_thenStatement() { 2308 void test_splitAndCondition_OK_thenStatement() {
2318 _indexTestUnit(''' 2309 resolveTestUnit('''
2319 main() { 2310 main() {
2320 if (true && false) 2311 if (true && false)
2321 print(0); 2312 print(0);
2322 } 2313 }
2323 '''); 2314 ''');
2324 assertHasAssistAt('&& false', AssistKind.SPLIT_AND_CONDITION, ''' 2315 assertHasAssistAt('&& false', AssistKind.SPLIT_AND_CONDITION, '''
2325 main() { 2316 main() {
2326 if (true) 2317 if (true)
2327 if (false) 2318 if (false)
2328 print(0); 2319 print(0);
2329 } 2320 }
2330 '''); 2321 ''');
2331 } 2322 }
2332 2323
2333 void test_splitAndCondition_wrong() { 2324 void test_splitAndCondition_wrong() {
2334 _indexTestUnit(''' 2325 resolveTestUnit('''
2335 main() { 2326 main() {
2336 if (1 == 1 && 2 == 2) { 2327 if (1 == 1 && 2 == 2) {
2337 print(0); 2328 print(0);
2338 } 2329 }
2339 print(3 == 3 && 4 == 4); 2330 print(3 == 3 && 4 == 4);
2340 } 2331 }
2341 '''); 2332 ''');
2342 // not binary expression 2333 // not binary expression
2343 assertNoAssistAt('main() {', AssistKind.SPLIT_AND_CONDITION); 2334 assertNoAssistAt('main() {', AssistKind.SPLIT_AND_CONDITION);
2344 // selection is not empty and includes more than just operator 2335 // selection is not empty and includes more than just operator
2345 { 2336 {
2346 length = 5; 2337 length = 5;
2347 assertNoAssistAt('&& 2 == 2', AssistKind.SPLIT_AND_CONDITION); 2338 assertNoAssistAt('&& 2 == 2', AssistKind.SPLIT_AND_CONDITION);
2348 } 2339 }
2349 } 2340 }
2350 2341
2351 void test_splitAndCondition_wrong_hasElse() { 2342 void test_splitAndCondition_wrong_hasElse() {
2352 _indexTestUnit(''' 2343 resolveTestUnit('''
2353 main() { 2344 main() {
2354 if (1 == 1 && 2 == 2) { 2345 if (1 == 1 && 2 == 2) {
2355 print(1); 2346 print(1);
2356 } else { 2347 } else {
2357 print(2); 2348 print(2);
2358 } 2349 }
2359 } 2350 }
2360 '''); 2351 ''');
2361 assertNoAssistAt('&& 2', AssistKind.SPLIT_AND_CONDITION); 2352 assertNoAssistAt('&& 2', AssistKind.SPLIT_AND_CONDITION);
2362 } 2353 }
2363 2354
2364 void test_splitAndCondition_wrong_notAnd() { 2355 void test_splitAndCondition_wrong_notAnd() {
2365 _indexTestUnit(''' 2356 resolveTestUnit('''
2366 main() { 2357 main() {
2367 if (1 == 1 || 2 == 2) { 2358 if (1 == 1 || 2 == 2) {
2368 print(0); 2359 print(0);
2369 } 2360 }
2370 } 2361 }
2371 '''); 2362 ''');
2372 assertNoAssistAt('|| 2', AssistKind.SPLIT_AND_CONDITION); 2363 assertNoAssistAt('|| 2', AssistKind.SPLIT_AND_CONDITION);
2373 } 2364 }
2374 2365
2375 void test_splitAndCondition_wrong_notPartOfIf() { 2366 void test_splitAndCondition_wrong_notPartOfIf() {
2376 _indexTestUnit(''' 2367 resolveTestUnit('''
2377 main() { 2368 main() {
2378 print(1 == 1 && 2 == 2); 2369 print(1 == 1 && 2 == 2);
2379 } 2370 }
2380 '''); 2371 ''');
2381 assertNoAssistAt('&& 2', AssistKind.SPLIT_AND_CONDITION); 2372 assertNoAssistAt('&& 2', AssistKind.SPLIT_AND_CONDITION);
2382 } 2373 }
2383 2374
2384 void test_splitAndCondition_wrong_notTopLevelAnd() { 2375 void test_splitAndCondition_wrong_notTopLevelAnd() {
2385 _indexTestUnit(''' 2376 resolveTestUnit('''
2386 main() { 2377 main() {
2387 if (true || (1 == 1 && 2 == 2)) { 2378 if (true || (1 == 1 && 2 == 2)) {
2388 print(0); 2379 print(0);
2389 } 2380 }
2390 if (true && (3 == 3 && 4 == 4)) { 2381 if (true && (3 == 3 && 4 == 4)) {
2391 print(0); 2382 print(0);
2392 } 2383 }
2393 } 2384 }
2394 '''); 2385 ''');
2395 assertNoAssistAt('&& 2', AssistKind.SPLIT_AND_CONDITION); 2386 assertNoAssistAt('&& 2', AssistKind.SPLIT_AND_CONDITION);
2396 assertNoAssistAt('&& 4', AssistKind.SPLIT_AND_CONDITION); 2387 assertNoAssistAt('&& 4', AssistKind.SPLIT_AND_CONDITION);
2397 } 2388 }
2398 2389
2399 void test_splitVariableDeclaration_OK_onName() { 2390 void test_splitVariableDeclaration_OK_onName() {
2400 _indexTestUnit(''' 2391 resolveTestUnit('''
2401 main() { 2392 main() {
2402 var v = 1; 2393 var v = 1;
2403 } 2394 }
2404 '''); 2395 ''');
2405 assertHasAssistAt('v =', AssistKind.SPLIT_VARIABLE_DECLARATION, ''' 2396 assertHasAssistAt('v =', AssistKind.SPLIT_VARIABLE_DECLARATION, '''
2406 main() { 2397 main() {
2407 var v; 2398 var v;
2408 v = 1; 2399 v = 1;
2409 } 2400 }
2410 '''); 2401 ''');
2411 } 2402 }
2412 2403
2413 void test_splitVariableDeclaration_OK_onType() { 2404 void test_splitVariableDeclaration_OK_onType() {
2414 _indexTestUnit(''' 2405 resolveTestUnit('''
2415 main() { 2406 main() {
2416 int v = 1; 2407 int v = 1;
2417 } 2408 }
2418 '''); 2409 ''');
2419 assertHasAssistAt('int ', AssistKind.SPLIT_VARIABLE_DECLARATION, ''' 2410 assertHasAssistAt('int ', AssistKind.SPLIT_VARIABLE_DECLARATION, '''
2420 main() { 2411 main() {
2421 int v; 2412 int v;
2422 v = 1; 2413 v = 1;
2423 } 2414 }
2424 '''); 2415 ''');
2425 } 2416 }
2426 2417
2427 void test_splitVariableDeclaration_OK_onVar() { 2418 void test_splitVariableDeclaration_OK_onVar() {
2428 _indexTestUnit(''' 2419 resolveTestUnit('''
2429 main() { 2420 main() {
2430 var v = 1; 2421 var v = 1;
2431 } 2422 }
2432 '''); 2423 ''');
2433 assertHasAssistAt('var ', AssistKind.SPLIT_VARIABLE_DECLARATION, ''' 2424 assertHasAssistAt('var ', AssistKind.SPLIT_VARIABLE_DECLARATION, '''
2434 main() { 2425 main() {
2435 var v; 2426 var v;
2436 v = 1; 2427 v = 1;
2437 } 2428 }
2438 '''); 2429 ''');
2439 } 2430 }
2440 2431
2441 void test_splitVariableDeclaration_wrong_notOneVariable() { 2432 void test_splitVariableDeclaration_wrong_notOneVariable() {
2442 _indexTestUnit(''' 2433 resolveTestUnit('''
2443 main() { 2434 main() {
2444 var v = 1, v2; 2435 var v = 1, v2;
2445 } 2436 }
2446 '''); 2437 ''');
2447 assertNoAssistAt('v = 1', AssistKind.SPLIT_VARIABLE_DECLARATION); 2438 assertNoAssistAt('v = 1', AssistKind.SPLIT_VARIABLE_DECLARATION);
2448 } 2439 }
2449 2440
2450 void test_surroundWith_block() { 2441 void test_surroundWith_block() {
2451 _indexTestUnit(''' 2442 resolveTestUnit('''
2452 main() { 2443 main() {
2453 // start 2444 // start
2454 print(0); 2445 print(0);
2455 print(1); 2446 print(1);
2456 // end 2447 // end
2457 } 2448 }
2458 '''); 2449 ''');
2459 _setStartEndSelection(); 2450 _setStartEndSelection();
2460 assertHasAssist(AssistKind.SURROUND_WITH_BLOCK, ''' 2451 assertHasAssist(AssistKind.SURROUND_WITH_BLOCK, '''
2461 main() { 2452 main() {
2462 // start 2453 // start
2463 { 2454 {
2464 print(0); 2455 print(0);
2465 print(1); 2456 print(1);
2466 } 2457 }
2467 // end 2458 // end
2468 } 2459 }
2469 '''); 2460 ''');
2470 } 2461 }
2471 2462
2472 void test_surroundWith_doWhile() { 2463 void test_surroundWith_doWhile() {
2473 _indexTestUnit(''' 2464 resolveTestUnit('''
2474 main() { 2465 main() {
2475 // start 2466 // start
2476 print(0); 2467 print(0);
2477 print(1); 2468 print(1);
2478 // end 2469 // end
2479 } 2470 }
2480 '''); 2471 ''');
2481 _setStartEndSelection(); 2472 _setStartEndSelection();
2482 assertHasAssist(AssistKind.SURROUND_WITH_DO_WHILE, ''' 2473 assertHasAssist(AssistKind.SURROUND_WITH_DO_WHILE, '''
2483 main() { 2474 main() {
2484 // start 2475 // start
2485 do { 2476 do {
2486 print(0); 2477 print(0);
2487 print(1); 2478 print(1);
2488 } while (condition); 2479 } while (condition);
2489 // end 2480 // end
2490 } 2481 }
2491 '''); 2482 ''');
2492 } 2483 }
2493 2484
2494 void test_surroundWith_for() { 2485 void test_surroundWith_for() {
2495 _indexTestUnit(''' 2486 resolveTestUnit('''
2496 main() { 2487 main() {
2497 // start 2488 // start
2498 print(0); 2489 print(0);
2499 print(1); 2490 print(1);
2500 // end 2491 // end
2501 } 2492 }
2502 '''); 2493 ''');
2503 _setStartEndSelection(); 2494 _setStartEndSelection();
2504 assertHasAssist(AssistKind.SURROUND_WITH_FOR, ''' 2495 assertHasAssist(AssistKind.SURROUND_WITH_FOR, '''
2505 main() { 2496 main() {
2506 // start 2497 // start
2507 for (var v = init; condition; increment) { 2498 for (var v = init; condition; increment) {
2508 print(0); 2499 print(0);
2509 print(1); 2500 print(1);
2510 } 2501 }
2511 // end 2502 // end
2512 } 2503 }
2513 '''); 2504 ''');
2514 } 2505 }
2515 2506
2516 void test_surroundWith_forIn() { 2507 void test_surroundWith_forIn() {
2517 _indexTestUnit(''' 2508 resolveTestUnit('''
2518 main() { 2509 main() {
2519 // start 2510 // start
2520 print(0); 2511 print(0);
2521 print(1); 2512 print(1);
2522 // end 2513 // end
2523 } 2514 }
2524 '''); 2515 ''');
2525 _setStartEndSelection(); 2516 _setStartEndSelection();
2526 assertHasAssist(AssistKind.SURROUND_WITH_FOR_IN, ''' 2517 assertHasAssist(AssistKind.SURROUND_WITH_FOR_IN, '''
2527 main() { 2518 main() {
2528 // start 2519 // start
2529 for (var item in iterable) { 2520 for (var item in iterable) {
2530 print(0); 2521 print(0);
2531 print(1); 2522 print(1);
2532 } 2523 }
2533 // end 2524 // end
2534 } 2525 }
2535 '''); 2526 ''');
2536 } 2527 }
2537 2528
2538 void test_surroundWith_if() { 2529 void test_surroundWith_if() {
2539 _indexTestUnit(''' 2530 resolveTestUnit('''
2540 main() { 2531 main() {
2541 // start 2532 // start
2542 print(0); 2533 print(0);
2543 print(1); 2534 print(1);
2544 // end 2535 // end
2545 } 2536 }
2546 '''); 2537 ''');
2547 _setStartEndSelection(); 2538 _setStartEndSelection();
2548 assertHasAssist(AssistKind.SURROUND_WITH_IF, ''' 2539 assertHasAssist(AssistKind.SURROUND_WITH_IF, '''
2549 main() { 2540 main() {
2550 // start 2541 // start
2551 if (condition) { 2542 if (condition) {
2552 print(0); 2543 print(0);
2553 print(1); 2544 print(1);
2554 } 2545 }
2555 // end 2546 // end
2556 } 2547 }
2557 '''); 2548 ''');
2558 } 2549 }
2559 2550
2560 void test_surroundWith_tryCatch() { 2551 void test_surroundWith_tryCatch() {
2561 _indexTestUnit(''' 2552 resolveTestUnit('''
2562 main() { 2553 main() {
2563 // start 2554 // start
2564 print(0); 2555 print(0);
2565 print(1); 2556 print(1);
2566 // end 2557 // end
2567 } 2558 }
2568 '''); 2559 ''');
2569 _setStartEndSelection(); 2560 _setStartEndSelection();
2570 assertHasAssist(AssistKind.SURROUND_WITH_TRY_CATCH, ''' 2561 assertHasAssist(AssistKind.SURROUND_WITH_TRY_CATCH, '''
2571 main() { 2562 main() {
2572 // start 2563 // start
2573 try { 2564 try {
2574 print(0); 2565 print(0);
2575 print(1); 2566 print(1);
2576 } on Exception catch (e) { 2567 } on Exception catch (e) {
2577 // TODO 2568 // TODO
2578 } 2569 }
2579 // end 2570 // end
2580 } 2571 }
2581 '''); 2572 ''');
2582 } 2573 }
2583 2574
2584 void test_surroundWith_tryFinally() { 2575 void test_surroundWith_tryFinally() {
2585 _indexTestUnit(''' 2576 resolveTestUnit('''
2586 main() { 2577 main() {
2587 // start 2578 // start
2588 print(0); 2579 print(0);
2589 print(1); 2580 print(1);
2590 // end 2581 // end
2591 } 2582 }
2592 '''); 2583 ''');
2593 _setStartEndSelection(); 2584 _setStartEndSelection();
2594 assertHasAssist(AssistKind.SURROUND_WITH_TRY_FINALLY, ''' 2585 assertHasAssist(AssistKind.SURROUND_WITH_TRY_FINALLY, '''
2595 main() { 2586 main() {
2596 // start 2587 // start
2597 try { 2588 try {
2598 print(0); 2589 print(0);
2599 print(1); 2590 print(1);
2600 } finally { 2591 } finally {
2601 // TODO 2592 // TODO
2602 } 2593 }
2603 // end 2594 // end
2604 } 2595 }
2605 '''); 2596 ''');
2606 } 2597 }
2607 2598
2608 void test_surroundWith_while() { 2599 void test_surroundWith_while() {
2609 _indexTestUnit(''' 2600 resolveTestUnit('''
2610 main() { 2601 main() {
2611 // start 2602 // start
2612 print(0); 2603 print(0);
2613 print(1); 2604 print(1);
2614 // end 2605 // end
2615 } 2606 }
2616 '''); 2607 ''');
2617 _setStartEndSelection(); 2608 _setStartEndSelection();
2618 assertHasAssist(AssistKind.SURROUND_WITH_WHILE, ''' 2609 assertHasAssist(AssistKind.SURROUND_WITH_WHILE, '''
2619 main() { 2610 main() {
2620 // start 2611 // start
2621 while (condition) { 2612 while (condition) {
2622 print(0); 2613 print(0);
2623 print(1); 2614 print(1);
2624 } 2615 }
2625 // end 2616 // end
2626 } 2617 }
2627 '''); 2618 ''');
2628 } 2619 }
2629 2620
2630 /** 2621 /**
2631 * Computes assists and verifies that there is an assist of the given kind. 2622 * Computes assists and verifies that there is an assist of the given kind.
2632 */ 2623 */
2633 Assist _assertHasAssist(AssistKind kind) { 2624 Assist _assertHasAssist(AssistKind kind) {
2634 List<Assist> assists = 2625 List<Assist> assists = computeAssists(testUnit, offset, length);
2635 computeAssists(searchEngine, testUnit, offset, length);
2636 for (Assist assist in assists) { 2626 for (Assist assist in assists) {
2637 if (assist.kind == kind) { 2627 if (assist.kind == kind) {
2638 return assist; 2628 return assist;
2639 } 2629 }
2640 } 2630 }
2641 throw fail('Expected to find assist $kind in\n${assists.join('\n')}'); 2631 throw fail('Expected to find assist $kind in\n${assists.join('\n')}');
2642 } 2632 }
2643 2633
2644 void _assertLinkedGroup(LinkedEditGroup group, List<String> expectedStrings, 2634 void _assertLinkedGroup(LinkedEditGroup group, List<String> expectedStrings,
2645 [List<LinkedEditSuggestion> expectedSuggestions]) { 2635 [List<LinkedEditSuggestion> expectedSuggestions]) {
2646 List<Position> expectedPositions = _findResultPositions(expectedStrings); 2636 List<Position> expectedPositions = _findResultPositions(expectedStrings);
2647 expect(group.positions, unorderedEquals(expectedPositions)); 2637 expect(group.positions, unorderedEquals(expectedPositions));
2648 if (expectedSuggestions != null) { 2638 if (expectedSuggestions != null) {
2649 expect(group.suggestions, unorderedEquals(expectedSuggestions)); 2639 expect(group.suggestions, unorderedEquals(expectedSuggestions));
2650 } 2640 }
2651 } 2641 }
2652 2642
2653 List<Position> _findResultPositions(List<String> searchStrings) { 2643 List<Position> _findResultPositions(List<String> searchStrings) {
2654 List<Position> positions = <Position>[]; 2644 List<Position> positions = <Position>[];
2655 for (String search in searchStrings) { 2645 for (String search in searchStrings) {
2656 int offset = resultCode.indexOf(search); 2646 int offset = resultCode.indexOf(search);
2657 positions.add(new Position(testFile, offset)); 2647 positions.add(new Position(testFile, offset));
2658 } 2648 }
2659 return positions; 2649 return positions;
2660 } 2650 }
2661 2651
2662 void _indexTestUnit(String code) {
2663 resolveTestUnit(code);
2664 index.indexUnit(context, testUnit);
2665 }
2666
2667 void _setStartEndSelection() { 2652 void _setStartEndSelection() {
2668 offset = findOffset('// start\n') + '// start\n'.length; 2653 offset = findOffset('// start\n') + '// start\n'.length;
2669 length = findOffset('// end') - offset; 2654 length = findOffset('// end') - offset;
2670 } 2655 }
2671 } 2656 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698