Index: dart/compiler/javatests/com/google/dart/compiler/resolver/NegativeResolverTest.java |
diff --git a/dart/compiler/javatests/com/google/dart/compiler/resolver/NegativeResolverTest.java b/dart/compiler/javatests/com/google/dart/compiler/resolver/NegativeResolverTest.java |
deleted file mode 100644 |
index d924a0437227f5daea61e2753cffb18af04b3f8c..0000000000000000000000000000000000000000 |
--- a/dart/compiler/javatests/com/google/dart/compiler/resolver/NegativeResolverTest.java |
+++ /dev/null |
@@ -1,1199 +0,0 @@ |
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
-// for details. All rights reserved. Use of this source code is governed by a |
-// BSD-style license that can be found in the LICENSE file. |
-package com.google.dart.compiler.resolver; |
- |
-import com.google.dart.compiler.CompilerTestCase; |
-import com.google.dart.compiler.DartCompilationError; |
-import com.google.dart.compiler.ast.DartFunctionTypeAlias; |
-import com.google.dart.compiler.ast.DartThisExpression; |
-import com.google.dart.compiler.ast.DartTypeParameter; |
-import com.google.dart.compiler.ast.DartUnit; |
-import com.google.dart.compiler.common.ErrorExpectation; |
-import com.google.dart.compiler.testing.TestCompilerContext; |
-import com.google.dart.compiler.type.Type; |
- |
-import static com.google.dart.compiler.common.ErrorExpectation.assertErrors; |
-import static com.google.dart.compiler.common.ErrorExpectation.errEx; |
- |
-import java.util.ArrayList; |
-import java.util.List; |
- |
-public class NegativeResolverTest extends CompilerTestCase { |
- List<DartCompilationError> errors = new ArrayList<DartCompilationError>(); |
- |
- /** |
- * Parses given Dart source, runs {@link Resolver} and checks that expected errors were generated. |
- */ |
- public void checkSourceErrors(String source, ErrorExpectation... expectedErrors) { |
- DartUnit unit = parseUnit("Test.dart", source); |
- resolve(unit); |
- assertErrors(errors, expectedErrors); |
- } |
- |
- public void checkSourceErrorsAsSystemLibrary(String source, ErrorExpectation... expectedErrors) { |
- DartUnit unit = parseUnitAsSystemLibrary("Test.dart", source); |
- resolve(unit); |
- assertErrors(errors, expectedErrors); |
- } |
- |
- |
- /** |
- * Parses given Dart file, runs {@link Resolver} and checks that expected errors were generated. |
- */ |
- public void checkFileErrors(String source, ErrorExpectation... expectedErrors) { |
- DartUnit unit = parseUnit(source); |
- resolve(unit); |
- assertErrors(errors, expectedErrors); |
- } |
- |
- public void checkNumErrors(String fileName, int expectedErrorCount) { |
- DartUnit unit = parseUnit(fileName); |
- resolve(unit); |
- if (errors.size() != expectedErrorCount) { |
- fail(String.format( |
- "Expected %s errors, but got %s: %s", |
- expectedErrorCount, |
- errors.size(), |
- errors)); |
- } |
- } |
- |
- private void resolve(DartUnit unit) { |
- unit.getTopLevelNodes().add(ResolverTestCase.makeClass("bool", null)); |
- unit.getTopLevelNodes().add(ResolverTestCase.makeClass("num", null)); |
- unit.getTopLevelNodes().add(ResolverTestCase.makeClass("double", null)); |
- unit.getTopLevelNodes().add(ResolverTestCase.makeClass("int", null)); |
- unit.getTopLevelNodes().add(ResolverTestCase.makeClass("Object", null)); |
- unit.getTopLevelNodes().add(ResolverTestCase.makeClass("Null", null)); |
- unit.getTopLevelNodes().add(ResolverTestCase.makeClass("String", null)); |
- unit.getTopLevelNodes().add(ResolverTestCase.makeClass("Function", null)); |
- unit.getTopLevelNodes().add(ResolverTestCase.makeInterface("List", "T")); |
- unit.getTopLevelNodes().add(ResolverTestCase.makeInterface("Map", "K", "V")); |
- ResolverTestCase.resolve(unit, getContext()); |
- } |
- |
- public void testInitializer1() { |
- checkNumErrors("Initializer1NegativeTest.dart", 1); |
- } |
- |
- public void testInitializer2() { |
- checkNumErrors("Initializer2NegativeTest.dart", 1); |
- } |
- |
- public void testInitializer3() { |
- checkNumErrors("Initializer3NegativeTest.dart", 1); |
- } |
- |
- public void testInitializer4() { |
- checkNumErrors("Initializer4NegativeTest.dart", 1); |
- } |
- |
- public void testInitializer5() { |
- checkNumErrors("Initializer5NegativeTest.dart", 1); |
- } |
- |
- public void testInitializer6() { |
- checkNumErrors("Initializer6NegativeTest.dart", 1); |
- } |
- |
- public void testArrayLiteralNegativeTest() { |
- checkSourceErrors( |
- makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "class A {", |
- " main() {", |
- " List<int, int> ints = [1];", |
- " }", |
- "}"), |
- errEx(TypeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS, 4, 5, 14)); |
- } |
- |
- public void testMapLiteralNegativeTest() { |
- checkSourceErrors( |
- makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "class A {", |
- " main() {", |
- " Map<String, int, int> map = {'foo':1};", |
- " }", |
- "}"), |
- errEx(TypeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS, 4, 5, 21)); |
- } |
- |
- /** |
- * We should not fail in case of using {@link DartThisExpression} outside of method. |
- * <p> |
- * http://code.google.com/p/dart/issues/detail?id=662 |
- */ |
- public void test_thisExpression_inTopLevelVariable() { |
- checkSourceErrors("var foo = this;", errEx(ResolverErrorCode.THIS_ON_TOP_LEVEL, 1, 11, 4)); |
- } |
- |
- public void test_thisExpression_inTopLevelMethod() { |
- checkSourceErrors( |
- makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "foo() {", |
- " return this;", |
- "}"), |
- errEx(ResolverErrorCode.THIS_ON_TOP_LEVEL, 3, 10, 4)); |
- } |
- |
- public void test_thisExpression_outsideOfMethod() { |
- checkSourceErrors( |
- makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "class A {", |
- " var foo = this;", |
- "}"), |
- errEx(ResolverErrorCode.THIS_OUTSIDE_OF_METHOD, 3, 13, 4)); |
- } |
- |
- public void test_thisExpression_inStaticMethod() { |
- checkSourceErrors( |
- makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "class A {", |
- " static foo() {", |
- " return this;", |
- " }", |
- "}"), |
- errEx(ResolverErrorCode.THIS_IN_STATIC_METHOD, 4, 12, 4)); |
- } |
- |
- public void test_thisExpression_inFactoryMethod() { |
- checkSourceErrors( |
- makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "class A {", |
- " factory A() {", |
- " return this;", |
- " }", |
- "}"), |
- errEx(ResolverErrorCode.THIS_IN_FACTORY_CONSTRUCTOR, 4, 12, 4)); |
- } |
- |
- /** |
- * We should not fail in case of using {@link DartThisExpression} outside of method. |
- * <p> |
- * http://code.google.com/p/dart/issues/detail?id=662 |
- */ |
- public void test_superExpression_inTopLevelVariable() { |
- checkSourceErrors( |
- "var foo = super.foo();", |
- errEx(ResolverErrorCode.SUPER_ON_TOP_LEVEL, 1, 11, 5)); |
- } |
- |
- public void test_superExpression_inTopLevelMethod() { |
- checkSourceErrors( |
- makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "foo() {", |
- " return super.foo();", |
- "}"), |
- errEx(ResolverErrorCode.SUPER_ON_TOP_LEVEL, 3, 10, 5)); |
- } |
- |
- public void test_superExpression_outsideOfMethod() { |
- checkSourceErrors( |
- makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "class A {", |
- " var foo = super.foo();", |
- "}"), |
- errEx(ResolverErrorCode.SUPER_OUTSIDE_OF_METHOD, 3, 13, 5)); |
- } |
- |
- public void test_superExpression_inStaticMethod() { |
- checkSourceErrors( |
- makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "class A {", |
- " static foo() {", |
- " return super.foo();", |
- " }", |
- "}"), |
- errEx(ResolverErrorCode.SUPER_IN_STATIC_METHOD, 4, 12, 5)); |
- } |
- |
- public void test_superExpression_inFactoryMethod() { |
- checkSourceErrors( |
- makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "class A {", |
- " factory A() {", |
- " return super.foo();", |
- " }", |
- "}"), |
- errEx(ResolverErrorCode.SUPER_IN_FACTORY_CONSTRUCTOR, 4, 12, 5)); |
- } |
- |
- public void testNameConflict_field_field() { |
- checkSourceErrors( |
- makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "class A {", |
- " var foo;", |
- " var foo;", |
- "}"), |
- errEx(ResolverErrorCode.DUPLICATE_MEMBER, 3, 7, 3), |
- errEx(ResolverErrorCode.DUPLICATE_MEMBER, 4, 7, 3)); |
- } |
- |
- public void testCall1() { |
- checkNumErrors("StaticInstanceCallNegativeTest.dart", 1); |
- } |
- |
- /** |
- * Class can implement class, this causes implementation of an implicit interface. |
- */ |
- public void test_classImplementsClass() { |
- checkSourceErrors(makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "class A {}", |
- "class B implements A {", |
- "}")); |
- } |
- |
- public void testConstSuperNegativeTest1() { |
- checkNumErrors("ConstSuperNegativeTest1.dart", 0); |
- } |
- |
- public void testConstSuperNegativeTest2() { |
- checkNumErrors("ConstSuperNegativeTest2.dart", 1); |
- } |
- |
- public void testConstSuperTest() { |
- checkNumErrors("ConstSuperTest.dart", 0); |
- } |
- |
- public void testParameterInitializerNegativeTest1() { |
- checkNumErrors("ParameterInitializerNegativeTest1.dart", 1); |
- } |
- |
- public void testParameterInitializerNegativeTest2() { |
- checkNumErrors("ParameterInitializerNegativeTest2.dart", 1); |
- } |
- |
- public void testParameterInitializerNegativeTest3() { |
- checkNumErrors("ParameterInitializerNegativeTest3.dart", 1); |
- } |
- |
- public void testStaticToInstanceInvocationNegativeTest1() { |
- checkNumErrors("StaticToInstanceInvocationNegativeTest1.dart", 1); |
- } |
- |
- public void testConstVariableInitializationNegativeTest1() { |
- checkNumErrors("ConstVariableInitializationNegativeTest1.dart", 1); |
- } |
- |
- public void testConstVariableInitializationNegativeTest2() { |
- checkNumErrors("ConstVariableInitializationNegativeTest2.dart", 1); |
- } |
- |
- public void test_nameShadow_topLevel_method_class() { |
- checkSourceErrors( |
- makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "foo() {}", |
- "class foo {}"), |
- errEx(ResolverErrorCode.DUPLICATE_TOP_LEVEL_DECLARATION, 2, 1, 3), |
- errEx(ResolverErrorCode.DUPLICATE_TOP_LEVEL_DECLARATION, 3, 7, 3)); |
- assertEquals( |
- "duplicate top-level declaration class 'foo' at Test.dart line:3 col:7", |
- errors.get(0).getMessage()); |
- assertEquals( |
- "duplicate top-level declaration top-level function 'foo' at Test.dart line:2 col:1", |
- errors.get(1).getMessage()); |
- } |
- |
- public void test_nameShadow_topLevel_getterSetter_class() { |
- checkSourceErrors( |
- makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "get foo {}", |
- "set bar(x) {}", |
- "class foo {}", |
- "class bar{}"), |
- errEx(ResolverErrorCode.DUPLICATE_TOP_LEVEL_DECLARATION, 2, 5, 3), |
- errEx(ResolverErrorCode.DUPLICATE_TOP_LEVEL_DECLARATION, 4, 7, 3)); |
- } |
- |
- public void test_nameShadow_topLevel_class_getterSetter() { |
- checkSourceErrors( |
- makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "class foo {}", |
- "class bar {}", |
- "get foo {}", |
- "set bar(x) {}"), |
- errEx(ResolverErrorCode.DUPLICATE_TOP_LEVEL_DECLARATION, 2, 7, 3), |
- errEx(ResolverErrorCode.DUPLICATE_TOP_LEVEL_DECLARATION, 4, 5, 3)); |
- assertEquals( |
- "duplicate top-level declaration top-level variable 'foo' at Test.dart line:4 col:5", |
- errors.get(0).getMessage()); |
- assertEquals( |
- "duplicate top-level declaration class 'foo' at Test.dart line:2 col:7", |
- errors.get(1).getMessage()); |
- } |
- |
- public void test_nameShadow_topLevel_getter_setter() { |
- checkSourceErrors(makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "get bar {}", |
- "set bar(x) {}")); |
- } |
- |
- public void test_nameShadow_topLevel_setter_getter() { |
- checkSourceErrors(makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "set bar(x) {}", |
- "get bar {}")); |
- } |
- |
- public void test_nameShadow_topLevel_setter_variable() { |
- checkSourceErrors( |
- makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "set bar(x) {}", |
- "var bar;"), |
- errEx(ResolverErrorCode.DUPLICATE_TOP_LEVEL_DECLARATION, 2, 5, 3), |
- errEx(ResolverErrorCode.DUPLICATE_TOP_LEVEL_DECLARATION, 3, 5, 3)); |
- } |
- |
- public void test_nameShadow_topLevel_variable_setter() { |
- checkSourceErrors( |
- makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "var bar;", |
- "set bar(x) {}"), |
- errEx(ResolverErrorCode.DUPLICATE_TOP_LEVEL_DECLARATION, 2, 5, 3), |
- errEx(ResolverErrorCode.DUPLICATE_TOP_LEVEL_DECLARATION, 3, 5, 3)); |
- } |
- |
- public void test_nameShadow_topLevel_getters() { |
- checkSourceErrors( |
- makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "get bar {}", |
- "get bar {}"), |
- errEx(ResolverErrorCode.DUPLICATE_TOP_LEVEL_DECLARATION, 2, 5, 3), |
- errEx(ResolverErrorCode.DUPLICATE_TOP_LEVEL_DECLARATION, 3, 5, 3)); |
- assertEquals( |
- "duplicate top-level declaration top-level variable 'bar' at Test.dart line:3 col:5", |
- errors.get(0).getMessage()); |
- assertEquals( |
- "duplicate top-level declaration top-level variable 'bar' at Test.dart line:2 col:5", |
- errors.get(1).getMessage()); |
- } |
- |
- public void test_nameShadow_topLevel_setters() { |
- checkSourceErrors( |
- makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "set bar(x) {}", |
- "set bar(x) {}"), |
- errEx(ResolverErrorCode.DUPLICATE_TOP_LEVEL_DECLARATION, 2, 5, 3), |
- errEx(ResolverErrorCode.DUPLICATE_TOP_LEVEL_DECLARATION, 3, 5, 3)); |
- assertEquals( |
- "duplicate top-level declaration top-level variable 'setter bar' at Test.dart line:3 col:5", |
- errors.get(0).getMessage()); |
- assertEquals( |
- "duplicate top-level declaration top-level variable 'setter bar' at Test.dart line:2 col:5", |
- errors.get(1).getMessage()); |
- } |
- |
- public void test_nameShadow_topLevel_variables() { |
- checkSourceErrors( |
- makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "var foo;", |
- "var bar;", |
- "var foo;"), |
- errEx(ResolverErrorCode.DUPLICATE_TOP_LEVEL_DECLARATION, 2, 5, 3), |
- errEx(ResolverErrorCode.DUPLICATE_TOP_LEVEL_DECLARATION, 4, 5, 3)); |
- assertEquals( |
- "duplicate top-level declaration top-level variable 'foo' at Test.dart line:4 col:5", |
- errors.get(0).getMessage()); |
- assertEquals( |
- "duplicate top-level declaration top-level variable 'foo' at Test.dart line:2 col:5", |
- errors.get(1).getMessage()); |
- } |
- |
- /** |
- * Multiple unnamed constructor definitions. |
- */ |
- public void test_nameShadow_unnamedConstructors() { |
- checkSourceErrors( |
- makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "class A {", |
- " A(x) {}", |
- " A(x,y) {}", |
- "}"), |
- errEx(ResolverErrorCode.DUPLICATE_MEMBER, 3, 3, 1), |
- errEx(ResolverErrorCode.DUPLICATE_MEMBER, 4, 3, 1)); |
- { |
- String message = errors.get(0).getMessage(); |
- assertTrue(message, message.contains("'A'")); |
- } |
- { |
- String message = errors.get(1).getMessage(); |
- assertTrue(message, message.contains("'A'")); |
- } |
- } |
- |
- /** |
- * Multiple unnamed constructor definitions. Make sure modifiers works as expected. |
- */ |
- public void test_nameShadow_unnamedConstructors_constModifier() { |
- checkSourceErrors( |
- makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "class A {", |
- " A(x) {}", |
- " const A(x,y) {}", |
- "}"), |
- errEx(ResolverErrorCode.DUPLICATE_MEMBER, 3, 3, 1), |
- errEx(ResolverErrorCode.DUPLICATE_MEMBER, 4, 9, 1), |
- errEx(ResolverErrorCode.CONST_CONSTRUCTOR_CANNOT_HAVE_BODY, 4, 9, 1)); |
- { |
- String message = errors.get(0).getMessage(); |
- assertTrue(message, message.contains("'A'")); |
- } |
- } |
- |
- /** |
- * Named constructor shadows another named constructor. |
- */ |
- public void test_nameShadow_namedConstructors() { |
- checkSourceErrors( |
- makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "class A {", |
- " A.foo() {}", |
- " A.foo() {}", |
- "}"), |
- errEx(ResolverErrorCode.DUPLICATE_MEMBER, 3, 3, 5), |
- errEx(ResolverErrorCode.DUPLICATE_MEMBER, 4, 3, 5)); |
- { |
- String message = errors.get(0).getMessage(); |
- assertTrue(message, message.contains("'A.foo'")); |
- } |
- { |
- String message = errors.get(1).getMessage(); |
- assertTrue(message, message.contains("'A.foo'")); |
- } |
- } |
- |
- /** |
- * Method shadows another method. |
- */ |
- public void test_nameShadow_methods() { |
- checkSourceErrors( |
- makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "class A {", |
- " foo() {}", |
- " foo() {}", |
- "}"), |
- errEx(ResolverErrorCode.DUPLICATE_MEMBER, 3, 3, 3), |
- errEx(ResolverErrorCode.DUPLICATE_MEMBER, 4, 3, 3)); |
- } |
- |
- /** |
- * Field shadows method. |
- */ |
- public void test_nameShadow_method_field() { |
- checkSourceErrors( |
- makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "class A {", |
- " foo() {}", |
- " var foo;", |
- "}"), |
- errEx(ResolverErrorCode.DUPLICATE_MEMBER, 4, 7, 3), |
- errEx(ResolverErrorCode.DUPLICATE_MEMBER, 3, 3, 3)); |
- } |
- |
- /** |
- * Static method shadows instance method. |
- */ |
- public void test_nameShadow_method_staticMethod() { |
- checkSourceErrors( |
- makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "class A {", |
- " foo(x) {}", |
- " static foo(a,b) {}", |
- "}"), |
- errEx(ResolverErrorCode.DUPLICATE_MEMBER, 3, 3, 3), |
- errEx(ResolverErrorCode.DUPLICATE_MEMBER, 4, 10, 3)); |
- } |
- |
- /** |
- * Field shadows another field. |
- */ |
- public void test_nameShadow_fields() { |
- checkSourceErrors( |
- makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "class A {", |
- " var _a;", |
- " var _a = 2;", |
- "}"), |
- errEx(ResolverErrorCode.DUPLICATE_MEMBER, 3, 7, 2), |
- errEx(ResolverErrorCode.DUPLICATE_MEMBER, 4, 7, 2)); |
- } |
- |
- public void test_nameShadow_variables_sameBlock() { |
- checkSourceErrors( |
- makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "class A {", |
- " foo() {", |
- " var a;", |
- " var a = 2;", |
- " }", |
- "}"), |
- errEx(ResolverErrorCode.DUPLICATE_LOCAL_VARIABLE_ERROR, 5, 9, 1)); |
- } |
- |
- /** |
- * Here we have two local variables: one in "main" and one in the scope on "block". However |
- * variables are declared in lexical scopes, i.e. in "block", so using it before declaration is |
- * error. |
- * <p> |
- * http://code.google.com/p/dart/issues/detail?id=2382 |
- */ |
- public void test_useVariable_beforeDeclaration_inLexicalScope() throws Exception { |
- checkSourceErrors( |
- makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "main() {", |
- " var x;", |
- " {", |
- " x = 1;", |
- " var x;", |
- " }", |
- "}", |
- ""), |
- errEx(ResolverErrorCode.USING_LOCAL_VARIABLE_BEFORE_DECLARATION, 5, 5, 1)); |
- } |
- |
- public void test_nameShadow_methodParameters() { |
- checkSourceErrors( |
- makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "class A {", |
- " foo(a, bb, a) {", |
- " }", |
- "}"), |
- errEx(ResolverErrorCode.DUPLICATE_PARAMETER, 3, 14, 1)); |
- } |
- |
- /** |
- * In static method instance fields are out of scope, so it is OK to have parameter with same |
- * name. |
- */ |
- public void test_nameShadow_instanceField_staticMethodParameter() { |
- checkSourceErrors(makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "class A {", |
- " var a;", |
- " static foo(a) {", |
- " }", |
- "}")); |
- } |
- |
- public void test_nameShadow_field_methodParameterThis() { |
- checkSourceErrors(makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "class A {", |
- " final a;", |
- " const A(this.a);", |
- "}")); |
- } |
- |
- public void test_nameShadow_field_interfaceMethodParameter() { |
- checkSourceErrors(makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "abstract class A {", |
- " var a;", |
- " foo(a);", |
- "}")); |
- } |
- |
- public void test_nameShadow_field_nativeMethodParameter() { |
- checkSourceErrorsAsSystemLibrary(makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "class A {", |
- " var a;", |
- " foo(a) native;", |
- "}")); |
- } |
- |
- public void test_nameShadow_classTypeVariables() { |
- checkSourceErrors( |
- makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "class C<A, BB, A> {", |
- "}"), |
- errEx(ResolverErrorCode.DUPLICATE_TYPE_VARIABLE, 2, 16, 1)); |
- } |
- |
- /** |
- * Field shadows setter/getter. |
- */ |
- public void test_nameShadow_setter_field() { |
- checkSourceErrors( |
- makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "class A {", |
- " set foo(x) {}", |
- " get foo {}", |
- " var foo;", |
- "}"), |
- errEx(ResolverErrorCode.DUPLICATE_MEMBER, 4, 7, 3), |
- errEx(ResolverErrorCode.DUPLICATE_MEMBER, 5, 7, 3)); |
- } |
- |
- /** |
- * Setter shadows field. |
- */ |
- public void test_nameShadow_field_setter() { |
- checkSourceErrors( |
- makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "class A {", |
- " var foo;", |
- " set foo(x) {}", |
- "}"), |
- errEx(ResolverErrorCode.DUPLICATE_MEMBER, 3, 7, 3), |
- errEx(ResolverErrorCode.DUPLICATE_MEMBER, 4, 7, 3)); |
- } |
- |
- /** |
- * Method does not shadow setter, because "=" is implicitly appended to the setter name. |
- */ |
- public void test_nameShadow_setter_method() { |
- checkSourceErrors( |
- makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "class A {", |
- " set foo(x) {}", |
- " foo() {}", |
- "}")); |
- } |
- |
- /** |
- * We should ignore if setter parameter has same name and name of the setter method. |
- */ |
- public void test_nameShadow_setter_sameParameterName() { |
- checkSourceErrors( |
- makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "class A {", |
- " set foo(foo) {}", |
- "}")); |
- } |
- |
- /** |
- * Getter shadows field. |
- */ |
- public void test_nameShadow_field_getter() { |
- checkSourceErrors( |
- makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "class A {", |
- " var foo;", |
- " get foo {}", |
- "}"), |
- errEx(ResolverErrorCode.DUPLICATE_MEMBER, 3, 7, 3), |
- errEx(ResolverErrorCode.DUPLICATE_MEMBER, 4, 7, 3)); |
- } |
- |
- /** |
- * Getter shadows another getter. |
- */ |
- public void test_nameShadow_getters() { |
- checkSourceErrors( |
- makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "class A {", |
- " get foo {}", |
- " set foo(x) {}", |
- " get foo {}", |
- "}"), |
- errEx(ResolverErrorCode.DUPLICATE_MEMBER, 3, 7, 3), |
- errEx(ResolverErrorCode.DUPLICATE_MEMBER, 5, 7, 3)); |
- } |
- |
- /** |
- * Setter shadows another setter. |
- */ |
- public void test_nameShadow_setters() { |
- checkSourceErrors( |
- makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "class A {", |
- " set foo(x) {}", |
- " get foo {}", |
- " set foo(x) {}", |
- "}"), |
- errEx(ResolverErrorCode.DUPLICATE_MEMBER, 3, 7, 3), |
- errEx(ResolverErrorCode.DUPLICATE_MEMBER, 5, 7, 3)); |
- } |
- |
- /** |
- * Field shadows getter. |
- */ |
- public void test_nameShadow_getter_field() { |
- checkSourceErrors( |
- makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "class A {", |
- " get foo {}", |
- " var foo;", |
- "}"), |
- errEx(ResolverErrorCode.DUPLICATE_MEMBER, 3, 7, 3), |
- errEx(ResolverErrorCode.DUPLICATE_MEMBER, 4, 7, 3)); |
- } |
- |
- /** |
- * Setter does not shadow method, because "=" is implicitly appended to the setter name. |
- */ |
- public void test_nameShadow_method_setter() { |
- checkSourceErrors( |
- makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "class A {", |
- " foo() {}", |
- " set foo(x) {}", |
- "}")); |
- } |
- |
- public void test_nameShadow_functionExpressionParameters() { |
- checkSourceErrors( |
- makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "class A {", |
- " foo() {", |
- " fn(a, b, a) {};", |
- " }", |
- "}"), |
- errEx(ResolverErrorCode.DUPLICATE_PARAMETER, 4, 14, 1)); |
- } |
- |
- public void test_nameShadow_variable_functionExpressionNamed() { |
- checkSourceErrors( |
- makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "class A {", |
- " foo() {", |
- " var a;", |
- " a() => 0;", |
- " }", |
- "}"), |
- errEx(ResolverErrorCode.DUPLICATE_FUNCTION_EXPRESSION, 5, 5, 1)); |
- { |
- String message = errors.get(0).getMessage(); |
- assertEquals("Duplicate function expression 'a'", message); |
- } |
- } |
- |
- public void testUnresolvedSuperFieldNegativeTest() { |
- checkNumErrors("UnresolvedSuperFieldNegativeTest.dart", 1); |
- } |
- |
- public void testStaticSuperFieldNegativeTest() { |
- checkNumErrors("StaticSuperFieldNegativeTest.dart", 1); |
- } |
- |
- public void testStaticSuperGetterNegativeTest() { |
- checkNumErrors("StaticSuperGetterNegativeTest.dart", 1); |
- } |
- |
- public void testStaticSuperMethodNegativeTest() { |
- checkNumErrors("StaticSuperMethodNegativeTest.dart", 1); |
- } |
- |
- public void testCyclicRedirectedConstructorNegativeTest() { |
- checkNumErrors("CyclicRedirectedConstructorNegativeTest.dart", 3); |
- } |
- |
- public void testConstRedirectedConstructorNegativeTest() { |
- checkSourceErrors( |
- makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "class A {", |
- " const A(x) : this.foo(x);", |
- " A.foo(this.x) { }", |
- " final x;", |
- "}"), |
- errEx(ResolverErrorCode.CONST_CONSTRUCTOR_MUST_CALL_CONST_SUPER, 3, 9, 1)); |
- } |
- |
- public void testConstConstructorNonFinalFieldsNegativeTest() { |
- checkSourceErrors( |
- makeCode( |
- "class A extends B {", |
- " const A();", |
- " var x;", |
- " final y = 10;", |
- " set z(value) {}", |
- "}", |
- "class B implements C {", |
- " final bar;", |
- " var baz;", |
- "}", |
- "abstract class C {", |
- " var x;", |
- "}"), |
- errEx(ResolverErrorCode.CONST_CLASS_WITH_NONFINAL_FIELDS, 3, 7, 1), |
- errEx(ResolverErrorCode.CONST_CLASS_WITH_INHERITED_NONFINAL_FIELDS, 9, 7, 3), |
- errEx(ResolverErrorCode.FINAL_FIELD_MUST_BE_INITIALIZED, 8, 9, 3)); |
- } |
- |
- private TestCompilerContext getContext() { |
- return new TestCompilerContext() { |
- @Override |
- public void onError(DartCompilationError event) { |
- errors.add(event); |
- } |
- }; |
- } |
- |
- public void test_blackListed_dynamic() throws Exception { |
- checkSourceErrors( |
- makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "class A extends dynamic {", |
- "}", |
- "class B implements dynamic {", |
- "}"), |
- errEx(ResolverErrorCode.BLACK_LISTED_EXTENDS, 2, 17, 7), |
- errEx(ResolverErrorCode.BLACK_LISTED_IMPLEMENTS, 4, 20, 7)); |
- assertEquals("'dynamic' can not be used as superclass", errors.get(0).getMessage()); |
- assertEquals("'dynamic' can not be used as superinterface", errors.get(1).getMessage()); |
- } |
- |
- public void test_blackListed_Function() throws Exception { |
- checkSourceErrors( |
- makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "class A extends Function {", |
- "}", |
- "class B implements Function {", |
- "}"), |
- errEx(ResolverErrorCode.BLACK_LISTED_EXTENDS, 2, 17, 8), |
- errEx(ResolverErrorCode.BLACK_LISTED_IMPLEMENTS, 4, 20, 8)); |
- } |
- |
- public void test_blackListed_bool() throws Exception { |
- checkSourceErrors( |
- makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "class A extends bool {", |
- "}", |
- "class B implements bool {", |
- "}"), |
- errEx(ResolverErrorCode.BLACK_LISTED_EXTENDS, 2, 17, 4), |
- errEx(ResolverErrorCode.BLACK_LISTED_IMPLEMENTS, 4, 20, 4)); |
- assertEquals("'bool' can not be used as superclass", errors.get(0).getMessage()); |
- assertEquals("'bool' can not be used as superinterface", errors.get(1).getMessage()); |
- } |
- |
- public void test_blackListed_int() throws Exception { |
- checkSourceErrors( |
- makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "class A extends int {", |
- "}", |
- "class B implements int {", |
- "}"), |
- errEx(ResolverErrorCode.BLACK_LISTED_EXTENDS, 2, 17, 3), |
- errEx(ResolverErrorCode.BLACK_LISTED_IMPLEMENTS, 4, 20, 3)); |
- } |
- |
- public void test_blackListed_double() throws Exception { |
- checkSourceErrors( |
- makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "class A extends double {", |
- "}", |
- "class B implements double {", |
- "}"), |
- errEx(ResolverErrorCode.BLACK_LISTED_EXTENDS, 2, 17, 6), |
- errEx(ResolverErrorCode.BLACK_LISTED_IMPLEMENTS, 4, 20, 6)); |
- } |
- |
- public void test_blackListed_num() throws Exception { |
- checkSourceErrors( |
- makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "class A extends num {", |
- "}", |
- "class B implements num {", |
- "}"), |
- errEx(ResolverErrorCode.BLACK_LISTED_EXTENDS, 2, 17, 3), |
- errEx(ResolverErrorCode.BLACK_LISTED_IMPLEMENTS, 4, 20, 3)); |
- } |
- |
- public void test_blackListed_String() throws Exception { |
- checkSourceErrors( |
- makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "class A extends String {", |
- "}", |
- "class B implements String {", |
- "}"), |
- errEx(ResolverErrorCode.BLACK_LISTED_EXTENDS, 2, 17, 6), |
- errEx(ResolverErrorCode.BLACK_LISTED_IMPLEMENTS, 4, 20, 6)); |
- } |
- |
- public void test_noSuchType_classImplements() throws Exception { |
- checkSourceErrors( |
- makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "class MyClass implements Unknown {", |
- "}"), |
- errEx(ResolverErrorCode.NO_SUCH_TYPE, 2, 26, 7)); |
- } |
- |
- public void test_noSuchType_classImplementsTypeVariable() throws Exception { |
- checkSourceErrors( |
- makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "class MyClass<E> implements E {", |
- "}"), |
- errEx(ResolverErrorCode.NOT_A_CLASS_OR_INTERFACE, 2, 29, 1)); |
- } |
- |
- public void test_explicitDynamicTypeArgument() throws Exception { |
- checkSourceErrors(makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "class MyClass implements Map<Object, dynamic> {", |
- "}")); |
- } |
- |
- public void testAssignToFunc() { |
- checkSourceErrors( |
- makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "double func(a) {}", |
- "main() {", |
- " func = null;", |
- "}"), |
- errEx(ResolverErrorCode.CANNOT_ASSIGN_TO_METHOD, 4, 3, 4)); |
- } |
- |
- public void testConstructorDuplicateInitializationTest() { |
- checkSourceErrors( |
- makeCode( |
- "class A {", |
- " A.one(this.x) : this.x = 42;", |
- " A.two(y) : this.x = y, x = y;", |
- " var x;", |
- "}"), |
- errEx(ResolverErrorCode.DUPLICATE_INITIALIZATION, 2, 19, 11), |
- errEx(ResolverErrorCode.DUPLICATE_INITIALIZATION, 3, 26, 5)); |
- } |
- |
- public void testInitializerReferenceToThis() throws Exception { |
- checkSourceErrors( |
- makeCode( |
- "class A {", |
- " var x, y;", |
- " A.one(z) : x = z, y = this.x;", |
- " A.two(this.x) : y = (() { return this; });", |
- " A.three(this.x) : y = this.x;", |
- "}"), |
- errEx(ResolverErrorCode.THIS_IN_INITIALIZER_AS_EXPRESSION, 3, 25, 4), |
- errEx(ResolverErrorCode.THIS_IN_INITIALIZER_AS_EXPRESSION, 4, 36, 4), |
- errEx(ResolverErrorCode.THIS_IN_INITIALIZER_AS_EXPRESSION, 5, 25, 4)); |
- } |
- |
- public void test_resolvedTypeVariableBounds_inFunctionTypeAlias() throws Exception { |
- DartUnit unit = |
- parseUnit( |
- getName(), |
- makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "class A {}", |
- "typedef T Foo<T extends A>();", |
- "")); |
- resolve(unit); |
- DartFunctionTypeAlias func = (DartFunctionTypeAlias) unit.getTopLevelNodes().get(1); |
- DartTypeParameter typeParameter = func.getTypeParameters().get(0); |
- Type boundType = typeParameter.getBound().getType(); |
- assertEquals("A", boundType.getElement().getName()); |
- } |
- |
- /** |
- * <p> |
- * http://code.google.com/p/dart/issues/detail?id=3986 |
- */ |
- public void test_memberWithNameOfClass() throws Exception { |
- checkSourceErrors( |
- makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "class A {", |
- " A() {}", |
- "}", |
- "class B {", |
- " var B;", |
- "}", |
- "class C {", |
- " void C() {}", |
- "}", |
- ""), |
- errEx(ResolverErrorCode.MEMBER_WITH_NAME_OF_CLASS, 6, 7, 1), |
- errEx(ResolverErrorCode.CONSTRUCTOR_CANNOT_HAVE_RETURN_TYPE, 9, 3, 4)); |
- } |
- |
- public void test_methodCannotBeResolved() throws Exception { |
- checkSourceErrors( |
- makeCode( |
- "class A {", |
- "}", |
- "method() {", |
- " A.method();", // error |
- "}"), |
- errEx(ResolverErrorCode.CANNOT_RESOLVE_METHOD_IN_CLASS, 4, 5, 6)); |
- } |
- |
- /** |
- * <p> |
- * http://code.google.com/p/dart/issues/detail?id=4090 |
- */ |
- public void test_forEachVariableIsNotVisibleInIterableExpression() throws Exception { |
- checkSourceErrors( |
- makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "List foo(var a) {}", |
- "main() {", |
- " for (var y in foo(y)) {", |
- " }", |
- "}"), |
- errEx(TypeErrorCode.CANNOT_BE_RESOLVED, 4, 21, 1)); |
- } |
- |
- /** |
- * <p> |
- * http://code.google.com/p/dart/issues/detail?id=4374 |
- */ |
- public void test_unaryOperatorForFinal_variable() throws Exception { |
- checkSourceErrors( |
- makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "main() {", |
- " final v = 0;", |
- " v++;", |
- " v--;", |
- " ++v;", |
- " --v;", |
- "}"), |
- errEx(ResolverErrorCode.CANNOT_ASSIGN_TO_FINAL, 4, 3, 1), |
- errEx(ResolverErrorCode.CANNOT_ASSIGN_TO_FINAL, 5, 3, 1), |
- errEx(ResolverErrorCode.CANNOT_ASSIGN_TO_FINAL, 6, 5, 1), |
- errEx(ResolverErrorCode.CANNOT_ASSIGN_TO_FINAL, 7, 5, 1)); |
- } |
- |
- /** |
- * <p> |
- * http://code.google.com/p/dart/issues/detail?id=4374 |
- */ |
- public void test_unaryOperatorForFinal_parameter() throws Exception { |
- checkSourceErrors( |
- makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "foo(final v) {", |
- " v++;", |
- " v--;", |
- " ++v;", |
- " --v;", |
- "}"), |
- errEx(ResolverErrorCode.CANNOT_ASSIGN_TO_FINAL, 3, 3, 1), |
- errEx(ResolverErrorCode.CANNOT_ASSIGN_TO_FINAL, 4, 3, 1), |
- errEx(ResolverErrorCode.CANNOT_ASSIGN_TO_FINAL, 5, 5, 1), |
- errEx(ResolverErrorCode.CANNOT_ASSIGN_TO_FINAL, 6, 5, 1)); |
- } |
- |
- /** |
- * <p> |
- * http://code.google.com/p/dart/issues/detail?id=4374 |
- */ |
- public void test_unaryOperatorForFinal_field() throws Exception { |
- checkSourceErrors( |
- makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "class A {", |
- " final v = 0;", |
- " foo() {", |
- " v++;", |
- " v--;", |
- " ++v;", |
- " --v;", |
- " }", |
- "}"), |
- errEx(ResolverErrorCode.CANNOT_ASSIGN_TO_FINAL, 5, 5, 1), |
- errEx(ResolverErrorCode.CANNOT_ASSIGN_TO_FINAL, 6, 5, 1), |
- errEx(ResolverErrorCode.CANNOT_ASSIGN_TO_FINAL, 7, 7, 1), |
- errEx(ResolverErrorCode.CANNOT_ASSIGN_TO_FINAL, 8, 7, 1)); |
- } |
- |
- /** |
- * <p> |
- * http://code.google.com/p/dart/issues/detail?id=5987 |
- */ |
- public void test_accessConstInstanceField_fromConstStaticField() throws Exception { |
- checkSourceErrors( |
- makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "class A {", |
- " const x = 499;", |
- " static const bar = x;", |
- "}", |
- ""), |
- errEx(ResolverErrorCode.ILLEGAL_FIELD_ACCESS_FROM_STATIC, 4, 22, 1)); |
- } |
- |
- /** |
- * <p> |
- * http://code.google.com/p/dart/issues/detail?id=6489 |
- */ |
- public void test_accessConstInstanceField_fromConstStaticMethod() throws Exception { |
- checkSourceErrors( |
- makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "class A {", |
- " const CONST = 26;", |
- " static int foo() {", |
- " return CONST;", |
- " }", |
- "}", |
- ""), |
- errEx(ResolverErrorCode.ILLEGAL_FIELD_ACCESS_FROM_STATIC, 5, 12, 5)); |
- } |
- |
- /** |
- * <p> |
- * http://code.google.com/p/dart/issues/detail?id=7633 |
- */ |
- public void test_accessInstanceField_fromConstFactory() throws Exception { |
- checkSourceErrors( |
- makeCode( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "class A {", |
- " var foo;", |
- " factory A() {", |
- " var v = foo;", |
- " return null;", |
- " }", |
- "}", |
- ""), |
- errEx(ResolverErrorCode.ILLEGAL_FIELD_ACCESS_FROM_FACTORY, 5, 13, 3)); |
- } |
-} |