Index: pkg/analysis_server/test/src/utilities/change_builder_core_test.dart |
diff --git a/pkg/analysis_server/test/src/utilities/change_builder_core_test.dart b/pkg/analysis_server/test/src/utilities/change_builder_core_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..4ad794cfa56d40ce8cb847fa86ccf5278d84184b |
--- /dev/null |
+++ b/pkg/analysis_server/test/src/utilities/change_builder_core_test.dart |
@@ -0,0 +1,253 @@ |
+// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
+// for details. All rights reserved. Use of this source code is governed by a |
+// BSD-style license that can be found in the LICENSE file. |
+ |
+library analysis_server.test.src.utilities.change_builder_core_test; |
+ |
+import 'package:analysis_server/src/utilities/change_builder_core.dart'; |
+import 'package:analysis_server/src/protocol.dart'; |
+import 'package:analysis_server/utilities/change_builder_core.dart'; |
+import 'package:test_reflective_loader/test_reflective_loader.dart'; |
+import 'package:unittest/unittest.dart'; |
+import '../../domain_execution_test.dart'; |
+ |
+main() { |
+ groupSep = ' | '; |
+ defineReflectiveTests(ChangeBuilderImplTest); |
+ defineReflectiveTests(EditBuilderImplTest); |
+ defineReflectiveTests(FileEditBuilderImplTest); |
+ defineReflectiveTests(LinkedEditBuilderImplTest); |
+} |
+ |
+@reflectiveTest |
+class ChangeBuilderImplTest { |
+ void test_createFileEditBuilder() { |
+ ChangeBuilderImpl builder = new ChangeBuilderImpl(); |
+ TestSource source = new TestSource('/test.dart'); |
+ int timeStamp = 54; |
+ FileEditBuilderImpl fileEditBuilder = builder.createFileEditBuilder(source, timeStamp); |
+ expect(fileEditBuilder, new isInstanceOf<FileEditBuilder>()); |
+ SourceFileEdit fileEdit = fileEditBuilder.fileEdit; |
+ expect(fileEdit.file, source.fullName); |
+ expect(fileEdit.fileStamp, timeStamp); |
+ } |
+ |
+ void test_getLinkedEditGroup() { |
+ ChangeBuilderImpl builder = new ChangeBuilderImpl(); |
+ LinkedEditGroup group = builder.getLinkedEditGroup('a'); |
+ expect(identical(builder.getLinkedEditGroup('b'), group), isFalse); |
+ expect(identical(builder.getLinkedEditGroup('a'), group), isTrue); |
+ } |
+ |
+ void test_sourceChange_noChanges() { |
+ ChangeBuilderImpl builder = new ChangeBuilderImpl(); |
+ SourceChange sourceChange = builder.sourceChange; |
+ expect(sourceChange, isNotNull); |
+ expect(sourceChange.edits, isEmpty); |
+ expect(sourceChange.linkedEditGroups, isEmpty); |
+ expect(sourceChange.message, isEmpty); |
+ expect(sourceChange.selection, isNull); |
+ } |
+ |
+ void test_sourceChange_oneChange() { |
+ ChangeBuilderImpl builder = new ChangeBuilderImpl(); |
+ TestSource source = new TestSource('/test.dart'); |
+ builder.addFileEdit(source, 0, (FileEditBuilder builder) {}); |
+ builder.getLinkedEditGroup('a'); |
+ SourceChange sourceChange = builder.sourceChange; |
+ expect(sourceChange, isNotNull); |
+ expect(sourceChange.edits, hasLength(1)); |
+ expect(sourceChange.linkedEditGroups, hasLength(1)); |
+ expect(sourceChange.message, isEmpty); |
+ expect(sourceChange.selection, isNull); |
+ } |
+} |
+ |
+@reflectiveTest |
+class EditBuilderImplTest { |
+ TestSource source = new TestSource('/test.dart'); |
+ |
+ void test_addLinkedEdit() { |
+ ChangeBuilderImpl builder = new ChangeBuilderImpl(); |
+ int offset = 10; |
+ String text = 'content'; |
+ builder.addFileEdit(source, 0, (FileEditBuilderImpl builder) { |
+ builder.addInsertion(10, (EditBuilderImpl builder) { |
+ builder.addLinkedEdit('a', (LinkedEditBuilder builder) { |
+ builder.write(text); |
+ }); |
+ SourceEdit sourceEdit = builder.sourceEdit; |
+ expect(sourceEdit.replacement, text); |
+ }); |
+ }); |
+ SourceChange sourceChange = builder.sourceChange; |
+ expect(sourceChange, isNotNull); |
+ List<LinkedEditGroup> groups = sourceChange.linkedEditGroups; |
+ expect(groups, hasLength(1)); |
+ LinkedEditGroup group = groups[0]; |
+ expect(group, isNotNull); |
+ expect(group.length, text.length); |
+ List<Position> positions = group.positions; |
+ expect(positions, hasLength(1)); |
+ expect(positions[0].offset, offset); |
+ } |
+ |
+ void test_createLinkedEditBuilder() { |
+ ChangeBuilderImpl builder = new ChangeBuilderImpl(); |
+ builder.addFileEdit(source, 0, (FileEditBuilderImpl builder) { |
+ builder.addInsertion(10, (EditBuilderImpl builder) { |
+ LinkedEditBuilderImpl linkBuilder = builder.createLinkedEditBuilder(); |
+ expect(linkBuilder, new isInstanceOf<LinkedEditBuilder>()); |
+ }); |
+ }); |
+ } |
+ |
+ void test_write() { |
+ ChangeBuilderImpl builder = new ChangeBuilderImpl(); |
+ int timeStamp = 93; |
+ int offset = 10; |
+ String text = 'write'; |
+ builder.addFileEdit(source, timeStamp, (FileEditBuilderImpl builder) { |
+ builder.addInsertion(offset, (EditBuilderImpl builder) { |
+ builder.write(text); |
+ }); |
+ }); |
+ |
+ SourceChange sourceChange = builder.sourceChange; |
+ expect(sourceChange, isNotNull); |
+ |
+ List<SourceFileEdit> fileEdits = sourceChange.edits; |
+ expect(fileEdits, hasLength(1)); |
+ SourceFileEdit fileEdit = fileEdits[0]; |
+ expect(fileEdit, isNotNull); |
+ expect(fileEdit.file, source.fullName); |
+ expect(fileEdit.fileStamp, timeStamp); |
+ |
+ List<SourceEdit> edits = fileEdit.edits; |
+ expect(edits, hasLength(1)); |
+ SourceEdit edit = edits[0]; |
+ expect(edit, isNotNull); |
+ expect(edit.offset, offset); |
+ expect(edit.length, 0); |
+ expect(edit.replacement, text); |
+ } |
+ |
+ void test_writeln() { |
+ ChangeBuilderImpl builder = new ChangeBuilderImpl(); |
+ int timeStamp = 39; |
+ int offset = 52; |
+ int length = 12; |
+ String text = 'writeln'; |
+ builder.addFileEdit(source, timeStamp, (FileEditBuilderImpl builder) { |
+ builder.addReplacement(offset, length, (EditBuilderImpl builder) { |
+ builder.writeln(text); |
+ }); |
+ }); |
+ |
+ SourceChange sourceChange = builder.sourceChange; |
+ expect(sourceChange, isNotNull); |
+ |
+ List<SourceFileEdit> fileEdits = sourceChange.edits; |
+ expect(fileEdits, hasLength(1)); |
+ SourceFileEdit fileEdit = fileEdits[0]; |
+ expect(fileEdit, isNotNull); |
+ expect(fileEdit.file, source.fullName); |
+ expect(fileEdit.fileStamp, timeStamp); |
+ |
+ List<SourceEdit> edits = fileEdit.edits; |
+ expect(edits, hasLength(1)); |
+ SourceEdit edit = edits[0]; |
+ expect(edit, isNotNull); |
+ expect(edit.offset, offset); |
+ expect(edit.length, length); |
+ expect(edit.replacement == '$text\n' || edit.replacement == '$text\r\n', isTrue); |
+ } |
+} |
+ |
+@reflectiveTest |
+class FileEditBuilderImplTest { |
+ TestSource source = new TestSource('/test.dart'); |
+ |
+ void test_addInsertion() { |
+ ChangeBuilderImpl builder = new ChangeBuilderImpl(); |
+ builder.addFileEdit(source, 0, (FileEditBuilderImpl builder) { |
+ builder.addInsertion(10, (EditBuilderImpl builder) { |
+ expect(builder, isNotNull); |
+ }); |
+ }); |
+ } |
+ |
+ void test_addLinkedPosition() { |
+ ChangeBuilderImpl changeBuilder = new ChangeBuilderImpl(); |
+ String groupName = 'a'; |
+ changeBuilder.addFileEdit(source, 0, (FileEditBuilderImpl builder) { |
+ builder.addLinkedPosition(3, 6, groupName); |
+ }); |
+ |
+ LinkedEditGroup group = changeBuilder.getLinkedEditGroup(groupName); |
+ List<Position> positions = group.positions; |
+ expect(positions, hasLength(1)); |
+ Position position = positions[0]; |
+ expect(position.file, source.fullName); |
+ expect(position.offset, 3); |
+ expect(group.length, 6); |
+ } |
+ |
+ void test_addReplacement() { |
+ ChangeBuilderImpl builder = new ChangeBuilderImpl(); |
+ builder.addFileEdit(source, 0, (FileEditBuilderImpl builder) { |
+ builder.addReplacement(4, 5, (EditBuilderImpl builder) { |
+ expect(builder, isNotNull); |
+ }); |
+ }); |
+ } |
+ |
+ void test_createEditBuilder() { |
+ ChangeBuilderImpl builder = new ChangeBuilderImpl(); |
+ builder.addFileEdit(source, 0, (FileEditBuilderImpl builder) { |
+ int offset = 4; |
+ int length = 5; |
+ EditBuilderImpl editBuilder = builder.createEditBuilder(offset, length); |
+ expect(editBuilder, new isInstanceOf<EditBuilder>()); |
+ SourceEdit sourceEdit = editBuilder.sourceEdit; |
+ expect(sourceEdit.length, length); |
+ expect(sourceEdit.offset, offset); |
+ expect(sourceEdit.replacement, isEmpty); |
+ }); |
+ } |
+} |
+ |
+@reflectiveTest |
+class LinkedEditBuilderImplTest { |
+ TestSource source = new TestSource('/test.dart'); |
+ |
+ void test_addSuggestion() { |
+ String groupName = 'a'; |
+ ChangeBuilderImpl builder = new ChangeBuilderImpl(); |
+ builder.addFileEdit(source, 0, (FileEditBuilderImpl builder) { |
+ builder.addInsertion(10, (EditBuilderImpl builder) { |
+ builder.addLinkedEdit(groupName, (LinkedEditBuilderImpl builder) { |
+ builder.addSuggestion(LinkedEditSuggestionKind.TYPE, 'A'); |
+ }); |
+ }); |
+ }); |
+ |
+ LinkedEditGroup group = builder.getLinkedEditGroup(groupName); |
+ expect(group.suggestions, hasLength(1)); |
+ } |
+ |
+ void test_addSuggestions() { |
+ String groupName = 'a'; |
+ ChangeBuilderImpl builder = new ChangeBuilderImpl(); |
+ builder.addFileEdit(source, 0, (FileEditBuilderImpl builder) { |
+ builder.addInsertion(10, (EditBuilderImpl builder) { |
+ builder.addLinkedEdit(groupName, (LinkedEditBuilderImpl builder) { |
+ builder.addSuggestions(LinkedEditSuggestionKind.TYPE, ['A', 'B']); |
+ }); |
+ }); |
+ }); |
+ |
+ LinkedEditGroup group = builder.getLinkedEditGroup(groupName); |
+ expect(group.suggestions, hasLength(2)); |
+ } |
+} |