blob: 7b5db563961662b0c00179f78150480b02539971 [file] [log] [blame]
// Copyright (c) 2020, 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/src/services/correction/fix.dart';
import 'package:analysis_server/src/services/correction/fix/data_driven/convert_argument_to_type_argument_change.dart';
import 'package:analysis_server/src/services/correction/fix/data_driven/element_descriptor.dart';
import 'package:analysis_server/src/services/correction/fix/data_driven/parameter_reference.dart';
import 'package:analysis_server/src/services/correction/fix/data_driven/rename_change.dart';
import 'package:analysis_server/src/services/correction/fix/data_driven/transform.dart';
import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
import 'data_driven_test_support.dart';
void main() {
defineReflectiveSuite(() {
defineReflectiveTests(
ConvertArgumentToTypeArgumentChange_DeprecatedMemberUseTest);
});
}
@reflectiveTest
class ConvertArgumentToTypeArgumentChange_DeprecatedMemberUseTest
extends DataDrivenFixProcessorTest {
@override
FixKind get kind => DartFixKind.DATA_DRIVEN;
Future<void> test_method_named_first_only() async {
addMetaPackage();
setPackageContent('''
import 'package:meta/meta.dart';
class C {
@deprecated
int m1({Type t, int x}) {}
int m2<T>({int x}) {}
}
''');
setPackageData(_convertNamed(['C', 'm1'], 'm2', 't', 0));
await resolveTestUnit('''
import '$importUri';
void f(C c) {
c.m1(t: int, x: 0);
}
''');
await assertHasFix('''
import '$importUri';
void f(C c) {
c.m2<int>(x: 0);
}
''');
}
Future<void> test_method_named_last_only() async {
addMetaPackage();
setPackageContent('''
import 'package:meta/meta.dart';
class C {
@deprecated
int m1({int x, int y, Type t}) {}
int m2<T>({int x, int y}) {}
}
''');
setPackageData(_convertNamed(['C', 'm1'], 'm2', 't', 0));
await resolveTestUnit('''
import '$importUri';
void f(C c) {
c.m1(x: 0, y: 1, t: int);
}
''');
await assertHasFix('''
import '$importUri';
void f(C c) {
c.m2<int>(x: 0, y: 1);
}
''');
}
Future<void> test_method_named_middle_only() async {
addMetaPackage();
setPackageContent('''
import 'package:meta/meta.dart';
class C {
@deprecated
int m1({int x, Type t, int y}) {}
int m2<T>({int x, int y}) {}
}
''');
setPackageData(_convertNamed(['C', 'm1'], 'm2', 't', 0));
await resolveTestUnit('''
import '$importUri';
void f(C c) {
c.m1(x: 0, t: int, y: 1);
}
''');
await assertHasFix('''
import '$importUri';
void f(C c) {
c.m2<int>(x: 0, y: 1);
}
''');
}
Future<void> test_method_named_mixed_only() async {
addMetaPackage();
setPackageContent('''
import 'package:meta/meta.dart';
class C {
@deprecated
int m1(int x, {Type t, int y}) {}
int m2<T>(int x, {int y}) {}
}
''');
setPackageData(_convertNamed(['C', 'm1'], 'm2', 't', 0));
await resolveTestUnit('''
import '$importUri';
void f(C c) {
c.m1(0, t: int, y: 1);
}
''');
await assertHasFix('''
import '$importUri';
void f(C c) {
c.m2<int>(0, y: 1);
}
''');
}
Future<void> test_method_positional_first_only() async {
addMetaPackage();
setPackageContent('''
import 'package:meta/meta.dart';
class C {
@deprecated
int m1(Type t, int x) {}
int m2<T>(int x) {}
}
''');
setPackageData(_convertPositional(['C', 'm1'], 'm2', 0, 0));
await resolveTestUnit('''
import '$importUri';
void f(C c) {
c.m1(int, 0);
}
''');
await assertHasFix('''
import '$importUri';
void f(C c) {
c.m2<int>(0);
}
''');
}
Future<void> test_method_positional_last_only() async {
addMetaPackage();
setPackageContent('''
import 'package:meta/meta.dart';
class C {
@deprecated
int m1(int x, int y, Type t) {}
int m2<T>(int x, int y) {}
}
''');
setPackageData(_convertPositional(['C', 'm1'], 'm2', 2, 0));
await resolveTestUnit('''
import '$importUri';
void f(C c) {
c.m1(0, 1, int);
}
''');
await assertHasFix('''
import '$importUri';
void f(C c) {
c.m2<int>(0, 1);
}
''');
}
Future<void> test_method_positional_middle_only() async {
addMetaPackage();
setPackageContent('''
import 'package:meta/meta.dart';
class C {
@deprecated
int m1(int x, Type t, int y) {}
int m2<T>(int x, int y) {}
}
''');
setPackageData(_convertPositional(['C', 'm1'], 'm2', 1, 0));
await resolveTestUnit('''
import '$importUri';
void f(C c) {
c.m1(0, int, 1);
}
''');
await assertHasFix('''
import '$importUri';
void f(C c) {
c.m2<int>(0, 1);
}
''');
}
Future<void> test_method_positional_only_first() async {
addMetaPackage();
setPackageContent('''
import 'package:meta/meta.dart';
class C {
@deprecated
int m1<T>(Type t) {}
int m2<S, T>() {}
}
''');
setPackageData(_convertPositional(['C', 'm1'], 'm2', 0, 0));
await resolveTestUnit('''
import '$importUri';
void f(C c) {
c.m1<int>(String);
}
''');
await assertHasFix('''
import '$importUri';
void f(C c) {
c.m2<String, int>();
}
''');
}
Future<void> test_method_positional_only_last() async {
addMetaPackage();
setPackageContent('''
import 'package:meta/meta.dart';
class C {
@deprecated
int m1<S, T>(Type t) {}
int m2<S, T, U>() {}
}
''');
setPackageData(_convertPositional(['C', 'm1'], 'm2', 0, 2));
await resolveTestUnit('''
import '$importUri';
void f(C c) {
c.m1<int, double>(String);
}
''');
await assertHasFix('''
import '$importUri';
void f(C c) {
c.m2<int, double, String>();
}
''');
}
Future<void> test_method_positional_only_middle() async {
addMetaPackage();
setPackageContent('''
import 'package:meta/meta.dart';
class C {
@deprecated
int m1<S, U>(Type t) {}
int m2<S, T, U>() {}
}
''');
setPackageData(_convertPositional(['C', 'm1'], 'm2', 0, 1));
await resolveTestUnit('''
import '$importUri';
void f(C c) {
c.m1<int, double>(String);
}
''');
await assertHasFix('''
import '$importUri';
void f(C c) {
c.m2<int, String, double>();
}
''');
}
Future<void> test_method_positional_only_only() async {
addMetaPackage();
setPackageContent('''
import 'package:meta/meta.dart';
class C {
@deprecated
int m1(Type t) {}
int m2<T>() {}
}
''');
setPackageData(_convertPositional(['C', 'm1'], 'm2', 0, 0));
await resolveTestUnit('''
import '$importUri';
void f(C c) {
c.m1(int);
}
''');
await assertHasFix('''
import '$importUri';
void f(C c) {
c.m2<int>();
}
''');
}
Transform _convertNamed(List<String> components, String newName,
String parameterName, int typeArgumentIndex) =>
Transform(
title: 'title',
element: ElementDescriptor(
libraryUris: [importUri], components: components),
changes: [
RenameChange(newName: newName),
ConvertArgumentToTypeArgumentChange(
parameterReference: NamedParameterReference(parameterName),
typeArgumentIndex: typeArgumentIndex),
]);
Transform _convertPositional(List<String> components, String newName,
int argumentIndex, int typeArgumentIndex) =>
Transform(
title: 'title',
element: ElementDescriptor(
libraryUris: [importUri], components: components),
changes: [
RenameChange(newName: newName),
ConvertArgumentToTypeArgumentChange(
parameterReference: PositionalParameterReference(argumentIndex),
typeArgumentIndex: typeArgumentIndex),
]);
}