| OLD | NEW |
| 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 } |
| OLD | NEW |