blob: 1113a73842d0c11e335a4c854c86c7e772521dda [file] [log] [blame]
// Copyright (c) 2024, 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:analyzer/file_system/physical_file_system.dart';
import 'package:analyzer_utilities/package_root.dart';
import 'package:linter/src/rules/analyzer_use_new_elements.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
import '../rule_test_support.dart';
void main() {
defineReflectiveSuite(() {
defineReflectiveTests(AnalyzerUseNewElementsTest);
});
}
@reflectiveTest
class AnalyzerUseNewElementsTest extends LintRuleTest {
@override
String get lintRule => AnalyzerUseNewElements.code.name;
@override
void setUp() {
super.setUp();
var physicalProvider = PhysicalResourceProvider.INSTANCE;
var pkgPath = physicalProvider.pathContext.normalize(packageRoot);
var analyzerLibSource = physicalProvider
.getFolder(pkgPath)
.getChildAssumingFolder('analyzer')
.getChildAssumingFolder('lib');
var analyzerFolder = newFolder('/packages/analyzer');
analyzerLibSource.copyTo(analyzerFolder);
newPackageConfigJsonFileFromBuilder(
testPackageRootPath,
PackageConfigFileBuilder()
..add(name: 'analyzer', rootPath: analyzerFolder.path),
);
}
test_enablement_optedOut() async {
await assertDiagnostics(
r'''
// ignore_for_file: analyzer_use_new_elements
import 'package:analyzer/dart/element/element.dart';
ClassElement f() {
throw 42;
}
''',
[error(HintCode.DEPRECATED_MEMBER_USE_WITH_MESSAGE, 100, 12)],
);
}
test_interfaceTypeImpl_element() async {
await assertDiagnostics(
r'''
import 'package:analyzer/src/dart/element/type.dart';
void f(InterfaceTypeImpl type) {
type.element;
}
''',
[error(HintCode.DEPRECATED_MEMBER_USE_WITH_MESSAGE, 95, 7), lint(95, 7)],
);
}
test_methodInvocation_hasFormalParameter() async {
newFile('$testPackageLibPath/a.dart', r'''
import 'package:analyzer/dart/element/element.dart';
void foo([List<ClassElement>? elements]) {}
''');
await assertNoDiagnostics(r'''
import 'a.dart';
void f() {
foo();
}
''');
}
test_methodInvocation_hasType() async {
newFile('$testPackageLibPath/a.dart', r'''
import 'package:analyzer/dart/element/element.dart';
List<ClassElement> getAllClasses() => [];
''');
await assertDiagnostics(
r'''
import 'a.dart';
void f() {
getAllClasses();
}
''',
[lint(31, 13)],
);
}
test_methodInvocation_inDeprecated() async {
newFile('$testPackageLibPath/a.dart', r'''
import 'package:analyzer/dart/element/element.dart';
List<ClassElement> getAllClasses() => [];
''');
await assertNoDiagnostics(r'''
import 'a.dart';
@deprecated
void f() {
getAllClasses();
}
''');
}
test_methodInvocation_inDeprecated2() async {
await assertNoDiagnostics(r'''
import 'package:analyzer/dart/element/element.dart';
@deprecated
void f(Element element) {
var foo = element.nonSynthetic;
print(foo);
}
''');
}
test_namedType() async {
await assertDiagnostics(
r'''
import 'package:analyzer/dart/element/element.dart';
ClassElement f() {
throw 42;
}
''',
[
error(HintCode.DEPRECATED_MEMBER_USE_WITH_MESSAGE, 54, 12),
lint(54, 12),
],
);
}
test_propertyAccess() async {
await assertDiagnostics(
r'''
import 'package:analyzer/dart/ast/ast.dart';
void f(ClassDeclaration a) {
a.declaredElement;
}
''',
[
error(HintCode.DEPRECATED_MEMBER_USE_WITH_MESSAGE, 79, 15),
lint(79, 15),
],
);
}
test_propertyAccess_declaredElement_src() async {
await assertDiagnostics(
r'''
import 'package:analyzer/src/dart/ast/ast.dart';
void f(ClassDeclarationImpl a) {
a.declaredElement;
}
''',
[
error(HintCode.DEPRECATED_MEMBER_USE_WITH_MESSAGE, 87, 15),
lint(87, 15),
],
);
}
test_propertyAccess_nestedType() async {
newFile('$testPackageLibPath/a.dart', r'''
import 'package:analyzer/dart/element/element.dart';
List<ClassElement> get allClasses => [];
''');
await assertDiagnostics(
r'''
import 'a.dart';
void f() {
allClasses;
}
''',
[lint(31, 10)],
);
}
}