Index: dart/compiler/javatests/com/google/dart/compiler/resolver/ResolverCompilerTest.java |
diff --git a/dart/compiler/javatests/com/google/dart/compiler/resolver/ResolverCompilerTest.java b/dart/compiler/javatests/com/google/dart/compiler/resolver/ResolverCompilerTest.java |
deleted file mode 100644 |
index b60d8b454ec4a7ef7c6089fcd62b5208fe5bf772..0000000000000000000000000000000000000000 |
--- a/dart/compiler/javatests/com/google/dart/compiler/resolver/ResolverCompilerTest.java |
+++ /dev/null |
@@ -1,400 +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.common.collect.Lists; |
-import com.google.common.io.CharStreams; |
-import com.google.dart.compiler.CompilerTestCase; |
-import com.google.dart.compiler.Source; |
-import com.google.dart.compiler.ast.ASTVisitor; |
-import com.google.dart.compiler.ast.DartClass; |
-import com.google.dart.compiler.ast.DartDeclaration; |
-import com.google.dart.compiler.ast.DartExprStmt; |
-import com.google.dart.compiler.ast.DartExpression; |
-import com.google.dart.compiler.ast.DartField; |
-import com.google.dart.compiler.ast.DartFieldDefinition; |
-import com.google.dart.compiler.ast.DartFunctionExpression; |
-import com.google.dart.compiler.ast.DartFunctionTypeAlias; |
-import com.google.dart.compiler.ast.DartIdentifier; |
-import com.google.dart.compiler.ast.DartLabel; |
-import com.google.dart.compiler.ast.DartMethodDefinition; |
-import com.google.dart.compiler.ast.DartNewExpression; |
-import com.google.dart.compiler.ast.DartNode; |
-import com.google.dart.compiler.ast.DartParameter; |
-import com.google.dart.compiler.ast.DartStatement; |
-import com.google.dart.compiler.ast.DartTypeNode; |
-import com.google.dart.compiler.ast.DartTypeParameter; |
-import com.google.dart.compiler.ast.DartUnit; |
-import com.google.dart.compiler.ast.DartVariableStatement; |
-import com.google.dart.compiler.common.SourceInfo; |
-import com.google.dart.compiler.type.FunctionAliasType; |
-import com.google.dart.compiler.type.Type; |
-import com.google.dart.compiler.type.TypeVariable; |
- |
-import static com.google.dart.compiler.common.ErrorExpectation.assertErrors; |
-import static com.google.dart.compiler.common.ErrorExpectation.errEx; |
- |
-import java.io.Reader; |
-import java.util.LinkedList; |
-import java.util.List; |
- |
-/** |
- * Variant of {@link ResolverTest}, which is based on {@link CompilerTestCase}. It is probably |
- * slower, not actually unit test, but easier to use if you need access to DartNode's. |
- */ |
-public class ResolverCompilerTest extends CompilerTestCase { |
- |
- public void test_parameters_withFunctionAlias() throws Exception { |
- AnalyzeLibraryResult libraryResult = analyzeLibrary( |
- "typedef List<T> TypeAlias<T, U extends List<T>>(List<T> arg, U u);"); |
- assertErrors(libraryResult.getCompilationErrors()); |
- DartUnit unit = libraryResult.getLibraryUnitResult().getUnits().iterator().next(); |
- DartFunctionTypeAlias typeAlias = findTypedef(unit, "TypeAlias"); |
- assertNotNull(typeAlias); |
- FunctionAliasElement element = typeAlias.getElement(); |
- FunctionAliasType ftype = element.getType(); |
- Type returnType = ftype.getElement().getFunctionType().getReturnType(); |
- assertEquals("List<TypeAlias.T>", returnType.toString()); |
- List<? extends Type> arguments = ftype.getArguments(); |
- assertEquals(2, arguments.size()); |
- TypeVariable arg0 = (TypeVariable) arguments.get(0); |
- assertEquals("T", arg0.getTypeVariableElement().getName()); |
- Type bound0 = arg0.getTypeVariableElement().getBound(); |
- assertEquals("Object", bound0.toString()); |
- TypeVariable arg1 = (TypeVariable) arguments.get(1); |
- assertEquals("U", arg1.getTypeVariableElement().getName()); |
- Type bound1 = arg1.getTypeVariableElement().getBound(); |
- assertEquals("List<TypeAlias.T>", bound1.toString()); |
- } |
- |
- /** |
- * This test succeeds if no exceptions are thrown. |
- */ |
- public void test_recursiveTypes() throws Exception { |
- analyzeLibrary( |
- "class A extends A implements A {}", |
- "class B extends C {}", |
- "class C extends B {}"); |
- } |
- |
- /** |
- * This test checks the class declarations to make sure that elements are set for all identifiers. |
- * This is useful to the editor and other consumers of the AST. |
- */ |
- public void test_resolution_on_class_decls() throws Exception { |
- AnalyzeLibraryResult libraryResult = analyzeLibrary( |
- "class A {}", |
- "abstract class B<T> {}", |
- "class C<T> extends A implements B<T> {}", |
- "class D extends C<int> {}", |
- "class E implements C<int> {}", |
- "class F<T extends A> {}", |
- "class G extends F<C<int>> {}"); |
- assertErrors(libraryResult.getCompilationErrors()); |
- DartUnit unit = libraryResult.getLibraryUnitResult().getUnits().iterator().next(); |
- List<DartNode> nodes = unit.getTopLevelNodes(); |
- DartClass A = (DartClass) nodes.get(0); |
- assertEquals("A", A.getClassName()); |
- DartClass B = (DartClass) nodes.get(1); |
- assertEquals("B", B.getClassName()); |
- DartClass C = (DartClass) nodes.get(2); |
- assertEquals("C", C.getClassName()); |
- DartClass D = (DartClass) nodes.get(3); |
- assertEquals("D", D.getClassName()); |
- DartClass E = (DartClass) nodes.get(4); |
- assertEquals("E", E.getClassName()); |
- DartClass F = (DartClass) nodes.get(5); |
- assertEquals("F", F.getClassName()); |
- DartClass G = (DartClass) nodes.get(6); |
- assertEquals("G", G.getClassName()); |
- |
- // class A |
- assertNotNull(A.getName().getElement()); |
- assertSame(A.getElement(), A.getName().getElement()); |
- |
- // interface B<T> default C |
- assertNotNull(B.getName().getElement()); |
- assertSame(B.getName().getElement(), B.getElement()); |
- assertEquals(1, B.getTypeParameters().size()); |
- DartTypeParameter T; |
- T = B.getTypeParameters().get(0); |
- assertNotNull(T); |
- assertNotNull(T.getName().getElement()); |
- assertTrue(T.getName().getElement() instanceof TypeVariableElement); |
- assertEquals("T", T.getName().getName()); |
- |
- // class C<T> extends A implements B<T> {} |
- assertNotNull(C.getName().getElement()); |
- assertSame(C.getElement(), C.getName().getElement()); |
- assertEquals(1, C.getTypeParameters().size()); |
- T = C.getTypeParameters().get(0); |
- assertNotNull(T); |
- assertNotNull(T.getName().getElement()); |
- assertTrue(T.getName().getElement() instanceof TypeVariableElement); |
- assertEquals("T", T.getName().getName()); |
- assertSame(A.getElement(), C.getSuperclass().getIdentifier().getElement()); |
- assertEquals(1, C.getInterfaces().size()); |
- DartTypeNode iface = C.getInterfaces().get(0); |
- assertNotNull(iface); |
- assertSame(B.getElement(), iface.getIdentifier().getElement()); |
- assertSame( |
- T.getName().getElement(), |
- iface.getTypeArguments().get(0).getIdentifier().getElement()); |
- |
- // class D extends C<int> {} |
- assertNotNull(D.getName().getElement()); |
- assertSame(D.getElement(), D.getName().getElement()); |
- assertEquals(0, D.getTypeParameters().size()); |
- assertSame(C.getElement(), D.getSuperclass().getIdentifier().getElement()); |
- DartTypeNode typeArg; |
- typeArg = D.getSuperclass().getTypeArguments().get(0); |
- assertNotNull(typeArg.getIdentifier()); |
- assertEquals("int", typeArg.getIdentifier().getElement().getOriginalName()); |
- |
- // class E implements C<int> {} |
- assertNotNull(E.getName().getElement()); |
- assertSame(E.getElement(), E.getName().getElement()); |
- assertEquals(0, E.getTypeParameters().size()); |
- assertSame(C.getElement(), E.getInterfaces().get(0).getIdentifier().getElement()); |
- typeArg = E.getInterfaces().get(0).getTypeArguments().get(0); |
- assertNotNull(typeArg.getIdentifier()); |
- assertEquals("int", typeArg.getIdentifier().getElement().getOriginalName()); |
- |
- // class F<T extends A> {}", |
- assertNotNull(F.getName().getElement()); |
- assertSame(F.getElement(), F.getName().getElement()); |
- assertEquals(1, F.getTypeParameters().size()); |
- T = F.getTypeParameters().get(0); |
- assertNotNull(T); |
- assertNotNull(T.getName().getElement()); |
- assertTrue(T.getName().getElement() instanceof TypeVariableElement); |
- assertEquals("T", T.getName().getName()); |
- assertSame(A.getElement(), T.getBound().getIdentifier().getElement()); |
- |
- // class G extends F<C<int>> {} |
- assertNotNull(G.getName().getElement()); |
- assertSame(G.getElement(), G.getName().getElement()); |
- assertEquals(0, G.getTypeParameters().size()); |
- assertNotNull(G.getSuperclass()); |
- assertSame(F.getElement(), G.getSuperclass().getIdentifier().getElement()); |
- typeArg = G.getSuperclass().getTypeArguments().get(0); |
- assertSame(C.getElement(), typeArg.getIdentifier().getElement()); |
- assertEquals( |
- "int", |
- typeArg.getTypeArguments().get(0).getIdentifier().getElement().getOriginalName()); |
- } |
- |
- /** |
- * We should be able to resolve implicit default constructor. |
- */ |
- public void test_resolveConstructor_implicit() throws Exception { |
- AnalyzeLibraryResult libraryResult = analyzeLibrary( |
- "class F {", |
- "}", |
- "class Test {", |
- " foo() {", |
- " new F();", |
- " }", |
- "}"); |
- assertErrors(libraryResult.getCompilationErrors()); |
- DartUnit unit = libraryResult.getLibraryUnitResult().getUnits().iterator().next(); |
- DartNewExpression newExpression = findNodeBySource(unit, "new F()"); |
- ConstructorElement constructorElement = newExpression.getElement(); |
- assertNotNull(constructorElement); |
- assertEquals("", getElementSource(constructorElement)); |
- } |
- |
- public void test_resolveConstructor_noSuchConstructor() throws Exception { |
- AnalyzeLibraryResult libraryResult = analyzeLibrary( |
- "class A {", |
- "}", |
- "class Test {", |
- " foo() {", |
- " new A.foo();", |
- " }", |
- "}"); |
- assertErrors( |
- libraryResult.getErrors(), |
- errEx(TypeErrorCode.NEW_EXPRESSION_NOT_CONSTRUCTOR, 5, 11, 3)); |
- DartUnit unit = libraryResult.getLibraryUnitResult().getUnits().iterator().next(); |
- DartNewExpression newExpression = findNodeBySource(unit, "new A.foo()"); |
- ConstructorElement constructorElement = newExpression.getElement(); |
- assertNull(constructorElement); |
- } |
- |
- public void test_resolveConstructor_super_implicitDefault() throws Exception { |
- AnalyzeLibraryResult libraryResult = analyzeLibrary( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "class A {", |
- "}", |
- "class B extends A {", |
- " B() : super() {}", |
- "}", |
- ""); |
- assertErrors(libraryResult.getErrors()); |
- } |
- |
- public void test_superMethodInvocation_inConstructorInitializer() throws Exception { |
- AnalyzeLibraryResult libraryResult = analyzeLibrary( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "class A {", |
- " foo() {}", |
- "}", |
- "class B extends A {", |
- " var x;", |
- " B() : x = super.foo() {}", |
- "}", |
- ""); |
- assertErrors( |
- libraryResult.getErrors(), |
- errEx(ResolverErrorCode.SUPER_METHOD_INVOCATION_IN_CONSTRUCTOR_INITIALIZER, 7, 13, 11)); |
- } |
- |
- private static String getElementSource(Element element) throws Exception { |
- SourceInfo sourceInfo = element.getSourceInfo(); |
- // TODO(scheglov) When we will remove Source.getNode(), this null check may be removed |
- Source source = sourceInfo.getSource(); |
- if (source == null) { |
- return ""; |
- } |
- Reader reader = sourceInfo.getSource().getSourceReader(); |
- try { |
- String code = CharStreams.toString(reader); |
- int offset = sourceInfo.getOffset(); |
- return code.substring(offset, offset + sourceInfo.getLength()); |
- } finally { |
- reader.close(); |
- } |
- } |
- |
- /** |
- * Each name in {@link DartNode}, such as all names in {@link DartDeclaration}s should have same |
- * {@link Element} as the {@link Element} of enclosing {@link DartNode}. |
- */ |
- public void test_setElement_forName_inDeclarations() throws Exception { |
- AnalyzeLibraryResult libraryResult = analyzeLibrary( |
- "// filler filler filler filler filler filler filler filler filler filler", |
- "class A<B extends A> {", |
- " var a1;", |
- " get a2 {}", |
- " A() {}", |
- "}", |
- "var c;", |
- "d(e) {", |
- " var f;", |
- " g() {};", |
- " () {} ();", |
- " h: d(0);", |
- "}", |
- "typedef i();", |
- ""); |
- assertErrors(libraryResult.getErrors()); |
- DartUnit unit = libraryResult.getLibraryUnitResult().getUnits().iterator().next(); |
- // in class A |
- { |
- DartClass classA = (DartClass) unit.getTopLevelNodes().get(0); |
- assertDeclarationNameElement(classA, "A"); |
- { |
- DartTypeParameter typeParameter = classA.getTypeParameters().get(0); |
- assertDeclarationNameElement(typeParameter, "B"); |
- } |
- { |
- DartFieldDefinition fieldDef = (DartFieldDefinition) classA.getMembers().get(0); |
- assertDeclarationNameElement(fieldDef.getFields().get(0), "a1"); |
- } |
- { |
- DartFieldDefinition fieldDef = (DartFieldDefinition) classA.getMembers().get(1); |
- // since this is a getter, its actually a method element different from the original. |
- DartField f = fieldDef.getFields().get(0); |
- assertNotNull(f); |
- Element e = f.getElement(); |
- assertNotNull(e); |
- assertTrue(f.getName().getName().equals("a2")); |
- assertTrue(e.getName().equals("a2")); |
- } |
- { |
- DartMethodDefinition constructor = (DartMethodDefinition) classA.getMembers().get(2); |
- assertDeclarationNameElement(constructor, ""); |
- } |
- } |
- // top level "c" |
- { |
- DartFieldDefinition fieldDef = (DartFieldDefinition) unit.getTopLevelNodes().get(1); |
- assertDeclarationNameElement(fieldDef.getFields().get(0), "c"); |
- } |
- // top level "d" |
- { |
- DartMethodDefinition method = (DartMethodDefinition) unit.getTopLevelNodes().get(2); |
- assertDeclarationNameElement(method, "d"); |
- { |
- DartParameter parameter = method.getFunction().getParameters().get(0); |
- assertDeclarationNameElement(parameter, "e"); |
- } |
- { |
- List<DartStatement> statements = method.getFunction().getBody().getStatements(); |
- { |
- DartVariableStatement variableStatement = (DartVariableStatement) statements.get(0); |
- assertDeclarationNameElement(variableStatement.getVariables().get(0), "f"); |
- } |
- { |
- DartExprStmt statement = (DartExprStmt) statements.get(1); |
- DartFunctionExpression functionExpression = (DartFunctionExpression) statement.getExpression(); |
- assertNameHasSameElement(functionExpression, functionExpression.getName(), "g"); |
- } |
- { |
- DartLabel label = (DartLabel) statements.get(4); |
- assertNameHasSameElement(label, label.getLabel(), "h"); |
- } |
- } |
- } |
- // top level "i" |
- { |
- DartFunctionTypeAlias functionType = (DartFunctionTypeAlias) unit.getTopLevelNodes().get(3); |
- assertDeclarationNameElement(functionType, "i"); |
- } |
- // assert that all DartIdentifiers are visited |
- final LinkedList<String> visitedIdentifiers = Lists.newLinkedList(); |
- unit.accept(new ASTVisitor<Void>() { |
- @Override |
- public Void visitIdentifier(DartIdentifier node) { |
- visitedIdentifiers.addLast(node.getName()); |
- return null; |
- } |
- }); |
- assertEquals("A", visitedIdentifiers.removeFirst()); |
- assertEquals("B", visitedIdentifiers.removeFirst()); |
- assertEquals("A", visitedIdentifiers.removeFirst()); |
- assertEquals("a1", visitedIdentifiers.removeFirst()); |
- assertEquals("a2", visitedIdentifiers.removeFirst()); |
- assertEquals("a2", visitedIdentifiers.removeFirst()); |
- assertEquals("A", visitedIdentifiers.removeFirst()); |
- assertEquals("c", visitedIdentifiers.removeFirst()); |
- assertEquals("d", visitedIdentifiers.removeFirst()); |
- assertEquals("e", visitedIdentifiers.removeFirst()); |
- assertEquals("f", visitedIdentifiers.removeFirst()); |
- assertEquals("g", visitedIdentifiers.removeFirst()); |
- assertEquals("h", visitedIdentifiers.removeFirst()); |
- assertEquals("d", visitedIdentifiers.removeFirst()); |
- assertEquals("i", visitedIdentifiers.removeFirst()); |
- } |
- |
- /** |
- * Asserts that given nodes have same not <code>null</code> {@link Element}. |
- */ |
- private static void assertDeclarationNameElement( |
- DartDeclaration<? extends DartExpression> declaration, |
- String name) { |
- assertNameHasSameElement(declaration, declaration.getName(), name); |
- } |
- |
- /** |
- * Asserts that given nodes have same not <code>null</code> {@link Element}. |
- */ |
- private static void assertNameHasSameElement(DartNode node, DartExpression nameNode, String name) { |
- Element expectedElement = node.getElement(); |
- assertNotNull(expectedElement); |
- assertEquals(name, expectedElement.getName()); |
- assertSame(expectedElement, nameNode.getElement()); |
- } |
-} |