| Index: compiler/javatests/com/google/dart/compiler/resolver/ResolverCompilerTest.java
|
| diff --git a/compiler/javatests/com/google/dart/compiler/resolver/ResolverCompilerTest.java b/compiler/javatests/com/google/dart/compiler/resolver/ResolverCompilerTest.java
|
| index 6c073b5130d0080bcf0d76c08be8501dc620711c..e6599c7b4f529b0de16d1c303934fdf51a289750 100644
|
| --- a/compiler/javatests/com/google/dart/compiler/resolver/ResolverCompilerTest.java
|
| +++ b/compiler/javatests/com/google/dart/compiler/resolver/ResolverCompilerTest.java
|
| @@ -6,10 +6,8 @@ package com.google.dart.compiler.resolver;
|
| import com.google.common.base.Joiner;
|
| import com.google.dart.compiler.CompilerTestCase;
|
| import com.google.dart.compiler.DartCompilationError;
|
| -import com.google.dart.compiler.ast.DartInvocation;
|
| import com.google.dart.compiler.ast.DartNewExpression;
|
| import com.google.dart.compiler.ast.DartNode;
|
| -import com.google.dart.compiler.ast.DartNodeTraverser;
|
| import com.google.dart.compiler.ast.DartUnit;
|
|
|
| import java.util.List;
|
| @@ -20,24 +18,6 @@ import java.util.List;
|
| */
|
| public class ResolverCompilerTest extends CompilerTestCase {
|
| /**
|
| - * @return the {@link DartInvocation} with given source. This is inaccurate approach, but good
|
| - * enough for specific tests.
|
| - */
|
| - private static DartNewExpression findNewExpression(DartNode rootNode, final String sampleSource) {
|
| - final DartNewExpression result[] = new DartNewExpression[1];
|
| - rootNode.accept(new DartNodeTraverser<Void>() {
|
| - @Override
|
| - public Void visitNewExpression(DartNewExpression node) {
|
| - if (node.toSource().equals(sampleSource)) {
|
| - result[0] = node;
|
| - }
|
| - return super.visitInvocation(node);
|
| - }
|
| - });
|
| - return result[0];
|
| - }
|
| -
|
| - /**
|
| * We should be able to resolve implicit default constructor.
|
| */
|
| public void test_resolveConstructor_implicit() throws Exception {
|
| @@ -305,8 +285,10 @@ public class ResolverCompilerTest extends CompilerTestCase {
|
| List<DartCompilationError> errors = libraryResult.getCompilationErrors();
|
| assertErrors(
|
| errors,
|
| - errEx(ResolverErrorCode.NEW_EXPRESSION_FACTORY_CONSTRUCTOR, 10, 9, 1),
|
| - errEx(ResolverErrorCode.NEW_EXPRESSION_FACTORY_CONSTRUCTOR, 11, 9, 5));
|
| + errEx(ResolverErrorCode.FACTORY_CONSTRUCTOR_UNRESOLVED, 2, 3, 9),
|
| + errEx(ResolverErrorCode.FACTORY_CONSTRUCTOR_UNRESOLVED, 3, 3, 13),
|
| + errEx(ResolverErrorCode.FACTORY_CONSTRUCTOR_UNRESOLVED, 10, 9, 1),
|
| + errEx(ResolverErrorCode.FACTORY_CONSTRUCTOR_UNRESOLVED, 11, 9, 5));
|
| {
|
| String message = errors.get(0).getMessage();
|
| assertTrue(message, message.contains("'F'"));
|
| @@ -416,7 +398,10 @@ public class ResolverCompilerTest extends CompilerTestCase {
|
| // Check errors.
|
| {
|
| List<DartCompilationError> errors = libraryResult.getCompilationErrors();
|
| - assertErrors(errors, errEx(ResolverErrorCode.NEW_EXPRESSION_FACTORY_CONSTRUCTOR, 8, 9, 5));
|
| + assertErrors(
|
| + errors,
|
| + errEx(ResolverErrorCode.FACTORY_CONSTRUCTOR_UNRESOLVED, 2, 3, 13),
|
| + errEx(ResolverErrorCode.FACTORY_CONSTRUCTOR_UNRESOLVED, 8, 9, 5));
|
| {
|
| String message = errors.get(0).getMessage();
|
| assertTrue(message, message.contains("'I.foo'"));
|
| @@ -430,4 +415,139 @@ public class ResolverCompilerTest extends CompilerTestCase {
|
| assertEquals(null, newExpression.getSymbol());
|
| }
|
| }
|
| +
|
| + /**
|
| + * From specification 0.05, 11/14/2011.
|
| + * <p>
|
| + * It is a compile-time error if kI and kF do not have the same number of required parameters.
|
| + * <p>
|
| + * http://code.google.com/p/dart/issues/detail?id=521
|
| + */
|
| + public void test_resolveInterfaceConstructor_hasByName_negative_notSameNumberOfRequiredParameters()
|
| + throws Exception {
|
| + AnalyzeLibraryResult libraryResult =
|
| + analyzeLibrary(
|
| + "Test.dart",
|
| + Joiner.on("\n").join(
|
| + "interface I factory F {",
|
| + " I.foo(int x);",
|
| + "}",
|
| + "class F implements I {",
|
| + " factory F.foo() {}",
|
| + "}",
|
| + "class Test {",
|
| + " foo() {",
|
| + " new I.foo();",
|
| + " }",
|
| + "}"));
|
| + assertErrors(libraryResult.getTypeErrors());
|
| + // Check errors.
|
| + {
|
| + List<DartCompilationError> errors = libraryResult.getCompilationErrors();
|
| + assertErrors(
|
| + errors,
|
| + errEx(ResolverErrorCode.FACTORY_CONSTRUCTOR_NUMBER_OF_REQUIRED_PARAMETERS, 2, 3, 13));
|
| + {
|
| + String message = errors.get(0).getMessage();
|
| + assertTrue(message, message.contains("'F.foo'"));
|
| + assertTrue(message, message.contains("'F'"));
|
| + assertTrue(message, message.contains("0"));
|
| + assertTrue(message, message.contains("1"));
|
| + assertTrue(message, message.contains("'F.foo'"));
|
| + }
|
| + }
|
| + DartUnit unit = libraryResult.getLibraryUnitResult().getUnits().iterator().next();
|
| + // "new I.foo()" - resolved, but we produce error.
|
| + {
|
| + DartNewExpression newExpression = findNewExpression(unit, "new I.foo()");
|
| + DartNode constructorNode = newExpression.getSymbol().getNode();
|
| + assertEquals(true, constructorNode.toSource().contains("F.foo()"));
|
| + }
|
| + }
|
| +
|
| + /**
|
| + * From specification 0.05, 11/14/2011.
|
| + * <p>
|
| + * It is a compile-time error if kI and kF do not have identically named optional parameters,
|
| + * declared in the same order.
|
| + * <p>
|
| + * http://code.google.com/p/dart/issues/detail?id=521
|
| + */
|
| + public void test_resolveInterfaceConstructor_hasByName_negative_notSameNamedParameters()
|
| + throws Exception {
|
| + AnalyzeLibraryResult libraryResult =
|
| + analyzeLibrary(
|
| + "Test.dart",
|
| + Joiner.on("\n").join(
|
| + "interface I factory F {",
|
| + " I.foo(int a, [int b, int c]);",
|
| + " I.bar(int a, [int b, int c]);",
|
| + " I.baz(int a, [int b]);",
|
| + "}",
|
| + "class F implements I {",
|
| + " factory F.foo(int any, [int b = 1]) {}",
|
| + " factory F.bar(int any, [int c = 1, int b = 2]) {}",
|
| + " factory F.baz(int any, [int c = 1]) {}",
|
| + "}",
|
| + "class Test {",
|
| + " foo() {",
|
| + " new I.foo(0);",
|
| + " new I.bar(0);",
|
| + " new I.baz(0);",
|
| + " }",
|
| + "}"));
|
| + assertErrors(libraryResult.getTypeErrors());
|
| + // Check errors.
|
| + {
|
| + List<DartCompilationError> errors = libraryResult.getCompilationErrors();
|
| + assertErrors(
|
| + errors,
|
| + errEx(ResolverErrorCode.FACTORY_CONSTRUCTOR_NAMED_PARAMETERS, 2, 3, 29),
|
| + errEx(ResolverErrorCode.FACTORY_CONSTRUCTOR_NAMED_PARAMETERS, 3, 3, 29),
|
| + errEx(ResolverErrorCode.FACTORY_CONSTRUCTOR_NAMED_PARAMETERS, 4, 3, 22));
|
| + {
|
| + String message = errors.get(0).getMessage();
|
| + assertTrue(message, message.contains("'I.foo'"));
|
| + assertTrue(message, message.contains("'F'"));
|
| + assertTrue(message, message.contains("[b]"));
|
| + assertTrue(message, message.contains("[b, c]"));
|
| + assertTrue(message, message.contains("'F.foo'"));
|
| + }
|
| + {
|
| + String message = errors.get(1).getMessage();
|
| + assertTrue(message, message.contains("'I.bar'"));
|
| + assertTrue(message, message.contains("'F'"));
|
| + assertTrue(message, message.contains("[c, b]"));
|
| + assertTrue(message, message.contains("[b, c]"));
|
| + assertTrue(message, message.contains("'F.bar'"));
|
| + }
|
| + {
|
| + String message = errors.get(2).getMessage();
|
| + assertTrue(message, message.contains("'I.baz'"));
|
| + assertTrue(message, message.contains("'F'"));
|
| + assertTrue(message, message.contains("[b]"));
|
| + assertTrue(message, message.contains("[c]"));
|
| + assertTrue(message, message.contains("'F.baz'"));
|
| + }
|
| + }
|
| + DartUnit unit = libraryResult.getLibraryUnitResult().getUnits().iterator().next();
|
| + // "new I.foo()" - resolved, but we produce error.
|
| + {
|
| + DartNewExpression newExpression = findNewExpression(unit, "new I.foo(0)");
|
| + DartNode constructorNode = newExpression.getSymbol().getNode();
|
| + assertEquals(true, constructorNode.toSource().contains("F.foo("));
|
| + }
|
| + // "new I.bar()" - resolved, but we produce error.
|
| + {
|
| + DartNewExpression newExpression = findNewExpression(unit, "new I.bar(0)");
|
| + DartNode constructorNode = newExpression.getSymbol().getNode();
|
| + assertEquals(true, constructorNode.toSource().contains("F.bar("));
|
| + }
|
| + // "new I.baz()" - resolved, but we produce error.
|
| + {
|
| + DartNewExpression newExpression = findNewExpression(unit, "new I.baz(0)");
|
| + DartNode constructorNode = newExpression.getSymbol().getNode();
|
| + assertEquals(true, constructorNode.toSource().contains("F.baz("));
|
| + }
|
| + }
|
| }
|
|
|