Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Unified Diff: pkg/analyzer/test/generated/checked_mode_compile_time_error_code_test.dart

Issue 1782463002: Split resolver_test.dart into smaller files. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: pkg/analyzer/test/generated/checked_mode_compile_time_error_code_test.dart
diff --git a/pkg/analyzer/test/generated/checked_mode_compile_time_error_code_test.dart b/pkg/analyzer/test/generated/checked_mode_compile_time_error_code_test.dart
new file mode 100644
index 0000000000000000000000000000000000000000..e3eaeaf7bfc43376bf78c9580529f83a4a6fb53e
--- /dev/null
+++ b/pkg/analyzer/test/generated/checked_mode_compile_time_error_code_test.dart
@@ -0,0 +1,619 @@
+// Copyright (c) 2016, 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.
+
+library analyzer.test.generated.checked_mode_compile_time_error_code_test;
+
+import 'package:analyzer/src/generated/error.dart';
+import 'package:analyzer/src/generated/source_io.dart';
+
+import '../reflective_tests.dart';
+import '../utils.dart';
+import 'resolver_test_case.dart';
+
+main() {
+ initializeTestEnvironment();
+ runReflectiveTests(CheckedModeCompileTimeErrorCodeTest);
+}
+
+@reflectiveTest
+class CheckedModeCompileTimeErrorCodeTest extends ResolverTestCase {
+ void test_fieldFormalParameterAssignableToField_extends() {
+ // According to checked-mode type checking rules, a value of type B is
+ // assignable to a field of type A, because B extends A (and hence is a
+ // subtype of A).
+ Source source = addSource(r'''
+class A {
+ const A();
+}
+class B extends A {
+ const B();
+}
+class C {
+ final A a;
+ const C(this.a);
+}
+var v = const C(const B());''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_fieldFormalParameterAssignableToField_fieldType_unresolved_null() {
+ // Null always passes runtime type checks, even when the type is
+ // unresolved.
+ Source source = addSource(r'''
+class A {
+ final Unresolved x;
+ const A(String this.x);
+}
+var v = const A(null);''');
+ computeLibrarySourceErrors(source);
+ assertErrors(source, [StaticWarningCode.UNDEFINED_CLASS]);
+ verify([source]);
+ }
+
+ void test_fieldFormalParameterAssignableToField_implements() {
+ // According to checked-mode type checking rules, a value of type B is
+ // assignable to a field of type A, because B implements A (and hence is a
+ // subtype of A).
+ Source source = addSource(r'''
+class A {}
+class B implements A {
+ const B();
+}
+class C {
+ final A a;
+ const C(this.a);
+}
+var v = const C(const B());''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_fieldFormalParameterAssignableToField_list_dynamic() {
+ // [1, 2, 3] has type List<dynamic>, which is a subtype of List<int>.
+ Source source = addSource(r'''
+class A {
+ const A(List<int> x);
+}
+var x = const A(const [1, 2, 3]);''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_fieldFormalParameterAssignableToField_list_nonDynamic() {
+ // <int>[1, 2, 3] has type List<int>, which is a subtype of List<num>.
+ Source source = addSource(r'''
+class A {
+ const A(List<num> x);
+}
+var x = const A(const <int>[1, 2, 3]);''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_fieldFormalParameterAssignableToField_map_dynamic() {
+ // {1: 2} has type Map<dynamic, dynamic>, which is a subtype of
+ // Map<int, int>.
+ Source source = addSource(r'''
+class A {
+ const A(Map<int, int> x);
+}
+var x = const A(const {1: 2});''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_fieldFormalParameterAssignableToField_map_keyDifferent() {
+ // <int, int>{1: 2} has type Map<int, int>, which is a subtype of
+ // Map<num, int>.
+ Source source = addSource(r'''
+class A {
+ const A(Map<num, int> x);
+}
+var x = const A(const <int, int>{1: 2});''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_fieldFormalParameterAssignableToField_map_valueDifferent() {
+ // <int, int>{1: 2} has type Map<int, int>, which is a subtype of
+ // Map<int, num>.
+ Source source = addSource(r'''
+class A {
+ const A(Map<int, num> x);
+}
+var x = const A(const <int, int>{1: 2});''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_fieldFormalParameterAssignableToField_notype() {
+ // If a field is declared without a type, then any value may be assigned to
+ // it.
+ Source source = addSource(r'''
+class A {
+ final x;
+ const A(this.x);
+}
+var v = const A(5);''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_fieldFormalParameterAssignableToField_null() {
+ // Null is assignable to anything.
+ Source source = addSource(r'''
+class A {
+ final int x;
+ const A(this.x);
+}
+var v = const A(null);''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_fieldFormalParameterAssignableToField_typedef() {
+ // foo has the runtime type dynamic -> dynamic, so it should be assignable
+ // to A.f.
+ Source source = addSource(r'''
+typedef String Int2String(int x);
+class A {
+ final Int2String f;
+ const A(this.f);
+}
+foo(x) => 1;
+var v = const A(foo);''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_fieldFormalParameterAssignableToField_typeSubstitution() {
+ // foo has the runtime type dynamic -> dynamic, so it should be assignable
+ // to A.f.
+ Source source = addSource(r'''
+class A<T> {
+ final T x;
+ const A(this.x);
+}
+var v = const A<int>(3);''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_fieldFormalParameterNotAssignableToField() {
+ Source source = addSource(r'''
+class A {
+ final int x;
+ const A(this.x);
+}
+var v = const A('foo');''');
+ computeLibrarySourceErrors(source);
+ assertErrors(source, [
+ CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH,
+ StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ ]);
+ verify([source]);
+ }
+
+ void test_fieldFormalParameterNotAssignableToField_extends() {
+ // According to checked-mode type checking rules, a value of type A is not
+ // assignable to a field of type B, because B extends A (the subtyping
+ // relationship is in the wrong direction).
+ Source source = addSource(r'''
+class A {
+ const A();
+}
+class B extends A {
+ const B();
+}
+class C {
+ final B b;
+ const C(this.b);
+}
+var v = const C(const A());''');
+ computeLibrarySourceErrors(source);
+ assertErrors(source, [
+ CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH
+ ]);
+ verify([source]);
+ }
+
+ void test_fieldFormalParameterNotAssignableToField_fieldType() {
+ Source source = addSource(r'''
+class A {
+ final int x;
+ const A(String this.x);
+}
+var v = const A('foo');''');
+ computeLibrarySourceErrors(source);
+ assertErrors(source, [
+ CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH,
+ StaticWarningCode.FIELD_INITIALIZING_FORMAL_NOT_ASSIGNABLE
+ ]);
+ verify([source]);
+ }
+
+ void test_fieldFormalParameterNotAssignableToField_fieldType_unresolved() {
+ Source source = addSource(r'''
+class A {
+ final Unresolved x;
+ const A(String this.x);
+}
+var v = const A('foo');''');
+ computeLibrarySourceErrors(source);
+ assertErrors(source, [
+ CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH,
+ StaticWarningCode.UNDEFINED_CLASS
+ ]);
+ verify([source]);
+ }
+
+ void test_fieldFormalParameterNotAssignableToField_implements() {
+ // According to checked-mode type checking rules, a value of type A is not
+ // assignable to a field of type B, because B implements A (the subtyping
+ // relationship is in the wrong direction).
+ Source source = addSource(r'''
+class A {
+ const A();
+}
+class B implements A {}
+class C {
+ final B b;
+ const C(this.b);
+}
+var v = const C(const A());''');
+ computeLibrarySourceErrors(source);
+ assertErrors(source, [
+ CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH
+ ]);
+ verify([source]);
+ }
+
+ void test_fieldFormalParameterNotAssignableToField_list() {
+ // <num>[1, 2, 3] has type List<num>, which is not a subtype of List<int>.
+ Source source = addSource(r'''
+class A {
+ const A(List<int> x);
+}
+var x = const A(const <num>[1, 2, 3]);''');
+ computeLibrarySourceErrors(source);
+ assertErrors(source, [
+ CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH
+ ]);
+ verify([source]);
+ }
+
+ void test_fieldFormalParameterNotAssignableToField_map_keyMismatch() {
+ // <num, int>{1: 2} has type Map<num, int>, which is not a subtype of
+ // Map<int, int>.
+ Source source = addSource(r'''
+class A {
+ const A(Map<int, int> x);
+}
+var x = const A(const <num, int>{1: 2});''');
+ computeLibrarySourceErrors(source);
+ assertErrors(source, [
+ CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH
+ ]);
+ verify([source]);
+ }
+
+ void test_fieldFormalParameterNotAssignableToField_map_valueMismatch() {
+ // <int, num>{1: 2} has type Map<int, num>, which is not a subtype of
+ // Map<int, int>.
+ Source source = addSource(r'''
+class A {
+ const A(Map<int, int> x);
+}
+var x = const A(const <int, num>{1: 2});''');
+ computeLibrarySourceErrors(source);
+ assertErrors(source, [
+ CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH
+ ]);
+ verify([source]);
+ }
+
+ void test_fieldFormalParameterNotAssignableToField_optional() {
+ Source source = addSource(r'''
+class A {
+ final int x;
+ const A([this.x = 'foo']);
+}
+var v = const A();''');
+ computeLibrarySourceErrors(source);
+ assertErrors(source, [
+ CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH,
+ StaticTypeWarningCode.INVALID_ASSIGNMENT
+ ]);
+ verify([source]);
+ }
+
+ void test_fieldFormalParameterNotAssignableToField_typedef() {
+ // foo has the runtime type String -> int, so it should not be assignable
+ // to A.f (A.f requires it to be int -> String).
+ Source source = addSource(r'''
+typedef String Int2String(int x);
+class A {
+ final Int2String f;
+ const A(this.f);
+}
+int foo(String x) => 1;
+var v = const A(foo);''');
+ computeLibrarySourceErrors(source);
+ assertErrors(source, [
+ CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH,
+ StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ ]);
+ verify([source]);
+ }
+
+ void test_fieldInitializerNotAssignable() {
+ Source source = addSource(r'''
+class A {
+ final int x;
+ const A() : x = '';
+}''');
+ computeLibrarySourceErrors(source);
+ assertErrors(source, [
+ CheckedModeCompileTimeErrorCode.CONST_FIELD_INITIALIZER_NOT_ASSIGNABLE,
+ StaticWarningCode.FIELD_INITIALIZER_NOT_ASSIGNABLE
+ ]);
+ verify([source]);
+ }
+
+ void test_fieldTypeMismatch() {
+ Source source = addSource(r'''
+class A {
+ const A(x) : y = x;
+ final int y;
+}
+var v = const A('foo');''');
+ computeLibrarySourceErrors(source);
+ assertErrors(source, [
+ CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_FIELD_TYPE_MISMATCH
+ ]);
+ verify([source]);
+ }
+
+ void test_fieldTypeMismatch_generic() {
+ Source source = addSource(r'''
+class C<T> {
+ final T x = y;
+ const C();
+}
+const int y = 1;
+var v = const C<String>();
+''');
+ computeLibrarySourceErrors(source);
+ assertErrors(source, [
+ CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_FIELD_TYPE_MISMATCH,
+ StaticTypeWarningCode.INVALID_ASSIGNMENT
+ ]);
+ verify([source]);
+ }
+
+ void test_fieldTypeMismatch_unresolved() {
+ Source source = addSource(r'''
+class A {
+ const A(x) : y = x;
+ final Unresolved y;
+}
+var v = const A('foo');''');
+ computeLibrarySourceErrors(source);
+ assertErrors(source, [
+ CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_FIELD_TYPE_MISMATCH,
+ StaticWarningCode.UNDEFINED_CLASS
+ ]);
+ verify([source]);
+ }
+
+ void test_fieldTypeOk_generic() {
+ Source source = addSource(r'''
+class C<T> {
+ final T x = y;
+ const C();
+}
+const int y = 1;
+var v = const C<int>();
+''');
+ computeLibrarySourceErrors(source);
+ assertErrors(source, [StaticTypeWarningCode.INVALID_ASSIGNMENT]);
+ verify([source]);
+ }
+
+ void test_fieldTypeOk_null() {
+ Source source = addSource(r'''
+class A {
+ const A(x) : y = x;
+ final int y;
+}
+var v = const A(null);''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_fieldTypeOk_unresolved_null() {
+ // Null always passes runtime type checks, even when the type is
+ // unresolved.
+ Source source = addSource(r'''
+class A {
+ const A(x) : y = x;
+ final Unresolved y;
+}
+var v = const A(null);''');
+ computeLibrarySourceErrors(source);
+ assertErrors(source, [StaticWarningCode.UNDEFINED_CLASS]);
+ verify([source]);
+ }
+
+ void test_listElementTypeNotAssignable() {
+ Source source = addSource("var v = const <String> [42];");
+ computeLibrarySourceErrors(source);
+ assertErrors(source, [
+ CheckedModeCompileTimeErrorCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,
+ StaticWarningCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
+ ]);
+ verify([source]);
+ }
+
+ void test_mapKeyTypeNotAssignable() {
+ Source source = addSource("var v = const <String, int > {1 : 2};");
+ computeLibrarySourceErrors(source);
+ assertErrors(source, [
+ CheckedModeCompileTimeErrorCode.MAP_KEY_TYPE_NOT_ASSIGNABLE,
+ StaticWarningCode.MAP_KEY_TYPE_NOT_ASSIGNABLE
+ ]);
+ verify([source]);
+ }
+
+ void test_mapValueTypeNotAssignable() {
+ Source source = addSource("var v = const <String, String> {'a' : 2};");
+ computeLibrarySourceErrors(source);
+ assertErrors(source, [
+ CheckedModeCompileTimeErrorCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE,
+ StaticWarningCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE
+ ]);
+ verify([source]);
+ }
+
+ void test_parameterAssignable_null() {
+ // Null is assignable to anything.
+ Source source = addSource(r'''
+class A {
+ const A(int x);
+}
+var v = const A(null);''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_parameterAssignable_typeSubstitution() {
+ Source source = addSource(r'''
+class A<T> {
+ const A(T x);
+}
+var v = const A<int>(3);''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_parameterAssignable_undefined_null() {
+ // Null always passes runtime type checks, even when the type is
+ // unresolved.
+ Source source = addSource(r'''
+class A {
+ const A(Unresolved x);
+}
+var v = const A(null);''');
+ computeLibrarySourceErrors(source);
+ assertErrors(source, [StaticWarningCode.UNDEFINED_CLASS]);
+ verify([source]);
+ }
+
+ void test_parameterNotAssignable() {
+ Source source = addSource(r'''
+class A {
+ const A(int x);
+}
+var v = const A('foo');''');
+ computeLibrarySourceErrors(source);
+ assertErrors(source, [
+ CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH,
+ StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ ]);
+ verify([source]);
+ }
+
+ void test_parameterNotAssignable_typeSubstitution() {
+ Source source = addSource(r'''
+class A<T> {
+ const A(T x);
+}
+var v = const A<int>('foo');''');
+ computeLibrarySourceErrors(source);
+ assertErrors(source, [
+ CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH,
+ StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ ]);
+ verify([source]);
+ }
+
+ void test_parameterNotAssignable_undefined() {
+ Source source = addSource(r'''
+class A {
+ const A(Unresolved x);
+}
+var v = const A('foo');''');
+ computeLibrarySourceErrors(source);
+ assertErrors(source, [
+ CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH,
+ StaticWarningCode.UNDEFINED_CLASS
+ ]);
+ verify([source]);
+ }
+
+ void test_redirectingConstructor_paramTypeMismatch() {
+ Source source = addSource(r'''
+class A {
+ const A.a1(x) : this.a2(x);
+ const A.a2(String x);
+}
+var v = const A.a1(0);''');
+ computeLibrarySourceErrors(source);
+ assertErrors(source, [
+ CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH
+ ]);
+ verify([source]);
+ }
+
+ void test_topLevelVarAssignable_null() {
+ Source source = addSource("const int x = null;");
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_topLevelVarAssignable_undefined_null() {
+ // Null always passes runtime type checks, even when the type is
+ // unresolved.
+ Source source = addSource("const Unresolved x = null;");
+ computeLibrarySourceErrors(source);
+ assertErrors(source, [StaticWarningCode.UNDEFINED_CLASS]);
+ verify([source]);
+ }
+
+ void test_topLevelVarNotAssignable() {
+ Source source = addSource("const int x = 'foo';");
+ computeLibrarySourceErrors(source);
+ assertErrors(source, [
+ CheckedModeCompileTimeErrorCode.VARIABLE_TYPE_MISMATCH,
+ StaticTypeWarningCode.INVALID_ASSIGNMENT
+ ]);
+ verify([source]);
+ }
+
+ void test_topLevelVarNotAssignable_undefined() {
+ Source source = addSource("const Unresolved x = 'foo';");
+ computeLibrarySourceErrors(source);
+ assertErrors(source, [
+ CheckedModeCompileTimeErrorCode.VARIABLE_TYPE_MISMATCH,
+ StaticWarningCode.UNDEFINED_CLASS
+ ]);
+ verify([source]);
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698