OLD | NEW |
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 library test.services.correction.assist; | 5 library test.services.correction.assist; |
6 | 6 |
7 import 'package:analysis_services/correction/assist.dart'; | 7 import 'package:analysis_services/correction/assist.dart'; |
8 import 'package:analysis_services/correction/change.dart'; | 8 import 'package:analysis_services/correction/change.dart'; |
9 import 'package:analysis_services/index/index.dart'; | 9 import 'package:analysis_services/index/index.dart'; |
10 import 'package:analysis_services/index/local_memory_index.dart'; | 10 import 'package:analysis_services/index/local_memory_index.dart'; |
11 import 'package:analysis_services/src/search/search_engine.dart'; | 11 import 'package:analysis_services/src/search/search_engine.dart'; |
12 import 'package:analysis_testing/abstract_single_unit.dart'; | 12 import 'package:analysis_testing/abstract_single_unit.dart'; |
13 import 'package:analysis_testing/reflective_tests.dart'; | 13 import 'package:analysis_testing/reflective_tests.dart'; |
14 import 'package:collection/collection.dart'; | |
15 import 'package:unittest/unittest.dart'; | 14 import 'package:unittest/unittest.dart'; |
16 | 15 |
17 | 16 |
18 main() { | 17 main() { |
19 groupSep = ' | '; | 18 groupSep = ' | '; |
20 runReflectiveTests(AssistProcessorTest); | 19 runReflectiveTests(AssistProcessorTest); |
21 } | 20 } |
22 | 21 |
23 | 22 |
24 @ReflectiveTestCase() | 23 @ReflectiveTestCase() |
(...skipping 12 matching lines...) Expand all Loading... |
37 /** | 36 /** |
38 * Asserts that there is an [Assist] of the given [kind] at [offset] which | 37 * Asserts that there is an [Assist] of the given [kind] at [offset] which |
39 * produces the [expected] code when applied to [testCode]. | 38 * produces the [expected] code when applied to [testCode]. |
40 */ | 39 */ |
41 void assertHasAssist(AssistKind kind, String expected) { | 40 void assertHasAssist(AssistKind kind, String expected) { |
42 assist = _assertHasAssist(kind); | 41 assist = _assertHasAssist(kind); |
43 change = assist.change; | 42 change = assist.change; |
44 // apply to "file" | 43 // apply to "file" |
45 List<FileEdit> fileEdits = change.fileEdits; | 44 List<FileEdit> fileEdits = change.fileEdits; |
46 expect(fileEdits, hasLength(1)); | 45 expect(fileEdits, hasLength(1)); |
47 resultCode = _applyEdits(testCode, change.fileEdits[0].edits); | 46 // TODO(paulberry): should the code under test be responsible for sorting |
| 47 // the edits? |
| 48 resultCode = Edit.applySorted(testCode, change.fileEdits[0].edits); |
48 // verify | 49 // verify |
49 expect(resultCode, expected); | 50 expect(resultCode, expected); |
50 } | 51 } |
51 | 52 |
52 /** | 53 /** |
53 * Calls [assertHasAssist] at the offset of [offsetSearch] in [testCode]. | 54 * Calls [assertHasAssist] at the offset of [offsetSearch] in [testCode]. |
54 */ | 55 */ |
55 void assertHasAssistAt(String offsetSearch, AssistKind kind, | 56 void assertHasAssistAt(String offsetSearch, AssistKind kind, |
56 String expected) { | 57 String expected) { |
57 offset = findOffset(offsetSearch); | 58 offset = findOffset(offsetSearch); |
(...skipping 2124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2182 // start | 2183 // start |
2183 while (condition) { | 2184 while (condition) { |
2184 print(0); | 2185 print(0); |
2185 print(1); | 2186 print(1); |
2186 } | 2187 } |
2187 // end | 2188 // end |
2188 } | 2189 } |
2189 '''); | 2190 '''); |
2190 } | 2191 } |
2191 | 2192 |
2192 String _applyEdits(String code, List<Edit> edits) { | |
2193 mergeSort(edits, compare: (a, b) => a.offset - b.offset); | |
2194 edits.reversed.forEach((Edit edit) { | |
2195 code = code.substring(0, edit.offset) + | |
2196 edit.replacement + | |
2197 code.substring(edit.end); | |
2198 }); | |
2199 return code; | |
2200 } | |
2201 | |
2202 /** | 2193 /** |
2203 * Computes assists and verifies that there is an assist of the given kind. | 2194 * Computes assists and verifies that there is an assist of the given kind. |
2204 */ | 2195 */ |
2205 Assist _assertHasAssist(AssistKind kind) { | 2196 Assist _assertHasAssist(AssistKind kind) { |
2206 List<Assist> assists = | 2197 List<Assist> assists = |
2207 computeAssists(searchEngine, testUnit, offset, length); | 2198 computeAssists(searchEngine, testUnit, offset, length); |
2208 for (Assist assist in assists) { | 2199 for (Assist assist in assists) { |
2209 if (assist.kind == kind) { | 2200 if (assist.kind == kind) { |
2210 return assist; | 2201 return assist; |
2211 } | 2202 } |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2249 void _indexTestUnit(String code) { | 2240 void _indexTestUnit(String code) { |
2250 resolveTestUnit(code); | 2241 resolveTestUnit(code); |
2251 index.indexUnit(context, testUnit); | 2242 index.indexUnit(context, testUnit); |
2252 } | 2243 } |
2253 | 2244 |
2254 void _setStartEndSelection() { | 2245 void _setStartEndSelection() { |
2255 offset = findOffset('// start\n') + '// start\n'.length; | 2246 offset = findOffset('// start\n') + '// start\n'.length; |
2256 length = findOffset('// end') - offset; | 2247 length = findOffset('// end') - offset; |
2257 } | 2248 } |
2258 } | 2249 } |
OLD | NEW |