Files
sdk/pkg/analyzer/test/src/diagnostics/implicit_dynamic_function_test.dart
T
Sam Rawlins 991dc320b3 Move tests for 4x IMPLICIT_DYNAMIC_ codes to diagnostics/
These test cases are mostly extracted from the bulk test cases in
check_tests, but I also added a new test case here and there.

Change-Id: I3c205903506d6194d258813a077ec3311c2f5189
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/201105
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Samuel Rawlins <srawlins@google.com>
2021-05-23 15:43:10 +00:00

143 lines
2.9 KiB
Dart

// Copyright (c) 2021, 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/error/codes.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
import '../dart/resolution/context_collection_resolution.dart';
main() {
defineReflectiveSuite(() {
defineReflectiveTests(ImplicitDynamicFunctionTest);
defineReflectiveTests(ImplicitDynamicFunctionWithoutNullSafetyTest);
});
}
@reflectiveTest
class ImplicitDynamicFunctionTest extends PubPackageResolutionTest
with ImplicitDynamicFunctionTestCases {}
mixin ImplicitDynamicFunctionTestCases on PubPackageResolutionTest {
@override
void setUp() {
super.setUp();
writeTestPackageAnalysisOptionsFile(
AnalysisOptionsFileConfig(implicitDynamic: false),
);
}
test_local_downwardInferenceGivesInt() async {
await assertNoErrorsInCode('''
void f(int d) {
T g<T>() => throw 'x';
d = g();
}
''');
}
test_local_noDownwardsInference() async {
await assertErrorsInCode('''
void f(dynamic d) {
T a<T>() => throw 'x';
d = a();
}
''', [
error(LanguageCode.IMPLICIT_DYNAMIC_FUNCTION, 51, 1),
]);
}
test_local_noInference() async {
await assertErrorsInCode('''
void f(dynamic d) {
void a<T>() {};
a();
}
''', [
error(LanguageCode.IMPLICIT_DYNAMIC_FUNCTION, 40, 1),
]);
}
test_local_upwardsInferenceGivesDynamic() async {
await assertErrorsInCode('''
void f(dynamic d) {
void a<T>(T t) {};
a(d);
}
''', [
error(LanguageCode.IMPLICIT_DYNAMIC_FUNCTION, 43, 1),
]);
}
test_local_upwardsInferenceGivesInt() async {
await assertNoErrorsInCode('''
void f() {
void a<T>(T t) {};
a(42);
}
''');
}
test_topLevel_downwardInferenceGivesDynamic() async {
await assertErrorsInCode('''
external T a<T>();
void f(dynamic d) {
d = a();
}
''', [
error(LanguageCode.IMPLICIT_DYNAMIC_FUNCTION, 46, 1),
]);
}
test_topLevel_downwardInferenceGivesInt() async {
await assertNoErrorsInCode('''
external T a<T>();
void f(int d) {
d = a();
}
''');
}
test_topLevel_dynamicAssignmentToTypeVariable() async {
await assertErrorsInCode('''
T a<T>(T t) => t;
void f(dynamic d) {
a(d);
a(42);
}
''', [
error(LanguageCode.IMPLICIT_DYNAMIC_FUNCTION, 41, 1),
]);
}
test_topLevel_intAssignmentToTypeVariable() async {
await assertNoErrorsInCode('''
T a<T>(T t) => t;
void f() {
a(42);
}
''');
}
test_topLevel_noInference() async {
await assertErrorsInCode('''
void a<T>() {}
void f() {
a();
}
''', [
error(LanguageCode.IMPLICIT_DYNAMIC_FUNCTION, 29, 1),
]);
}
}
@reflectiveTest
class ImplicitDynamicFunctionWithoutNullSafetyTest
extends PubPackageResolutionTest
with ImplicitDynamicFunctionTestCases, WithoutNullSafetyMixin {}