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