| Index: pkg/analyzer_experimental/test/generated/resolver_test.dart
|
| diff --git a/pkg/analyzer_experimental/test/generated/resolver_test.dart b/pkg/analyzer_experimental/test/generated/resolver_test.dart
|
| index 81a1c4487af79ba28be6c78f9c131b06ce036fcd..708f070193239c122acb5885f80cc7da3a2084a7 100644
|
| --- a/pkg/analyzer_experimental/test/generated/resolver_test.dart
|
| +++ b/pkg/analyzer_experimental/test/generated/resolver_test.dart
|
| @@ -21,6 +21,26 @@ import 'test_support.dart';
|
| import 'ast_test.dart' show ASTFactory;
|
| import 'element_test.dart' show ElementFactory;
|
| class TypePropagationTest extends ResolverTestCase {
|
| + void fail_functionExpression_asInvocationArgument_functionExpressionInvocation() {
|
| + String code = EngineTestCase.createSource(["main() {", " (f(String value)) {} ((v) {", " v;", " });", "}"]);
|
| + Source source = addSource(code);
|
| + LibraryElement library = resolve(source);
|
| + assertNoErrors();
|
| + verify([source]);
|
| + CompilationUnit unit = resolveCompilationUnit(source, library);
|
| + Type2 dynamicType = typeProvider.dynamicType;
|
| + Type2 stringType = typeProvider.stringType;
|
| + FormalParameter vParameter = EngineTestCase.findNode(unit, code, "v)", FormalParameter);
|
| + JUnitTestCase.assertSame(stringType, vParameter.identifier.propagatedType);
|
| + JUnitTestCase.assertSame(dynamicType, vParameter.identifier.staticType);
|
| + SimpleIdentifier vIdentifier = EngineTestCase.findNode(unit, code, "v;", SimpleIdentifier);
|
| + JUnitTestCase.assertSame(stringType, vIdentifier.propagatedType);
|
| + JUnitTestCase.assertSame(dynamicType, vIdentifier.staticType);
|
| + }
|
| + void fail_propagatedReturnType_functionExpression() {
|
| + String code = EngineTestCase.createSource(["main() {", " var v = (() {return 42;})();", "}"]);
|
| + check_propagatedReturnType(code, typeProvider.dynamicType, typeProvider.intType);
|
| + }
|
| void test_as() {
|
| Source source = addSource(EngineTestCase.createSource(["class A {", " bool get g => true;", "}", "A f(var p) {", " if ((p as A).g) {", " return p;", " } else {", " return null;", " }", "}"]));
|
| LibraryElement library = resolve(source);
|
| @@ -89,6 +109,83 @@ class TypePropagationTest extends ResolverTestCase {
|
| SimpleIdentifier variableName = statement.expression as SimpleIdentifier;
|
| JUnitTestCase.assertSame(typeA, variableName.propagatedType);
|
| }
|
| + void test_functionExpression_asInvocationArgument() {
|
| + String code = EngineTestCase.createSource(["class MyMap<K, V> {", " forEach(f(K key, V value)) {}", "}", "f(MyMap<int, String> m) {", " m.forEach((k, v) {", " k;", " v;", " });", "}"]);
|
| + Source source = addSource(code);
|
| + LibraryElement library = resolve(source);
|
| + assertNoErrors();
|
| + verify([source]);
|
| + CompilationUnit unit = resolveCompilationUnit(source, library);
|
| + Type2 intType = typeProvider.intType;
|
| + FormalParameter kParameter = EngineTestCase.findNode(unit, code, "k, ", SimpleFormalParameter);
|
| + JUnitTestCase.assertSame(intType, kParameter.identifier.propagatedType);
|
| + SimpleIdentifier kIdentifier = EngineTestCase.findNode(unit, code, "k;", SimpleIdentifier);
|
| + JUnitTestCase.assertSame(intType, kIdentifier.propagatedType);
|
| + JUnitTestCase.assertSame(typeProvider.dynamicType, kIdentifier.staticType);
|
| + Type2 stringType = typeProvider.stringType;
|
| + FormalParameter vParameter = EngineTestCase.findNode(unit, code, "v)", SimpleFormalParameter);
|
| + JUnitTestCase.assertSame(stringType, vParameter.identifier.propagatedType);
|
| + SimpleIdentifier vIdentifier = EngineTestCase.findNode(unit, code, "v;", SimpleIdentifier);
|
| + JUnitTestCase.assertSame(stringType, vIdentifier.propagatedType);
|
| + JUnitTestCase.assertSame(typeProvider.dynamicType, vIdentifier.staticType);
|
| + }
|
| + void test_functionExpression_asInvocationArgument_fromInferredInvocation() {
|
| + String code = EngineTestCase.createSource(["class MyMap<K, V> {", " forEach(f(K key, V value)) {}", "}", "f(MyMap<int, String> m) {", " var m2 = m;", " m2.forEach((k, v) {});", "}"]);
|
| + Source source = addSource(code);
|
| + LibraryElement library = resolve(source);
|
| + assertNoErrors();
|
| + verify([source]);
|
| + CompilationUnit unit = resolveCompilationUnit(source, library);
|
| + Type2 intType = typeProvider.intType;
|
| + FormalParameter kParameter = EngineTestCase.findNode(unit, code, "k, ", SimpleFormalParameter);
|
| + JUnitTestCase.assertSame(intType, kParameter.identifier.propagatedType);
|
| + Type2 stringType = typeProvider.stringType;
|
| + FormalParameter vParameter = EngineTestCase.findNode(unit, code, "v)", SimpleFormalParameter);
|
| + JUnitTestCase.assertSame(stringType, vParameter.identifier.propagatedType);
|
| + }
|
| + void test_functionExpression_asInvocationArgument_keepIfLessSpecific() {
|
| + String code = EngineTestCase.createSource(["class MyList {", " forEach(f(Object value)) {}", "}", "f(MyList list) {", " list.forEach((int v) {", " v;", " });", "}"]);
|
| + Source source = addSource(code);
|
| + LibraryElement library = resolve(source);
|
| + assertNoErrors();
|
| + verify([source]);
|
| + CompilationUnit unit = resolveCompilationUnit(source, library);
|
| + Type2 intType = typeProvider.intType;
|
| + FormalParameter vParameter = EngineTestCase.findNode(unit, code, "v)", SimpleFormalParameter);
|
| + JUnitTestCase.assertSame(null, vParameter.identifier.propagatedType);
|
| + JUnitTestCase.assertSame(intType, vParameter.identifier.staticType);
|
| + SimpleIdentifier vIdentifier = EngineTestCase.findNode(unit, code, "v;", SimpleIdentifier);
|
| + JUnitTestCase.assertSame(intType, vIdentifier.staticType);
|
| + JUnitTestCase.assertSame(null, vIdentifier.propagatedType);
|
| + }
|
| + void test_functionExpression_asInvocationArgument_replaceIfMoreSpecific() {
|
| + String code = EngineTestCase.createSource(["class MyList<E> {", " forEach(f(E value)) {}", "}", "f(MyList<String> list) {", " list.forEach((Object v) {", " v;", " });", "}"]);
|
| + Source source = addSource(code);
|
| + LibraryElement library = resolve(source);
|
| + assertNoErrors();
|
| + verify([source]);
|
| + CompilationUnit unit = resolveCompilationUnit(source, library);
|
| + Type2 stringType = typeProvider.stringType;
|
| + FormalParameter vParameter = EngineTestCase.findNode(unit, code, "v)", SimpleFormalParameter);
|
| + JUnitTestCase.assertSame(stringType, vParameter.identifier.propagatedType);
|
| + JUnitTestCase.assertSame(typeProvider.objectType, vParameter.identifier.staticType);
|
| + SimpleIdentifier vIdentifier = EngineTestCase.findNode(unit, code, "v;", SimpleIdentifier);
|
| + JUnitTestCase.assertSame(stringType, vIdentifier.propagatedType);
|
| + }
|
| + void test_Future_then() {
|
| + String code = EngineTestCase.createSource(["import 'dart:async';", "main(Future<int> firstFuture) {", " firstFuture.then((p1) {", " return 1.0;", " }).then((p2) {", " return new Future<String>.value('str');", " }).then((p3) {", " });", "}"]);
|
| + Source source = addSource(code);
|
| + LibraryElement library = resolve(source);
|
| + assertNoErrors();
|
| + verify([source]);
|
| + CompilationUnit unit = resolveCompilationUnit(source, library);
|
| + FormalParameter p1 = EngineTestCase.findNode(unit, code, "p1) {", SimpleFormalParameter);
|
| + JUnitTestCase.assertSame(typeProvider.intType, p1.identifier.propagatedType);
|
| + FormalParameter p2 = EngineTestCase.findNode(unit, code, "p2) {", SimpleFormalParameter);
|
| + JUnitTestCase.assertSame(typeProvider.doubleType, p2.identifier.propagatedType);
|
| + FormalParameter p3 = EngineTestCase.findNode(unit, code, "p3) {", SimpleFormalParameter);
|
| + JUnitTestCase.assertSame(typeProvider.stringType, p3.identifier.propagatedType);
|
| + }
|
| void test_initializer() {
|
| Source source = addSource(EngineTestCase.createSource(["f() {", " var v = 0;", " return v;", "}"]));
|
| LibraryElement library = resolve(source);
|
| @@ -97,9 +194,18 @@ class TypePropagationTest extends ResolverTestCase {
|
| CompilationUnit unit = resolveCompilationUnit(source, library);
|
| FunctionDeclaration function = unit.declarations[0] as FunctionDeclaration;
|
| BlockFunctionBody body = function.functionExpression.body as BlockFunctionBody;
|
| - ReturnStatement statement = body.block.statements[1] as ReturnStatement;
|
| - SimpleIdentifier variableName = statement.expression as SimpleIdentifier;
|
| - JUnitTestCase.assertSame(typeProvider.intType, variableName.propagatedType);
|
| + NodeList<Statement> statements = body.block.statements;
|
| + {
|
| + VariableDeclarationStatement statement = statements[0] as VariableDeclarationStatement;
|
| + SimpleIdentifier variableName = statement.variables.variables[0].name;
|
| + JUnitTestCase.assertSame(typeProvider.dynamicType, variableName.staticType);
|
| + JUnitTestCase.assertSame(typeProvider.intType, variableName.propagatedType);
|
| + }
|
| + {
|
| + ReturnStatement statement = statements[1] as ReturnStatement;
|
| + SimpleIdentifier variableName = statement.expression as SimpleIdentifier;
|
| + JUnitTestCase.assertSame(typeProvider.intType, variableName.propagatedType);
|
| + }
|
| }
|
| void test_initializer_dereference() {
|
| Source source = addSource(EngineTestCase.createSource(["f() {", " var v = 'String';", " v.", "}"]));
|
| @@ -357,6 +463,34 @@ class TypePropagationTest extends ResolverTestCase {
|
| JUnitTestCase.assertSame(typeProvider.stringType, typeArguments[0]);
|
| JUnitTestCase.assertSame(typeProvider.intType, typeArguments[1]);
|
| }
|
| + void test_propagatedReturnType_function_hasReturnType_returnsNull() {
|
| + String code = EngineTestCase.createSource(["String f() => null;", "main() {", " var v = f();", "}"]);
|
| + check_propagatedReturnType(code, typeProvider.dynamicType, typeProvider.stringType);
|
| + }
|
| + void test_propagatedReturnType_function_lessSpecificStaticReturnType() {
|
| + String code = EngineTestCase.createSource(["Object f() => 42;", "main() {", " var v = f();", "}"]);
|
| + check_propagatedReturnType(code, typeProvider.dynamicType, typeProvider.intType);
|
| + }
|
| + void test_propagatedReturnType_function_moreSpecificStaticReturnType() {
|
| + String code = EngineTestCase.createSource(["int f() => (42 as Object);", "main() {", " var v = f();", "}"]);
|
| + check_propagatedReturnType(code, typeProvider.dynamicType, typeProvider.intType);
|
| + }
|
| + void test_propagatedReturnType_function_noReturnTypeName_blockBody_multipleReturns() {
|
| + String code = EngineTestCase.createSource(["f() {", " if (true) return 0;", " return 1.0;", "}", "main() {", " var v = f();", "}"]);
|
| + check_propagatedReturnType(code, typeProvider.dynamicType, typeProvider.numType);
|
| + }
|
| + void test_propagatedReturnType_function_noReturnTypeName_blockBody_oneReturn() {
|
| + String code = EngineTestCase.createSource(["f() {", " var z = 42;", " return z;", "}", "main() {", " var v = f();", "}"]);
|
| + check_propagatedReturnType(code, typeProvider.dynamicType, typeProvider.intType);
|
| + }
|
| + void test_propagatedReturnType_function_noReturnTypeName_expressionBody() {
|
| + String code = EngineTestCase.createSource(["f() => 42;", "main() {", " var v = f();", "}"]);
|
| + check_propagatedReturnType(code, typeProvider.dynamicType, typeProvider.intType);
|
| + }
|
| + void test_propagatedReturnType_localFunction() {
|
| + String code = EngineTestCase.createSource(["main() {", " f() => 42;", " var v = f();", "}"]);
|
| + check_propagatedReturnType(code, typeProvider.dynamicType, typeProvider.intType);
|
| + }
|
| void test_query() {
|
| Source source = addSource(EngineTestCase.createSource(["import 'dart:html';", "", "main() {", " var v1 = query('a');", " var v2 = query('A');", " var v3 = query('body:active');", " var v4 = query('button[foo=\"bar\"]');", " var v5 = query('div.class');", " var v6 = query('input#id');", " var v7 = query('select#id');", " // invocation of method", " var m1 = document.query('div');", " // unsupported currently", " var b1 = query('noSuchTag');", " var b2 = query('DART_EDITOR_NO_SUCH_TYPE');", " var b3 = query('body div');", " return [v1, v2, v3, v4, v5, v6, v7, m1, b1, b2, b3];", "}"]));
|
| LibraryElement library = resolve(source);
|
| @@ -379,8 +513,27 @@ class TypePropagationTest extends ResolverTestCase {
|
| JUnitTestCase.assertEquals("Element", elements[9].propagatedType.name);
|
| JUnitTestCase.assertEquals("Element", elements[10].propagatedType.name);
|
| }
|
| +
|
| + /**
|
| + * @param code the code that assigns the value to the variable "v", no matter how. We check that
|
| + * "v" has expected static and propagated type.
|
| + */
|
| + void check_propagatedReturnType(String code, Type2 expectedStaticType, Type2 expectedPropagatedType) {
|
| + Source source = addSource(code);
|
| + LibraryElement library = resolve(source);
|
| + assertNoErrors();
|
| + verify([source]);
|
| + CompilationUnit unit = resolveCompilationUnit(source, library);
|
| + SimpleIdentifier identifier = EngineTestCase.findNode(unit, code, "v = ", SimpleIdentifier);
|
| + JUnitTestCase.assertSame(expectedStaticType, identifier.staticType);
|
| + JUnitTestCase.assertSame(expectedPropagatedType, identifier.propagatedType);
|
| + }
|
| static dartSuite() {
|
| _ut.group('TypePropagationTest', () {
|
| + _ut.test('test_Future_then', () {
|
| + final __test = new TypePropagationTest();
|
| + runJUnitTest(__test, __test.test_Future_then);
|
| + });
|
| _ut.test('test_as', () {
|
| final __test = new TypePropagationTest();
|
| runJUnitTest(__test, __test.test_as);
|
| @@ -401,6 +554,22 @@ class TypePropagationTest extends ResolverTestCase {
|
| final __test = new TypePropagationTest();
|
| runJUnitTest(__test, __test.test_forEach);
|
| });
|
| + _ut.test('test_functionExpression_asInvocationArgument', () {
|
| + final __test = new TypePropagationTest();
|
| + runJUnitTest(__test, __test.test_functionExpression_asInvocationArgument);
|
| + });
|
| + _ut.test('test_functionExpression_asInvocationArgument_fromInferredInvocation', () {
|
| + final __test = new TypePropagationTest();
|
| + runJUnitTest(__test, __test.test_functionExpression_asInvocationArgument_fromInferredInvocation);
|
| + });
|
| + _ut.test('test_functionExpression_asInvocationArgument_keepIfLessSpecific', () {
|
| + final __test = new TypePropagationTest();
|
| + runJUnitTest(__test, __test.test_functionExpression_asInvocationArgument_keepIfLessSpecific);
|
| + });
|
| + _ut.test('test_functionExpression_asInvocationArgument_replaceIfMoreSpecific', () {
|
| + final __test = new TypePropagationTest();
|
| + runJUnitTest(__test, __test.test_functionExpression_asInvocationArgument_replaceIfMoreSpecific);
|
| + });
|
| _ut.test('test_initializer', () {
|
| final __test = new TypePropagationTest();
|
| runJUnitTest(__test, __test.test_initializer);
|
| @@ -477,6 +646,34 @@ class TypePropagationTest extends ResolverTestCase {
|
| final __test = new TypePropagationTest();
|
| runJUnitTest(__test, __test.test_mapLiteral_same);
|
| });
|
| + _ut.test('test_propagatedReturnType_function_hasReturnType_returnsNull', () {
|
| + final __test = new TypePropagationTest();
|
| + runJUnitTest(__test, __test.test_propagatedReturnType_function_hasReturnType_returnsNull);
|
| + });
|
| + _ut.test('test_propagatedReturnType_function_lessSpecificStaticReturnType', () {
|
| + final __test = new TypePropagationTest();
|
| + runJUnitTest(__test, __test.test_propagatedReturnType_function_lessSpecificStaticReturnType);
|
| + });
|
| + _ut.test('test_propagatedReturnType_function_moreSpecificStaticReturnType', () {
|
| + final __test = new TypePropagationTest();
|
| + runJUnitTest(__test, __test.test_propagatedReturnType_function_moreSpecificStaticReturnType);
|
| + });
|
| + _ut.test('test_propagatedReturnType_function_noReturnTypeName_blockBody_multipleReturns', () {
|
| + final __test = new TypePropagationTest();
|
| + runJUnitTest(__test, __test.test_propagatedReturnType_function_noReturnTypeName_blockBody_multipleReturns);
|
| + });
|
| + _ut.test('test_propagatedReturnType_function_noReturnTypeName_blockBody_oneReturn', () {
|
| + final __test = new TypePropagationTest();
|
| + runJUnitTest(__test, __test.test_propagatedReturnType_function_noReturnTypeName_blockBody_oneReturn);
|
| + });
|
| + _ut.test('test_propagatedReturnType_function_noReturnTypeName_expressionBody', () {
|
| + final __test = new TypePropagationTest();
|
| + runJUnitTest(__test, __test.test_propagatedReturnType_function_noReturnTypeName_expressionBody);
|
| + });
|
| + _ut.test('test_propagatedReturnType_localFunction', () {
|
| + final __test = new TypePropagationTest();
|
| + runJUnitTest(__test, __test.test_propagatedReturnType_localFunction);
|
| + });
|
| _ut.test('test_query', () {
|
| final __test = new TypePropagationTest();
|
| runJUnitTest(__test, __test.test_query);
|
| @@ -666,6 +863,19 @@ class NonErrorResolverTest extends ResolverTestCase {
|
| assertNoErrors();
|
| verify([source]);
|
| }
|
| + void test_constEval_propertyExtraction_fieldStatic_targetType() {
|
| + addSource2("/math.dart", EngineTestCase.createSource(["library math;", "const PI = 3.14;"]));
|
| + Source source = addSource(EngineTestCase.createSource(["import 'math.dart' as math;", "const C = math.PI;"]));
|
| + resolve(source);
|
| + assertNoErrors();
|
| + verify([source]);
|
| + }
|
| + void test_constEval_propertyExtraction_methodStatic_targetType() {
|
| + Source source = addSource(EngineTestCase.createSource(["class A {", " const A();", " static m() {}", "}", "const C = A.m;"]));
|
| + resolve(source);
|
| + assertNoErrors();
|
| + verify([source]);
|
| + }
|
| void test_constEvalTypeBoolNumString_equal() {
|
| Source source = addSource(EngineTestCase.createSource(["class A {", " const A();", "}", "class B {", " final v;", " const B.a1(bool p) : v = p == true;", " const B.a2(bool p) : v = p == false;", " const B.a3(bool p) : v = p == 0;", " const B.a4(bool p) : v = p == 0.0;", " const B.a5(bool p) : v = p == '';", " const B.b1(int p) : v = p == true;", " const B.b2(int p) : v = p == false;", " const B.b3(int p) : v = p == 0;", " const B.b4(int p) : v = p == 0.0;", " const B.b5(int p) : v = p == '';", " const B.c1(String p) : v = p == true;", " const B.c2(String p) : v = p == false;", " const B.c3(String p) : v = p == 0;", " const B.c4(String p) : v = p == 0.0;", " const B.c5(String p) : v = p == '';", " const B.n1(num p) : v = p == null;", " const B.n2(num p) : v = null == p;", "}"]));
|
| resolve(source);
|
| @@ -929,6 +1139,12 @@ class NonErrorResolverTest extends ResolverTestCase {
|
| assertNoErrors();
|
| verify([source]);
|
| }
|
| + void test_instanceMemberAccessFromStatic_fromComment() {
|
| + Source source = addSource(EngineTestCase.createSource(["class A {", " m() {}", " /// [m]", " static foo() {", " }", "}"]));
|
| + resolve(source);
|
| + assertNoErrors();
|
| + verify([source]);
|
| + }
|
| void test_invalidAssignment() {
|
| Source source = addSource(EngineTestCase.createSource(["f() {", " var x;", " var y;", " x = y;", "}"]));
|
| resolve(source);
|
| @@ -1073,6 +1289,24 @@ class NonErrorResolverTest extends ResolverTestCase {
|
| assertNoErrors();
|
| verify([source]);
|
| }
|
| + void test_invocationOfNonFunction_localVariable_dynamic() {
|
| + Source source = addSource(EngineTestCase.createSource(["f() {}", "main() {", " var v = f;", " v();", "}"]));
|
| + resolve(source);
|
| + assertNoErrors();
|
| + verify([source]);
|
| + }
|
| + void test_invocationOfNonFunction_localVariable_dynamic2() {
|
| + Source source = addSource(EngineTestCase.createSource(["f() {}", "main() {", " var v = f;", " v = 1;", " v();", "}"]));
|
| + resolve(source);
|
| + assertNoErrors();
|
| + verify([source]);
|
| + }
|
| + void test_invocationOfNonFunction_Object() {
|
| + Source source = addSource(EngineTestCase.createSource(["main() {", " Object v = null;", " v();", "}"]));
|
| + resolve(source);
|
| + assertNoErrors();
|
| + verify([source]);
|
| + }
|
| void test_memberWithClassName_setter() {
|
| Source source = addSource(EngineTestCase.createSource(["class A {", " set A(v) {}", "}"]));
|
| resolve(source);
|
| @@ -1457,6 +1691,12 @@ class NonErrorResolverTest extends ResolverTestCase {
|
| assertNoErrors();
|
| verify([source]);
|
| }
|
| + void test_staticAccessToInstanceMember_annotation() {
|
| + Source source = addSource(EngineTestCase.createSource(["class A {", " A.name() {}", "}", "@A.name()", "main() {", "}"]));
|
| + resolve(source);
|
| + assertNoErrors();
|
| + verify([source]);
|
| + }
|
| void test_staticAccessToInstanceMember_method() {
|
| Source source = addSource(EngineTestCase.createSource(["class A {", " static m() {}", "}", "main() {", " A.m;", " A.m();", "}"]));
|
| resolve(source);
|
| @@ -1493,6 +1733,24 @@ class NonErrorResolverTest extends ResolverTestCase {
|
| assertNoErrors();
|
| verify([source]);
|
| }
|
| + void test_typeArgumentNotMatchingBounds_typeArgumentList_0() {
|
| + Source source = addSource(EngineTestCase.createSource(["abstract class A<T extends A>{}"]));
|
| + resolve(source);
|
| + assertNoErrors();
|
| + verify([source]);
|
| + }
|
| + void test_typeArgumentNotMatchingBounds_typeArgumentList_1() {
|
| + Source source = addSource(EngineTestCase.createSource(["abstract class A<T extends A<A>>{}"]));
|
| + resolve(source);
|
| + assertNoErrors();
|
| + verify([source]);
|
| + }
|
| + void test_typeArgumentNotMatchingBounds_typeArgumentList_20() {
|
| + Source source = addSource(EngineTestCase.createSource(["abstract class A<T extends A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A>>>>>>>>>>>>>>>>>>>>>{}"]));
|
| + resolve(source);
|
| + assertNoErrors();
|
| + verify([source]);
|
| + }
|
| void test_undefinedConstructorInInitializer_explicit_named() {
|
| Source source = addSource(EngineTestCase.createSource(["class A {", " A.named() {}", "}", "class B extends A {", " B() : super.named();", "}"]));
|
| resolve(source);
|
| @@ -1564,6 +1822,16 @@ class NonErrorResolverTest extends ResolverTestCase {
|
| assertNoErrors();
|
| verify([source]);
|
| }
|
| + void test_undefinedMethod_functionExpression_callMethod() {
|
| + Source source = addSource(EngineTestCase.createSource(["main() {", " (() => null).call();", "}"]));
|
| + resolve(source);
|
| + assertNoErrors();
|
| + }
|
| + void test_undefinedMethod_functionExpression_directCall() {
|
| + Source source = addSource(EngineTestCase.createSource(["main() {", " (() => null)();", "}"]));
|
| + resolve(source);
|
| + assertNoErrors();
|
| + }
|
| void test_undefinedMethod_noSuchMethod() {
|
| Source source = addSource(EngineTestCase.createSource(["class A {", " noSuchMethod(invocation) {}", "}", "f() {", " (new A()).m();", "}"]));
|
| resolve(source);
|
| @@ -1586,6 +1854,18 @@ class NonErrorResolverTest extends ResolverTestCase {
|
| resolve(source);
|
| assertNoErrors();
|
| }
|
| + void test_undefinedSuperMethod_field() {
|
| + Source source = addSource(EngineTestCase.createSource(["class A {", " var m;", "}", "class B extends A {", " f() {", " super.m();", " }", "}"]));
|
| + resolve(source);
|
| + assertNoErrors();
|
| + verify([source]);
|
| + }
|
| + void test_undefinedSuperMethod_method() {
|
| + Source source = addSource(EngineTestCase.createSource(["class A {", " m() {}", "}", "class B extends A {", " f() {", " super.m();", " }", "}"]));
|
| + resolve(source);
|
| + assertNoErrors();
|
| + verify([source]);
|
| + }
|
| void test_wrongNumberOfParametersForOperator_index() {
|
| Source source = addSource(EngineTestCase.createSource(["class A {", " operator []=(a, b) {}", "}"]));
|
| resolve(source);
|
| @@ -1755,6 +2035,14 @@ class NonErrorResolverTest extends ResolverTestCase {
|
| final __test = new NonErrorResolverTest();
|
| runJUnitTest(__test, __test.test_constEvalTypeBoolNumString_notEqual);
|
| });
|
| + _ut.test('test_constEval_propertyExtraction_fieldStatic_targetType', () {
|
| + final __test = new NonErrorResolverTest();
|
| + runJUnitTest(__test, __test.test_constEval_propertyExtraction_fieldStatic_targetType);
|
| + });
|
| + _ut.test('test_constEval_propertyExtraction_methodStatic_targetType', () {
|
| + final __test = new NonErrorResolverTest();
|
| + runJUnitTest(__test, __test.test_constEval_propertyExtraction_methodStatic_targetType);
|
| + });
|
| _ut.test('test_constWithNonConstantArgument_literals', () {
|
| final __test = new NonErrorResolverTest();
|
| runJUnitTest(__test, __test.test_constWithNonConstantArgument_literals);
|
| @@ -1919,6 +2207,10 @@ class NonErrorResolverTest extends ResolverTestCase {
|
| final __test = new NonErrorResolverTest();
|
| runJUnitTest(__test, __test.test_initializingFormalForNonExistantField);
|
| });
|
| + _ut.test('test_instanceMemberAccessFromStatic_fromComment', () {
|
| + final __test = new NonErrorResolverTest();
|
| + runJUnitTest(__test, __test.test_instanceMemberAccessFromStatic_fromComment);
|
| + });
|
| _ut.test('test_invalidAssignment', () {
|
| final __test = new NonErrorResolverTest();
|
| runJUnitTest(__test, __test.test_invalidAssignment);
|
| @@ -2003,6 +2295,10 @@ class NonErrorResolverTest extends ResolverTestCase {
|
| final __test = new NonErrorResolverTest();
|
| runJUnitTest(__test, __test.test_invalidTypeArgumentInConstMap);
|
| });
|
| + _ut.test('test_invocationOfNonFunction_Object', () {
|
| + final __test = new NonErrorResolverTest();
|
| + runJUnitTest(__test, __test.test_invocationOfNonFunction_Object);
|
| + });
|
| _ut.test('test_invocationOfNonFunction_dynamic', () {
|
| final __test = new NonErrorResolverTest();
|
| runJUnitTest(__test, __test.test_invocationOfNonFunction_dynamic);
|
| @@ -2015,6 +2311,14 @@ class NonErrorResolverTest extends ResolverTestCase {
|
| final __test = new NonErrorResolverTest();
|
| runJUnitTest(__test, __test.test_invocationOfNonFunction_localVariable);
|
| });
|
| + _ut.test('test_invocationOfNonFunction_localVariable_dynamic', () {
|
| + final __test = new NonErrorResolverTest();
|
| + runJUnitTest(__test, __test.test_invocationOfNonFunction_localVariable_dynamic);
|
| + });
|
| + _ut.test('test_invocationOfNonFunction_localVariable_dynamic2', () {
|
| + final __test = new NonErrorResolverTest();
|
| + runJUnitTest(__test, __test.test_invocationOfNonFunction_localVariable_dynamic2);
|
| + });
|
| _ut.test('test_memberWithClassName_setter', () {
|
| final __test = new NonErrorResolverTest();
|
| runJUnitTest(__test, __test.test_memberWithClassName_setter);
|
| @@ -2271,6 +2575,10 @@ class NonErrorResolverTest extends ResolverTestCase {
|
| final __test = new NonErrorResolverTest();
|
| runJUnitTest(__test, __test.test_returnWithoutValue_void);
|
| });
|
| + _ut.test('test_staticAccessToInstanceMember_annotation', () {
|
| + final __test = new NonErrorResolverTest();
|
| + runJUnitTest(__test, __test.test_staticAccessToInstanceMember_annotation);
|
| + });
|
| _ut.test('test_staticAccessToInstanceMember_method', () {
|
| final __test = new NonErrorResolverTest();
|
| runJUnitTest(__test, __test.test_staticAccessToInstanceMember_method);
|
| @@ -2295,6 +2603,18 @@ class NonErrorResolverTest extends ResolverTestCase {
|
| final __test = new NonErrorResolverTest();
|
| runJUnitTest(__test, __test.test_typeArgumentNotMatchingBounds_new);
|
| });
|
| + _ut.test('test_typeArgumentNotMatchingBounds_typeArgumentList_0', () {
|
| + final __test = new NonErrorResolverTest();
|
| + runJUnitTest(__test, __test.test_typeArgumentNotMatchingBounds_typeArgumentList_0);
|
| + });
|
| + _ut.test('test_typeArgumentNotMatchingBounds_typeArgumentList_1', () {
|
| + final __test = new NonErrorResolverTest();
|
| + runJUnitTest(__test, __test.test_typeArgumentNotMatchingBounds_typeArgumentList_1);
|
| + });
|
| + _ut.test('test_typeArgumentNotMatchingBounds_typeArgumentList_20', () {
|
| + final __test = new NonErrorResolverTest();
|
| + runJUnitTest(__test, __test.test_typeArgumentNotMatchingBounds_typeArgumentList_20);
|
| + });
|
| _ut.test('test_undefinedConstructorInInitializer_explicit_named', () {
|
| final __test = new NonErrorResolverTest();
|
| runJUnitTest(__test, __test.test_undefinedConstructorInInitializer_explicit_named);
|
| @@ -2343,6 +2663,14 @@ class NonErrorResolverTest extends ResolverTestCase {
|
| final __test = new NonErrorResolverTest();
|
| runJUnitTest(__test, __test.test_undefinedIdentifier_show);
|
| });
|
| + _ut.test('test_undefinedMethod_functionExpression_callMethod', () {
|
| + final __test = new NonErrorResolverTest();
|
| + runJUnitTest(__test, __test.test_undefinedMethod_functionExpression_callMethod);
|
| + });
|
| + _ut.test('test_undefinedMethod_functionExpression_directCall', () {
|
| + final __test = new NonErrorResolverTest();
|
| + runJUnitTest(__test, __test.test_undefinedMethod_functionExpression_directCall);
|
| + });
|
| _ut.test('test_undefinedMethod_noSuchMethod', () {
|
| final __test = new NonErrorResolverTest();
|
| runJUnitTest(__test, __test.test_undefinedMethod_noSuchMethod);
|
| @@ -2359,6 +2687,14 @@ class NonErrorResolverTest extends ResolverTestCase {
|
| final __test = new NonErrorResolverTest();
|
| runJUnitTest(__test, __test.test_undefinedSetter_noSuchMethod);
|
| });
|
| + _ut.test('test_undefinedSuperMethod_field', () {
|
| + final __test = new NonErrorResolverTest();
|
| + runJUnitTest(__test, __test.test_undefinedSuperMethod_field);
|
| + });
|
| + _ut.test('test_undefinedSuperMethod_method', () {
|
| + final __test = new NonErrorResolverTest();
|
| + runJUnitTest(__test, __test.test_undefinedSuperMethod_method);
|
| + });
|
| _ut.test('test_wrongNumberOfParametersForOperator1', () {
|
| final __test = new NonErrorResolverTest();
|
| runJUnitTest(__test, __test.test_wrongNumberOfParametersForOperator1);
|
| @@ -2406,51 +2742,21 @@ class LibraryTest extends EngineTestCase {
|
| _errorListener = new GatheringErrorListener();
|
| _library5 = library("/lib.dart");
|
| }
|
| - void test_addExport() {
|
| - Library exportLibrary = library("/exported.dart");
|
| - _library5.addExport(ASTFactory.exportDirective2("exported.dart", []), exportLibrary);
|
| - List<Library> exports = _library5.exports;
|
| - EngineTestCase.assertLength(1, exports);
|
| - JUnitTestCase.assertSame(exportLibrary, exports[0]);
|
| - _errorListener.assertNoErrors();
|
| - }
|
| - void test_addImport() {
|
| - Library importLibrary = library("/imported.dart");
|
| - _library5.addImport(ASTFactory.importDirective2("imported.dart", null, []), importLibrary);
|
| - List<Library> imports = _library5.imports;
|
| - EngineTestCase.assertLength(1, imports);
|
| - JUnitTestCase.assertSame(importLibrary, imports[0]);
|
| - _errorListener.assertNoErrors();
|
| - }
|
| void test_getExplicitlyImportsCore() {
|
| JUnitTestCase.assertFalse(_library5.explicitlyImportsCore);
|
| _errorListener.assertNoErrors();
|
| }
|
| - void test_getExport() {
|
| - ExportDirective directive = ASTFactory.exportDirective2("exported.dart", []);
|
| - Library exportLibrary = library("/exported.dart");
|
| - _library5.addExport(directive, exportLibrary);
|
| - JUnitTestCase.assertSame(exportLibrary, _library5.getExport(directive));
|
| - _errorListener.assertNoErrors();
|
| - }
|
| void test_getExports() {
|
| EngineTestCase.assertLength(0, _library5.exports);
|
| _errorListener.assertNoErrors();
|
| }
|
| - void test_getImport() {
|
| - ImportDirective directive = ASTFactory.importDirective2("imported.dart", null, []);
|
| - Library importLibrary = library("/imported.dart");
|
| - _library5.addImport(directive, importLibrary);
|
| - JUnitTestCase.assertSame(importLibrary, _library5.getImport(directive));
|
| - _errorListener.assertNoErrors();
|
| - }
|
| void test_getImports() {
|
| EngineTestCase.assertLength(0, _library5.imports);
|
| _errorListener.assertNoErrors();
|
| }
|
| void test_getImportsAndExports() {
|
| - _library5.addImport(ASTFactory.importDirective2("imported.dart", null, []), library("/imported.dart"));
|
| - _library5.addExport(ASTFactory.exportDirective2("exported.dart", []), library("/exported.dart"));
|
| + _library5.importedLibraries = <Library> [library("/imported.dart")];
|
| + _library5.exportedLibraries = <Library> [library("/exported.dart")];
|
| EngineTestCase.assertLength(2, _library5.importsAndExports);
|
| _errorListener.assertNoErrors();
|
| }
|
| @@ -2469,6 +2775,22 @@ class LibraryTest extends EngineTestCase {
|
| JUnitTestCase.assertTrue(_library5.explicitlyImportsCore);
|
| _errorListener.assertNoErrors();
|
| }
|
| + void test_setExportedLibraries() {
|
| + Library exportLibrary = library("/exported.dart");
|
| + _library5.exportedLibraries = <Library> [exportLibrary];
|
| + List<Library> exports = _library5.exports;
|
| + EngineTestCase.assertLength(1, exports);
|
| + JUnitTestCase.assertSame(exportLibrary, exports[0]);
|
| + _errorListener.assertNoErrors();
|
| + }
|
| + void test_setImportedLibraries() {
|
| + Library importLibrary = library("/imported.dart");
|
| + _library5.importedLibraries = <Library> [importLibrary];
|
| + List<Library> imports = _library5.imports;
|
| + EngineTestCase.assertLength(1, imports);
|
| + JUnitTestCase.assertSame(importLibrary, imports[0]);
|
| + _errorListener.assertNoErrors();
|
| + }
|
| void test_setLibraryElement() {
|
| LibraryElementImpl element = new LibraryElementImpl(_analysisContext, ASTFactory.libraryIdentifier2(["lib"]));
|
| _library5.libraryElement = element;
|
| @@ -2477,30 +2799,14 @@ class LibraryTest extends EngineTestCase {
|
| Library library(String definingCompilationUnitPath) => new Library(_analysisContext, _errorListener, new FileBasedSource.con1(_sourceFactory.contentCache, FileUtilities2.createFile(definingCompilationUnitPath)));
|
| static dartSuite() {
|
| _ut.group('LibraryTest', () {
|
| - _ut.test('test_addExport', () {
|
| - final __test = new LibraryTest();
|
| - runJUnitTest(__test, __test.test_addExport);
|
| - });
|
| - _ut.test('test_addImport', () {
|
| - final __test = new LibraryTest();
|
| - runJUnitTest(__test, __test.test_addImport);
|
| - });
|
| _ut.test('test_getExplicitlyImportsCore', () {
|
| final __test = new LibraryTest();
|
| runJUnitTest(__test, __test.test_getExplicitlyImportsCore);
|
| });
|
| - _ut.test('test_getExport', () {
|
| - final __test = new LibraryTest();
|
| - runJUnitTest(__test, __test.test_getExport);
|
| - });
|
| _ut.test('test_getExports', () {
|
| final __test = new LibraryTest();
|
| runJUnitTest(__test, __test.test_getExports);
|
| });
|
| - _ut.test('test_getImport', () {
|
| - final __test = new LibraryTest();
|
| - runJUnitTest(__test, __test.test_getImport);
|
| - });
|
| _ut.test('test_getImports', () {
|
| final __test = new LibraryTest();
|
| runJUnitTest(__test, __test.test_getImports);
|
| @@ -2521,6 +2827,14 @@ class LibraryTest extends EngineTestCase {
|
| final __test = new LibraryTest();
|
| runJUnitTest(__test, __test.test_setExplicitlyImportsCore);
|
| });
|
| + _ut.test('test_setExportedLibraries', () {
|
| + final __test = new LibraryTest();
|
| + runJUnitTest(__test, __test.test_setExportedLibraries);
|
| + });
|
| + _ut.test('test_setImportedLibraries', () {
|
| + final __test = new LibraryTest();
|
| + runJUnitTest(__test, __test.test_setImportedLibraries);
|
| + });
|
| _ut.test('test_setLibraryElement', () {
|
| final __test = new LibraryTest();
|
| runJUnitTest(__test, __test.test_setLibraryElement);
|
| @@ -2535,24 +2849,12 @@ class StaticTypeWarningCodeTest extends ResolverTestCase {
|
| assertErrors([StaticTypeWarningCode.INACCESSIBLE_SETTER]);
|
| verify([source]);
|
| }
|
| - void fail_nonTypeAsTypeArgument() {
|
| - Source source = addSource(EngineTestCase.createSource(["int A;", "class B<E> {}", "f(B<A> b) {}"]));
|
| - resolve(source);
|
| - assertErrors([StaticTypeWarningCode.NON_TYPE_AS_TYPE_ARGUMENT]);
|
| - verify([source]);
|
| - }
|
| void fail_redirectWithInvalidTypeParameters() {
|
| Source source = addSource(EngineTestCase.createSource([]));
|
| resolve(source);
|
| assertErrors([StaticTypeWarningCode.REDIRECT_WITH_INVALID_TYPE_PARAMETERS]);
|
| verify([source]);
|
| }
|
| - void fail_typeArgumentViolatesBounds() {
|
| - Source source = addSource(EngineTestCase.createSource([]));
|
| - resolve(source);
|
| - assertErrors([StaticTypeWarningCode.TYPE_ARGUMENT_VIOLATES_BOUNDS]);
|
| - verify([source]);
|
| - }
|
| void test_inconsistentMethodInheritance_paramCount() {
|
| Source source = addSource(EngineTestCase.createSource(["abstract class A {", " int x();", "}", "abstract class B {", " int x(int y);", "}", "class C implements A, B {", "}"]));
|
| resolve(source);
|
| @@ -2658,6 +2960,18 @@ class StaticTypeWarningCodeTest extends ResolverTestCase {
|
| assertErrors([StaticTypeWarningCode.NON_BOOL_EXPRESSION]);
|
| verify([source]);
|
| }
|
| + void test_nonTypeAsTypeArgument_notAType() {
|
| + Source source = addSource(EngineTestCase.createSource(["int A;", "class B<E> {}", "f(B<A> b) {}"]));
|
| + resolve(source);
|
| + assertErrors([StaticTypeWarningCode.NON_TYPE_AS_TYPE_ARGUMENT]);
|
| + verify([source]);
|
| + }
|
| + void test_nonTypeAsTypeArgument_undefinedIdentifier() {
|
| + Source source = addSource(EngineTestCase.createSource(["class B<E> {}", "f(B<A> b) {}"]));
|
| + resolve(source);
|
| + assertErrors([StaticTypeWarningCode.NON_TYPE_AS_TYPE_ARGUMENT]);
|
| + verify([source]);
|
| + }
|
| void test_returnOfInvalidType_expressionFunctionBody_function() {
|
| Source source = addSource(EngineTestCase.createSource(["int f() => '0';"]));
|
| resolve(source);
|
| @@ -2718,18 +3032,108 @@ class StaticTypeWarningCodeTest extends ResolverTestCase {
|
| assertErrors([StaticTypeWarningCode.RETURN_OF_INVALID_TYPE]);
|
| verify([source]);
|
| }
|
| + void test_typeArgumentNotMatchingBounds_classTypeAlias() {
|
| + Source source = addSource(EngineTestCase.createSource(["class A {}", "class B {}", "class C {}", "class G<E extends A> {}", "typedef D = G<B> with C;"]));
|
| + resolve(source);
|
| + assertErrors([StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
|
| + verify([source]);
|
| + }
|
| void test_typeArgumentNotMatchingBounds_const() {
|
| Source source = addSource(EngineTestCase.createSource(["class A {}", "class B {}", "class G<E extends A> {", " const G();", "}", "f() { return const G<B>(); }"]));
|
| resolve(source);
|
| assertErrors([StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
|
| verify([source]);
|
| }
|
| + void test_typeArgumentNotMatchingBounds_extends() {
|
| + Source source = addSource(EngineTestCase.createSource(["class A {}", "class B {}", "class G<E extends A> {}", "class C extends G<B>{}"]));
|
| + resolve(source);
|
| + assertErrors([StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
|
| + verify([source]);
|
| + }
|
| + void test_typeArgumentNotMatchingBounds_fieldFormalParameter() {
|
| + Source source = addSource(EngineTestCase.createSource(["class A {}", "class B {}", "class G<E extends A> {}", "class C {", " var f;", " C(G<B> this.f) {}", "}"]));
|
| + resolve(source);
|
| + assertErrors([StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
|
| + verify([source]);
|
| + }
|
| + void test_typeArgumentNotMatchingBounds_functionReturnType() {
|
| + Source source = addSource(EngineTestCase.createSource(["class A {}", "class B {}", "class G<E extends A> {}", "G<B> f() {}"]));
|
| + resolve(source);
|
| + assertErrors([StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
|
| + verify([source]);
|
| + }
|
| + void test_typeArgumentNotMatchingBounds_functionTypeAlias() {
|
| + Source source = addSource(EngineTestCase.createSource(["class A {}", "class B {}", "class G<E extends A> {}", "typedef G<B> f();"]));
|
| + resolve(source);
|
| + assertErrors([StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
|
| + verify([source]);
|
| + }
|
| + void test_typeArgumentNotMatchingBounds_functionTypedFormalParameter() {
|
| + Source source = addSource(EngineTestCase.createSource(["class A {}", "class B {}", "class G<E extends A> {}", "f(G<B> h()) {}"]));
|
| + resolve(source);
|
| + assertErrors([StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
|
| + verify([source]);
|
| + }
|
| + void test_typeArgumentNotMatchingBounds_implements() {
|
| + Source source = addSource(EngineTestCase.createSource(["class A {}", "class B {}", "class G<E extends A> {}", "class C implements G<B>{}"]));
|
| + resolve(source);
|
| + assertErrors([StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
|
| + verify([source]);
|
| + }
|
| + void test_typeArgumentNotMatchingBounds_is() {
|
| + Source source = addSource(EngineTestCase.createSource(["class A {}", "class B {}", "class G<E extends A> {}", "var b = 1 is G<B>;"]));
|
| + resolve(source);
|
| + assertErrors([StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
|
| + verify([source]);
|
| + }
|
| + void test_typeArgumentNotMatchingBounds_methodReturnType() {
|
| + Source source = addSource(EngineTestCase.createSource(["class A {}", "class B {}", "class G<E extends A> {}", "class C {", " G<B> m() {}", "}"]));
|
| + resolve(source);
|
| + assertErrors([StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
|
| + verify([source]);
|
| + }
|
| void test_typeArgumentNotMatchingBounds_new() {
|
| Source source = addSource(EngineTestCase.createSource(["class A {}", "class B {}", "class G<E extends A> {}", "f() { return new G<B>(); }"]));
|
| resolve(source);
|
| assertErrors([StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
|
| verify([source]);
|
| }
|
| + void test_typeArgumentNotMatchingBounds_new_superTypeOfUpperBound() {
|
| + Source source = addSource(EngineTestCase.createSource(["class A {}", "class B extends A {}", "class C extends B {}", "class G<E extends B> {}", "f() { return new G<A>(); }"]));
|
| + resolve(source);
|
| + assertErrors([StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
|
| + verify([source]);
|
| + }
|
| + void test_typeArgumentNotMatchingBounds_parameter() {
|
| + Source source = addSource(EngineTestCase.createSource(["class A {}", "class B {}", "class G<E extends A> {}", "f(G<B> g) {}"]));
|
| + resolve(source);
|
| + assertErrors([StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
|
| + verify([source]);
|
| + }
|
| + void test_typeArgumentNotMatchingBounds_typeArgumentList() {
|
| + Source source = addSource(EngineTestCase.createSource(["class A {}", "class B {}", "class C<E> {}", "class D<E extends A> {}", "C<D<B>> Var;"]));
|
| + resolve(source);
|
| + assertErrors([StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
|
| + verify([source]);
|
| + }
|
| + void test_typeArgumentNotMatchingBounds_typeParameter() {
|
| + Source source = addSource(EngineTestCase.createSource(["class A {}", "class B {}", "class C {}", "class G<E extends A> {}", "class D<F extends G<B>> {}"]));
|
| + resolve(source);
|
| + assertErrors([StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
|
| + verify([source]);
|
| + }
|
| + void test_typeArgumentNotMatchingBounds_variableDeclaration() {
|
| + Source source = addSource(EngineTestCase.createSource(["class A {}", "class B {}", "class G<E extends A> {}", "G<B> g;"]));
|
| + resolve(source);
|
| + assertErrors([StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
|
| + verify([source]);
|
| + }
|
| + void test_typeArgumentNotMatchingBounds_with() {
|
| + Source source = addSource(EngineTestCase.createSource(["class A {}", "class B {}", "class G<E extends A> {}", "class C extends Object with G<B>{}"]));
|
| + resolve(source);
|
| + assertErrors([StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
|
| + verify([source]);
|
| + }
|
| void test_undefinedFunction() {
|
| Source source = addSource(EngineTestCase.createSource(["void f() {", " g();", "}"]));
|
| resolve(source);
|
| @@ -2802,6 +3206,18 @@ class StaticTypeWarningCodeTest extends ResolverTestCase {
|
| assertErrors([StaticTypeWarningCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS]);
|
| verify([source]);
|
| }
|
| + void test_wrongNumberOfTypeArguments_typeTest_tooFew() {
|
| + Source source = addSource(EngineTestCase.createSource(["class A {}", "class C<K, V> {}", "f(p) {", " return p is C<A>;", "}"]));
|
| + resolve(source);
|
| + assertErrors([StaticTypeWarningCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS]);
|
| + verify([source]);
|
| + }
|
| + void test_wrongNumberOfTypeArguments_typeTest_tooMany() {
|
| + Source source = addSource(EngineTestCase.createSource(["class A {}", "class C<E> {}", "f(p) {", " return p is C<A, A>;", "}"]));
|
| + resolve(source);
|
| + assertErrors([StaticTypeWarningCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS]);
|
| + verify([source]);
|
| + }
|
| static dartSuite() {
|
| _ut.group('StaticTypeWarningCodeTest', () {
|
| _ut.test('test_inconsistentMethodInheritance_paramCount', () {
|
| @@ -2876,6 +3292,14 @@ class StaticTypeWarningCodeTest extends ResolverTestCase {
|
| final __test = new StaticTypeWarningCodeTest();
|
| runJUnitTest(__test, __test.test_nonBoolExpression);
|
| });
|
| + _ut.test('test_nonTypeAsTypeArgument_notAType', () {
|
| + final __test = new StaticTypeWarningCodeTest();
|
| + runJUnitTest(__test, __test.test_nonTypeAsTypeArgument_notAType);
|
| + });
|
| + _ut.test('test_nonTypeAsTypeArgument_undefinedIdentifier', () {
|
| + final __test = new StaticTypeWarningCodeTest();
|
| + runJUnitTest(__test, __test.test_nonTypeAsTypeArgument_undefinedIdentifier);
|
| + });
|
| _ut.test('test_returnOfInvalidType_expressionFunctionBody_function', () {
|
| final __test = new StaticTypeWarningCodeTest();
|
| runJUnitTest(__test, __test.test_returnOfInvalidType_expressionFunctionBody_function);
|
| @@ -2916,14 +3340,74 @@ class StaticTypeWarningCodeTest extends ResolverTestCase {
|
| final __test = new StaticTypeWarningCodeTest();
|
| runJUnitTest(__test, __test.test_returnOfInvalidType_void);
|
| });
|
| + _ut.test('test_typeArgumentNotMatchingBounds_classTypeAlias', () {
|
| + final __test = new StaticTypeWarningCodeTest();
|
| + runJUnitTest(__test, __test.test_typeArgumentNotMatchingBounds_classTypeAlias);
|
| + });
|
| _ut.test('test_typeArgumentNotMatchingBounds_const', () {
|
| final __test = new StaticTypeWarningCodeTest();
|
| runJUnitTest(__test, __test.test_typeArgumentNotMatchingBounds_const);
|
| });
|
| + _ut.test('test_typeArgumentNotMatchingBounds_extends', () {
|
| + final __test = new StaticTypeWarningCodeTest();
|
| + runJUnitTest(__test, __test.test_typeArgumentNotMatchingBounds_extends);
|
| + });
|
| + _ut.test('test_typeArgumentNotMatchingBounds_fieldFormalParameter', () {
|
| + final __test = new StaticTypeWarningCodeTest();
|
| + runJUnitTest(__test, __test.test_typeArgumentNotMatchingBounds_fieldFormalParameter);
|
| + });
|
| + _ut.test('test_typeArgumentNotMatchingBounds_functionReturnType', () {
|
| + final __test = new StaticTypeWarningCodeTest();
|
| + runJUnitTest(__test, __test.test_typeArgumentNotMatchingBounds_functionReturnType);
|
| + });
|
| + _ut.test('test_typeArgumentNotMatchingBounds_functionTypeAlias', () {
|
| + final __test = new StaticTypeWarningCodeTest();
|
| + runJUnitTest(__test, __test.test_typeArgumentNotMatchingBounds_functionTypeAlias);
|
| + });
|
| + _ut.test('test_typeArgumentNotMatchingBounds_functionTypedFormalParameter', () {
|
| + final __test = new StaticTypeWarningCodeTest();
|
| + runJUnitTest(__test, __test.test_typeArgumentNotMatchingBounds_functionTypedFormalParameter);
|
| + });
|
| + _ut.test('test_typeArgumentNotMatchingBounds_implements', () {
|
| + final __test = new StaticTypeWarningCodeTest();
|
| + runJUnitTest(__test, __test.test_typeArgumentNotMatchingBounds_implements);
|
| + });
|
| + _ut.test('test_typeArgumentNotMatchingBounds_is', () {
|
| + final __test = new StaticTypeWarningCodeTest();
|
| + runJUnitTest(__test, __test.test_typeArgumentNotMatchingBounds_is);
|
| + });
|
| + _ut.test('test_typeArgumentNotMatchingBounds_methodReturnType', () {
|
| + final __test = new StaticTypeWarningCodeTest();
|
| + runJUnitTest(__test, __test.test_typeArgumentNotMatchingBounds_methodReturnType);
|
| + });
|
| _ut.test('test_typeArgumentNotMatchingBounds_new', () {
|
| final __test = new StaticTypeWarningCodeTest();
|
| runJUnitTest(__test, __test.test_typeArgumentNotMatchingBounds_new);
|
| });
|
| + _ut.test('test_typeArgumentNotMatchingBounds_new_superTypeOfUpperBound', () {
|
| + final __test = new StaticTypeWarningCodeTest();
|
| + runJUnitTest(__test, __test.test_typeArgumentNotMatchingBounds_new_superTypeOfUpperBound);
|
| + });
|
| + _ut.test('test_typeArgumentNotMatchingBounds_parameter', () {
|
| + final __test = new StaticTypeWarningCodeTest();
|
| + runJUnitTest(__test, __test.test_typeArgumentNotMatchingBounds_parameter);
|
| + });
|
| + _ut.test('test_typeArgumentNotMatchingBounds_typeArgumentList', () {
|
| + final __test = new StaticTypeWarningCodeTest();
|
| + runJUnitTest(__test, __test.test_typeArgumentNotMatchingBounds_typeArgumentList);
|
| + });
|
| + _ut.test('test_typeArgumentNotMatchingBounds_typeParameter', () {
|
| + final __test = new StaticTypeWarningCodeTest();
|
| + runJUnitTest(__test, __test.test_typeArgumentNotMatchingBounds_typeParameter);
|
| + });
|
| + _ut.test('test_typeArgumentNotMatchingBounds_variableDeclaration', () {
|
| + final __test = new StaticTypeWarningCodeTest();
|
| + runJUnitTest(__test, __test.test_typeArgumentNotMatchingBounds_variableDeclaration);
|
| + });
|
| + _ut.test('test_typeArgumentNotMatchingBounds_with', () {
|
| + final __test = new StaticTypeWarningCodeTest();
|
| + runJUnitTest(__test, __test.test_typeArgumentNotMatchingBounds_with);
|
| + });
|
| _ut.test('test_undefinedFunction', () {
|
| final __test = new StaticTypeWarningCodeTest();
|
| runJUnitTest(__test, __test.test_undefinedFunction);
|
| @@ -2980,6 +3464,14 @@ class StaticTypeWarningCodeTest extends ResolverTestCase {
|
| final __test = new StaticTypeWarningCodeTest();
|
| runJUnitTest(__test, __test.test_wrongNumberOfTypeArguments_tooMany);
|
| });
|
| + _ut.test('test_wrongNumberOfTypeArguments_typeTest_tooFew', () {
|
| + final __test = new StaticTypeWarningCodeTest();
|
| + runJUnitTest(__test, __test.test_wrongNumberOfTypeArguments_typeTest_tooFew);
|
| + });
|
| + _ut.test('test_wrongNumberOfTypeArguments_typeTest_tooMany', () {
|
| + final __test = new StaticTypeWarningCodeTest();
|
| + runJUnitTest(__test, __test.test_wrongNumberOfTypeArguments_typeTest_tooMany);
|
| + });
|
| });
|
| }
|
| }
|
| @@ -3193,11 +3685,12 @@ class TypeResolverVisitorTest extends EngineTestCase {
|
| * Analyze the given catch clause and assert that the types of the parameters have been set to the
|
| * given types. The types can be null if the catch clause does not have the corresponding
|
| * parameter.
|
| + *
|
| * @param node the catch clause to be analyzed
|
| * @param exceptionType the expected type of the exception parameter
|
| * @param stackTraceType the expected type of the stack trace parameter
|
| * @param definedElements the elements that are to be defined in the scope in which the element is
|
| - * being resolved
|
| + * being resolved
|
| */
|
| void resolve(CatchClause node, InterfaceType exceptionType, InterfaceType stackTraceType, List<Element> definedElements) {
|
| resolveNode(node, definedElements);
|
| @@ -3214,9 +3707,10 @@ class TypeResolverVisitorTest extends EngineTestCase {
|
| /**
|
| * Return the type associated with the given parameter after the static type analyzer has computed
|
| * a type for it.
|
| + *
|
| * @param node the parameter with which the type is associated
|
| * @param definedElements the elements that are to be defined in the scope in which the element is
|
| - * being resolved
|
| + * being resolved
|
| * @return the type associated with the parameter
|
| */
|
| Type2 resolve6(FormalParameter node, List<Element> definedElements) {
|
| @@ -3227,9 +3721,10 @@ class TypeResolverVisitorTest extends EngineTestCase {
|
| /**
|
| * Return the element associated with the given identifier after the resolver has resolved the
|
| * identifier.
|
| + *
|
| * @param node the expression to be resolved
|
| * @param definedElements the elements that are to be defined in the scope in which the element is
|
| - * being resolved
|
| + * being resolved
|
| * @return the element to which the expression was resolved
|
| */
|
| void resolveNode(ASTNode node, List<Element> definedElements) {
|
| @@ -3294,7 +3789,7 @@ class TypeResolverVisitorTest extends EngineTestCase {
|
| class ResolverTestCase extends EngineTestCase {
|
|
|
| /**
|
| - * The source factory used to create [Source sources].
|
| + * The source factory used to create [Source].
|
| */
|
| SourceFactory _sourceFactory;
|
|
|
| @@ -3308,6 +3803,7 @@ class ResolverTestCase extends EngineTestCase {
|
|
|
| /**
|
| * Add a source file to the content provider.
|
| + *
|
| * @param contents the contents to be returned by the content provider for the specified file
|
| * @return the source object representing the added file
|
| */
|
| @@ -3315,6 +3811,7 @@ class ResolverTestCase extends EngineTestCase {
|
|
|
| /**
|
| * Add a source file to the content provider. The file path should be absolute.
|
| + *
|
| * @param filePath the path of the file being added
|
| * @param contents the contents to be returned by the content provider for the specified file
|
| * @return the source object representing the added file
|
| @@ -3331,9 +3828,10 @@ class ResolverTestCase extends EngineTestCase {
|
| * Assert that the number of errors that have been gathered matches the number of errors that are
|
| * given and that they have the expected error codes. The order in which the errors were gathered
|
| * is ignored.
|
| + *
|
| * @param expectedErrorCodes the error codes of the errors that should have been gathered
|
| * @throws AssertionFailedError if a different number of errors have been gathered than were
|
| - * expected
|
| + * expected
|
| */
|
| void assertErrors(List<ErrorCode> expectedErrorCodes) {
|
| GatheringErrorListener errorListener = new GatheringErrorListener();
|
| @@ -3347,6 +3845,7 @@ class ResolverTestCase extends EngineTestCase {
|
|
|
| /**
|
| * Assert that no errors have been gathered.
|
| + *
|
| * @throws AssertionFailedError if any errors have been gathered
|
| */
|
| void assertNoErrors() {
|
| @@ -3362,6 +3861,7 @@ class ResolverTestCase extends EngineTestCase {
|
| /**
|
| * Cache the source file content in the source factory but don't add the source to the analysis
|
| * context. The file path should be absolute.
|
| + *
|
| * @param filePath the path of the file being cached
|
| * @param contents the contents to be returned by the content provider for the specified file
|
| * @return the source object representing the cached file
|
| @@ -3375,6 +3875,7 @@ class ResolverTestCase extends EngineTestCase {
|
| /**
|
| * Create a library element that represents a library named `"test"` containing a single
|
| * empty compilation unit.
|
| + *
|
| * @return the library element that was created
|
| */
|
| LibraryElementImpl createTestLibrary() => createTestLibrary2(new AnalysisContextImpl(), "test", []);
|
| @@ -3382,6 +3883,7 @@ class ResolverTestCase extends EngineTestCase {
|
| /**
|
| * Create a library element that represents a library with the given name containing a single
|
| * empty compilation unit.
|
| + *
|
| * @param libraryName the name of the library to be created
|
| * @return the library element that was created
|
| */
|
| @@ -3410,6 +3912,7 @@ class ResolverTestCase extends EngineTestCase {
|
|
|
| /**
|
| * Return a type provider that can be used to test the results of resolution.
|
| + *
|
| * @return a type provider
|
| */
|
| TypeProvider get typeProvider {
|
| @@ -3431,6 +3934,7 @@ class ResolverTestCase extends EngineTestCase {
|
| * Given a library and all of its parts, resolve the contents of the library and the contents of
|
| * the parts. This assumes that the sources for the library and its parts have already been added
|
| * to the content provider using the method [addSource].
|
| + *
|
| * @param librarySource the source for the compilation unit that defines the library
|
| * @return the element representing the resolved library
|
| * @throws AnalysisException if the analysis could not be performed
|
| @@ -3439,6 +3943,7 @@ class ResolverTestCase extends EngineTestCase {
|
|
|
| /**
|
| * Return the resolved compilation unit corresponding to the given source in the given library.
|
| + *
|
| * @param source the source of the compilation unit to be returned
|
| * @param library the library in which the compilation unit is to be resolved
|
| * @return the resolved compilation unit
|
| @@ -3449,8 +3954,9 @@ class ResolverTestCase extends EngineTestCase {
|
| /**
|
| * Verify that all of the identifiers in the compilation units associated with the given sources
|
| * have been resolved.
|
| + *
|
| * @param resolvedElementMap a table mapping the AST nodes that have been resolved to the element
|
| - * to which they were resolved
|
| + * to which they were resolved
|
| * @param sources the sources identifying the compilation units to be verified
|
| * @throws Exception if the contents of the compilation unit cannot be accessed
|
| */
|
| @@ -3464,6 +3970,7 @@ class ResolverTestCase extends EngineTestCase {
|
|
|
| /**
|
| * Create a source object representing a file with the given name and give it an empty content.
|
| + *
|
| * @param fileName the name of the file for which a source is to be created
|
| * @return the source that was created
|
| */
|
| @@ -3489,9 +3996,10 @@ class TypeProviderImplTest extends EngineTestCase {
|
| InterfaceType mapType = classElement("Map", objectType, ["K", "V"]).type;
|
| InterfaceType stackTraceType = classElement("StackTrace", objectType, []).type;
|
| InterfaceType stringType = classElement("String", objectType, []).type;
|
| + InterfaceType symbolType = classElement("Symbol", objectType, []).type;
|
| InterfaceType typeType = classElement("Type", objectType, []).type;
|
| CompilationUnitElementImpl unit = new CompilationUnitElementImpl("lib.dart");
|
| - unit.types = <ClassElement> [boolType.element, doubleType.element, functionType.element, intType.element, listType.element, mapType.element, objectType.element, stackTraceType.element, stringType.element, typeType.element];
|
| + unit.types = <ClassElement> [boolType.element, doubleType.element, functionType.element, intType.element, listType.element, mapType.element, objectType.element, stackTraceType.element, stringType.element, symbolType.element, typeType.element];
|
| LibraryElementImpl library = new LibraryElementImpl(new AnalysisContextImpl(), ASTFactory.libraryIdentifier2(["lib"]));
|
| library.definingCompilationUnit = unit;
|
| TypeProviderImpl provider = new TypeProviderImpl(library);
|
| @@ -3506,6 +4014,7 @@ class TypeProviderImplTest extends EngineTestCase {
|
| JUnitTestCase.assertSame(objectType, provider.objectType);
|
| JUnitTestCase.assertSame(stackTraceType, provider.stackTraceType);
|
| JUnitTestCase.assertSame(stringType, provider.stringType);
|
| + JUnitTestCase.assertSame(symbolType, provider.symbolType);
|
| JUnitTestCase.assertSame(typeType, provider.typeType);
|
| }
|
| ClassElement classElement(String typeName, InterfaceType superclassType, List<String> parameterNames) {
|
| @@ -3858,6 +4367,7 @@ class InheritanceManagerTest extends EngineTestCase {
|
|
|
| /**
|
| * Create the inheritance manager used by the tests.
|
| + *
|
| * @return the inheritance manager that was created
|
| */
|
| InheritanceManager createInheritanceManager() {
|
| @@ -3999,36 +4509,6 @@ class CompileTimeErrorCodeTest extends ResolverTestCase {
|
| assertErrors([CompileTimeErrorCode.CONST_CONSTRUCTOR_THROWS_EXCEPTION]);
|
| verify([source]);
|
| }
|
| - void fail_duplicateDefinition() {
|
| - Source source = addSource(EngineTestCase.createSource(["f() {", " int m = 0;", " m(a) {}", "}"]));
|
| - resolve(source);
|
| - assertErrors([CompileTimeErrorCode.DUPLICATE_DEFINITION]);
|
| - verify([source]);
|
| - }
|
| - void fail_duplicateMemberError_classMembers_fields() {
|
| - Source librarySource = addSource(EngineTestCase.createSource(["class A {", " int a;", " int a;", "}"]));
|
| - resolve(librarySource);
|
| - assertErrors([CompileTimeErrorCode.DUPLICATE_DEFINITION]);
|
| - verify([librarySource]);
|
| - }
|
| - void fail_duplicateMemberError_localFields() {
|
| - Source librarySource = addSource(EngineTestCase.createSource(["class A {", " m() {", " int a;", " int a;", " }", "}"]));
|
| - resolve(librarySource);
|
| - assertErrors([CompileTimeErrorCode.DUPLICATE_DEFINITION]);
|
| - verify([librarySource]);
|
| - }
|
| - void fail_duplicateMemberName() {
|
| - Source source = addSource(EngineTestCase.createSource(["class A {", " int x = 0;", " int x() {}", "}"]));
|
| - resolve(source);
|
| - assertErrors([CompileTimeErrorCode.DUPLICATE_MEMBER_NAME]);
|
| - verify([source]);
|
| - }
|
| - void fail_duplicateMemberNameInstanceStatic() {
|
| - Source source = addSource(EngineTestCase.createSource(["class A {", " int x;", " static int x;", "}"]));
|
| - resolve(source);
|
| - assertErrors([CompileTimeErrorCode.DUPLICATE_MEMBER_NAME_INSTANCE_STATIC]);
|
| - verify([source]);
|
| - }
|
| void fail_extendsOrImplementsDisallowedClass_extends_null() {
|
| Source source = addSource(EngineTestCase.createSource(["class A extends Null {}"]));
|
| resolve(source);
|
| @@ -4041,12 +4521,6 @@ class CompileTimeErrorCodeTest extends ResolverTestCase {
|
| assertErrors([CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS]);
|
| verify([source]);
|
| }
|
| - void fail_invalidOverrideDefaultValue() {
|
| - Source source = addSource(EngineTestCase.createSource(["class A {", " m([a = 0]) {}", "}", "class B extends A {", " m([a = 1]) {}", "}"]));
|
| - resolve(source);
|
| - assertErrors([CompileTimeErrorCode.INVALID_OVERRIDE_DEFAULT_VALUE]);
|
| - verify([source]);
|
| - }
|
| void fail_mixinDeclaresConstructor() {
|
| Source source = addSource(EngineTestCase.createSource(["class A {", " A() {}", "}", "class B extends Object mixin A {}"]));
|
| resolve(source);
|
| @@ -4113,42 +4587,6 @@ class CompileTimeErrorCodeTest extends ResolverTestCase {
|
| assertErrors([CompileTimeErrorCode.UNINITIALIZED_FINAL_FIELD]);
|
| verify([source]);
|
| }
|
| - void fail_wrongNumberOfTypeArguments_creation_const_tooFew() {
|
| - Source source = addSource(EngineTestCase.createSource(["class A {}", "class C<K, V> {}", "f(p) {", " return const C<A>();", "}"]));
|
| - resolve(source);
|
| - assertErrors([CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS]);
|
| - verify([source]);
|
| - }
|
| - void fail_wrongNumberOfTypeArguments_creation_const_tooMany() {
|
| - Source source = addSource(EngineTestCase.createSource(["class A {}", "class C<E> {}", "f(p) {", " return const C<A, A>();", "}"]));
|
| - resolve(source);
|
| - assertErrors([CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS]);
|
| - verify([source]);
|
| - }
|
| - void fail_wrongNumberOfTypeArguments_creation_new_tooFew() {
|
| - Source source = addSource(EngineTestCase.createSource(["class A {}", "class C<K, V> {}", "f(p) {", " return new C<A>();", "}"]));
|
| - resolve(source);
|
| - assertErrors([CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS]);
|
| - verify([source]);
|
| - }
|
| - void fail_wrongNumberOfTypeArguments_creation_new_tooMany() {
|
| - Source source = addSource(EngineTestCase.createSource(["class A {}", "class C<E> {}", "f(p) {", " return new C<A, A>();", "}"]));
|
| - resolve(source);
|
| - assertErrors([CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS]);
|
| - verify([source]);
|
| - }
|
| - void fail_wrongNumberOfTypeArguments_typeTest_tooFew() {
|
| - Source source = addSource(EngineTestCase.createSource(["class A {}", "class C<K, V> {}", "f(p) {", " return p is C<A>;", "}"]));
|
| - resolve(source);
|
| - assertErrors([CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS]);
|
| - verify([source]);
|
| - }
|
| - void fail_wrongNumberOfTypeArguments_typeTest_tooMany() {
|
| - Source source = addSource(EngineTestCase.createSource(["class A {}", "class C<E> {}", "f(p) {", " return p is C<A, A>;", "}"]));
|
| - resolve(source);
|
| - assertErrors([CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS]);
|
| - verify([source]);
|
| - }
|
| void test_ambiguousExport() {
|
| Source source = addSource(EngineTestCase.createSource(["library L;", "export 'lib1.dart';", "export 'lib2.dart';"]));
|
| addSource2("/lib1.dart", EngineTestCase.createSource(["library lib1;", "class N {}"]));
|
| @@ -4264,7 +4702,7 @@ class CompileTimeErrorCodeTest extends ResolverTestCase {
|
| verify([source]);
|
| }
|
| void test_caseExpressionTypeImplementsEquals() {
|
| - Source source = addSource(EngineTestCase.createSource(["class IntWrapper {", " final int value;", " const IntWrapper(this.value);", " bool operator ==(IntWrapper x) {", " return value == x.value;", " }", "}", "", "f(IntWrapper a) {", " switch(a) {", " case(const IntWrapper(1)) : return 1;", " default: return 0;", " }", "}"]));
|
| + Source source = addSource(EngineTestCase.createSource(["class IntWrapper {", " final int value;", " const IntWrapper(this.value);", " bool operator ==(IntWrapper x) {", " return value == x.value;", " }", "}", "", "f(var a) {", " switch(a) {", " case(const IntWrapper(1)) : return 1;", " default: return 0;", " }", "}"]));
|
| resolve(source);
|
| assertErrors([CompileTimeErrorCode.CASE_EXPRESSION_TYPE_IMPLEMENTS_EQUALS]);
|
| verify([source]);
|
| @@ -4281,6 +4719,30 @@ class CompileTimeErrorCodeTest extends ResolverTestCase {
|
| assertErrors([CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_NAME_AND_METHOD]);
|
| verify([source]);
|
| }
|
| + void test_conflictingGetterAndMethod_field_method() {
|
| + Source source = addSource(EngineTestCase.createSource(["class A {", " int m;", "}", "class B extends A {", " m() {}", "}"]));
|
| + resolve(source);
|
| + assertErrors([CompileTimeErrorCode.CONFLICTING_GETTER_AND_METHOD]);
|
| + verify([source]);
|
| + }
|
| + void test_conflictingGetterAndMethod_getter_method() {
|
| + Source source = addSource(EngineTestCase.createSource(["class A {", " get m => 0;", "}", "class B extends A {", " m() {}", "}"]));
|
| + resolve(source);
|
| + assertErrors([CompileTimeErrorCode.CONFLICTING_GETTER_AND_METHOD]);
|
| + verify([source]);
|
| + }
|
| + void test_conflictingGetterAndMethod_method_field() {
|
| + Source source = addSource(EngineTestCase.createSource(["class A {", " m() {}", "}", "class B extends A {", " int m;", "}"]));
|
| + resolve(source);
|
| + assertErrors([CompileTimeErrorCode.CONFLICTING_METHOD_AND_GETTER]);
|
| + verify([source]);
|
| + }
|
| + void test_conflictingGetterAndMethod_method_getter() {
|
| + Source source = addSource(EngineTestCase.createSource(["class A {", " m() {}", "}", "class B extends A {", " get m => 0;", "}"]));
|
| + resolve(source);
|
| + assertErrors([CompileTimeErrorCode.CONFLICTING_METHOD_AND_GETTER]);
|
| + verify([source]);
|
| + }
|
| void test_constConstructorWithNonFinalField_mixin() {
|
| Source source = addSource(EngineTestCase.createSource(["class A {", " var a;", "}", "class B extends Object with A {", " const B();", "}"]));
|
| resolve(source);
|
| @@ -4299,6 +4761,24 @@ class CompileTimeErrorCodeTest extends ResolverTestCase {
|
| assertErrors([CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_NON_FINAL_FIELD]);
|
| verify([source]);
|
| }
|
| + void test_constEval_newInstance_constConstructor() {
|
| + Source source = addSource(EngineTestCase.createSource(["class A {", " const A();", "}", "const a = new A();"]));
|
| + resolve(source);
|
| + assertErrors([CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE]);
|
| + verify([source]);
|
| + }
|
| + void test_constEval_propertyExtraction_methodInstance() {
|
| + Source source = addSource(EngineTestCase.createSource(["class A {", " const A();", " m() {}", "}", "final a = const A();", "const C = a.m;"]));
|
| + resolve(source);
|
| + assertErrors([CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE]);
|
| + verify([source]);
|
| + }
|
| + void test_constEval_propertyExtraction_methodStatic_targetInstance() {
|
| + Source source = addSource(EngineTestCase.createSource(["class A {", " const A();", " static m() {}", "}", "final a = const A();", "const C = a.m;"]));
|
| + resolve(source);
|
| + assertErrors([CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE]);
|
| + verify([source]);
|
| + }
|
| void test_constEvalThrowsException_binaryMinus_null() {
|
| check_constEvalThrowsException_binary_null("null - 5", false);
|
| check_constEvalThrowsException_binary_null("5 - null", true);
|
| @@ -4307,6 +4787,12 @@ class CompileTimeErrorCodeTest extends ResolverTestCase {
|
| check_constEvalThrowsException_binary_null("null + 5", false);
|
| check_constEvalThrowsException_binary_null("5 + null", true);
|
| }
|
| + void test_constEvalThrowsException_divisionByZero() {
|
| + Source source = addSource("const C = 1 ~/ 0;");
|
| + resolve(source);
|
| + assertErrors([CompileTimeErrorCode.CONST_EVAL_THROWS_IDBZE]);
|
| + verify([source]);
|
| + }
|
| void test_constEvalThrowsException_unaryBitNot_null() {
|
| Source source = addSource("const C = ~null;");
|
| resolve(source);
|
| @@ -4327,6 +4813,12 @@ class CompileTimeErrorCodeTest extends ResolverTestCase {
|
| check_constEvalTypeBool_withParameter_binary("p && ''");
|
| check_constEvalTypeBool_withParameter_binary("p || ''");
|
| }
|
| + void test_constEvalTypeBool_binary_leftTrue() {
|
| + Source source = addSource("const C = (true || 0);");
|
| + resolve(source);
|
| + assertErrors([CompileTimeErrorCode.CONST_EVAL_TYPE_BOOL]);
|
| + verify([source]);
|
| + }
|
| void test_constEvalTypeBoolNumString_equal() {
|
| Source source = addSource(EngineTestCase.createSource(["class A {", " const A();", "}", "class B {", " final a;", " const B(num p) : a = p == const A();", "}"]));
|
| resolve(source);
|
| @@ -4400,6 +4892,18 @@ class CompileTimeErrorCodeTest extends ResolverTestCase {
|
| assertErrors([CompileTimeErrorCode.CONST_WITH_INVALID_TYPE_PARAMETERS]);
|
| verify([source]);
|
| }
|
| + void test_constWithInvalidTypeParameters_tooFew() {
|
| + Source source = addSource(EngineTestCase.createSource(["class A {}", "class C<K, V> {", " const C();", "}", "f(p) {", " return const C<A>();", "}"]));
|
| + resolve(source);
|
| + assertErrors([CompileTimeErrorCode.CONST_WITH_INVALID_TYPE_PARAMETERS]);
|
| + verify([source]);
|
| + }
|
| + void test_constWithInvalidTypeParameters_tooMany() {
|
| + Source source = addSource(EngineTestCase.createSource(["class A {}", "class C<E> {", " const C();", "}", "f(p) {", " return const C<A, A>();", "}"]));
|
| + resolve(source);
|
| + assertErrors([CompileTimeErrorCode.CONST_WITH_INVALID_TYPE_PARAMETERS]);
|
| + verify([source]);
|
| + }
|
| void test_constWithNonConst() {
|
| Source source = addSource(EngineTestCase.createSource(["class T {", " T(a, b, {c, d}) {}", "}", "f() { return const T(0, 1, c: 2, d: 3); }"]));
|
| resolve(source);
|
| @@ -4418,6 +4922,14 @@ class CompileTimeErrorCodeTest extends ResolverTestCase {
|
| assertErrors([CompileTimeErrorCode.CONST_WITH_NON_TYPE]);
|
| verify([source]);
|
| }
|
| + void test_constWithNonType_fromLibrary() {
|
| + Source source1 = addSource2("lib.dart", "");
|
| + Source source2 = addSource2("lib2.dart", EngineTestCase.createSource(["import 'lib.dart' as lib;", "void f() {", " const lib.A();", "}"]));
|
| + resolve(source1);
|
| + resolve(source2);
|
| + assertErrors([CompileTimeErrorCode.CONST_WITH_NON_TYPE]);
|
| + verify([source1]);
|
| + }
|
| void test_constWithTypeParameters_direct() {
|
| Source source = addSource(EngineTestCase.createSource(["class A<T> {", " static const V = const A<T>();", " const A();", "}"]));
|
| resolve(source);
|
| @@ -4447,17 +4959,55 @@ class CompileTimeErrorCodeTest extends ResolverTestCase {
|
| assertErrors([CompileTimeErrorCode.DEFAULT_VALUE_IN_FUNCTION_TYPE_ALIAS]);
|
| verify([source]);
|
| }
|
| - void test_duplicateConstructorName_named() {
|
| - Source source = addSource(EngineTestCase.createSource(["class A {", " A.a() {}", " A.a() {}", "}"]));
|
| + void test_duplicateConstructorName_named() {
|
| + Source source = addSource(EngineTestCase.createSource(["class A {", " A.a() {}", " A.a() {}", "}"]));
|
| + resolve(source);
|
| + assertErrors([CompileTimeErrorCode.DUPLICATE_CONSTRUCTOR_NAME, CompileTimeErrorCode.DUPLICATE_CONSTRUCTOR_NAME]);
|
| + verify([source]);
|
| + }
|
| + void test_duplicateConstructorName_unnamed() {
|
| + Source source = addSource(EngineTestCase.createSource(["class A {", " A() {}", " A() {}", "}"]));
|
| + resolve(source);
|
| + assertErrors([CompileTimeErrorCode.DUPLICATE_CONSTRUCTOR_DEFAULT, CompileTimeErrorCode.DUPLICATE_CONSTRUCTOR_DEFAULT]);
|
| + verify([source]);
|
| + }
|
| + void test_duplicateDefinition() {
|
| + Source source = addSource(EngineTestCase.createSource(["f() {", " int m = 0;", " m(a) {}", "}"]));
|
| + resolve(source);
|
| + assertErrors([CompileTimeErrorCode.DUPLICATE_DEFINITION, CompileTimeErrorCode.DUPLICATE_DEFINITION]);
|
| + verify([source]);
|
| + }
|
| + void test_duplicateDefinition_acrossLibraries() {
|
| + Source librarySource = addSource2("/lib.dart", EngineTestCase.createSource(["library lib;", "", "part 'a.dart';", "part 'b.dart';"]));
|
| + Source sourceA = addSource2("/a.dart", EngineTestCase.createSource(["part of lib;", "", "class A {}"]));
|
| + Source sourceB = addSource2("/b.dart", EngineTestCase.createSource(["part of lib;", "", "class A {}"]));
|
| + resolve(librarySource);
|
| + assertErrors([CompileTimeErrorCode.DUPLICATE_DEFINITION]);
|
| + verify([librarySource, sourceA, sourceB]);
|
| + }
|
| + void test_duplicateDefinition_classMembers_fields() {
|
| + Source librarySource = addSource(EngineTestCase.createSource(["class A {", " int a;", " int a;", "}"]));
|
| + resolve(librarySource);
|
| + assertErrors([CompileTimeErrorCode.DUPLICATE_DEFINITION, CompileTimeErrorCode.DUPLICATE_DEFINITION, CompileTimeErrorCode.DUPLICATE_DEFINITION, CompileTimeErrorCode.DUPLICATE_DEFINITION]);
|
| + verify([librarySource]);
|
| + }
|
| + void test_duplicateDefinition_classMembers_fields_oneStatic() {
|
| + Source source = addSource(EngineTestCase.createSource(["class A {", " int x;", " static int x;", "}"]));
|
| resolve(source);
|
| - assertErrors([CompileTimeErrorCode.DUPLICATE_CONSTRUCTOR_NAME, CompileTimeErrorCode.DUPLICATE_CONSTRUCTOR_NAME]);
|
| + assertErrors([CompileTimeErrorCode.DUPLICATE_DEFINITION, CompileTimeErrorCode.DUPLICATE_DEFINITION, CompileTimeErrorCode.DUPLICATE_DEFINITION, CompileTimeErrorCode.DUPLICATE_DEFINITION]);
|
| verify([source]);
|
| }
|
| - void test_duplicateConstructorName_unnamed() {
|
| - Source source = addSource(EngineTestCase.createSource(["class A {", " A() {}", " A() {}", "}"]));
|
| - resolve(source);
|
| - assertErrors([CompileTimeErrorCode.DUPLICATE_CONSTRUCTOR_DEFAULT, CompileTimeErrorCode.DUPLICATE_CONSTRUCTOR_DEFAULT]);
|
| - verify([source]);
|
| + void test_duplicateDefinition_classMembers_methods() {
|
| + Source librarySource = addSource(EngineTestCase.createSource(["class A {", " m() {}", " m() {}", "}"]));
|
| + resolve(librarySource);
|
| + assertErrors([CompileTimeErrorCode.DUPLICATE_DEFINITION, CompileTimeErrorCode.DUPLICATE_DEFINITION]);
|
| + verify([librarySource]);
|
| + }
|
| + void test_duplicateDefinition_localFields() {
|
| + Source librarySource = addSource(EngineTestCase.createSource(["class A {", " m() {", " int a;", " int a;", " }", "}"]));
|
| + resolve(librarySource);
|
| + assertErrors([CompileTimeErrorCode.DUPLICATE_DEFINITION, CompileTimeErrorCode.DUPLICATE_DEFINITION]);
|
| + verify([librarySource]);
|
| }
|
| void test_duplicateDefinition_parameterWithFunctionName_local() {
|
| Source source = addSource(EngineTestCase.createSource(["main() {", " f(f) {}", "}"]));
|
| @@ -4471,19 +5021,17 @@ class CompileTimeErrorCodeTest extends ResolverTestCase {
|
| assertErrors([CompileTimeErrorCode.DUPLICATE_DEFINITION, CompileTimeErrorCode.DUPLICATE_DEFINITION]);
|
| verify([source]);
|
| }
|
| - void test_duplicateMemberError() {
|
| - Source librarySource = addSource2("/lib.dart", EngineTestCase.createSource(["library lib;", "", "part 'a.dart';", "part 'b.dart';"]));
|
| - Source sourceA = addSource2("/a.dart", EngineTestCase.createSource(["part of lib;", "", "class A {}"]));
|
| - Source sourceB = addSource2("/b.dart", EngineTestCase.createSource(["part of lib;", "", "class A {}"]));
|
| - resolve(librarySource);
|
| - assertErrors([CompileTimeErrorCode.DUPLICATE_DEFINITION]);
|
| - verify([librarySource, sourceA, sourceB]);
|
| + void test_duplicateDefinitionInheritance_instanceMethod_staticMethod() {
|
| + Source source = addSource(EngineTestCase.createSource(["class A {", " x() {}", "}", "class B extends A {", " static x() {}", "}"]));
|
| + resolve(source);
|
| + assertErrors([CompileTimeErrorCode.DUPLICATE_DEFINITION_INHERITANCE]);
|
| + verify([source]);
|
| }
|
| - void test_duplicateMemberError_classMembers_methods() {
|
| - Source librarySource = addSource(EngineTestCase.createSource(["class A {", " m() {}", " m() {}", "}"]));
|
| - resolve(librarySource);
|
| - assertErrors([CompileTimeErrorCode.DUPLICATE_DEFINITION, CompileTimeErrorCode.DUPLICATE_DEFINITION]);
|
| - verify([librarySource]);
|
| + void test_duplicateDefinitionInheritance_instanceMethodAbstract_staticMethod() {
|
| + Source source = addSource(EngineTestCase.createSource(["abstract class A {", " x();", "}", "abstract class B extends A {", " static x() {}", "}"]));
|
| + resolve(source);
|
| + assertErrors([CompileTimeErrorCode.DUPLICATE_DEFINITION_INHERITANCE]);
|
| + verify([source]);
|
| }
|
| void test_duplicateNamedArgument() {
|
| Source source = addSource(EngineTestCase.createSource(["f({a, b}) {}", "main() {", " f(a: 1, a: 2);", "}"]));
|
| @@ -4513,31 +5061,31 @@ class CompileTimeErrorCodeTest extends ResolverTestCase {
|
| void test_extendsOrImplementsDisallowedClass_extends_bool() {
|
| Source source = addSource(EngineTestCase.createSource(["class A extends bool {}"]));
|
| resolve(source);
|
| - assertErrors([CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS, StaticWarningCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT]);
|
| + assertErrors([CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS, CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT]);
|
| verify([source]);
|
| }
|
| void test_extendsOrImplementsDisallowedClass_extends_double() {
|
| Source source = addSource(EngineTestCase.createSource(["class A extends double {}"]));
|
| resolve(source);
|
| - assertErrors([CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS, StaticWarningCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT]);
|
| + assertErrors([CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS, CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT]);
|
| verify([source]);
|
| }
|
| void test_extendsOrImplementsDisallowedClass_extends_int() {
|
| Source source = addSource(EngineTestCase.createSource(["class A extends int {}"]));
|
| resolve(source);
|
| - assertErrors([CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS, StaticWarningCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT]);
|
| + assertErrors([CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS, CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT]);
|
| verify([source]);
|
| }
|
| void test_extendsOrImplementsDisallowedClass_extends_num() {
|
| Source source = addSource(EngineTestCase.createSource(["class A extends num {}"]));
|
| resolve(source);
|
| - assertErrors([CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS, StaticWarningCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT]);
|
| + assertErrors([CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS, CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT]);
|
| verify([source]);
|
| }
|
| void test_extendsOrImplementsDisallowedClass_extends_String() {
|
| Source source = addSource(EngineTestCase.createSource(["class A extends String {}"]));
|
| resolve(source);
|
| - assertErrors([CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS, StaticWarningCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT]);
|
| + assertErrors([CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS, CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT]);
|
| verify([source]);
|
| }
|
| void test_extendsOrImplementsDisallowedClass_implements_bool() {
|
| @@ -4739,6 +5287,12 @@ class CompileTimeErrorCodeTest extends ResolverTestCase {
|
| assertErrors([CompileTimeErrorCode.IMPLICIT_THIS_REFERENCE_IN_INITIALIZER]);
|
| verify([source]);
|
| }
|
| + void test_implicitThisReferenceInInitializer_field2() {
|
| + Source source = addSource(EngineTestCase.createSource(["class A {", " final x = 0;", " final y = x;", "}"]));
|
| + resolve(source);
|
| + assertErrors([CompileTimeErrorCode.IMPLICIT_THIS_REFERENCE_IN_INITIALIZER]);
|
| + verify([source]);
|
| + }
|
| void test_implicitThisReferenceInInitializer_invocation() {
|
| Source source = addSource(EngineTestCase.createSource(["class A {", " var v;", " A() : v = f();", " f() {}", "}"]));
|
| resolve(source);
|
| @@ -4823,6 +5377,24 @@ class CompileTimeErrorCodeTest extends ResolverTestCase {
|
| assertErrors([CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_STATIC_FIELD]);
|
| verify([source]);
|
| }
|
| + void test_instanceMemberAccessFromStatic_field() {
|
| + Source source = addSource(EngineTestCase.createSource(["class A {", " int f;", " static foo() {", " f;", " }", "}"]));
|
| + resolve(source);
|
| + assertErrors([CompileTimeErrorCode.INSTANCE_MEMBER_ACCESS_FROM_STATIC]);
|
| + verify([source]);
|
| + }
|
| + void test_instanceMemberAccessFromStatic_getter() {
|
| + Source source = addSource(EngineTestCase.createSource(["class A {", " get g => null;", " static foo() {", " g;", " }", "}"]));
|
| + resolve(source);
|
| + assertErrors([CompileTimeErrorCode.INSTANCE_MEMBER_ACCESS_FROM_STATIC]);
|
| + verify([source]);
|
| + }
|
| + void test_instanceMemberAccessFromStatic_method() {
|
| + Source source = addSource(EngineTestCase.createSource(["class A {", " m() {}", " static foo() {", " m();", " }", "}"]));
|
| + resolve(source);
|
| + assertErrors([CompileTimeErrorCode.INSTANCE_MEMBER_ACCESS_FROM_STATIC]);
|
| + verify([source]);
|
| + }
|
| void test_invalidConstructorName_notEnclosingClassName() {
|
| Source source = addSource(EngineTestCase.createSource(["class A {", " B() : super();", "}"]));
|
| resolve(source);
|
| @@ -5075,6 +5647,36 @@ class CompileTimeErrorCodeTest extends ResolverTestCase {
|
| assertErrors([CompileTimeErrorCode.NEW_WITH_INVALID_TYPE_PARAMETERS]);
|
| verify([source]);
|
| }
|
| + void test_newWithInvalidTypeParameters_tooFew() {
|
| + Source source = addSource(EngineTestCase.createSource(["class A {}", "class C<K, V> {}", "f(p) {", " return new C<A>();", "}"]));
|
| + resolve(source);
|
| + assertErrors([CompileTimeErrorCode.NEW_WITH_INVALID_TYPE_PARAMETERS]);
|
| + verify([source]);
|
| + }
|
| + void test_newWithInvalidTypeParameters_tooMany() {
|
| + Source source = addSource(EngineTestCase.createSource(["class A {}", "class C<E> {}", "f(p) {", " return new C<A, A>();", "}"]));
|
| + resolve(source);
|
| + assertErrors([CompileTimeErrorCode.NEW_WITH_INVALID_TYPE_PARAMETERS]);
|
| + verify([source]);
|
| + }
|
| + void test_noDefaultSuperConstructorExplicit() {
|
| + Source source = addSource(EngineTestCase.createSource(["class A {", " A(p);", "}", "class B extends A {", " B() {}", "}"]));
|
| + resolve(source);
|
| + assertErrors([CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_EXPLICIT]);
|
| + verify([source]);
|
| + }
|
| + void test_noDefaultSuperConstructorImplicit_superHasParameters() {
|
| + Source source = addSource(EngineTestCase.createSource(["class A {", " A(p);", "}", "class B extends A {", "}"]));
|
| + resolve(source);
|
| + assertErrors([CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT]);
|
| + verify([source]);
|
| + }
|
| + void test_noDefaultSuperConstructorImplicit_superOnlyNamed() {
|
| + Source source = addSource(EngineTestCase.createSource(["class A { A.named() {} }", "class B extends A {}"]));
|
| + resolve(source);
|
| + assertErrors([CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT]);
|
| + verify([source]);
|
| + }
|
| void test_nonConstantDefaultValue_function_named() {
|
| Source source = addSource(EngineTestCase.createSource(["int y;", "f({x : y}) {}"]));
|
| resolve(source);
|
| @@ -5201,6 +5803,12 @@ class CompileTimeErrorCodeTest extends ResolverTestCase {
|
| assertErrors([CompileTimeErrorCode.NON_GENERATIVE_CONSTRUCTOR]);
|
| verify([source]);
|
| }
|
| + void test_nonGenerativeConstructor_implicit2() {
|
| + Source source = addSource(EngineTestCase.createSource(["class A {", " factory A() {}", "}", "class B extends A {", "}"]));
|
| + resolve(source);
|
| + assertErrors([CompileTimeErrorCode.NON_GENERATIVE_CONSTRUCTOR]);
|
| + verify([source]);
|
| + }
|
| void test_notEnoughRequiredArguments_const() {
|
| Source source = addSource(EngineTestCase.createSource(["class A {", " const A(int p);", "}", "main() {", " const A();", "}"]));
|
| resolve(source);
|
| @@ -5536,6 +6144,18 @@ class CompileTimeErrorCodeTest extends ResolverTestCase {
|
| check_wrongNumberOfParametersForOperator1(">>");
|
| check_wrongNumberOfParametersForOperator1("[]");
|
| }
|
| + void test_wrongNumberOfParametersForSetter_function_named() {
|
| + Source source = addSource("set x({p}) {}");
|
| + resolve(source);
|
| + assertErrors([CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER]);
|
| + verify([source]);
|
| + }
|
| + void test_wrongNumberOfParametersForSetter_function_optional() {
|
| + Source source = addSource("set x([p]) {}");
|
| + resolve(source);
|
| + assertErrors([CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER]);
|
| + verify([source]);
|
| + }
|
| void test_wrongNumberOfParametersForSetter_function_tooFew() {
|
| Source source = addSource("set x() {}");
|
| resolve(source);
|
| @@ -5548,6 +6168,18 @@ class CompileTimeErrorCodeTest extends ResolverTestCase {
|
| assertErrors([CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER]);
|
| verify([source]);
|
| }
|
| + void test_wrongNumberOfParametersForSetter_method_named() {
|
| + Source source = addSource(EngineTestCase.createSource(["class A {", " set x({p}) {}", "}"]));
|
| + resolve(source);
|
| + assertErrors([CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER]);
|
| + verify([source]);
|
| + }
|
| + void test_wrongNumberOfParametersForSetter_method_optional() {
|
| + Source source = addSource(EngineTestCase.createSource(["class A {", " set x([p]) {}", "}"]));
|
| + resolve(source);
|
| + assertErrors([CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER]);
|
| + verify([source]);
|
| + }
|
| void test_wrongNumberOfParametersForSetter_method_tooFew() {
|
| Source source = addSource(EngineTestCase.createSource(["class A {", " set x() {}", "}"]));
|
| resolve(source);
|
| @@ -5685,6 +6317,22 @@ class CompileTimeErrorCodeTest extends ResolverTestCase {
|
| final __test = new CompileTimeErrorCodeTest();
|
| runJUnitTest(__test, __test.test_conflictingConstructorNameAndMember_method);
|
| });
|
| + _ut.test('test_conflictingGetterAndMethod_field_method', () {
|
| + final __test = new CompileTimeErrorCodeTest();
|
| + runJUnitTest(__test, __test.test_conflictingGetterAndMethod_field_method);
|
| + });
|
| + _ut.test('test_conflictingGetterAndMethod_getter_method', () {
|
| + final __test = new CompileTimeErrorCodeTest();
|
| + runJUnitTest(__test, __test.test_conflictingGetterAndMethod_getter_method);
|
| + });
|
| + _ut.test('test_conflictingGetterAndMethod_method_field', () {
|
| + final __test = new CompileTimeErrorCodeTest();
|
| + runJUnitTest(__test, __test.test_conflictingGetterAndMethod_method_field);
|
| + });
|
| + _ut.test('test_conflictingGetterAndMethod_method_getter', () {
|
| + final __test = new CompileTimeErrorCodeTest();
|
| + runJUnitTest(__test, __test.test_conflictingGetterAndMethod_method_getter);
|
| + });
|
| _ut.test('test_constConstructorWithNonFinalField_mixin', () {
|
| final __test = new CompileTimeErrorCodeTest();
|
| runJUnitTest(__test, __test.test_constConstructorWithNonFinalField_mixin);
|
| @@ -5705,6 +6353,10 @@ class CompileTimeErrorCodeTest extends ResolverTestCase {
|
| final __test = new CompileTimeErrorCodeTest();
|
| runJUnitTest(__test, __test.test_constEvalThrowsException_binaryPlus_null);
|
| });
|
| + _ut.test('test_constEvalThrowsException_divisionByZero', () {
|
| + final __test = new CompileTimeErrorCodeTest();
|
| + runJUnitTest(__test, __test.test_constEvalThrowsException_divisionByZero);
|
| + });
|
| _ut.test('test_constEvalThrowsException_unaryBitNot_null', () {
|
| final __test = new CompileTimeErrorCodeTest();
|
| runJUnitTest(__test, __test.test_constEvalThrowsException_unaryBitNot_null);
|
| @@ -5729,6 +6381,10 @@ class CompileTimeErrorCodeTest extends ResolverTestCase {
|
| final __test = new CompileTimeErrorCodeTest();
|
| runJUnitTest(__test, __test.test_constEvalTypeBool_binary);
|
| });
|
| + _ut.test('test_constEvalTypeBool_binary_leftTrue', () {
|
| + final __test = new CompileTimeErrorCodeTest();
|
| + runJUnitTest(__test, __test.test_constEvalTypeBool_binary_leftTrue);
|
| + });
|
| _ut.test('test_constEvalTypeInt_binary', () {
|
| final __test = new CompileTimeErrorCodeTest();
|
| runJUnitTest(__test, __test.test_constEvalTypeInt_binary);
|
| @@ -5737,6 +6393,18 @@ class CompileTimeErrorCodeTest extends ResolverTestCase {
|
| final __test = new CompileTimeErrorCodeTest();
|
| runJUnitTest(__test, __test.test_constEvalTypeNum_binary);
|
| });
|
| + _ut.test('test_constEval_newInstance_constConstructor', () {
|
| + final __test = new CompileTimeErrorCodeTest();
|
| + runJUnitTest(__test, __test.test_constEval_newInstance_constConstructor);
|
| + });
|
| + _ut.test('test_constEval_propertyExtraction_methodInstance', () {
|
| + final __test = new CompileTimeErrorCodeTest();
|
| + runJUnitTest(__test, __test.test_constEval_propertyExtraction_methodInstance);
|
| + });
|
| + _ut.test('test_constEval_propertyExtraction_methodStatic_targetInstance', () {
|
| + final __test = new CompileTimeErrorCodeTest();
|
| + runJUnitTest(__test, __test.test_constEval_propertyExtraction_methodStatic_targetInstance);
|
| + });
|
| _ut.test('test_constFormalParameter_fieldFormalParameter', () {
|
| final __test = new CompileTimeErrorCodeTest();
|
| runJUnitTest(__test, __test.test_constFormalParameter_fieldFormalParameter);
|
| @@ -5765,6 +6433,14 @@ class CompileTimeErrorCodeTest extends ResolverTestCase {
|
| final __test = new CompileTimeErrorCodeTest();
|
| runJUnitTest(__test, __test.test_constWithInvalidTypeParameters);
|
| });
|
| + _ut.test('test_constWithInvalidTypeParameters_tooFew', () {
|
| + final __test = new CompileTimeErrorCodeTest();
|
| + runJUnitTest(__test, __test.test_constWithInvalidTypeParameters_tooFew);
|
| + });
|
| + _ut.test('test_constWithInvalidTypeParameters_tooMany', () {
|
| + final __test = new CompileTimeErrorCodeTest();
|
| + runJUnitTest(__test, __test.test_constWithInvalidTypeParameters_tooMany);
|
| + });
|
| _ut.test('test_constWithNonConst', () {
|
| final __test = new CompileTimeErrorCodeTest();
|
| runJUnitTest(__test, __test.test_constWithNonConst);
|
| @@ -5777,6 +6453,10 @@ class CompileTimeErrorCodeTest extends ResolverTestCase {
|
| final __test = new CompileTimeErrorCodeTest();
|
| runJUnitTest(__test, __test.test_constWithNonType);
|
| });
|
| + _ut.test('test_constWithNonType_fromLibrary', () {
|
| + final __test = new CompileTimeErrorCodeTest();
|
| + runJUnitTest(__test, __test.test_constWithNonType_fromLibrary);
|
| + });
|
| _ut.test('test_constWithTypeParameters_direct', () {
|
| final __test = new CompileTimeErrorCodeTest();
|
| runJUnitTest(__test, __test.test_constWithTypeParameters_direct);
|
| @@ -5805,21 +6485,45 @@ class CompileTimeErrorCodeTest extends ResolverTestCase {
|
| final __test = new CompileTimeErrorCodeTest();
|
| runJUnitTest(__test, __test.test_duplicateConstructorName_unnamed);
|
| });
|
| - _ut.test('test_duplicateDefinition_parameterWithFunctionName_local', () {
|
| + _ut.test('test_duplicateDefinition', () {
|
| final __test = new CompileTimeErrorCodeTest();
|
| - runJUnitTest(__test, __test.test_duplicateDefinition_parameterWithFunctionName_local);
|
| + runJUnitTest(__test, __test.test_duplicateDefinition);
|
| });
|
| - _ut.test('test_duplicateDefinition_parameterWithFunctionName_topLevel', () {
|
| + _ut.test('test_duplicateDefinitionInheritance_instanceMethodAbstract_staticMethod', () {
|
| final __test = new CompileTimeErrorCodeTest();
|
| - runJUnitTest(__test, __test.test_duplicateDefinition_parameterWithFunctionName_topLevel);
|
| + runJUnitTest(__test, __test.test_duplicateDefinitionInheritance_instanceMethodAbstract_staticMethod);
|
| + });
|
| + _ut.test('test_duplicateDefinitionInheritance_instanceMethod_staticMethod', () {
|
| + final __test = new CompileTimeErrorCodeTest();
|
| + runJUnitTest(__test, __test.test_duplicateDefinitionInheritance_instanceMethod_staticMethod);
|
| + });
|
| + _ut.test('test_duplicateDefinition_acrossLibraries', () {
|
| + final __test = new CompileTimeErrorCodeTest();
|
| + runJUnitTest(__test, __test.test_duplicateDefinition_acrossLibraries);
|
| + });
|
| + _ut.test('test_duplicateDefinition_classMembers_fields', () {
|
| + final __test = new CompileTimeErrorCodeTest();
|
| + runJUnitTest(__test, __test.test_duplicateDefinition_classMembers_fields);
|
| + });
|
| + _ut.test('test_duplicateDefinition_classMembers_fields_oneStatic', () {
|
| + final __test = new CompileTimeErrorCodeTest();
|
| + runJUnitTest(__test, __test.test_duplicateDefinition_classMembers_fields_oneStatic);
|
| + });
|
| + _ut.test('test_duplicateDefinition_classMembers_methods', () {
|
| + final __test = new CompileTimeErrorCodeTest();
|
| + runJUnitTest(__test, __test.test_duplicateDefinition_classMembers_methods);
|
| + });
|
| + _ut.test('test_duplicateDefinition_localFields', () {
|
| + final __test = new CompileTimeErrorCodeTest();
|
| + runJUnitTest(__test, __test.test_duplicateDefinition_localFields);
|
| });
|
| - _ut.test('test_duplicateMemberError', () {
|
| + _ut.test('test_duplicateDefinition_parameterWithFunctionName_local', () {
|
| final __test = new CompileTimeErrorCodeTest();
|
| - runJUnitTest(__test, __test.test_duplicateMemberError);
|
| + runJUnitTest(__test, __test.test_duplicateDefinition_parameterWithFunctionName_local);
|
| });
|
| - _ut.test('test_duplicateMemberError_classMembers_methods', () {
|
| + _ut.test('test_duplicateDefinition_parameterWithFunctionName_topLevel', () {
|
| final __test = new CompileTimeErrorCodeTest();
|
| - runJUnitTest(__test, __test.test_duplicateMemberError_classMembers_methods);
|
| + runJUnitTest(__test, __test.test_duplicateDefinition_parameterWithFunctionName_topLevel);
|
| });
|
| _ut.test('test_duplicateNamedArgument', () {
|
| final __test = new CompileTimeErrorCodeTest();
|
| @@ -5977,6 +6681,10 @@ class CompileTimeErrorCodeTest extends ResolverTestCase {
|
| final __test = new CompileTimeErrorCodeTest();
|
| runJUnitTest(__test, __test.test_implicitThisReferenceInInitializer_field);
|
| });
|
| + _ut.test('test_implicitThisReferenceInInitializer_field2', () {
|
| + final __test = new CompileTimeErrorCodeTest();
|
| + runJUnitTest(__test, __test.test_implicitThisReferenceInInitializer_field2);
|
| + });
|
| _ut.test('test_implicitThisReferenceInInitializer_invocation', () {
|
| final __test = new CompileTimeErrorCodeTest();
|
| runJUnitTest(__test, __test.test_implicitThisReferenceInInitializer_invocation);
|
| @@ -6033,6 +6741,18 @@ class CompileTimeErrorCodeTest extends ResolverTestCase {
|
| final __test = new CompileTimeErrorCodeTest();
|
| runJUnitTest(__test, __test.test_initializingFormalForNonExistantField_static);
|
| });
|
| + _ut.test('test_instanceMemberAccessFromStatic_field', () {
|
| + final __test = new CompileTimeErrorCodeTest();
|
| + runJUnitTest(__test, __test.test_instanceMemberAccessFromStatic_field);
|
| + });
|
| + _ut.test('test_instanceMemberAccessFromStatic_getter', () {
|
| + final __test = new CompileTimeErrorCodeTest();
|
| + runJUnitTest(__test, __test.test_instanceMemberAccessFromStatic_getter);
|
| + });
|
| + _ut.test('test_instanceMemberAccessFromStatic_method', () {
|
| + final __test = new CompileTimeErrorCodeTest();
|
| + runJUnitTest(__test, __test.test_instanceMemberAccessFromStatic_method);
|
| + });
|
| _ut.test('test_invalidConstructorName_notEnclosingClassName', () {
|
| final __test = new CompileTimeErrorCodeTest();
|
| runJUnitTest(__test, __test.test_invalidConstructorName_notEnclosingClassName);
|
| @@ -6209,6 +6929,26 @@ class CompileTimeErrorCodeTest extends ResolverTestCase {
|
| final __test = new CompileTimeErrorCodeTest();
|
| runJUnitTest(__test, __test.test_newWithInvalidTypeParameters);
|
| });
|
| + _ut.test('test_newWithInvalidTypeParameters_tooFew', () {
|
| + final __test = new CompileTimeErrorCodeTest();
|
| + runJUnitTest(__test, __test.test_newWithInvalidTypeParameters_tooFew);
|
| + });
|
| + _ut.test('test_newWithInvalidTypeParameters_tooMany', () {
|
| + final __test = new CompileTimeErrorCodeTest();
|
| + runJUnitTest(__test, __test.test_newWithInvalidTypeParameters_tooMany);
|
| + });
|
| + _ut.test('test_noDefaultSuperConstructorExplicit', () {
|
| + final __test = new CompileTimeErrorCodeTest();
|
| + runJUnitTest(__test, __test.test_noDefaultSuperConstructorExplicit);
|
| + });
|
| + _ut.test('test_noDefaultSuperConstructorImplicit_superHasParameters', () {
|
| + final __test = new CompileTimeErrorCodeTest();
|
| + runJUnitTest(__test, __test.test_noDefaultSuperConstructorImplicit_superHasParameters);
|
| + });
|
| + _ut.test('test_noDefaultSuperConstructorImplicit_superOnlyNamed', () {
|
| + final __test = new CompileTimeErrorCodeTest();
|
| + runJUnitTest(__test, __test.test_noDefaultSuperConstructorImplicit_superOnlyNamed);
|
| + });
|
| _ut.test('test_nonConstCaseExpression', () {
|
| final __test = new CompileTimeErrorCodeTest();
|
| runJUnitTest(__test, __test.test_nonConstCaseExpression);
|
| @@ -6293,6 +7033,10 @@ class CompileTimeErrorCodeTest extends ResolverTestCase {
|
| final __test = new CompileTimeErrorCodeTest();
|
| runJUnitTest(__test, __test.test_nonGenerativeConstructor_implicit);
|
| });
|
| + _ut.test('test_nonGenerativeConstructor_implicit2', () {
|
| + final __test = new CompileTimeErrorCodeTest();
|
| + runJUnitTest(__test, __test.test_nonGenerativeConstructor_implicit2);
|
| + });
|
| _ut.test('test_notEnoughRequiredArguments_const', () {
|
| final __test = new CompileTimeErrorCodeTest();
|
| runJUnitTest(__test, __test.test_notEnoughRequiredArguments_const);
|
| @@ -6513,6 +7257,14 @@ class CompileTimeErrorCodeTest extends ResolverTestCase {
|
| final __test = new CompileTimeErrorCodeTest();
|
| runJUnitTest(__test, __test.test_wrongNumberOfParametersForOperator_tilde);
|
| });
|
| + _ut.test('test_wrongNumberOfParametersForSetter_function_named', () {
|
| + final __test = new CompileTimeErrorCodeTest();
|
| + runJUnitTest(__test, __test.test_wrongNumberOfParametersForSetter_function_named);
|
| + });
|
| + _ut.test('test_wrongNumberOfParametersForSetter_function_optional', () {
|
| + final __test = new CompileTimeErrorCodeTest();
|
| + runJUnitTest(__test, __test.test_wrongNumberOfParametersForSetter_function_optional);
|
| + });
|
| _ut.test('test_wrongNumberOfParametersForSetter_function_tooFew', () {
|
| final __test = new CompileTimeErrorCodeTest();
|
| runJUnitTest(__test, __test.test_wrongNumberOfParametersForSetter_function_tooFew);
|
| @@ -6521,6 +7273,14 @@ class CompileTimeErrorCodeTest extends ResolverTestCase {
|
| final __test = new CompileTimeErrorCodeTest();
|
| runJUnitTest(__test, __test.test_wrongNumberOfParametersForSetter_function_tooMany);
|
| });
|
| + _ut.test('test_wrongNumberOfParametersForSetter_method_named', () {
|
| + final __test = new CompileTimeErrorCodeTest();
|
| + runJUnitTest(__test, __test.test_wrongNumberOfParametersForSetter_method_named);
|
| + });
|
| + _ut.test('test_wrongNumberOfParametersForSetter_method_optional', () {
|
| + final __test = new CompileTimeErrorCodeTest();
|
| + runJUnitTest(__test, __test.test_wrongNumberOfParametersForSetter_method_optional);
|
| + });
|
| _ut.test('test_wrongNumberOfParametersForSetter_method_tooFew', () {
|
| final __test = new CompileTimeErrorCodeTest();
|
| runJUnitTest(__test, __test.test_wrongNumberOfParametersForSetter_method_tooFew);
|
| @@ -7203,6 +7963,7 @@ class ElementResolverTest extends EngineTestCase {
|
|
|
| /**
|
| * Create the resolver used by the tests.
|
| + *
|
| * @return the resolver that was created
|
| */
|
| ElementResolver createResolver() {
|
| @@ -7228,6 +7989,7 @@ class ElementResolverTest extends EngineTestCase {
|
| /**
|
| * Return the element associated with the label of the given statement after the resolver has
|
| * resolved the statement.
|
| + *
|
| * @param statement the statement to be resolved
|
| * @param labelElement the label element to be defined in the statement's label scope
|
| * @return the element to which the statement's label was resolved
|
| @@ -7240,6 +8002,7 @@ class ElementResolverTest extends EngineTestCase {
|
| /**
|
| * Return the element associated with the label of the given statement after the resolver has
|
| * resolved the statement.
|
| + *
|
| * @param statement the statement to be resolved
|
| * @param labelElement the label element to be defined in the statement's label scope
|
| * @return the element to which the statement's label was resolved
|
| @@ -7252,9 +8015,10 @@ class ElementResolverTest extends EngineTestCase {
|
| /**
|
| * Return the element associated with the given identifier after the resolver has resolved the
|
| * identifier.
|
| + *
|
| * @param node the expression to be resolved
|
| * @param definedElements the elements that are to be defined in the scope in which the element is
|
| - * being resolved
|
| + * being resolved
|
| * @return the element to which the expression was resolved
|
| */
|
| Element resolve4(Identifier node, List<Element> definedElements) {
|
| @@ -7265,9 +8029,10 @@ class ElementResolverTest extends EngineTestCase {
|
| /**
|
| * Return the element associated with the given expression after the resolver has resolved the
|
| * expression.
|
| + *
|
| * @param node the expression to be resolved
|
| * @param definedElements the elements that are to be defined in the scope in which the element is
|
| - * being resolved
|
| + * being resolved
|
| * @return the element to which the expression was resolved
|
| */
|
| Element resolve5(IndexExpression node, List<Element> definedElements) {
|
| @@ -7278,6 +8043,7 @@ class ElementResolverTest extends EngineTestCase {
|
| /**
|
| * Return the element associated with the given identifier after the resolver has resolved the
|
| * identifier.
|
| + *
|
| * @param node the expression to be resolved
|
| * @param enclosingClass the element representing the class enclosing the identifier
|
| * @return the element to which the expression was resolved
|
| @@ -7302,9 +8068,10 @@ class ElementResolverTest extends EngineTestCase {
|
| /**
|
| * Return the element associated with the given identifier after the resolver has resolved the
|
| * identifier.
|
| + *
|
| * @param node the expression to be resolved
|
| * @param definedElements the elements that are to be defined in the scope in which the element is
|
| - * being resolved
|
| + * being resolved
|
| * @return the element to which the expression was resolved
|
| */
|
| void resolveNode(ASTNode node, List<Element> definedElements) {
|
| @@ -7328,6 +8095,7 @@ class ElementResolverTest extends EngineTestCase {
|
| /**
|
| * Return the element associated with the label of the given statement after the resolver has
|
| * resolved the statement.
|
| + *
|
| * @param statement the statement to be resolved
|
| * @param labelElement the label element to be defined in the statement's label scope
|
| * @return the element to which the statement's label was resolved
|
| @@ -7814,6 +8582,18 @@ class StaticWarningCodeTest extends ResolverTestCase {
|
| resolve(source);
|
| assertErrors([StaticWarningCode.AMBIGUOUS_IMPORT]);
|
| }
|
| + void test_argumentTypeNotAssignable_annotation_namedConstructor() {
|
| + Source source = addSource(EngineTestCase.createSource(["class A {", " A.fromInt(int p) {}", "}", "@A.fromInt('0')", "main() {", "}"]));
|
| + resolve(source);
|
| + assertErrors([StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]);
|
| + verify([source]);
|
| + }
|
| + void test_argumentTypeNotAssignable_annotation_unnamedConstructor() {
|
| + Source source = addSource(EngineTestCase.createSource(["class A {", " A(int p) {}", "}", "@A('0')", "main() {", "}"]));
|
| + resolve(source);
|
| + assertErrors([StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]);
|
| + verify([source]);
|
| + }
|
| void test_argumentTypeNotAssignable_binary() {
|
| Source source = addSource(EngineTestCase.createSource(["class A {", " operator +(int p) {}", "}", "f(A a) {", " a + '0';", "}"]));
|
| resolve(source);
|
| @@ -8173,13 +8953,13 @@ class StaticWarningCodeTest extends ResolverTestCase {
|
| verify([source]);
|
| }
|
| void test_instanceMethodNameCollidesWithSuperclassStatic_setter() {
|
| - Source source = addSource(EngineTestCase.createSource(["class A {", " int i = 0;", " static set n(int x) {i = x;}", "}", "class B extends A {", " void n() {}", "}"]));
|
| + Source source = addSource(EngineTestCase.createSource(["class A {", " static set n(int x) {}", "}", "class B extends A {", " void n() {}", "}"]));
|
| resolve(source);
|
| assertErrors([StaticWarningCode.INSTANCE_METHOD_NAME_COLLIDES_WITH_SUPERCLASS_STATIC]);
|
| verify([source]);
|
| }
|
| void test_instanceMethodNameCollidesWithSuperclassStatic_setter2() {
|
| - Source source = addSource(EngineTestCase.createSource(["class A {", " int i = 0;", " static set n(int x) {i = x;}", "}", "class B extends A {", "}", "class C extends B {", " void n() {}", "}"]));
|
| + Source source = addSource(EngineTestCase.createSource(["class A {", " static set n(int x) {}", "}", "class B extends A {", "}", "class C extends B {", " void n() {}", "}"]));
|
| resolve(source);
|
| assertErrors([StaticWarningCode.INSTANCE_METHOD_NAME_COLLIDES_WITH_SUPERCLASS_STATIC]);
|
| verify([source]);
|
| @@ -8286,6 +9066,14 @@ class StaticWarningCodeTest extends ResolverTestCase {
|
| assertErrors([StaticWarningCode.NEW_WITH_NON_TYPE]);
|
| verify([source]);
|
| }
|
| + void test_newWithNonType_fromLibrary() {
|
| + Source source1 = addSource2("lib.dart", "");
|
| + Source source2 = addSource2("lib2.dart", EngineTestCase.createSource(["import 'lib.dart' as lib;", "void f() {", " var a = new lib.A();", "}"]));
|
| + resolve(source1);
|
| + resolve(source2);
|
| + assertErrors([StaticWarningCode.NEW_WITH_NON_TYPE]);
|
| + verify([source1]);
|
| + }
|
| void test_newWithUndefinedConstructor() {
|
| Source source = addSource(EngineTestCase.createSource(["class A {", " A() {}", "}", "f() {", " new A.name();", "}"]));
|
| resolve(source);
|
| @@ -8297,24 +9085,6 @@ class StaticWarningCodeTest extends ResolverTestCase {
|
| assertErrors([StaticWarningCode.NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT]);
|
| verify([source]);
|
| }
|
| - void test_noDefaultSuperConstructorExplicit() {
|
| - Source source = addSource(EngineTestCase.createSource(["class A {", " A(p);", "}", "class B extends A {", " B() {}", "}"]));
|
| - resolve(source);
|
| - assertErrors([StaticWarningCode.NO_DEFAULT_SUPER_CONSTRUCTOR_EXPLICIT]);
|
| - verify([source]);
|
| - }
|
| - void test_noDefaultSuperConstructorImplicit_superHasParameters() {
|
| - Source source = addSource(EngineTestCase.createSource(["class A {", " A(p);", "}", "class B extends A {", "}"]));
|
| - resolve(source);
|
| - assertErrors([StaticWarningCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT]);
|
| - verify([source]);
|
| - }
|
| - void test_noDefaultSuperConstructorImplicit_superOnlyNamed() {
|
| - Source source = addSource(EngineTestCase.createSource(["class A { A.named() {} }", "class B extends A {}"]));
|
| - resolve(source);
|
| - assertErrors([StaticWarningCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT]);
|
| - verify([source]);
|
| - }
|
| void test_nonAbstractClassInheritsAbstractMemberFivePlus() {
|
| Source source = addSource(EngineTestCase.createSource(["abstract class A {", " m();", " n();", " o();", " p();", " q();", "}", "class C extends A {", "}"]));
|
| resolve(source);
|
| @@ -8458,7 +9228,13 @@ class StaticWarningCodeTest extends ResolverTestCase {
|
| resolve(source);
|
| assertErrors([StaticWarningCode.REDIRECT_TO_MISSING_CONSTRUCTOR]);
|
| }
|
| - void test_redirectToNonClass() {
|
| + void test_redirectToNonClass_notAType() {
|
| + Source source = addSource(EngineTestCase.createSource(["class B {", " int A;", " B() = A;", "}"]));
|
| + resolve(source);
|
| + assertErrors([StaticWarningCode.REDIRECT_TO_NON_CLASS]);
|
| + verify([source]);
|
| + }
|
| + void test_redirectToNonClass_undefinedIdentifier() {
|
| Source source = addSource(EngineTestCase.createSource(["class B {", " B() = A;", "}"]));
|
| resolve(source);
|
| assertErrors([StaticWarningCode.REDIRECT_TO_NON_CLASS]);
|
| @@ -8527,6 +9303,14 @@ class StaticWarningCodeTest extends ResolverTestCase {
|
| resolve(source);
|
| assertErrors([StaticWarningCode.UNDEFINED_CLASS_BOOLEAN]);
|
| }
|
| + void test_undefinedGetter_fromLibrary() {
|
| + Source source1 = addSource2("lib.dart", "");
|
| + Source source2 = addSource2("lib2.dart", EngineTestCase.createSource(["import 'lib.dart' as lib;", "void f() {", " var g = lib.gg;", "}"]));
|
| + resolve(source1);
|
| + resolve(source2);
|
| + assertErrors([StaticWarningCode.UNDEFINED_GETTER]);
|
| + verify([source1]);
|
| + }
|
| void test_undefinedIdentifier_initializer() {
|
| Source source = addSource(EngineTestCase.createSource(["var a = b;"]));
|
| resolve(source);
|
| @@ -8557,6 +9341,14 @@ class StaticWarningCodeTest extends ResolverTestCase {
|
| final __test = new StaticWarningCodeTest();
|
| runJUnitTest(__test, __test.test_ambiguousImport_typeArgument_annotation);
|
| });
|
| + _ut.test('test_argumentTypeNotAssignable_annotation_namedConstructor', () {
|
| + final __test = new StaticWarningCodeTest();
|
| + runJUnitTest(__test, __test.test_argumentTypeNotAssignable_annotation_namedConstructor);
|
| + });
|
| + _ut.test('test_argumentTypeNotAssignable_annotation_unnamedConstructor', () {
|
| + final __test = new StaticWarningCodeTest();
|
| + runJUnitTest(__test, __test.test_argumentTypeNotAssignable_annotation_unnamedConstructor);
|
| + });
|
| _ut.test('test_argumentTypeNotAssignable_binary', () {
|
| final __test = new StaticWarningCodeTest();
|
| runJUnitTest(__test, __test.test_argumentTypeNotAssignable_binary);
|
| @@ -8869,6 +9661,10 @@ class StaticWarningCodeTest extends ResolverTestCase {
|
| final __test = new StaticWarningCodeTest();
|
| runJUnitTest(__test, __test.test_newWithNonType);
|
| });
|
| + _ut.test('test_newWithNonType_fromLibrary', () {
|
| + final __test = new StaticWarningCodeTest();
|
| + runJUnitTest(__test, __test.test_newWithNonType_fromLibrary);
|
| + });
|
| _ut.test('test_newWithUndefinedConstructor', () {
|
| final __test = new StaticWarningCodeTest();
|
| runJUnitTest(__test, __test.test_newWithUndefinedConstructor);
|
| @@ -8877,18 +9673,6 @@ class StaticWarningCodeTest extends ResolverTestCase {
|
| final __test = new StaticWarningCodeTest();
|
| runJUnitTest(__test, __test.test_newWithUndefinedConstructorDefault);
|
| });
|
| - _ut.test('test_noDefaultSuperConstructorExplicit', () {
|
| - final __test = new StaticWarningCodeTest();
|
| - runJUnitTest(__test, __test.test_noDefaultSuperConstructorExplicit);
|
| - });
|
| - _ut.test('test_noDefaultSuperConstructorImplicit_superHasParameters', () {
|
| - final __test = new StaticWarningCodeTest();
|
| - runJUnitTest(__test, __test.test_noDefaultSuperConstructorImplicit_superHasParameters);
|
| - });
|
| - _ut.test('test_noDefaultSuperConstructorImplicit_superOnlyNamed', () {
|
| - final __test = new StaticWarningCodeTest();
|
| - runJUnitTest(__test, __test.test_noDefaultSuperConstructorImplicit_superOnlyNamed);
|
| - });
|
| _ut.test('test_nonAbstractClassInheritsAbstractMemberFivePlus', () {
|
| final __test = new StaticWarningCodeTest();
|
| runJUnitTest(__test, __test.test_nonAbstractClassInheritsAbstractMemberFivePlus);
|
| @@ -8985,9 +9769,13 @@ class StaticWarningCodeTest extends ResolverTestCase {
|
| final __test = new StaticWarningCodeTest();
|
| runJUnitTest(__test, __test.test_redirectToMissingConstructor_unnamed);
|
| });
|
| - _ut.test('test_redirectToNonClass', () {
|
| + _ut.test('test_redirectToNonClass_notAType', () {
|
| + final __test = new StaticWarningCodeTest();
|
| + runJUnitTest(__test, __test.test_redirectToNonClass_notAType);
|
| + });
|
| + _ut.test('test_redirectToNonClass_undefinedIdentifier', () {
|
| final __test = new StaticWarningCodeTest();
|
| - runJUnitTest(__test, __test.test_redirectToNonClass);
|
| + runJUnitTest(__test, __test.test_redirectToNonClass_undefinedIdentifier);
|
| });
|
| _ut.test('test_returnWithoutValue', () {
|
| final __test = new StaticWarningCodeTest();
|
| @@ -9033,6 +9821,10 @@ class StaticWarningCodeTest extends ResolverTestCase {
|
| final __test = new StaticWarningCodeTest();
|
| runJUnitTest(__test, __test.test_undefinedClass_variableDeclaration);
|
| });
|
| + _ut.test('test_undefinedGetter_fromLibrary', () {
|
| + final __test = new StaticWarningCodeTest();
|
| + runJUnitTest(__test, __test.test_undefinedGetter_fromLibrary);
|
| + });
|
| _ut.test('test_undefinedIdentifier_initializer', () {
|
| final __test = new StaticWarningCodeTest();
|
| runJUnitTest(__test, __test.test_undefinedIdentifier_initializer);
|
| @@ -9155,6 +9947,11 @@ class TestTypeProvider implements TypeProvider {
|
| InterfaceType _stringType;
|
|
|
| /**
|
| + * The type representing the built-in type 'Symbol'.
|
| + */
|
| + InterfaceType _symbolType;
|
| +
|
| + /**
|
| * The type representing the built-in type 'Type'.
|
| */
|
| InterfaceType _typeType;
|
| @@ -9270,6 +10067,12 @@ class TestTypeProvider implements TypeProvider {
|
| }
|
| return _stringType;
|
| }
|
| + InterfaceType get symbolType {
|
| + if (_symbolType == null) {
|
| + _symbolType = ElementFactory.classElement2("Symbol", []).type;
|
| + }
|
| + return _symbolType;
|
| + }
|
| InterfaceType get typeType {
|
| if (_typeType == null) {
|
| _typeType = ElementFactory.classElement2("Type", []).type;
|
| @@ -9306,6 +10109,7 @@ class TestTypeProvider implements TypeProvider {
|
| /**
|
| * Given a class element representing a class with type parameters, propagate those type
|
| * parameters to all of the accessors, methods and constructors defined for the class.
|
| + *
|
| * @param classElement the element representing the class with type parameters
|
| */
|
| void propagateTypeArguments(ClassElementImpl classElement) {
|
| @@ -9332,6 +10136,7 @@ class AnalysisContextFactory {
|
|
|
| /**
|
| * Create an analysis context that has a fake core library already resolved.
|
| + *
|
| * @return the analysis context that was created
|
| */
|
| static AnalysisContextImpl contextWithCore() {
|
| @@ -9535,9 +10340,10 @@ class ResolutionVerifier extends RecursiveASTVisitor<Object> {
|
| * structures that are expected to have been resolved have an element associated with them. Nodes
|
| * in the set of known exceptions are not expected to have been resolved, even if they normally
|
| * would have been expected to have been resolved.
|
| + *
|
| * @param knownExceptions a set containing nodes that are known to not be resolvable and should
|
| - * therefore not cause the test to fail
|
| - */
|
| + * therefore not cause the test to fail
|
| + **/
|
| ResolutionVerifier.con1(Set<ASTNode> knownExceptions2) {
|
| _jtd_constructor_362_impl(knownExceptions2);
|
| }
|
| @@ -10283,6 +11089,7 @@ class StaticTypeAnalyzerTest extends EngineTestCase {
|
| /**
|
| * Return the type associated with the given expression after the static type analyzer has
|
| * computed a type for it.
|
| + *
|
| * @param node the expression with which the type is associated
|
| * @return the type associated with the expression
|
| */
|
| @@ -10291,6 +11098,7 @@ class StaticTypeAnalyzerTest extends EngineTestCase {
|
| /**
|
| * Return the type associated with the given expression after the static type analyzer has
|
| * computed a type for it.
|
| + *
|
| * @param node the expression with which the type is associated
|
| * @param thisType the type of 'this'
|
| * @return the type associated with the expression
|
| @@ -10308,6 +11116,7 @@ class StaticTypeAnalyzerTest extends EngineTestCase {
|
| /**
|
| * Return the type associated with the given parameter after the static type analyzer has computed
|
| * a type for it.
|
| + *
|
| * @param node the parameter with which the type is associated
|
| * @return the type associated with the parameter
|
| */
|
| @@ -10318,6 +11127,7 @@ class StaticTypeAnalyzerTest extends EngineTestCase {
|
|
|
| /**
|
| * Assert that the actual type is a function type with the expected characteristics.
|
| + *
|
| * @param expectedReturnType the expected return type of the function
|
| * @param expectedNormalTypes the expected types of the normal parameters
|
| * @param expectedOptionalTypes the expected types of the optional parameters
|
| @@ -10378,6 +11188,7 @@ class StaticTypeAnalyzerTest extends EngineTestCase {
|
|
|
| /**
|
| * Create the analyzer used by the tests.
|
| + *
|
| * @return the analyzer to be used by the tests
|
| */
|
| StaticTypeAnalyzer createAnalyzer() {
|
| @@ -10402,6 +11213,7 @@ class StaticTypeAnalyzerTest extends EngineTestCase {
|
|
|
| /**
|
| * Return an integer literal that has been resolved to the correct type.
|
| + *
|
| * @param value the value of the literal
|
| * @return an integer literal that has been resolved to the correct type
|
| */
|
| @@ -10413,8 +11225,10 @@ class StaticTypeAnalyzerTest extends EngineTestCase {
|
|
|
| /**
|
| * Create a function expression that has an element associated with it, where the element has an
|
| - * incomplete type associated with it (just like the one[ElementBuilder#visitFunctionExpression] would have built if we had
|
| + * incomplete type associated with it (just like the one
|
| + * [ElementBuilder#visitFunctionExpression] would have built if we had
|
| * run it).
|
| + *
|
| * @param parameters the parameters to the function
|
| * @param body the body of the function
|
| * @return a resolved function expression
|
| @@ -10435,6 +11249,7 @@ class StaticTypeAnalyzerTest extends EngineTestCase {
|
|
|
| /**
|
| * Return an integer literal that has been resolved to the correct type.
|
| + *
|
| * @param value the value of the literal
|
| * @return an integer literal that has been resolved to the correct type
|
| */
|
| @@ -10446,6 +11261,7 @@ class StaticTypeAnalyzerTest extends EngineTestCase {
|
|
|
| /**
|
| * Return a string literal that has been resolved to the correct type.
|
| + *
|
| * @param value the value of the literal
|
| * @return a string literal that has been resolved to the correct type
|
| */
|
| @@ -10457,6 +11273,7 @@ class StaticTypeAnalyzerTest extends EngineTestCase {
|
|
|
| /**
|
| * Return a simple identifier that has been resolved to a variable element with the given type.
|
| + *
|
| * @param type the type of the variable being represented
|
| * @param variableName the name of the variable
|
| * @return a simple identifier that has been resolved to a variable element with the given type
|
| @@ -10480,6 +11297,7 @@ class StaticTypeAnalyzerTest extends EngineTestCase {
|
|
|
| /**
|
| * Set the type of the given parameter to the given type.
|
| + *
|
| * @param parameter the parameter whose type is to be set
|
| * @param type the new type of the given parameter
|
| */
|
| @@ -10765,7 +11583,7 @@ class EnclosedScopeTest extends ResolverTestCase {
|
| void test_define_duplicate() {
|
| LibraryElement definingLibrary2 = createTestLibrary();
|
| GatheringErrorListener errorListener2 = new GatheringErrorListener();
|
| - Scope rootScope = new Scope_16(definingLibrary2, errorListener2);
|
| + Scope rootScope = new Scope_17(definingLibrary2, errorListener2);
|
| EnclosedScope scope = new EnclosedScope(rootScope);
|
| VariableElement element1 = ElementFactory.localVariableElement(ASTFactory.identifier3("v1"));
|
| VariableElement element2 = ElementFactory.localVariableElement(ASTFactory.identifier3("v1"));
|
| @@ -10776,7 +11594,7 @@ class EnclosedScopeTest extends ResolverTestCase {
|
| void test_define_normal() {
|
| LibraryElement definingLibrary3 = createTestLibrary();
|
| GatheringErrorListener errorListener3 = new GatheringErrorListener();
|
| - Scope rootScope = new Scope_17(definingLibrary3, errorListener3);
|
| + Scope rootScope = new Scope_18(definingLibrary3, errorListener3);
|
| EnclosedScope outerScope = new EnclosedScope(rootScope);
|
| EnclosedScope innerScope = new EnclosedScope(outerScope);
|
| VariableElement element1 = ElementFactory.localVariableElement(ASTFactory.identifier3("v1"));
|
| @@ -10798,18 +11616,18 @@ class EnclosedScopeTest extends ResolverTestCase {
|
| });
|
| }
|
| }
|
| -class Scope_16 extends Scope {
|
| +class Scope_17 extends Scope {
|
| LibraryElement definingLibrary2;
|
| GatheringErrorListener errorListener2;
|
| - Scope_16(this.definingLibrary2, this.errorListener2) : super();
|
| + Scope_17(this.definingLibrary2, this.errorListener2) : super();
|
| LibraryElement get definingLibrary => definingLibrary2;
|
| AnalysisErrorListener get errorListener => errorListener2;
|
| Element lookup3(Identifier identifier, String name, LibraryElement referencingLibrary) => null;
|
| }
|
| -class Scope_17 extends Scope {
|
| +class Scope_18 extends Scope {
|
| LibraryElement definingLibrary3;
|
| GatheringErrorListener errorListener3;
|
| - Scope_17(this.definingLibrary3, this.errorListener3) : super();
|
| + Scope_18(this.definingLibrary3, this.errorListener3) : super();
|
| LibraryElement get definingLibrary => definingLibrary3;
|
| AnalysisErrorListener get errorListener => errorListener3;
|
| Element lookup3(Identifier identifier, String name, LibraryElement referencingLibrary) => null;
|
| @@ -10817,7 +11635,7 @@ class Scope_17 extends Scope {
|
| class LibraryElementBuilderTest extends EngineTestCase {
|
|
|
| /**
|
| - * The source factory used to create [Source sources].
|
| + * The source factory used to create [Source].
|
| */
|
| SourceFactory _sourceFactory;
|
| void setUp() {
|
| @@ -10901,6 +11719,7 @@ class LibraryElementBuilderTest extends EngineTestCase {
|
|
|
| /**
|
| * Add a source file to the content provider. The file path should be absolute.
|
| + *
|
| * @param filePath the path of the file being added
|
| * @param contents the contents to be returned by the content provider for the specified file
|
| * @return the source object representing the added file
|
| @@ -10913,6 +11732,7 @@ class LibraryElementBuilderTest extends EngineTestCase {
|
|
|
| /**
|
| * Ensure that there are elements representing all of the types in the given array of type names.
|
| + *
|
| * @param unit the compilation unit containing the types
|
| * @param typeNames the names of the types that should be found
|
| */
|
| @@ -10937,9 +11757,10 @@ class LibraryElementBuilderTest extends EngineTestCase {
|
|
|
| /**
|
| * Build the element model for the library whose defining compilation unit has the given source.
|
| + *
|
| * @param librarySource the source of the defining compilation unit for the library
|
| * @param expectedErrorCodes the errors that are expected to be found while building the element
|
| - * model
|
| + * model
|
| * @return the element model that was built for the library
|
| * @throws Exception if the element model could not be built
|
| */
|
| @@ -11407,10 +12228,11 @@ class SimpleResolverTest extends ResolverTestCase {
|
| * which the argument expression was resolved is the parameter in the invoked method's list of
|
| * parameters at that index. Arguments that should not be resolved to a parameter because of an
|
| * error can be denoted by including a negative index in the array of indices.
|
| + *
|
| * @param source the source to be resolved
|
| * @param indices the array of indices used to associate arguments with parameters
|
| * @throws Exception if the source could not be resolved or if the structure of the source is not
|
| - * valid
|
| + * valid
|
| */
|
| void validateArgumentResolution(Source source, List<int> indices) {
|
| LibraryElement library = resolve(source);
|
|
|