blob: af43eafcafe63602f2a36e12921649b4da700a65 [file] [log] [blame]
// Copyright (c) 2017, 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.
import 'package:analysis_server/protocol/protocol_generated.dart';
import 'package:analysis_server/src/computer/import_elements_computer.dart';
import 'package:analyzer/dart/analysis/results.dart';
import 'package:analyzer_plugin/protocol/protocol_common.dart';
import 'package:test/test.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
import '../../abstract_context.dart';
main() {
defineReflectiveSuite(() {
defineReflectiveTests(ImportElementsComputerTest);
});
}
/**
* Tests that the [ImportElementsComputer] will correctly update imports. The
* tests are generally labeled based on the kind of import in the source (from
* which the text was copied) and the kind of import in the target (into which
* the text was pasted). Kinds are a combination of "prefix", "hide", "show" and
* "deferred", or "bare" when there are none of the previous, or "none" when
* there is no import.
*/
@reflectiveTest
class ImportElementsComputerTest extends AbstractContextTest {
String targetPath;
String targetCode;
ResolveResult result;
setUp() async {
super.setUp();
packageMap['p'] = [provider.newFolder(provider.convertPath('/p/lib'))];
targetPath = provider.convertPath('/p/lib/target.dart');
targetCode = '''
main() {}
''';
provider.newFile(targetPath, targetCode);
result = await driver.getResult(targetPath);
}
@failingTest
test_bare_none() {
List<ImportedElements> elements = <ImportedElements>[
new ImportedElements(provider.convertPath('/p/lib/a.dart'),
'package:p/a.dart', '', <String>['A']),
];
List<SourceEdit> edits = _computeEditsFor(elements);
expect(edits, hasLength(1));
SourceEdit edit = edits[0];
expect(edit, isNotNull);
expect(edit.offset, 0);
expect(edit.length, 0);
expect(edit.apply(targetCode), """
import 'source.dart';
main() {}
""");
}
test_none_none() {
List<ImportedElements> elements = <ImportedElements>[];
List<SourceEdit> edits = _computeEditsFor(elements);
expect(edits, hasLength(0));
}
List<SourceEdit> _computeEditsFor(List<ImportedElements> elements) {
ImportElementsComputer computer =
new ImportElementsComputer(result, targetPath, elements);
return computer.compute();
}
}