blob: 49d458c79c9f7b633e4b8c1d51164bcba3657bd8 [file] [log] [blame]
// Copyright (c) 2014, 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 test.services.correction.change;
import 'package:analysis_services/constants.dart';
import 'package:analysis_services/correction/change.dart';
import 'package:analysis_testing/reflective_tests.dart';
import 'package:analyzer/src/generated/source.dart';
import 'package:unittest/unittest.dart';
main() {
groupSep = ' | ';
runReflectiveTests(ChangeTest);
runReflectiveTests(EditTest);
runReflectiveTests(FileEditTest);
runReflectiveTests(LinkedEditGroupTest);
runReflectiveTests(LinkedEditSuggestionTest);
runReflectiveTests(PositionTest);
}
@ReflectiveTestCase()
class ChangeTest {
void test_getFileEdit_empty() {
Change change = new Change('msg');
expect(change.getFileEdit('/some.dart'), isNull);
}
void test_addEdit() {
Change change = new Change('msg');
Edit edit1 = new Edit(1, 2, 'a');
Edit edit2 = new Edit(1, 2, 'b');
expect(change.fileEdits, hasLength(0));
change.addEdit('/a.dart', edit1);
expect(change.fileEdits, hasLength(1));
change.addEdit('/a.dart', edit2);
expect(change.fileEdits, hasLength(1));
{
FileEdit fileEdit = change.getFileEdit('/a.dart');
expect(fileEdit, isNotNull);
expect(fileEdit.edits, unorderedEquals([edit1, edit2]));
}
}
void test_getFileEdit() {
Change change = new Change('msg');
FileEdit fileEdit = new FileEdit('/a.dart');
change.addFileEdit(fileEdit);
expect(change.getFileEdit('/a.dart'), fileEdit);
}
void test_toJson() {
Change change = new Change('msg');
change.addFileEdit(new FileEdit('/a.dart')
..add(new Edit(1, 2, 'aaa'))
..add(new Edit(10, 20, 'bbb')));
change.addFileEdit(new FileEdit('/b.dart')
..add(new Edit(21, 22, 'xxx'))
..add(new Edit(210, 220, 'yyy')));
{
var group = new LinkedEditGroup('id-a');
change.addLinkedEditGroup(group
..addPosition(new Position('/ga.dart', 1), 2)
..addPosition(new Position('/ga.dart', 10), 2));
group.addSuggestion(
new LinkedEditSuggestion(LinkedEditSuggestionKind.TYPE, 'AA'));
group.addSuggestion(
new LinkedEditSuggestion(LinkedEditSuggestionKind.TYPE, 'BB'));
}
change.addLinkedEditGroup(new LinkedEditGroup('id-b')
..addPosition(new Position('/gb.dart', 10), 5)
..addPosition(new Position('/gb.dart', 100), 5));
change.selection = new Position('/selection.dart', 42);
var expectedJson = {
'message': 'msg',
'edits': [{
'file': '/a.dart',
'edits': [{
'offset': 1,
'length': 2,
'replacement': 'aaa'
}, {
'offset': 10,
'length': 20,
'replacement': 'bbb'
}]
}, {
'file': '/b.dart',
'edits': [{
'offset': 21,
'length': 22,
'replacement': 'xxx'
}, {
'offset': 210,
'length': 220,
'replacement': 'yyy'
}]
}],
'linkedEditGroups': [{
'id': 'id-a',
'length': 2,
'positions': [{
'file': '/ga.dart',
'offset': 1
}, {
'file': '/ga.dart',
'offset': 10
}],
'suggestions': [{
'kind': 'TYPE',
'value': 'AA'
}, {
'kind': 'TYPE',
'value': 'BB'
}]
}, {
'id': 'id-b',
'length': 5,
'positions': [{
'file': '/gb.dart',
'offset': 10
}, {
'file': '/gb.dart',
'offset': 100
}],
'suggestions': []
}],
'selection': {
'file': '/selection.dart',
'offset': 42
}
};
expect(change.toJson(), expectedJson);
// some toString()
change.toString();
}
}
@ReflectiveTestCase()
class EditTest {
void test_end() {
Edit edit = new Edit(1, 2, 'foo');
expect(edit.end, 3);
}
void test_eqEq() {
Edit a = new Edit(1, 2, 'aaa');
Edit a2 = new Edit(1, 2, 'aaa');
Edit b = new Edit(1, 2, 'aaa');
expect(a == a, isTrue);
expect(a == new Edit(1, 2, 'aaa'), isTrue);
expect(a == this, isFalse);
expect(a == new Edit(1, 2, 'bbb'), isFalse);
expect(a == new Edit(10, 2, 'aaa'), isFalse);
}
void test_new() {
Edit edit = new Edit(1, 2, 'foo');
expect(edit.offset, 1);
expect(edit.length, 2);
expect(edit.replacement, 'foo');
expect(edit.toString(), 'Edit(offset=1, length=2, replacement=:>foo<:)');
}
void test_new_range() {
SourceRange range = new SourceRange(1, 2);
Edit edit = new Edit.range(range, 'foo');
expect(edit.offset, 1);
expect(edit.length, 2);
expect(edit.replacement, 'foo');
}
void test_toJson() {
Edit edit = new Edit(1, 2, 'foo');
var expectedJson = {
OFFSET: 1,
LENGTH: 2,
REPLACEMENT: 'foo'
};
expect(edit.toJson(), expectedJson);
}
}
@ReflectiveTestCase()
class FileEditTest {
void test_new() {
FileEdit fileEdit = new FileEdit('/test.dart');
fileEdit.add(new Edit(1, 2, 'aaa'));
fileEdit.add(new Edit(10, 20, 'bbb'));
expect(
fileEdit.toString(),
'FileEdit(file=/test.dart, edits=['
'Edit(offset=1, length=2, replacement=:>aaa<:), '
'Edit(offset=10, length=20, replacement=:>bbb<:)])');
}
void test_toJson() {
FileEdit fileEdit = new FileEdit('/test.dart');
fileEdit.add(new Edit(1, 2, 'aaa'));
fileEdit.add(new Edit(10, 20, 'bbb'));
var expectedJson = {
FILE: '/test.dart',
EDITS: [{
OFFSET: 1,
LENGTH: 2,
REPLACEMENT: 'aaa'
}, {
OFFSET: 10,
LENGTH: 20,
REPLACEMENT: 'bbb'
},]
};
expect(fileEdit.toJson(), expectedJson);
}
}
@ReflectiveTestCase()
class LinkedEditGroupTest {
void test_new() {
LinkedEditGroup group = new LinkedEditGroup('my-id');
group.addPosition(new Position('/a.dart', 1), 2);
group.addPosition(new Position('/b.dart', 10), 2);
expect(
group.toString(),
'LinkedEditGroup(id=my-id, length=2, positions=['
'Position(file=/a.dart, offset=1), '
'Position(file=/b.dart, offset=10)], suggestions=[])');
}
void test_toJson() {
LinkedEditGroup group = new LinkedEditGroup('my-id');
group.addPosition(new Position('/a.dart', 1), 2);
group.addPosition(new Position('/b.dart', 10), 2);
group.addSuggestion(
new LinkedEditSuggestion(LinkedEditSuggestionKind.TYPE, 'AA'));
group.addSuggestion(
new LinkedEditSuggestion(LinkedEditSuggestionKind.TYPE, 'BB'));
expect(group.toJson(), {
'id': 'my-id',
'length': 2,
'positions': [{
'file': '/a.dart',
'offset': 1
}, {
'file': '/b.dart',
'offset': 10
}],
'suggestions': [{
'kind': 'TYPE',
'value': 'AA'
}, {
'kind': 'TYPE',
'value': 'BB'
}]
});
}
}
@ReflectiveTestCase()
class LinkedEditSuggestionTest {
void test_eqEq() {
var a = new LinkedEditSuggestion(LinkedEditSuggestionKind.METHOD, 'a');
var a2 = new LinkedEditSuggestion(LinkedEditSuggestionKind.METHOD, 'a');
var b = new LinkedEditSuggestion(LinkedEditSuggestionKind.TYPE, 'a');
var c = new LinkedEditSuggestion(LinkedEditSuggestionKind.METHOD, 'c');
expect(a == a, isTrue);
expect(a == a2, isTrue);
expect(a == this, isFalse);
expect(a == b, isFalse);
expect(a == c, isFalse);
}
}
@ReflectiveTestCase()
class PositionTest {
void test_eqEq() {
Position a = new Position('/a.dart', 1);
Position a2 = new Position('/a.dart', 1);
Position b = new Position('/b.dart', 1);
expect(a == a, isTrue);
expect(a == a2, isTrue);
expect(a == b, isFalse);
expect(a == this, isFalse);
}
void test_hashCode() {
Position position = new Position('/test.dart', 1);
position.hashCode;
}
void test_new() {
Position position = new Position('/test.dart', 1);
expect(position.file, '/test.dart');
expect(position.offset, 1);
expect(position.toString(), 'Position(file=/test.dart, offset=1)');
}
void test_toJson() {
Position position = new Position('/test.dart', 1);
var expectedJson = {
FILE: '/test.dart',
OFFSET: 1
};
expect(position.toJson(), expectedJson);
}
}