Index: compiler/javatests/com/google/dart/compiler/CompilerTestCase.java |
diff --git a/compiler/javatests/com/google/dart/compiler/CompilerTestCase.java b/compiler/javatests/com/google/dart/compiler/CompilerTestCase.java |
index f78a6fbd684946b157e8705074184e5ce1acebb0..bd143952515bafa91410d2a3bbcf4d2d4afd07ee 100644 |
--- a/compiler/javatests/com/google/dart/compiler/CompilerTestCase.java |
+++ b/compiler/javatests/com/google/dart/compiler/CompilerTestCase.java |
@@ -13,6 +13,7 @@ import com.google.dart.compiler.CommandLineOptions.CompilerOptions; |
import com.google.dart.compiler.ast.ASTVisitor; |
import com.google.dart.compiler.ast.DartExpression; |
import com.google.dart.compiler.ast.DartFunctionTypeAlias; |
+import com.google.dart.compiler.ast.DartIdentifier; |
import com.google.dart.compiler.ast.DartNode; |
import com.google.dart.compiler.ast.DartUnit; |
import com.google.dart.compiler.ast.LibraryUnit; |
@@ -20,6 +21,9 @@ import com.google.dart.compiler.common.ErrorExpectation; |
import com.google.dart.compiler.common.SourceInfo; |
import com.google.dart.compiler.parser.DartParser; |
import com.google.dart.compiler.parser.DartParserRunner; |
+import com.google.dart.compiler.resolver.Element; |
+import com.google.dart.compiler.type.Type; |
+import com.google.dart.compiler.type.TypeKind; |
import junit.framework.TestCase; |
@@ -38,6 +42,7 @@ public abstract class CompilerTestCase extends TestCase { |
private static final String UTF8 = "UTF-8"; |
protected CompilerConfiguration compilerConfiguration; |
+ protected DartUnit testUnit; |
/** |
* Instance of {@link CompilerConfiguration} for incremental check-only compilation. |
@@ -171,8 +176,18 @@ public abstract class CompilerTestCase extends TestCase { |
compilerConfiguration = CHECK_ONLY_CONFIGURATION; |
} |
+ @Override |
+ protected void tearDown() throws Exception { |
+ compilerConfiguration = null; |
+ testUnit = null; |
+ super.tearDown(); |
+ } |
+ |
protected AnalyzeLibraryResult analyzeLibrary(String... lines) throws Exception { |
- return analyzeLibrary(getName(), makeCode(lines)); |
+ String name = getName(); |
+ AnalyzeLibraryResult libraryResult = analyzeLibrary(name, makeCode(lines)); |
+ testUnit = libraryResult.getLibraryUnitResult().getUnit(name); |
+ return libraryResult; |
} |
/** |
@@ -401,4 +416,42 @@ public abstract class CompilerTestCase extends TestCase { |
SourceInfo sourceInfo = node.getSourceInfo(); |
return code.substring(sourceInfo.getOffset(), sourceInfo.getEnd()); |
} |
+ |
+ |
+ /** |
+ * Asserts that {@link Element} with given name has expected type. |
+ */ |
+ protected static void assertInferredElementTypeString( |
+ DartUnit unit, |
+ String variableName, |
+ String expectedType) { |
+ // find element |
+ Element element = getNamedElement(unit, variableName); |
+ assertNotNull(element); |
+ // check type |
+ Type actualType = element.getType(); |
+ assertEquals(element.getName(), expectedType, actualType.toString()); |
+ // should be inferred |
+ if (TypeKind.of(actualType) != TypeKind.DYNAMIC) { |
+ assertTrue("Should be marked as inferred", actualType.isInferred()); |
+ } |
+ } |
+ |
+ /** |
+ * @return the {@link Element} with given name, may be <code>null</code>. |
+ */ |
+ private static Element getNamedElement(DartUnit unit, final String name) { |
+ final Element[] result = {null}; |
+ unit.accept(new ASTVisitor<Void>() { |
+ @Override |
+ public Void visitIdentifier(DartIdentifier node) { |
+ Element element = node.getElement(); |
+ if (element != null && element.getName().equals(name)) { |
+ result[0] = element; |
+ } |
+ return super.visitIdentifier(node); |
+ } |
+ }); |
+ return result[0]; |
+ } |
} |