Index: compiler/javatests/com/google/dart/compiler/type/TypeAnalyzerTest.java |
diff --git a/compiler/javatests/com/google/dart/compiler/type/TypeAnalyzerTest.java b/compiler/javatests/com/google/dart/compiler/type/TypeAnalyzerTest.java |
index 1b54361a88e6570517e0768bcb26e08cd2249331..fd8f57095b833a53c749c3d6d23c7fd25d1cfda8 100644 |
--- a/compiler/javatests/com/google/dart/compiler/type/TypeAnalyzerTest.java |
+++ b/compiler/javatests/com/google/dart/compiler/type/TypeAnalyzerTest.java |
@@ -751,8 +751,48 @@ public class TypeAnalyzerTest extends TypeTestCase { |
DartCompilerErrorCode.TYPE_NOT_ASSIGNMENT_COMPATIBLE); |
analyzeFail("for (;'';) {}", |
DartCompilerErrorCode.TYPE_NOT_ASSIGNMENT_COMPATIBLE); |
+ |
+ // Foreach tests |
+ analyze("{ List<String> strings = ['1','2','3']; for (String s in strings) {} }"); |
+ analyzeFail("{ List<int> ints = [1,2,3]; for (String s in ints) {} }", |
+ DartCompilerErrorCode.TYPE_NOT_ASSIGNMENT_COMPATIBLE); |
+ analyzeFail("for (String s in true) {}", DartCompilerErrorCode.INTERFACE_HAS_NO_METHOD_NAMED); |
+ } |
+ |
+ public void testForEachStatement() { |
+ Map<String, ClassElement> invalidReturnType = loadSource( |
+ "class A {", |
+ " Iterator<int> iterator() {}", |
+ "}", |
+ "class B {", |
+ " main() { for (int i in new A()) {}}", |
+ "}"); |
+ analyzeClasses(invalidReturnType); |
} |
+ public void testForEachStatement_Negative1() { |
+ Map<String, ClassElement> fieldNotMethod = loadSource( |
+ "class A {", |
+ " int iterator;", |
+ "}", |
+ "class B {", |
+ " main() { for (int i in new A()) {}}", |
+ "}"); |
+ analyzeClasses(fieldNotMethod, DartCompilerErrorCode.FOR_IN_WITH_ITERATOR_FIELD); |
+ } |
+ |
+ public void testForEachStatement_Negative2() { |
+ Map<String, ClassElement> invalidReturnType = loadSource( |
+ "class A {", |
+ " int iterator() {}", |
+ "}", |
+ "class B {", |
+ " main() { for (int i in new A()) {}}", |
+ "}"); |
+ analyzeClasses(invalidReturnType, DartCompilerErrorCode.FOR_IN_WITH_INVALID_ITERATOR_RETURN_TYPE); |
+ } |
+ |
+ |
public void testIfStatement() { |
analyze("if (true) {}"); |
analyze("if (null) {}"); |
@@ -1612,5 +1652,11 @@ public class TypeAnalyzerTest extends TypeTestCase { |
public InterfaceType getIsolateType() { |
throw new AssertionError(); |
} |
+ |
+ @Override |
+ public InterfaceType getIteratorType(Type elementType) { |
+ InterfaceType iteratorType = iterElement.getType(); |
+ return iteratorType.subst(Arrays.asList(elementType), iterElement.getTypeParameters()); |
+ } |
} |
} |