| Index: pkg/analyzer_plugin/test/src/utilities/change_builder/change_builder_dart_test.dart
|
| diff --git a/pkg/analyzer_plugin/test/src/utilities/change_builder/change_builder_dart_test.dart b/pkg/analyzer_plugin/test/src/utilities/change_builder/change_builder_dart_test.dart
|
| index 051b39d754d0428599111e733e78a93f183a727e..5deadf51d3a448782e7a16764a5ad16e4042d1d2 100644
|
| --- a/pkg/analyzer_plugin/test/src/utilities/change_builder/change_builder_dart_test.dart
|
| +++ b/pkg/analyzer_plugin/test/src/utilities/change_builder/change_builder_dart_test.dart
|
| @@ -75,6 +75,266 @@ class DartChangeBuilderImplTest extends AbstractContextTest {
|
| @reflectiveTest
|
| class DartEditBuilderImplTest extends AbstractContextTest
|
| with BuilderTestMixin {
|
| + test_importLibraries_DP() async {
|
| + await _assertImportLibraries(
|
| + '''
|
| +import 'dart:aaa';
|
| +import 'dart:ccc';
|
| +
|
| +import 'package:aaa/aaa.dart';
|
| +import 'package:ccc/ccc.dart';
|
| +''',
|
| + ['dart:bbb', 'package:bbb/bbb.dart'],
|
| + '''
|
| +import 'dart:aaa';
|
| +import 'dart:bbb';
|
| +import 'dart:ccc';
|
| +
|
| +import 'package:aaa/aaa.dart';
|
| +import 'package:bbb/bbb.dart';
|
| +import 'package:ccc/ccc.dart';
|
| +''');
|
| + }
|
| +
|
| + test_importLibraries_PD() async {
|
| + await _assertImportLibraries(
|
| + '''
|
| +import 'dart:aaa';
|
| +import 'dart:ccc';
|
| +
|
| +import 'package:aaa/aaa.dart';
|
| +import 'package:ccc/ccc.dart';
|
| +''',
|
| + ['package:bbb/bbb.dart', 'dart:bbb'],
|
| + '''
|
| +import 'dart:aaa';
|
| +import 'dart:bbb';
|
| +import 'dart:ccc';
|
| +
|
| +import 'package:aaa/aaa.dart';
|
| +import 'package:bbb/bbb.dart';
|
| +import 'package:ccc/ccc.dart';
|
| +''');
|
| + }
|
| +
|
| + test_importLibrary_afterLibraryDirective_dart() async {
|
| + await _assertImportLibraries(
|
| + '''
|
| +library test;
|
| +
|
| +class A {}
|
| +''',
|
| + ['dart:async'],
|
| + '''
|
| +library test;
|
| +
|
| +import 'dart:async';
|
| +
|
| +
|
| +class A {}
|
| +''');
|
| + }
|
| +
|
| + test_importLibrary_dart_beforeDart() async {
|
| + await _assertImportLibraries(
|
| + '''
|
| +import 'dart:aaa';
|
| +import 'dart:ccc';
|
| +''',
|
| + ['dart:bbb'],
|
| + '''
|
| +import 'dart:aaa';
|
| +import 'dart:bbb';
|
| +import 'dart:ccc';
|
| +''');
|
| + }
|
| +
|
| + test_importLibrary_dart_beforeDart_first() async {
|
| + await _assertImportLibraries(
|
| + '''
|
| +import 'dart:bbb';
|
| +''',
|
| + ['dart:aaa'],
|
| + '''
|
| +import 'dart:aaa';
|
| +import 'dart:bbb';
|
| +''');
|
| + }
|
| +
|
| + test_importLibrary_dart_beforePackage() async {
|
| + await _assertImportLibraries(
|
| + '''
|
| +import 'package:foo/foo.dart';
|
| +''',
|
| + ['dart:async'],
|
| + '''
|
| +import 'dart:async';
|
| +
|
| +import 'package:foo/foo.dart';
|
| +''');
|
| + }
|
| +
|
| + test_importLibrary_package_afterDart() async {
|
| + await _assertImportLibraries(
|
| + '''
|
| +import 'dart:async';
|
| +''',
|
| + ['package:aaa/aaa.dart'],
|
| + '''
|
| +import 'dart:async';
|
| +
|
| +import 'package:aaa/aaa.dart';
|
| +''');
|
| + }
|
| +
|
| + test_importLibrary_package_afterPackage() async {
|
| + await _assertImportLibraries(
|
| + '''
|
| +import 'package:aaa/a1.dart';
|
| +
|
| +import 'foo.dart';
|
| +''',
|
| + ['package:aaa/a2.dart'],
|
| + '''
|
| +import 'package:aaa/a1.dart';
|
| +import 'package:aaa/a2.dart';
|
| +
|
| +import 'foo.dart';
|
| +''');
|
| + }
|
| +
|
| + test_importLibrary_package_beforePackage() async {
|
| + await _assertImportLibraries(
|
| + '''
|
| +import 'package:aaa/a1.dart';
|
| +import 'package:aaa/a3.dart';
|
| +
|
| +import 'foo.dart';
|
| +''',
|
| + ['package:aaa/a2.dart'],
|
| + '''
|
| +import 'package:aaa/a1.dart';
|
| +import 'package:aaa/a2.dart';
|
| +import 'package:aaa/a3.dart';
|
| +
|
| +import 'foo.dart';
|
| +''');
|
| + }
|
| +
|
| + test_importLibrary_package_beforePackage_first() async {
|
| + await _assertImportLibraries(
|
| + '''
|
| +import 'package:aaa/a2.dart';
|
| +
|
| +import 'foo.dart';
|
| +''',
|
| + ['package:aaa/a1.dart'],
|
| + '''
|
| +import 'package:aaa/a1.dart';
|
| +import 'package:aaa/a2.dart';
|
| +
|
| +import 'foo.dart';
|
| +''');
|
| + }
|
| +
|
| + test_importLibrary_package_beforeRelative() async {
|
| + await _assertImportLibraries(
|
| + '''
|
| +import 'foo.dart';
|
| +''',
|
| + ['package:aaa/aaa.dart'],
|
| + '''
|
| +import 'package:aaa/aaa.dart';
|
| +
|
| +import 'foo.dart';
|
| +''');
|
| + }
|
| +
|
| + test_importLibrary_relative_afterDart() async {
|
| + await _assertImportLibraries(
|
| + '''
|
| +import 'dart:async';
|
| +''',
|
| + ['aaa.dart'],
|
| + '''
|
| +import 'dart:async';
|
| +
|
| +import 'aaa.dart';
|
| +''');
|
| + }
|
| +
|
| + test_importLibrary_relative_afterPackage() async {
|
| + await _assertImportLibraries(
|
| + '''
|
| +import 'package:foo/foo.dart';
|
| +''',
|
| + ['aaa.dart'],
|
| + '''
|
| +import 'package:foo/foo.dart';
|
| +
|
| +import 'aaa.dart';
|
| +''');
|
| + }
|
| +
|
| + test_importLibrary_relative_beforeRelative() async {
|
| + await _assertImportLibraries(
|
| + '''
|
| +import 'dart:async';
|
| +
|
| +import 'package:foo/foo.dart';
|
| +
|
| +import 'aaa.dart';
|
| +import 'ccc.dart';
|
| +''',
|
| + ['bbb.dart'],
|
| + '''
|
| +import 'dart:async';
|
| +
|
| +import 'package:foo/foo.dart';
|
| +
|
| +import 'aaa.dart';
|
| +import 'bbb.dart';
|
| +import 'ccc.dart';
|
| +''');
|
| + }
|
| +
|
| + test_importLibrary_relative_beforeRelative_first() async {
|
| + await _assertImportLibraries(
|
| + '''
|
| +import 'dart:async';
|
| +
|
| +import 'package:foo/foo.dart';
|
| +
|
| +import 'bbb.dart';
|
| +''',
|
| + ['aaa.dart'],
|
| + '''
|
| +import 'dart:async';
|
| +
|
| +import 'package:foo/foo.dart';
|
| +
|
| +import 'aaa.dart';
|
| +import 'bbb.dart';
|
| +''');
|
| + }
|
| +
|
| + test_importLibrary_relative_last() async {
|
| + await _assertImportLibraries(
|
| + '''
|
| +import 'dart:async';
|
| +
|
| +import 'package:foo/foo.dart';
|
| +''',
|
| + ['aaa.dart'],
|
| + '''
|
| +import 'dart:async';
|
| +
|
| +import 'package:foo/foo.dart';
|
| +
|
| +import 'aaa.dart';
|
| +''');
|
| + }
|
| +
|
| test_writeClassDeclaration_interfaces() async {
|
| String path = provider.convertPath('/test.dart');
|
| addSource(path, 'class A {}');
|
| @@ -1098,6 +1358,27 @@ f(int i, String s) {
|
| expect(edit.replacement, equalsIgnoringWhitespace('implements A, B'));
|
| }
|
|
|
| + Future<Null> _assertImportLibraries(
|
| + String initialCode, List<String> newUris, String expectedCode) async {
|
| + String path = provider.convertPath('/test.dart');
|
| + addSource(path, initialCode);
|
| + DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
|
| + await builder.addFileEdit(path, 1, (DartFileEditBuilder builder) {
|
| + Iterable<_MockSource> sources = newUris.map((newUri) {
|
| + String path = newUri.contains(':') ? null : '/$newUri';
|
| + return new _MockSource(path, Uri.parse(newUri));
|
| + });
|
| + builder.importLibraries(sources);
|
| + });
|
| +
|
| + String resultCode = initialCode;
|
| + List<SourceEdit> edits = getEdits(builder);
|
| + for (SourceEdit edit in edits) {
|
| + resultCode = edit.apply(resultCode);
|
| + }
|
| + expect(resultCode, expectedCode);
|
| + }
|
| +
|
| Future<ClassElement> _getClassElement(String path, String name) async {
|
| UnitElementResult result = await driver.getUnitElement(path);
|
| return result.element.getType(name);
|
| @@ -1199,3 +1480,15 @@ class C extends B {}
|
| unorderedEquals(['Object', 'A', 'B', 'C']));
|
| }
|
| }
|
| +
|
| +class _MockSource implements Source {
|
| + @override
|
| + final String fullName;
|
| +
|
| + @override
|
| + final Uri uri;
|
| +
|
| + _MockSource(this.fullName, this.uri);
|
| +
|
| + noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
|
| +}
|
|
|