blob: 9209fb54c72deb53baf38cb1a6b2712c4adb0cde [file] [log] [blame]
// Copyright (c) 2022, 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/src/dart/error/hint_codes.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
import '../dart/resolution/context_collection_resolution.dart';
main() {
defineReflectiveSuite(() {
defineReflectiveTests(DeprecatedExportUseTest);
});
}
@reflectiveTest
class DeprecatedExportUseTest extends PubPackageResolutionTest {
test_deprecated_class_asExpression() async {
newFile('$testPackageLibPath/a.dart', r'''
class A {}
''');
newFile('$testPackageLibPath/b.dart', r'''
library b;
@deprecated
export 'a.dart';
''');
await assertErrorsInCode('''
import 'b.dart';
void f() {
A;
}
''', [
error(HintCode.DEPRECATED_EXPORT_USE, 31, 1),
]);
}
test_deprecated_class_asExpression_prefixed() async {
newFile('$testPackageLibPath/a.dart', r'''
class A {}
''');
newFile('$testPackageLibPath/b.dart', r'''
library b;
@deprecated
export 'a.dart';
''');
await assertErrorsInCode('''
import 'b.dart' as prefix;
void f() {
prefix.A;
}
''', [
error(HintCode.DEPRECATED_EXPORT_USE, 48, 1),
]);
}
test_deprecated_class_asType() async {
newFile('$testPackageLibPath/a.dart', r'''
class A {}
''');
newFile('$testPackageLibPath/b.dart', r'''
library b;
@deprecated
export 'a.dart';
''');
await assertErrorsInCode('''
import 'b.dart';
void f(A a) {}
''', [
error(HintCode.DEPRECATED_EXPORT_USE, 25, 1),
]);
}
test_deprecated_class_asType_prefixed() async {
newFile('$testPackageLibPath/a.dart', r'''
class A {}
''');
newFile('$testPackageLibPath/b.dart', r'''
library b;
@deprecated
export 'a.dart';
''');
await assertErrorsInCode('''
import 'b.dart' as prefix;
void f(prefix.A a) {}
''', [
error(HintCode.DEPRECATED_EXPORT_USE, 42, 1),
]);
}
test_deprecated_class_import_show() async {
newFile('$testPackageLibPath/a.dart', r'''
class A {}
''');
newFile('$testPackageLibPath/b.dart', r'''
library b;
@deprecated
export 'a.dart';
''');
await assertErrorsInCode('''
import 'b.dart' show A;
void f(A a) {}
''', [
error(HintCode.DEPRECATED_EXPORT_USE, 32, 1),
]);
}
test_deprecated_function() async {
newFile('$testPackageLibPath/a.dart', r'''
void foo() {}
''');
newFile('$testPackageLibPath/b.dart', r'''
library b;
@deprecated
export 'a.dart';
''');
await assertErrorsInCode('''
import 'b.dart';
void f() {
foo();
}
''', [
error(HintCode.DEPRECATED_EXPORT_USE, 31, 3),
]);
}
test_deprecated_function_prefixed() async {
newFile('$testPackageLibPath/a.dart', r'''
void foo() {}
''');
newFile('$testPackageLibPath/b.dart', r'''
library b;
@deprecated
export 'a.dart';
''');
await assertErrorsInCode('''
import 'b.dart' as prefix;
void f() {
prefix.foo();
}
''', [
error(HintCode.DEPRECATED_EXPORT_USE, 48, 3),
]);
}
test_deprecated_getter() async {
newFile('$testPackageLibPath/a.dart', r'''
int get foo => 0;
''');
newFile('$testPackageLibPath/b.dart', r'''
library b;
@deprecated
export 'a.dart';
/// Does not prevent the hint.
set foo(int _) {}
''');
await assertErrorsInCode('''
import 'b.dart';
void f() {
foo;
}
''', [
error(HintCode.DEPRECATED_EXPORT_USE, 31, 3),
]);
}
test_deprecated_getter_prefixed() async {
newFile('$testPackageLibPath/a.dart', r'''
int get foo => 0;
''');
newFile('$testPackageLibPath/b.dart', r'''
library b;
@deprecated
export 'a.dart';
/// Does not prevent the hint.
set foo(int _) {}
''');
await assertErrorsInCode('''
import 'b.dart' as prefix;
void f() {
prefix.foo;
}
''', [
error(HintCode.DEPRECATED_EXPORT_USE, 48, 3),
]);
}
test_deprecated_setter() async {
newFile('$testPackageLibPath/a.dart', r'''
void set foo(int _) {}
''');
newFile('$testPackageLibPath/b.dart', r'''
library b;
@deprecated
export 'a.dart';
/// Does not prevent the hint.
int get foo => 0;
''');
await assertErrorsInCode('''
import 'b.dart';
void f() {
foo = 0;
}
''', [
error(HintCode.DEPRECATED_EXPORT_USE, 31, 3),
]);
}
test_deprecated_setter_prefixed() async {
newFile('$testPackageLibPath/a.dart', r'''
void set foo(int _) {}
''');
newFile('$testPackageLibPath/b.dart', r'''
library b;
@deprecated
export 'a.dart';
/// Does not prevent the hint.
int get foo => 0;
''');
await assertErrorsInCode('''
import 'b.dart' as prefix;
void f() {
prefix.foo = 0;
}
''', [
error(HintCode.DEPRECATED_EXPORT_USE, 48, 3),
]);
}
test_deprecated_variable() async {
newFile('$testPackageLibPath/a.dart', r'''
var foo = 0;
''');
newFile('$testPackageLibPath/b.dart', r'''
library b;
@deprecated
export 'a.dart';
''');
await assertErrorsInCode('''
import 'b.dart';
void f() {
foo;
}
''', [
error(HintCode.DEPRECATED_EXPORT_USE, 31, 3),
]);
}
test_notDeprecated_class_hasDirectImport() async {
newFile('$testPackageLibPath/a.dart', r'''
class A {}
''');
newFile('$testPackageLibPath/b.dart', r'''
library b;
@deprecated
export 'a.dart';
''');
await assertNoErrorsInCode('''
import 'a.dart';
import 'b.dart';
void f(A a) {}
''');
}
test_notDeprecated_class_hasNotDeprecatedExport() async {
newFile('$testPackageLibPath/a.dart', r'''
class A {}
''');
newFile('$testPackageLibPath/b.dart', r'''
library b;
@deprecated
export 'a.dart';
// Not deprecated.
export 'a.dart';
''');
await assertNoErrorsInCode('''
import 'b.dart';
void f(A a) {}
''');
}
test_notDeprecated_class_import_hide() async {
newFile('$testPackageLibPath/a.dart', r'''
class A {}
''');
newFile('$testPackageLibPath/b.dart', r'''
library b;
@deprecated
export 'a.dart';
class B {}
''');
await assertNoErrorsInCode('''
import 'a.dart';
import 'b.dart' hide A;
void f(A a, B b) {}
''');
}
test_notDeprecated_class_onlyNotDeprecatedExport() async {
newFile('$testPackageLibPath/a.dart', r'''
class A {}
''');
newFile('$testPackageLibPath/b.dart', r'''
export 'a.dart';
''');
await assertNoErrorsInCode('''
import 'b.dart';
void f(A a) {}
''');
}
test_notDeprecated_getter_useSetter() async {
newFile('$testPackageLibPath/a.dart', r'''
int get foo => 0;
''');
newFile('$testPackageLibPath/b.dart', r'''
library b;
@deprecated
export 'a.dart';
set foo(int _) {}
''');
await assertNoErrorsInCode('''
import 'b.dart';
void f() {
foo = 0;
}
''');
}
test_notDeprecated_getter_useSetter_prefixed() async {
newFile('$testPackageLibPath/a.dart', r'''
int get foo => 0;
''');
newFile('$testPackageLibPath/b.dart', r'''
library b;
@deprecated
export 'a.dart';
set foo(int _) {}
''');
await assertNoErrorsInCode('''
import 'b.dart' as prefix;
void f() {
prefix.foo = 0;
}
''');
}
test_notDeprecated_setter_useGetter() async {
newFile('$testPackageLibPath/a.dart', r'''
set foo(int _) {}
''');
newFile('$testPackageLibPath/b.dart', r'''
library b;
@deprecated
export 'a.dart';
int get foo => 0;
''');
await assertNoErrorsInCode('''
import 'b.dart';
void f() {
foo;
}
''');
}
test_notDeprecated_setter_useGetter_prefixed() async {
newFile('$testPackageLibPath/a.dart', r'''
set foo(int _) {}
''');
newFile('$testPackageLibPath/b.dart', r'''
library b;
@deprecated
export 'a.dart';
int get foo => 0;
''');
await assertNoErrorsInCode('''
import 'b.dart' as prefix;
void f() {
prefix.foo;
}
''');
}
}