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

Side by Side Diff: pkg/analysis_server/test/src/utilities/change_builder_dart_test.dart

Issue 2688513003: Update ChangeBuilder to the new driver (Closed)
Patch Set: Created 3 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
OLDNEW
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, 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 analysis_server.test.src.utilities.change_builder_dart_test;
6
7 import 'package:analysis_server/plugin/protocol/protocol.dart'; 5 import 'package:analysis_server/plugin/protocol/protocol.dart';
8 import 'package:analysis_server/src/provisional/edit/utilities/change_builder_co re.dart'; 6 import 'package:analysis_server/src/provisional/edit/utilities/change_builder_co re.dart';
9 import 'package:analysis_server/src/provisional/edit/utilities/change_builder_da rt.dart'; 7 import 'package:analysis_server/src/provisional/edit/utilities/change_builder_da rt.dart';
10 import 'package:analysis_server/src/utilities/change_builder_dart.dart'; 8 import 'package:analysis_server/src/utilities/change_builder_dart.dart';
11 import 'package:analyzer/dart/ast/ast.dart'; 9 import 'package:analyzer/dart/ast/ast.dart';
12 import 'package:analyzer/dart/ast/standard_resolution_map.dart'; 10 import 'package:analyzer/dart/ast/standard_resolution_map.dart';
13 import 'package:analyzer/dart/element/element.dart'; 11 import 'package:analyzer/dart/element/element.dart';
14 import 'package:analyzer/src/generated/source.dart';
15 import 'package:test/test.dart'; 12 import 'package:test/test.dart';
16 import 'package:test_reflective_loader/test_reflective_loader.dart'; 13 import 'package:test_reflective_loader/test_reflective_loader.dart';
17 14
18 import '../../abstract_context.dart'; 15 import '../../abstract_context.dart';
19 16
20 main() { 17 main() {
21 defineReflectiveSuite(() { 18 defineReflectiveSuite(() {
22 defineReflectiveTests(DartChangeBuilderImplTest); 19 defineReflectiveTests(DartChangeBuilderImplTest);
23 defineReflectiveTests(DartEditBuilderImplTest); 20 defineReflectiveTests(DartEditBuilderImplTest);
24 defineReflectiveTests(DartFileEditBuilderImplTest); 21 defineReflectiveTests(DartFileEditBuilderImplTest);
25 }); 22 });
26 } 23 }
27 24
28 @reflectiveTest 25 @reflectiveTest
29 class DartChangeBuilderImplTest extends AbstractContextTest { 26 class DartChangeBuilderImplTest extends AbstractContextTest {
27 @override
28 bool get enableNewAnalysisDriver => true;
29
30 test_createFileEditBuilder() async { 30 test_createFileEditBuilder() async {
31 Source source = addSource('/test.dart', 'library test;'); 31 String path = '/test.dart';
32 await resolveLibraryUnit(source); 32 addSource(path, 'library test;');
33 await driver.getResult(path);
scheglov 2017/02/08 21:09:10 You don't use this result, maybe you don't need to
Brian Wilkerson 2017/02/09 03:22:42 Removed
33 int timeStamp = 54; 34 int timeStamp = 54;
34 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); 35 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
35 DartFileEditBuilderImpl fileEditBuilder = 36 DartFileEditBuilderImpl fileEditBuilder =
36 builder.createFileEditBuilder(source, timeStamp); 37 await builder.createFileEditBuilder(path, timeStamp);
37 expect(fileEditBuilder, new isInstanceOf<DartFileEditBuilder>()); 38 expect(fileEditBuilder, new isInstanceOf<DartFileEditBuilder>());
38 SourceFileEdit fileEdit = fileEditBuilder.fileEdit; 39 SourceFileEdit fileEdit = fileEditBuilder.fileEdit;
39 expect(fileEdit.file, source.fullName); 40 expect(fileEdit.file, path);
40 expect(fileEdit.fileStamp, timeStamp); 41 expect(fileEdit.fileStamp, timeStamp);
41 } 42 }
42 } 43 }
43 44
44 @reflectiveTest 45 @reflectiveTest
45 class DartEditBuilderImplTest extends AbstractContextTest { 46 class DartEditBuilderImplTest extends AbstractContextTest {
47 @override
48 bool get enableNewAnalysisDriver => true;
49
46 SourceEdit getEdit(DartChangeBuilderImpl builder) { 50 SourceEdit getEdit(DartChangeBuilderImpl builder) {
47 SourceChange sourceChange = builder.sourceChange; 51 SourceChange sourceChange = builder.sourceChange;
48 expect(sourceChange, isNotNull); 52 expect(sourceChange, isNotNull);
49 List<SourceFileEdit> fileEdits = sourceChange.edits; 53 List<SourceFileEdit> fileEdits = sourceChange.edits;
50 expect(fileEdits, hasLength(1)); 54 expect(fileEdits, hasLength(1));
51 SourceFileEdit fileEdit = fileEdits[0]; 55 SourceFileEdit fileEdit = fileEdits[0];
52 expect(fileEdit, isNotNull); 56 expect(fileEdit, isNotNull);
53 List<SourceEdit> edits = fileEdit.edits; 57 List<SourceEdit> edits = fileEdit.edits;
54 expect(edits, hasLength(1)); 58 expect(edits, hasLength(1));
55 return edits[0]; 59 return edits[0];
56 } 60 }
57 61
58 test_writeClassDeclaration_interfaces() async { 62 test_writeClassDeclaration_interfaces() async {
59 Source source = addSource('/test.dart', 'class A {}'); 63 String path = '/test.dart';
60 CompilationUnit unit = await resolveLibraryUnit(source); 64 addSource(path, 'class A {}');
65 CompilationUnit unit = (await driver.getResult(path))?.unit;
61 ClassDeclaration declaration = unit.declarations[0]; 66 ClassDeclaration declaration = unit.declarations[0];
62 67
63 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); 68 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
64 builder.addFileEdit(source, 1, (FileEditBuilder builder) { 69 await builder.addFileEdit(path, 1, (FileEditBuilder builder) {
65 builder.addInsertion(0, (EditBuilder builder) { 70 builder.addInsertion(0, (EditBuilder builder) {
66 (builder as DartEditBuilder).writeClassDeclaration('C', interfaces: [ 71 (builder as DartEditBuilder).writeClassDeclaration('C', interfaces: [
67 resolutionMap.elementDeclaredByClassDeclaration(declaration).type 72 resolutionMap.elementDeclaredByClassDeclaration(declaration).type
68 ]); 73 ]);
69 }); 74 });
70 }); 75 });
71 SourceEdit edit = getEdit(builder); 76 SourceEdit edit = getEdit(builder);
72 expect( 77 expect(
73 edit.replacement, equalsIgnoringWhitespace('class C implements A { }')); 78 edit.replacement, equalsIgnoringWhitespace('class C implements A { }'));
74 } 79 }
75 80
76 test_writeClassDeclaration_isAbstract() async { 81 test_writeClassDeclaration_isAbstract() async {
77 Source source = addSource('/test.dart', ''); 82 String path = '/test.dart';
78 await resolveLibraryUnit(source); 83 addSource(path, '');
84 await driver.getResult(path);
79 85
80 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); 86 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
81 builder.addFileEdit(source, 1, (FileEditBuilder builder) { 87 await builder.addFileEdit(path, 1, (FileEditBuilder builder) {
82 builder.addInsertion(0, (EditBuilder builder) { 88 builder.addInsertion(0, (EditBuilder builder) {
83 (builder as DartEditBuilder) 89 (builder as DartEditBuilder)
84 .writeClassDeclaration('C', isAbstract: true); 90 .writeClassDeclaration('C', isAbstract: true);
85 }); 91 });
86 }); 92 });
87 SourceEdit edit = getEdit(builder); 93 SourceEdit edit = getEdit(builder);
88 expect(edit.replacement, equalsIgnoringWhitespace('abstract class C { }')); 94 expect(edit.replacement, equalsIgnoringWhitespace('abstract class C { }'));
89 } 95 }
90 96
91 test_writeClassDeclaration_memberWriter() async { 97 test_writeClassDeclaration_memberWriter() async {
92 Source source = addSource('/test.dart', ''); 98 String path = '/test.dart';
93 await resolveLibraryUnit(source); 99 addSource(path, '');
100 await driver.getResult(path);
94 101
95 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); 102 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
96 builder.addFileEdit(source, 1, (FileEditBuilder builder) { 103 await builder.addFileEdit(path, 1, (FileEditBuilder builder) {
97 builder.addInsertion(0, (EditBuilder builder) { 104 builder.addInsertion(0, (EditBuilder builder) {
98 (builder as DartEditBuilder).writeClassDeclaration('C', 105 (builder as DartEditBuilder).writeClassDeclaration('C',
99 memberWriter: () { 106 memberWriter: () {
100 builder.write('/**/'); 107 builder.write('/**/');
101 }); 108 });
102 }); 109 });
103 }); 110 });
104 SourceEdit edit = getEdit(builder); 111 SourceEdit edit = getEdit(builder);
105 expect(edit.replacement, equalsIgnoringWhitespace('class C { /**/ }')); 112 expect(edit.replacement, equalsIgnoringWhitespace('class C { /**/ }'));
106 } 113 }
107 114
108 test_writeClassDeclaration_mixins_noSuperclass() async { 115 test_writeClassDeclaration_mixins_noSuperclass() async {
109 Source source = addSource('/test.dart', 'class A {}'); 116 String path = '/test.dart';
110 CompilationUnit unit = await resolveLibraryUnit(source); 117 addSource(path, 'class A {}');
118 CompilationUnit unit = (await driver.getResult(path))?.unit;
111 ClassDeclaration classA = unit.declarations[0]; 119 ClassDeclaration classA = unit.declarations[0];
scheglov 2017/02/08 21:09:10 Here you do use, the result, but there is a cheape
112 120
113 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); 121 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
114 builder.addFileEdit(source, 1, (FileEditBuilder builder) { 122 await builder.addFileEdit(path, 1, (FileEditBuilder builder) {
115 builder.addInsertion(0, (EditBuilder builder) { 123 builder.addInsertion(0, (EditBuilder builder) {
116 (builder as DartEditBuilder).writeClassDeclaration('C', mixins: [ 124 (builder as DartEditBuilder).writeClassDeclaration('C', mixins: [
117 resolutionMap.elementDeclaredByClassDeclaration(classA).type 125 resolutionMap.elementDeclaredByClassDeclaration(classA).type
118 ]); 126 ]);
119 }); 127 });
120 }); 128 });
121 SourceEdit edit = getEdit(builder); 129 SourceEdit edit = getEdit(builder);
122 expect(edit.replacement, 130 expect(edit.replacement,
123 equalsIgnoringWhitespace('class C extends Object with A { }')); 131 equalsIgnoringWhitespace('class C extends Object with A { }'));
124 } 132 }
125 133
126 test_writeClassDeclaration_mixins_superclass() async { 134 test_writeClassDeclaration_mixins_superclass() async {
127 Source source = addSource('/test.dart', 'class A {} class B {}'); 135 String path = '/test.dart';
128 CompilationUnit unit = await resolveLibraryUnit(source); 136 addSource(path, 'class A {} class B {}');
137 CompilationUnit unit = (await driver.getResult(path))?.unit;
129 ClassDeclaration classA = unit.declarations[0]; 138 ClassDeclaration classA = unit.declarations[0];
130 ClassDeclaration classB = unit.declarations[1]; 139 ClassDeclaration classB = unit.declarations[1];
131 140
132 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); 141 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
133 builder.addFileEdit(source, 1, (FileEditBuilder builder) { 142 await builder.addFileEdit(path, 1, (FileEditBuilder builder) {
134 builder.addInsertion(0, (EditBuilder builder) { 143 builder.addInsertion(0, (EditBuilder builder) {
135 (builder as DartEditBuilder).writeClassDeclaration('C', 144 (builder as DartEditBuilder).writeClassDeclaration('C',
136 mixins: [ 145 mixins: [
137 resolutionMap.elementDeclaredByClassDeclaration(classB).type 146 resolutionMap.elementDeclaredByClassDeclaration(classB).type
138 ], 147 ],
139 superclass: 148 superclass:
140 resolutionMap.elementDeclaredByClassDeclaration(classA).type); 149 resolutionMap.elementDeclaredByClassDeclaration(classA).type);
141 }); 150 });
142 }); 151 });
143 SourceEdit edit = getEdit(builder); 152 SourceEdit edit = getEdit(builder);
144 expect(edit.replacement, 153 expect(edit.replacement,
145 equalsIgnoringWhitespace('class C extends A with B { }')); 154 equalsIgnoringWhitespace('class C extends A with B { }'));
146 } 155 }
147 156
148 test_writeClassDeclaration_nameGroupName() async { 157 test_writeClassDeclaration_nameGroupName() async {
149 Source source = addSource('/test.dart', ''); 158 String path = '/test.dart';
150 await resolveLibraryUnit(source); 159 addSource(path, '');
160 await driver.getResult(path);
151 161
152 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); 162 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
153 builder.addFileEdit(source, 1, (FileEditBuilder builder) { 163 await builder.addFileEdit(path, 1, (FileEditBuilder builder) {
154 builder.addInsertion(0, (EditBuilder builder) { 164 builder.addInsertion(0, (EditBuilder builder) {
155 (builder as DartEditBuilder) 165 (builder as DartEditBuilder)
156 .writeClassDeclaration('C', nameGroupName: 'name'); 166 .writeClassDeclaration('C', nameGroupName: 'name');
157 }); 167 });
158 }); 168 });
159 SourceEdit edit = getEdit(builder); 169 SourceEdit edit = getEdit(builder);
160 expect(edit.replacement, equalsIgnoringWhitespace('class C { }')); 170 expect(edit.replacement, equalsIgnoringWhitespace('class C { }'));
161 171
162 List<LinkedEditGroup> linkedEditGroups = 172 List<LinkedEditGroup> linkedEditGroups =
163 builder.sourceChange.linkedEditGroups; 173 builder.sourceChange.linkedEditGroups;
164 expect(linkedEditGroups, hasLength(1)); 174 expect(linkedEditGroups, hasLength(1));
165 LinkedEditGroup group = linkedEditGroups[0]; 175 LinkedEditGroup group = linkedEditGroups[0];
166 expect(group.length, 1); 176 expect(group.length, 1);
167 expect(group.positions, hasLength(1)); 177 expect(group.positions, hasLength(1));
168 } 178 }
169 179
170 test_writeClassDeclaration_superclass() async { 180 test_writeClassDeclaration_superclass() async {
171 Source source = addSource('/test.dart', 'class B {}'); 181 String path = '/test.dart';
172 CompilationUnit unit = await resolveLibraryUnit(source); 182 addSource(path, 'class B {}');
183 CompilationUnit unit = (await driver.getResult(path))?.unit;
173 ClassDeclaration declaration = unit.declarations[0]; 184 ClassDeclaration declaration = unit.declarations[0];
174 185
175 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); 186 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
176 builder.addFileEdit(source, 1, (FileEditBuilder builder) { 187 await builder.addFileEdit(path, 1, (FileEditBuilder builder) {
177 builder.addInsertion(0, (EditBuilder builder) { 188 builder.addInsertion(0, (EditBuilder builder) {
178 (builder as DartEditBuilder).writeClassDeclaration('C', 189 (builder as DartEditBuilder).writeClassDeclaration('C',
179 superclass: resolutionMap 190 superclass: resolutionMap
180 .elementDeclaredByClassDeclaration(declaration) 191 .elementDeclaredByClassDeclaration(declaration)
181 .type); 192 .type);
182 }); 193 });
183 }); 194 });
184 SourceEdit edit = getEdit(builder); 195 SourceEdit edit = getEdit(builder);
185 expect(edit.replacement, equalsIgnoringWhitespace('class C extends B { }')); 196 expect(edit.replacement, equalsIgnoringWhitespace('class C extends B { }'));
186 } 197 }
187 198
188 test_writeFieldDeclaration_initializerWriter() async { 199 test_writeFieldDeclaration_initializerWriter() async {
200 String path = '/test.dart';
189 String content = 'class A {}'; 201 String content = 'class A {}';
190 Source source = addSource('/test.dart', content); 202 addSource(path, content);
191 await resolveLibraryUnit(source); 203 await driver.getResult(path);
192 204
193 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); 205 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
194 builder.addFileEdit(source, 1, (FileEditBuilder builder) { 206 await builder.addFileEdit(path, 1, (FileEditBuilder builder) {
195 builder.addInsertion(content.length - 1, (EditBuilder builder) { 207 builder.addInsertion(content.length - 1, (EditBuilder builder) {
196 (builder as DartEditBuilder).writeFieldDeclaration('f', 208 (builder as DartEditBuilder).writeFieldDeclaration('f',
197 initializerWriter: () { 209 initializerWriter: () {
198 builder.write('e'); 210 builder.write('e');
199 }); 211 });
200 }); 212 });
201 }); 213 });
202 SourceEdit edit = getEdit(builder); 214 SourceEdit edit = getEdit(builder);
203 expect(edit.replacement, equalsIgnoringWhitespace('var f = e;')); 215 expect(edit.replacement, equalsIgnoringWhitespace('var f = e;'));
204 } 216 }
205 217
206 test_writeFieldDeclaration_isConst() async { 218 test_writeFieldDeclaration_isConst() async {
219 String path = '/test.dart';
207 String content = 'class A {}'; 220 String content = 'class A {}';
208 Source source = addSource('/test.dart', content); 221 addSource(path, content);
209 await resolveLibraryUnit(source); 222 await driver.getResult(path);
210 223
211 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); 224 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
212 builder.addFileEdit(source, 1, (FileEditBuilder builder) { 225 await builder.addFileEdit(path, 1, (FileEditBuilder builder) {
213 builder.addInsertion(content.length - 1, (EditBuilder builder) { 226 builder.addInsertion(content.length - 1, (EditBuilder builder) {
214 (builder as DartEditBuilder).writeFieldDeclaration('f', isConst: true); 227 (builder as DartEditBuilder).writeFieldDeclaration('f', isConst: true);
215 }); 228 });
216 }); 229 });
217 SourceEdit edit = getEdit(builder); 230 SourceEdit edit = getEdit(builder);
218 expect(edit.replacement, equalsIgnoringWhitespace('const f;')); 231 expect(edit.replacement, equalsIgnoringWhitespace('const f;'));
219 } 232 }
220 233
221 test_writeFieldDeclaration_isConst_isFinal() async { 234 test_writeFieldDeclaration_isConst_isFinal() async {
235 String path = '/test.dart';
222 String content = 'class A {}'; 236 String content = 'class A {}';
223 Source source = addSource('/test.dart', content); 237 addSource(path, content);
224 await resolveLibraryUnit(source); 238 await driver.getResult(path);
225 239
226 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); 240 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
227 builder.addFileEdit(source, 1, (FileEditBuilder builder) { 241 await builder.addFileEdit(path, 1, (FileEditBuilder builder) {
228 builder.addInsertion(content.length - 1, (EditBuilder builder) { 242 builder.addInsertion(content.length - 1, (EditBuilder builder) {
229 (builder as DartEditBuilder) 243 (builder as DartEditBuilder)
230 .writeFieldDeclaration('f', isConst: true, isFinal: true); 244 .writeFieldDeclaration('f', isConst: true, isFinal: true);
231 }); 245 });
232 }); 246 });
233 SourceEdit edit = getEdit(builder); 247 SourceEdit edit = getEdit(builder);
234 expect(edit.replacement, equalsIgnoringWhitespace('const f;')); 248 expect(edit.replacement, equalsIgnoringWhitespace('const f;'));
235 } 249 }
236 250
237 test_writeFieldDeclaration_isFinal() async { 251 test_writeFieldDeclaration_isFinal() async {
252 String path = '/test.dart';
238 String content = 'class A {}'; 253 String content = 'class A {}';
239 Source source = addSource('/test.dart', content); 254 addSource(path, content);
240 await resolveLibraryUnit(source); 255 await driver.getResult(path);
241 256
242 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); 257 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
243 builder.addFileEdit(source, 1, (FileEditBuilder builder) { 258 await builder.addFileEdit(path, 1, (FileEditBuilder builder) {
244 builder.addInsertion(content.length - 1, (EditBuilder builder) { 259 builder.addInsertion(content.length - 1, (EditBuilder builder) {
245 (builder as DartEditBuilder).writeFieldDeclaration('f', isFinal: true); 260 (builder as DartEditBuilder).writeFieldDeclaration('f', isFinal: true);
246 }); 261 });
247 }); 262 });
248 SourceEdit edit = getEdit(builder); 263 SourceEdit edit = getEdit(builder);
249 expect(edit.replacement, equalsIgnoringWhitespace('final f;')); 264 expect(edit.replacement, equalsIgnoringWhitespace('final f;'));
250 } 265 }
251 266
252 test_writeFieldDeclaration_isStatic() async { 267 test_writeFieldDeclaration_isStatic() async {
268 String path = '/test.dart';
253 String content = 'class A {}'; 269 String content = 'class A {}';
254 Source source = addSource('/test.dart', content); 270 addSource(path, content);
255 await resolveLibraryUnit(source); 271 await driver.getResult(path);
256 272
257 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); 273 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
258 builder.addFileEdit(source, 1, (FileEditBuilder builder) { 274 await builder.addFileEdit(path, 1, (FileEditBuilder builder) {
259 builder.addInsertion(content.length - 1, (EditBuilder builder) { 275 builder.addInsertion(content.length - 1, (EditBuilder builder) {
260 (builder as DartEditBuilder).writeFieldDeclaration('f', isStatic: true); 276 (builder as DartEditBuilder).writeFieldDeclaration('f', isStatic: true);
261 }); 277 });
262 }); 278 });
263 SourceEdit edit = getEdit(builder); 279 SourceEdit edit = getEdit(builder);
264 expect(edit.replacement, equalsIgnoringWhitespace('static var f;')); 280 expect(edit.replacement, equalsIgnoringWhitespace('static var f;'));
265 } 281 }
266 282
267 test_writeFieldDeclaration_nameGroupName() async { 283 test_writeFieldDeclaration_nameGroupName() async {
284 String path = '/test.dart';
268 String content = 'class A {}'; 285 String content = 'class A {}';
269 Source source = addSource('/test.dart', content); 286 addSource(path, content);
270 await resolveLibraryUnit(source); 287 await driver.getResult(path);
271 288
272 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); 289 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
273 builder.addFileEdit(source, 1, (FileEditBuilder builder) { 290 await builder.addFileEdit(path, 1, (FileEditBuilder builder) {
274 builder.addInsertion(content.length - 1, (EditBuilder builder) { 291 builder.addInsertion(content.length - 1, (EditBuilder builder) {
275 (builder as DartEditBuilder) 292 (builder as DartEditBuilder)
276 .writeFieldDeclaration('f', nameGroupName: 'name'); 293 .writeFieldDeclaration('f', nameGroupName: 'name');
277 }); 294 });
278 }); 295 });
279 SourceEdit edit = getEdit(builder); 296 SourceEdit edit = getEdit(builder);
280 expect(edit.replacement, equalsIgnoringWhitespace('var f;')); 297 expect(edit.replacement, equalsIgnoringWhitespace('var f;'));
281 298
282 List<LinkedEditGroup> linkedEditGroups = 299 List<LinkedEditGroup> linkedEditGroups =
283 builder.sourceChange.linkedEditGroups; 300 builder.sourceChange.linkedEditGroups;
284 expect(linkedEditGroups, hasLength(1)); 301 expect(linkedEditGroups, hasLength(1));
285 LinkedEditGroup group = linkedEditGroups[0]; 302 LinkedEditGroup group = linkedEditGroups[0];
286 expect(group.length, 1); 303 expect(group.length, 1);
287 expect(group.positions, hasLength(1)); 304 expect(group.positions, hasLength(1));
288 Position position = group.positions[0]; 305 Position position = group.positions[0];
289 expect(position.offset, equals(13)); 306 expect(position.offset, equals(13));
290 } 307 }
291 308
292 test_writeFieldDeclaration_type_typeGroupName() async { 309 test_writeFieldDeclaration_type_typeGroupName() async {
310 String path = '/test.dart';
293 String content = 'class A {} class B {}'; 311 String content = 'class A {} class B {}';
294 Source source = addSource('/test.dart', content); 312 addSource(path, content);
295 CompilationUnit unit = await resolveLibraryUnit(source); 313 CompilationUnit unit = (await driver.getResult(path))?.unit;
296 ClassDeclaration declaration = unit.declarations[0]; 314 ClassDeclaration declaration = unit.declarations[0];
297 315
298 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); 316 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
299 builder.addFileEdit(source, 1, (FileEditBuilder builder) { 317 await builder.addFileEdit(path, 1, (FileEditBuilder builder) {
300 builder.addInsertion(content.length - 1, (EditBuilder builder) { 318 builder.addInsertion(content.length - 1, (EditBuilder builder) {
301 (builder as DartEditBuilder).writeFieldDeclaration('f', 319 (builder as DartEditBuilder).writeFieldDeclaration('f',
302 type: resolutionMap 320 type: resolutionMap
303 .elementDeclaredByClassDeclaration(declaration) 321 .elementDeclaredByClassDeclaration(declaration)
304 .type, 322 .type,
305 typeGroupName: 'type'); 323 typeGroupName: 'type');
306 }); 324 });
307 }); 325 });
308 SourceEdit edit = getEdit(builder); 326 SourceEdit edit = getEdit(builder);
309 expect(edit.replacement, equalsIgnoringWhitespace('A f;')); 327 expect(edit.replacement, equalsIgnoringWhitespace('A f;'));
310 328
311 List<LinkedEditGroup> linkedEditGroups = 329 List<LinkedEditGroup> linkedEditGroups =
312 builder.sourceChange.linkedEditGroups; 330 builder.sourceChange.linkedEditGroups;
313 expect(linkedEditGroups, hasLength(1)); 331 expect(linkedEditGroups, hasLength(1));
314 LinkedEditGroup group = linkedEditGroups[0]; 332 LinkedEditGroup group = linkedEditGroups[0];
315 expect(group.length, 1); 333 expect(group.length, 1);
316 expect(group.positions, hasLength(1)); 334 expect(group.positions, hasLength(1));
317 Position position = group.positions[0]; 335 Position position = group.positions[0];
318 expect(position.offset, equals(20)); 336 expect(position.offset, equals(20));
319 } 337 }
320 338
321 test_writeGetterDeclaration_bodyWriter() async { 339 test_writeGetterDeclaration_bodyWriter() async {
340 String path = '/test.dart';
322 String content = 'class A {}'; 341 String content = 'class A {}';
323 Source source = addSource('/test.dart', content); 342 addSource(path, content);
324 await resolveLibraryUnit(source); 343 await driver.getResult(path);
325 344
326 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); 345 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
327 builder.addFileEdit(source, 1, (FileEditBuilder builder) { 346 await builder.addFileEdit(path, 1, (FileEditBuilder builder) {
328 builder.addInsertion(content.length - 1, (EditBuilder builder) { 347 builder.addInsertion(content.length - 1, (EditBuilder builder) {
329 (builder as DartEditBuilder).writeGetterDeclaration('g', 348 (builder as DartEditBuilder).writeGetterDeclaration('g',
330 bodyWriter: () { 349 bodyWriter: () {
331 builder.write('{}'); 350 builder.write('{}');
332 }); 351 });
333 }); 352 });
334 }); 353 });
335 SourceEdit edit = getEdit(builder); 354 SourceEdit edit = getEdit(builder);
336 expect(edit.replacement, equalsIgnoringWhitespace('get g {}')); 355 expect(edit.replacement, equalsIgnoringWhitespace('get g {}'));
337 } 356 }
338 357
339 test_writeGetterDeclaration_isStatic() async { 358 test_writeGetterDeclaration_isStatic() async {
359 String path = '/test.dart';
340 String content = 'class A {}'; 360 String content = 'class A {}';
341 Source source = addSource('/test.dart', content); 361 addSource(path, content);
342 await resolveLibraryUnit(source); 362 await driver.getResult(path);
343 363
344 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); 364 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
345 builder.addFileEdit(source, 1, (FileEditBuilder builder) { 365 await builder.addFileEdit(path, 1, (FileEditBuilder builder) {
346 builder.addInsertion(content.length - 1, (EditBuilder builder) { 366 builder.addInsertion(content.length - 1, (EditBuilder builder) {
347 (builder as DartEditBuilder) 367 (builder as DartEditBuilder)
348 .writeGetterDeclaration('g', isStatic: true); 368 .writeGetterDeclaration('g', isStatic: true);
349 }); 369 });
350 }); 370 });
351 SourceEdit edit = getEdit(builder); 371 SourceEdit edit = getEdit(builder);
352 expect(edit.replacement, equalsIgnoringWhitespace('static get g => null;')); 372 expect(edit.replacement, equalsIgnoringWhitespace('static get g => null;'));
353 } 373 }
354 374
355 test_writeGetterDeclaration_nameGroupName() async { 375 test_writeGetterDeclaration_nameGroupName() async {
376 String path = '/test.dart';
356 String content = 'class A {}'; 377 String content = 'class A {}';
357 Source source = addSource('/test.dart', content); 378 addSource(path, content);
358 await resolveLibraryUnit(source); 379 await driver.getResult(path);
359 380
360 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); 381 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
361 builder.addFileEdit(source, 1, (FileEditBuilder builder) { 382 await builder.addFileEdit(path, 1, (FileEditBuilder builder) {
362 builder.addInsertion(content.length - 1, (EditBuilder builder) { 383 builder.addInsertion(content.length - 1, (EditBuilder builder) {
363 (builder as DartEditBuilder) 384 (builder as DartEditBuilder)
364 .writeGetterDeclaration('g', nameGroupName: 'name'); 385 .writeGetterDeclaration('g', nameGroupName: 'name');
365 }); 386 });
366 }); 387 });
367 SourceEdit edit = getEdit(builder); 388 SourceEdit edit = getEdit(builder);
368 expect(edit.replacement, equalsIgnoringWhitespace('get g => null;')); 389 expect(edit.replacement, equalsIgnoringWhitespace('get g => null;'));
369 390
370 List<LinkedEditGroup> linkedEditGroups = 391 List<LinkedEditGroup> linkedEditGroups =
371 builder.sourceChange.linkedEditGroups; 392 builder.sourceChange.linkedEditGroups;
372 expect(linkedEditGroups, hasLength(1)); 393 expect(linkedEditGroups, hasLength(1));
373 LinkedEditGroup group = linkedEditGroups[0]; 394 LinkedEditGroup group = linkedEditGroups[0];
374 expect(group.length, 1); 395 expect(group.length, 1);
375 expect(group.positions, hasLength(1)); 396 expect(group.positions, hasLength(1));
376 Position position = group.positions[0]; 397 Position position = group.positions[0];
377 expect(position.offset, equals(13)); 398 expect(position.offset, equals(13));
378 } 399 }
379 400
380 test_writeGetterDeclaration_returnType() async { 401 test_writeGetterDeclaration_returnType() async {
402 String path = '/test.dart';
381 String content = 'class A {} class B {}'; 403 String content = 'class A {} class B {}';
382 Source source = addSource('/test.dart', content); 404 addSource(path, content);
383 CompilationUnit unit = await resolveLibraryUnit(source); 405 CompilationUnit unit = (await driver.getResult(path))?.unit;
384 ClassDeclaration classA = unit.declarations[0]; 406 ClassDeclaration classA = unit.declarations[0];
385 407
386 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); 408 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
387 builder.addFileEdit(source, 1, (FileEditBuilder builder) { 409 await builder.addFileEdit(path, 1, (FileEditBuilder builder) {
388 builder.addInsertion(content.length - 1, (EditBuilder builder) { 410 builder.addInsertion(content.length - 1, (EditBuilder builder) {
389 (builder as DartEditBuilder).writeGetterDeclaration('g', 411 (builder as DartEditBuilder).writeGetterDeclaration('g',
390 returnType: 412 returnType:
391 resolutionMap.elementDeclaredByClassDeclaration(classA).type, 413 resolutionMap.elementDeclaredByClassDeclaration(classA).type,
392 returnTypeGroupName: 'returnType'); 414 returnTypeGroupName: 'returnType');
393 }); 415 });
394 }); 416 });
395 SourceEdit edit = getEdit(builder); 417 SourceEdit edit = getEdit(builder);
396 expect(edit.replacement, equalsIgnoringWhitespace('A get g => null;')); 418 expect(edit.replacement, equalsIgnoringWhitespace('A get g => null;'));
397 419
398 List<LinkedEditGroup> linkedEditGroups = 420 List<LinkedEditGroup> linkedEditGroups =
399 builder.sourceChange.linkedEditGroups; 421 builder.sourceChange.linkedEditGroups;
400 expect(linkedEditGroups, hasLength(1)); 422 expect(linkedEditGroups, hasLength(1));
401 LinkedEditGroup group = linkedEditGroups[0]; 423 LinkedEditGroup group = linkedEditGroups[0];
402 expect(group.length, 1); 424 expect(group.length, 1);
403 expect(group.positions, hasLength(1)); 425 expect(group.positions, hasLength(1));
404 Position position = group.positions[0]; 426 Position position = group.positions[0];
405 expect(position.offset, equals(20)); 427 expect(position.offset, equals(20));
406 } 428 }
407 429
408 test_writeOverrideOfInheritedMember() async { 430 test_writeOverrideOfInheritedMember() async {
431 String path = '/test.dart';
409 String content = ''' 432 String content = '''
410 class A { 433 class A {
411 A add(A a) => null; 434 A add(A a) => null;
412 } 435 }
413 class B extends A { 436 class B extends A {
414 }'''; 437 }''';
415 Source source = addSource('/test.dart', content); 438 addSource(path, content);
416 CompilationUnit unit = await resolveLibraryUnit(source); 439 CompilationUnit unit = (await driver.getResult(path))?.unit;
417 ClassDeclaration declaration = unit.declarations[0]; 440 ClassDeclaration declaration = unit.declarations[0];
418 441
419 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); 442 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
420 builder.addFileEdit(source, 1, (FileEditBuilder builder) { 443 await builder.addFileEdit(path, 1, (FileEditBuilder builder) {
421 builder.addInsertion(content.length - 1, (EditBuilder builder) { 444 builder.addInsertion(content.length - 1, (EditBuilder builder) {
422 (builder as DartEditBuilder).writeOverrideOfInheritedMember( 445 (builder as DartEditBuilder).writeOverrideOfInheritedMember(
423 resolutionMap 446 resolutionMap
424 .elementDeclaredByClassDeclaration(declaration) 447 .elementDeclaredByClassDeclaration(declaration)
425 .methods[0]); 448 .methods[0]);
426 }); 449 });
427 }); 450 });
428 SourceEdit edit = getEdit(builder); 451 SourceEdit edit = getEdit(builder);
429 expect(edit.replacement, equalsIgnoringWhitespace(''' 452 expect(edit.replacement, equalsIgnoringWhitespace('''
430 @override 453 @override
431 A add(A a) { 454 A add(A a) {
432 // TODO: implement add 455 // TODO: implement add
433 return null; 456 return null;
434 }''')); 457 }'''));
435 } 458 }
436 459
437 test_writeParameters_named() async { 460 test_writeParameters_named() async {
461 String path = '/test.dart';
438 String content = 'f(int i, {String s}) {}'; 462 String content = 'f(int i, {String s}) {}';
439 Source source = addSource('/test.dart', content); 463 addSource(path, content);
440 CompilationUnit unit = await resolveLibraryUnit(source); 464 CompilationUnit unit = (await driver.getResult(path))?.unit;
441 FunctionDeclaration f = unit.declarations[0]; 465 FunctionDeclaration f = unit.declarations[0];
442 FormalParameterList parameters = f.functionExpression.parameters; 466 FormalParameterList parameters = f.functionExpression.parameters;
443 Iterable<ParameterElement> elements = parameters.parameters 467 Iterable<ParameterElement> elements = parameters.parameters
444 .map(resolutionMap.elementDeclaredByFormalParameter); 468 .map(resolutionMap.elementDeclaredByFormalParameter);
445 469
446 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); 470 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
447 builder.addFileEdit(source, 1, (FileEditBuilder builder) { 471 await builder.addFileEdit(path, 1, (FileEditBuilder builder) {
448 builder.addInsertion(content.length - 1, (EditBuilder builder) { 472 builder.addInsertion(content.length - 1, (EditBuilder builder) {
449 (builder as DartEditBuilder).writeParameters(elements); 473 (builder as DartEditBuilder).writeParameters(elements);
450 }); 474 });
451 }); 475 });
452 SourceEdit edit = getEdit(builder); 476 SourceEdit edit = getEdit(builder);
453 expect(edit.replacement, equalsIgnoringWhitespace('(int i, {String s})')); 477 expect(edit.replacement, equalsIgnoringWhitespace('(int i, {String s})'));
454 } 478 }
455 479
456 test_writeParameters_positional() async { 480 test_writeParameters_positional() async {
481 String path = '/test.dart';
457 String content = 'f(int i, [String s]) {}'; 482 String content = 'f(int i, [String s]) {}';
458 Source source = addSource('/test.dart', content); 483 addSource(path, content);
459 CompilationUnit unit = await resolveLibraryUnit(source); 484 CompilationUnit unit = (await driver.getResult(path))?.unit;
460 FunctionDeclaration f = unit.declarations[0]; 485 FunctionDeclaration f = unit.declarations[0];
461 FormalParameterList parameters = f.functionExpression.parameters; 486 FormalParameterList parameters = f.functionExpression.parameters;
462 Iterable<ParameterElement> elements = parameters.parameters 487 Iterable<ParameterElement> elements = parameters.parameters
463 .map(resolutionMap.elementDeclaredByFormalParameter); 488 .map(resolutionMap.elementDeclaredByFormalParameter);
464 489
465 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); 490 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
466 builder.addFileEdit(source, 1, (FileEditBuilder builder) { 491 await builder.addFileEdit(path, 1, (FileEditBuilder builder) {
467 builder.addInsertion(content.length - 1, (EditBuilder builder) { 492 builder.addInsertion(content.length - 1, (EditBuilder builder) {
468 (builder as DartEditBuilder).writeParameters(elements); 493 (builder as DartEditBuilder).writeParameters(elements);
469 }); 494 });
470 }); 495 });
471 SourceEdit edit = getEdit(builder); 496 SourceEdit edit = getEdit(builder);
472 expect(edit.replacement, equalsIgnoringWhitespace('(int i, [String s])')); 497 expect(edit.replacement, equalsIgnoringWhitespace('(int i, [String s])'));
473 } 498 }
474 499
475 test_writeParameters_required() async { 500 test_writeParameters_required() async {
501 String path = '/test.dart';
476 String content = 'f(int i, String s) {}'; 502 String content = 'f(int i, String s) {}';
477 Source source = addSource('/test.dart', content); 503 addSource(path, content);
478 CompilationUnit unit = await resolveLibraryUnit(source); 504 CompilationUnit unit = (await driver.getResult(path))?.unit;
479 FunctionDeclaration f = unit.declarations[0]; 505 FunctionDeclaration f = unit.declarations[0];
480 FormalParameterList parameters = f.functionExpression.parameters; 506 FormalParameterList parameters = f.functionExpression.parameters;
481 Iterable<ParameterElement> elements = parameters.parameters 507 Iterable<ParameterElement> elements = parameters.parameters
482 .map(resolutionMap.elementDeclaredByFormalParameter); 508 .map(resolutionMap.elementDeclaredByFormalParameter);
483 509
484 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); 510 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
485 builder.addFileEdit(source, 1, (FileEditBuilder builder) { 511 await builder.addFileEdit(path, 1, (FileEditBuilder builder) {
486 builder.addInsertion(content.length - 1, (EditBuilder builder) { 512 builder.addInsertion(content.length - 1, (EditBuilder builder) {
487 (builder as DartEditBuilder).writeParameters(elements); 513 (builder as DartEditBuilder).writeParameters(elements);
488 }); 514 });
489 }); 515 });
490 SourceEdit edit = getEdit(builder); 516 SourceEdit edit = getEdit(builder);
491 expect(edit.replacement, equalsIgnoringWhitespace('(int i, String s)')); 517 expect(edit.replacement, equalsIgnoringWhitespace('(int i, String s)'));
492 } 518 }
493 519
494 test_writeParametersMatchingArguments_named() async { 520 test_writeParametersMatchingArguments_named() async {
521 String path = '/test.dart';
495 String content = ''' 522 String content = '''
496 f(int i, String s) { 523 f(int i, String s) {
497 g(s, index: i); 524 g(s, index: i);
498 }'''; 525 }''';
499 Source source = addSource('/test.dart', content); 526 addSource(path, content);
500 CompilationUnit unit = await resolveLibraryUnit(source); 527 CompilationUnit unit = (await driver.getResult(path))?.unit;
501 FunctionDeclaration f = unit.declarations[0]; 528 FunctionDeclaration f = unit.declarations[0];
502 BlockFunctionBody body = f.functionExpression.body; 529 BlockFunctionBody body = f.functionExpression.body;
503 ExpressionStatement statement = body.block.statements[0]; 530 ExpressionStatement statement = body.block.statements[0];
504 MethodInvocation invocation = statement.expression; 531 MethodInvocation invocation = statement.expression;
505 532
506 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); 533 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
507 builder.addFileEdit(source, 1, (FileEditBuilder builder) { 534 await builder.addFileEdit(path, 1, (FileEditBuilder builder) {
508 builder.addInsertion(content.length - 1, (EditBuilder builder) { 535 builder.addInsertion(content.length - 1, (EditBuilder builder) {
509 (builder as DartEditBuilder) 536 (builder as DartEditBuilder)
510 .writeParametersMatchingArguments(invocation.argumentList); 537 .writeParametersMatchingArguments(invocation.argumentList);
511 }); 538 });
512 }); 539 });
513 SourceEdit edit = getEdit(builder); 540 SourceEdit edit = getEdit(builder);
514 expect( 541 expect(
515 edit.replacement, equalsIgnoringWhitespace('(String s, [int index])')); 542 edit.replacement, equalsIgnoringWhitespace('(String s, [int index])'));
516 } 543 }
517 544
518 test_writeParametersMatchingArguments_required() async { 545 test_writeParametersMatchingArguments_required() async {
546 String path = '/test.dart';
519 String content = ''' 547 String content = '''
520 f(int i, String s) { 548 f(int i, String s) {
521 g(s, i); 549 g(s, i);
522 }'''; 550 }''';
523 Source source = addSource('/test.dart', content); 551 addSource(path, content);
524 CompilationUnit unit = await resolveLibraryUnit(source); 552 CompilationUnit unit = (await driver.getResult(path))?.unit;
525 FunctionDeclaration f = unit.declarations[0]; 553 FunctionDeclaration f = unit.declarations[0];
526 BlockFunctionBody body = f.functionExpression.body; 554 BlockFunctionBody body = f.functionExpression.body;
527 ExpressionStatement statement = body.block.statements[0]; 555 ExpressionStatement statement = body.block.statements[0];
528 MethodInvocation invocation = statement.expression; 556 MethodInvocation invocation = statement.expression;
529 557
530 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); 558 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
531 builder.addFileEdit(source, 1, (FileEditBuilder builder) { 559 await builder.addFileEdit(path, 1, (FileEditBuilder builder) {
532 builder.addInsertion(content.length - 1, (EditBuilder builder) { 560 builder.addInsertion(content.length - 1, (EditBuilder builder) {
533 (builder as DartEditBuilder) 561 (builder as DartEditBuilder)
534 .writeParametersMatchingArguments(invocation.argumentList); 562 .writeParametersMatchingArguments(invocation.argumentList);
535 }); 563 });
536 }); 564 });
537 SourceEdit edit = getEdit(builder); 565 SourceEdit edit = getEdit(builder);
538 expect(edit.replacement, equalsIgnoringWhitespace('(String s, int i)')); 566 expect(edit.replacement, equalsIgnoringWhitespace('(String s, int i)'));
539 } 567 }
540 568
541 test_writeParameterSource() async { 569 test_writeParameterSource() async {
570 String path = '/test.dart';
542 String content = 'class A {}'; 571 String content = 'class A {}';
543 Source source = addSource('/test.dart', content); 572 addSource(path, content);
544 CompilationUnit unit = await resolveLibraryUnit(source); 573 CompilationUnit unit = (await driver.getResult(path))?.unit;
545 ClassDeclaration classA = unit.declarations[0]; 574 ClassDeclaration classA = unit.declarations[0];
546 575
547 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); 576 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
548 builder.addFileEdit(source, 1, (FileEditBuilder builder) { 577 await builder.addFileEdit(path, 1, (FileEditBuilder builder) {
549 builder.addInsertion(content.length - 1, (EditBuilder builder) { 578 builder.addInsertion(content.length - 1, (EditBuilder builder) {
550 (builder as DartEditBuilder).writeParameterSource( 579 (builder as DartEditBuilder).writeParameterSource(
551 resolutionMap.elementDeclaredByClassDeclaration(classA).type, 'a'); 580 resolutionMap.elementDeclaredByClassDeclaration(classA).type, 'a');
552 }); 581 });
553 }); 582 });
554 SourceEdit edit = getEdit(builder); 583 SourceEdit edit = getEdit(builder);
555 expect(edit.replacement, equalsIgnoringWhitespace('A a')); 584 expect(edit.replacement, equalsIgnoringWhitespace('A a'));
556 } 585 }
557 586
558 test_writeType_dynamic() async { 587 test_writeType_dynamic() async {
588 String path = '/test.dart';
559 String content = 'class A {}'; 589 String content = 'class A {}';
560 Source source = addSource('/test.dart', content); 590 addSource(path, content);
561 CompilationUnit unit = await resolveLibraryUnit(source); 591 CompilationUnit unit = (await driver.getResult(path))?.unit;
562 592
563 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); 593 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
564 builder.addFileEdit(source, 1, (FileEditBuilder builder) { 594 await builder.addFileEdit(path, 1, (FileEditBuilder builder) {
565 builder.addInsertion(content.length - 1, (EditBuilder builder) { 595 builder.addInsertion(content.length - 1, (EditBuilder builder) {
566 (builder as DartEditBuilder).writeType(resolutionMap 596 (builder as DartEditBuilder).writeType(resolutionMap
567 .elementDeclaredByCompilationUnit(unit) 597 .elementDeclaredByCompilationUnit(unit)
568 .context 598 .context
569 .typeProvider 599 .typeProvider
570 .dynamicType); 600 .dynamicType);
571 }); 601 });
572 }); 602 });
573 SourceEdit edit = getEdit(builder); 603 SourceEdit edit = getEdit(builder);
574 expect(edit.replacement, equalsIgnoringWhitespace('')); 604 expect(edit.replacement, equalsIgnoringWhitespace(''));
575 } 605 }
576 606
577 test_writeType_genericType() async { 607 test_writeType_genericType() async {
608 String path = '/test.dart';
578 String content = 'class A {} class B<E> {}'; 609 String content = 'class A {} class B<E> {}';
579 Source source = addSource('/test.dart', content); 610 addSource(path, content);
580 CompilationUnit unit = await resolveLibraryUnit(source); 611 CompilationUnit unit = (await driver.getResult(path))?.unit;
581 ClassDeclaration classA = unit.declarations[0]; 612 ClassDeclaration classA = unit.declarations[0];
582 ClassDeclaration classB = unit.declarations[1]; 613 ClassDeclaration classB = unit.declarations[1];
583 614
584 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); 615 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
585 builder.addFileEdit(source, 1, (FileEditBuilder builder) { 616 await builder.addFileEdit(path, 1, (FileEditBuilder builder) {
586 builder.addInsertion(content.length - 1, (EditBuilder builder) { 617 builder.addInsertion(content.length - 1, (EditBuilder builder) {
587 (builder as DartEditBuilder).writeType(resolutionMap 618 (builder as DartEditBuilder).writeType(resolutionMap
588 .elementDeclaredByClassDeclaration(classB) 619 .elementDeclaredByClassDeclaration(classB)
589 .type 620 .type
590 .instantiate([ 621 .instantiate([
591 resolutionMap.elementDeclaredByClassDeclaration(classA).type 622 resolutionMap.elementDeclaredByClassDeclaration(classA).type
592 ])); 623 ]));
593 }); 624 });
594 }); 625 });
595 SourceEdit edit = getEdit(builder); 626 SourceEdit edit = getEdit(builder);
596 expect(edit.replacement, equalsIgnoringWhitespace('B<A>')); 627 expect(edit.replacement, equalsIgnoringWhitespace('B<A>'));
597 } 628 }
598 629
599 test_writeType_groupName() async { 630 test_writeType_groupName() async {
631 String path = '/test.dart';
600 String content = 'class A {} class B extends A {} class C extends B {}'; 632 String content = 'class A {} class B extends A {} class C extends B {}';
601 Source source = addSource('/test.dart', content); 633 addSource(path, content);
602 CompilationUnit unit = await resolveLibraryUnit(source); 634 CompilationUnit unit = (await driver.getResult(path))?.unit;
603 ClassDeclaration classC = unit.declarations[2]; 635 ClassDeclaration classC = unit.declarations[2];
604 636
605 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); 637 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
606 builder.addFileEdit(source, 1, (FileEditBuilder builder) { 638 await builder.addFileEdit(path, 1, (FileEditBuilder builder) {
607 builder.addInsertion(content.length - 1, (EditBuilder builder) { 639 builder.addInsertion(content.length - 1, (EditBuilder builder) {
608 (builder as DartEditBuilder).writeType( 640 (builder as DartEditBuilder).writeType(
609 resolutionMap.elementDeclaredByClassDeclaration(classC).type, 641 resolutionMap.elementDeclaredByClassDeclaration(classC).type,
610 groupName: 'type'); 642 groupName: 'type');
611 }); 643 });
612 }); 644 });
613 SourceEdit edit = getEdit(builder); 645 SourceEdit edit = getEdit(builder);
614 expect(edit.replacement, equalsIgnoringWhitespace('C')); 646 expect(edit.replacement, equalsIgnoringWhitespace('C'));
615 647
616 List<LinkedEditGroup> linkedEditGroups = 648 List<LinkedEditGroup> linkedEditGroups =
617 builder.sourceChange.linkedEditGroups; 649 builder.sourceChange.linkedEditGroups;
618 expect(linkedEditGroups, hasLength(1)); 650 expect(linkedEditGroups, hasLength(1));
619 LinkedEditGroup group = linkedEditGroups[0]; 651 LinkedEditGroup group = linkedEditGroups[0];
620 expect(group, isNotNull); 652 expect(group, isNotNull);
621 } 653 }
622 654
623 test_writeType_groupName_addSupertypeProposals() async { 655 test_writeType_groupName_addSupertypeProposals() async {
656 String path = '/test.dart';
624 String content = 'class A {} class B extends A {} class C extends B {}'; 657 String content = 'class A {} class B extends A {} class C extends B {}';
625 Source source = addSource('/test.dart', content); 658 addSource(path, content);
626 CompilationUnit unit = await resolveLibraryUnit(source); 659 CompilationUnit unit = (await driver.getResult(path))?.unit;
627 ClassDeclaration classC = unit.declarations[2]; 660 ClassDeclaration classC = unit.declarations[2];
628 661
629 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); 662 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
630 builder.addFileEdit(source, 1, (FileEditBuilder builder) { 663 await builder.addFileEdit(path, 1, (FileEditBuilder builder) {
631 builder.addInsertion(content.length - 1, (EditBuilder builder) { 664 builder.addInsertion(content.length - 1, (EditBuilder builder) {
632 (builder as DartEditBuilder).writeType( 665 (builder as DartEditBuilder).writeType(
633 resolutionMap.elementDeclaredByClassDeclaration(classC).type, 666 resolutionMap.elementDeclaredByClassDeclaration(classC).type,
634 addSupertypeProposals: true, 667 addSupertypeProposals: true,
635 groupName: 'type'); 668 groupName: 'type');
636 }); 669 });
637 }); 670 });
638 SourceEdit edit = getEdit(builder); 671 SourceEdit edit = getEdit(builder);
639 expect(edit.replacement, equalsIgnoringWhitespace('C')); 672 expect(edit.replacement, equalsIgnoringWhitespace('C'));
640 673
641 List<LinkedEditGroup> linkedEditGroups = 674 List<LinkedEditGroup> linkedEditGroups =
642 builder.sourceChange.linkedEditGroups; 675 builder.sourceChange.linkedEditGroups;
643 expect(linkedEditGroups, hasLength(1)); 676 expect(linkedEditGroups, hasLength(1));
644 LinkedEditGroup group = linkedEditGroups[0]; 677 LinkedEditGroup group = linkedEditGroups[0];
645 List<LinkedEditSuggestion> suggestions = group.suggestions; 678 List<LinkedEditSuggestion> suggestions = group.suggestions;
646 expect(suggestions, hasLength(4)); 679 expect(suggestions, hasLength(4));
647 Iterable<String> values = 680 Iterable<String> values =
648 suggestions.map((LinkedEditSuggestion suggestion) { 681 suggestions.map((LinkedEditSuggestion suggestion) {
649 expect(suggestion.kind, LinkedEditSuggestionKind.TYPE); 682 expect(suggestion.kind, LinkedEditSuggestionKind.TYPE);
650 return suggestion.value; 683 return suggestion.value;
651 }); 684 });
652 expect(values, contains('Object')); 685 expect(values, contains('Object'));
653 expect(values, contains('A')); 686 expect(values, contains('A'));
654 expect(values, contains('B')); 687 expect(values, contains('B'));
655 expect(values, contains('C')); 688 expect(values, contains('C'));
656 } 689 }
657 690
658 test_writeType_null() async { 691 test_writeType_null() async {
692 String path = '/test.dart';
659 String content = 'class A {}'; 693 String content = 'class A {}';
660 Source source = addSource('/test.dart', content); 694 addSource(path, content);
661 await resolveLibraryUnit(source); 695 await driver.getResult(path);
662 696
663 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); 697 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
664 builder.addFileEdit(source, 1, (FileEditBuilder builder) { 698 await builder.addFileEdit(path, 1, (FileEditBuilder builder) {
665 builder.addInsertion(content.length - 1, (EditBuilder builder) { 699 builder.addInsertion(content.length - 1, (EditBuilder builder) {
666 (builder as DartEditBuilder).writeType(null); 700 (builder as DartEditBuilder).writeType(null);
667 }); 701 });
668 }); 702 });
669 SourceEdit edit = getEdit(builder); 703 SourceEdit edit = getEdit(builder);
670 expect(edit.replacement, equalsIgnoringWhitespace('')); 704 expect(edit.replacement, equalsIgnoringWhitespace(''));
671 } 705 }
672 706
673 test_writeType_required_dynamic() async { 707 test_writeType_required_dynamic() async {
708 String path = '/test.dart';
674 String content = 'class A {}'; 709 String content = 'class A {}';
675 Source source = addSource('/test.dart', content); 710 addSource(path, content);
676 CompilationUnit unit = await resolveLibraryUnit(source); 711 CompilationUnit unit = (await driver.getResult(path))?.unit;
677 712
678 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); 713 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
679 builder.addFileEdit(source, 1, (FileEditBuilder builder) { 714 await builder.addFileEdit(path, 1, (FileEditBuilder builder) {
680 builder.addInsertion(content.length - 1, (EditBuilder builder) { 715 builder.addInsertion(content.length - 1, (EditBuilder builder) {
681 (builder as DartEditBuilder).writeType( 716 (builder as DartEditBuilder).writeType(
682 resolutionMap 717 resolutionMap
683 .elementDeclaredByCompilationUnit(unit) 718 .elementDeclaredByCompilationUnit(unit)
684 .context 719 .context
685 .typeProvider 720 .typeProvider
686 .dynamicType, 721 .dynamicType,
687 required: true); 722 required: true);
688 }); 723 });
689 }); 724 });
690 SourceEdit edit = getEdit(builder); 725 SourceEdit edit = getEdit(builder);
691 expect(edit.replacement, equalsIgnoringWhitespace('var')); 726 expect(edit.replacement, equalsIgnoringWhitespace('var'));
692 } 727 }
693 728
694 test_writeType_required_notNull() async { 729 test_writeType_required_notNull() async {
730 String path = '/test.dart';
695 String content = 'class A {}'; 731 String content = 'class A {}';
696 Source source = addSource('/test.dart', content); 732 addSource(path, content);
697 CompilationUnit unit = await resolveLibraryUnit(source); 733 CompilationUnit unit = (await driver.getResult(path))?.unit;
698 ClassDeclaration classA = unit.declarations[0]; 734 ClassDeclaration classA = unit.declarations[0];
699 735
700 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); 736 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
701 builder.addFileEdit(source, 1, (FileEditBuilder builder) { 737 await builder.addFileEdit(path, 1, (FileEditBuilder builder) {
702 builder.addInsertion(content.length - 1, (EditBuilder builder) { 738 builder.addInsertion(content.length - 1, (EditBuilder builder) {
703 (builder as DartEditBuilder).writeType( 739 (builder as DartEditBuilder).writeType(
704 resolutionMap.elementDeclaredByClassDeclaration(classA).type, 740 resolutionMap.elementDeclaredByClassDeclaration(classA).type,
705 required: true); 741 required: true);
706 }); 742 });
707 }); 743 });
708 SourceEdit edit = getEdit(builder); 744 SourceEdit edit = getEdit(builder);
709 expect(edit.replacement, equalsIgnoringWhitespace('A')); 745 expect(edit.replacement, equalsIgnoringWhitespace('A'));
710 } 746 }
711 747
712 test_writeType_required_null() async { 748 test_writeType_required_null() async {
749 String path = '/test.dart';
713 String content = 'class A {}'; 750 String content = 'class A {}';
714 Source source = addSource('/test.dart', content); 751 addSource(path, content);
715 await resolveLibraryUnit(source); 752 await driver.getResult(path);
716 753
717 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); 754 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
718 builder.addFileEdit(source, 1, (FileEditBuilder builder) { 755 await builder.addFileEdit(path, 1, (FileEditBuilder builder) {
719 builder.addInsertion(content.length - 1, (EditBuilder builder) { 756 builder.addInsertion(content.length - 1, (EditBuilder builder) {
720 (builder as DartEditBuilder).writeType(null, required: true); 757 (builder as DartEditBuilder).writeType(null, required: true);
721 }); 758 });
722 }); 759 });
723 SourceEdit edit = getEdit(builder); 760 SourceEdit edit = getEdit(builder);
724 expect(edit.replacement, equalsIgnoringWhitespace('var')); 761 expect(edit.replacement, equalsIgnoringWhitespace('var'));
725 } 762 }
726 763
727 test_writeType_simpleType() async { 764 test_writeType_simpleType() async {
765 String path = '/test.dart';
728 String content = 'class A {}'; 766 String content = 'class A {}';
729 Source source = addSource('/test.dart', content); 767 addSource(path, content);
730 CompilationUnit unit = await resolveLibraryUnit(source); 768 CompilationUnit unit = (await driver.getResult(path))?.unit;
731 ClassDeclaration classA = unit.declarations[0]; 769 ClassDeclaration classA = unit.declarations[0];
732 770
733 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); 771 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
734 builder.addFileEdit(source, 1, (FileEditBuilder builder) { 772 await builder.addFileEdit(path, 1, (FileEditBuilder builder) {
735 builder.addInsertion(content.length - 1, (EditBuilder builder) { 773 builder.addInsertion(content.length - 1, (EditBuilder builder) {
736 (builder as DartEditBuilder).writeType( 774 (builder as DartEditBuilder).writeType(
737 resolutionMap.elementDeclaredByClassDeclaration(classA).type); 775 resolutionMap.elementDeclaredByClassDeclaration(classA).type);
738 }); 776 });
739 }); 777 });
740 SourceEdit edit = getEdit(builder); 778 SourceEdit edit = getEdit(builder);
741 expect(edit.replacement, equalsIgnoringWhitespace('A')); 779 expect(edit.replacement, equalsIgnoringWhitespace('A'));
742 } 780 }
743 781
744 test_writeTypes_empty() async { 782 test_writeTypes_empty() async {
783 String path = '/test.dart';
745 String content = 'class A {}'; 784 String content = 'class A {}';
746 Source source = addSource('/test.dart', content); 785 addSource(path, content);
747 await resolveLibraryUnit(source); 786 await driver.getResult(path);
748 787
749 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); 788 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
750 builder.addFileEdit(source, 1, (FileEditBuilder builder) { 789 await builder.addFileEdit(path, 1, (FileEditBuilder builder) {
751 builder.addInsertion(content.length - 1, (EditBuilder builder) { 790 builder.addInsertion(content.length - 1, (EditBuilder builder) {
752 (builder as DartEditBuilderImpl).writeTypes([]); 791 (builder as DartEditBuilderImpl).writeTypes([]);
753 }); 792 });
754 }); 793 });
755 SourceEdit edit = getEdit(builder); 794 SourceEdit edit = getEdit(builder);
756 expect(edit.replacement, isEmpty); 795 expect(edit.replacement, isEmpty);
757 } 796 }
758 797
759 test_writeTypes_noPrefix() async { 798 test_writeTypes_noPrefix() async {
799 String path = '/test.dart';
760 String content = 'class A {} class B {}'; 800 String content = 'class A {} class B {}';
761 Source source = addSource('/test.dart', content); 801 addSource(path, content);
762 CompilationUnit unit = await resolveLibraryUnit(source); 802 CompilationUnit unit = (await driver.getResult(path))?.unit;
763 ClassDeclaration classA = unit.declarations[0]; 803 ClassDeclaration classA = unit.declarations[0];
764 ClassDeclaration classB = unit.declarations[1]; 804 ClassDeclaration classB = unit.declarations[1];
765 805
766 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); 806 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
767 builder.addFileEdit(source, 1, (FileEditBuilder builder) { 807 await builder.addFileEdit(path, 1, (FileEditBuilder builder) {
768 builder.addInsertion(content.length - 1, (EditBuilder builder) { 808 builder.addInsertion(content.length - 1, (EditBuilder builder) {
769 (builder as DartEditBuilderImpl).writeTypes([ 809 (builder as DartEditBuilderImpl).writeTypes([
770 resolutionMap.elementDeclaredByClassDeclaration(classA).type, 810 resolutionMap.elementDeclaredByClassDeclaration(classA).type,
771 resolutionMap.elementDeclaredByClassDeclaration(classB).type 811 resolutionMap.elementDeclaredByClassDeclaration(classB).type
772 ]); 812 ]);
773 }); 813 });
774 }); 814 });
775 SourceEdit edit = getEdit(builder); 815 SourceEdit edit = getEdit(builder);
776 expect(edit.replacement, equalsIgnoringWhitespace('A, B')); 816 expect(edit.replacement, equalsIgnoringWhitespace('A, B'));
777 } 817 }
778 818
779 test_writeTypes_null() async { 819 test_writeTypes_null() async {
820 String path = '/test.dart';
780 String content = 'class A {}'; 821 String content = 'class A {}';
781 Source source = addSource('/test.dart', content); 822 addSource(path, content);
782 await resolveLibraryUnit(source); 823 await driver.getResult(path);
783 824
784 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); 825 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
785 builder.addFileEdit(source, 1, (FileEditBuilder builder) { 826 await builder.addFileEdit(path, 1, (FileEditBuilder builder) {
786 builder.addInsertion(content.length - 1, (EditBuilder builder) { 827 builder.addInsertion(content.length - 1, (EditBuilder builder) {
787 (builder as DartEditBuilderImpl).writeTypes(null); 828 (builder as DartEditBuilderImpl).writeTypes(null);
788 }); 829 });
789 }); 830 });
790 SourceEdit edit = getEdit(builder); 831 SourceEdit edit = getEdit(builder);
791 expect(edit.replacement, isEmpty); 832 expect(edit.replacement, isEmpty);
792 } 833 }
793 834
794 test_writeTypes_prefix() async { 835 test_writeTypes_prefix() async {
836 String path = '/test.dart';
795 String content = 'class A {} class B {}'; 837 String content = 'class A {} class B {}';
796 Source source = addSource('/test.dart', content); 838 addSource(path, content);
797 CompilationUnit unit = await resolveLibraryUnit(source); 839 CompilationUnit unit = (await driver.getResult(path))?.unit;
798 ClassDeclaration classA = unit.declarations[0]; 840 ClassDeclaration classA = unit.declarations[0];
799 ClassDeclaration classB = unit.declarations[1]; 841 ClassDeclaration classB = unit.declarations[1];
800 842
801 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); 843 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
802 builder.addFileEdit(source, 1, (FileEditBuilder builder) { 844 await builder.addFileEdit(path, 1, (FileEditBuilder builder) {
803 builder.addInsertion(content.length - 1, (EditBuilder builder) { 845 builder.addInsertion(content.length - 1, (EditBuilder builder) {
804 (builder as DartEditBuilderImpl).writeTypes([ 846 (builder as DartEditBuilderImpl).writeTypes([
805 resolutionMap.elementDeclaredByClassDeclaration(classA).type, 847 resolutionMap.elementDeclaredByClassDeclaration(classA).type,
806 resolutionMap.elementDeclaredByClassDeclaration(classB).type 848 resolutionMap.elementDeclaredByClassDeclaration(classB).type
807 ], prefix: 'implements '); 849 ], prefix: 'implements ');
808 }); 850 });
809 }); 851 });
810 SourceEdit edit = getEdit(builder); 852 SourceEdit edit = getEdit(builder);
811 expect(edit.replacement, equalsIgnoringWhitespace('implements A, B')); 853 expect(edit.replacement, equalsIgnoringWhitespace('implements A, B'));
812 } 854 }
813 } 855 }
814 856
815 @reflectiveTest 857 @reflectiveTest
816 class DartFileEditBuilderImplTest extends AbstractContextTest { 858 class DartFileEditBuilderImplTest extends AbstractContextTest {
859 @override
860 bool get enableNewAnalysisDriver => true;
861
817 test_createEditBuilder() async { 862 test_createEditBuilder() async {
818 Source source = addSource('/test.dart', 'library test;'); 863 String path = '/test.dart';
819 await resolveLibraryUnit(source); 864 addSource(path, 'library test;');
865 await driver.getResult(path);
820 int timeStamp = 65; 866 int timeStamp = 65;
821 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); 867 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
822 builder.addFileEdit(source, timeStamp, (FileEditBuilder builder) { 868 await builder.addFileEdit(path, timeStamp, (FileEditBuilder builder) {
823 int offset = 4; 869 int offset = 4;
824 int length = 5; 870 int length = 5;
825 DartEditBuilderImpl editBuilder = (builder as DartFileEditBuilderImpl) 871 DartEditBuilderImpl editBuilder = (builder as DartFileEditBuilderImpl)
826 .createEditBuilder(offset, length); 872 .createEditBuilder(offset, length);
827 expect(editBuilder, new isInstanceOf<DartEditBuilder>()); 873 expect(editBuilder, new isInstanceOf<DartEditBuilder>());
828 SourceEdit sourceEdit = editBuilder.sourceEdit; 874 SourceEdit sourceEdit = editBuilder.sourceEdit;
829 expect(sourceEdit.length, length); 875 expect(sourceEdit.length, length);
830 expect(sourceEdit.offset, offset); 876 expect(sourceEdit.offset, offset);
831 expect(sourceEdit.replacement, isEmpty); 877 expect(sourceEdit.replacement, isEmpty);
832 }); 878 });
833 } 879 }
834 } 880 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698