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

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

Powered by Google App Engine
This is Rietveld 408576698