Chromium Code Reviews| Index: compiler/javatests/com/google/dart/compiler/resolver/ResolverTest.java |
| diff --git a/compiler/javatests/com/google/dart/compiler/resolver/ResolverTest.java b/compiler/javatests/com/google/dart/compiler/resolver/ResolverTest.java |
| index 6401c188494cad3d40ecbbbe955c354226175631..b0f6690004c5801b9133e4323f0da3145e2004cd 100644 |
| --- a/compiler/javatests/com/google/dart/compiler/resolver/ResolverTest.java |
| +++ b/compiler/javatests/com/google/dart/compiler/resolver/ResolverTest.java |
| @@ -5,28 +5,18 @@ |
| package com.google.dart.compiler.resolver; |
| import com.google.common.base.Joiner; |
| -import com.google.common.collect.Lists; |
| import com.google.dart.compiler.DartCompilationError; |
| import com.google.dart.compiler.DartCompilerErrorCode; |
| -import com.google.dart.compiler.DartCompilerListener; |
| import com.google.dart.compiler.ErrorCode; |
| import com.google.dart.compiler.ast.DartClass; |
| -import com.google.dart.compiler.ast.DartIdentifier; |
| -import com.google.dart.compiler.ast.DartNode; |
| -import com.google.dart.compiler.ast.DartTypeNode; |
| -import com.google.dart.compiler.ast.DartUnit; |
| -import com.google.dart.compiler.parser.DartParser; |
| -import com.google.dart.compiler.parser.DartScannerParserContext; |
| import com.google.dart.compiler.testing.TestCompilerContext; |
| import com.google.dart.compiler.testing.TestCompilerContext.EventKind; |
| import com.google.dart.compiler.type.InterfaceType; |
| import com.google.dart.compiler.type.Type; |
| import com.google.dart.compiler.type.Types; |
| -import com.google.dart.compiler.util.DartSourceString; |
| import junit.framework.Assert; |
| -import java.util.ArrayList; |
| import java.util.LinkedHashSet; |
| import java.util.List; |
| import java.util.Set; |
| @@ -39,17 +29,7 @@ public class ResolverTest extends ResolverTestCase { |
| private final DartClass array = makeClass("Array", makeType("Object"), "E"); |
| private final DartClass growableArray = makeClass("GrowableArray", makeType("Array", "S"), "S"); |
| private final Types types = Types.getInstance(null); |
| - private List<DartCompilationError> encounteredErrors = Lists.newArrayList(); |
| - @Override |
| - public void setUp() { |
| - encounteredErrors = Lists.newArrayList(); |
| - } |
| - |
| - @Override |
| - public void tearDown() { |
| - encounteredErrors = null; |
| - } |
| private ClassElement findElementOrFail(Scope libScope, String elementName) { |
| Element element = libScope.findElement(elementName); |
| @@ -214,32 +194,25 @@ public class ResolverTest extends ResolverTestCase { |
| } |
| public void testDuplicatedInterfaces() { |
| - resolve(parseUnit( |
| + resolveAndTest(Joiner.on("\n").join( |
|
zundel
2011/10/12 21:25:28
most of the tests need to simply pass a block of s
|
| "class Object {}", |
| "interface int {}", |
| "interface bool {}", |
| "interface I<X> {", |
| "}", |
| - "class A extends C implements I<int> {", |
| - "}", |
| - "class B extends C implements I<bool> {", |
| - "}", |
| - "class C implements I<int> {", |
| - "}"), getContext()); |
| - ErrorCode[] expected = { DartCompilerErrorCode.DUPLICATED_INTERFACE }; |
| - checkExpectedErrors(expected); |
| + "class A extends C implements I<int> {}", |
| + "class B extends C implements I<bool> {}", |
| + "class C implements I<int> {}"), |
| + DartCompilerErrorCode.DUPLICATED_INTERFACE); |
| } |
| public void testImplicitDefaultConstructor() { |
| // Check that the implicit constructor is resolved correctly |
| - resolve(parseUnit( |
| + resolveAndTest(Joiner.on("\n").join( |
| "class Object {}", |
| "class B {}", |
| - "class C { main() { new B(); } }"), getContext()); |
| - { |
| - ErrorCode[] expected = {}; |
| - checkExpectedErrors(expected); |
| - } |
| + "class C { main() { new B(); } }")); |
| + |
| /* |
| * We should check for signature mismatch but that is a TypeAnalyzer issue. |
| */ |
| @@ -247,76 +220,54 @@ public class ResolverTest extends ResolverTestCase { |
| public void testImplicitDefaultConstructor_ThroughFactories() { |
| // Check that we generate implicit constructors through factories also. |
| - resolve(parseUnit( |
| + resolveAndTest(Joiner.on("\n").join( |
| "class Object {}", |
| "interface B factory C {}", |
| "class C {}", |
| - "class D { main() { new B(); } }"), getContext()); |
| - { |
| - ErrorCode[] expected = {}; |
| - checkExpectedErrors(expected); |
| - } |
| + "class D { main() { new B(); } }")); |
| } |
| public void testImplicitDefaultConstructor_WithConstCtor() { |
| // Check that we generate an error if the implicit constructor would violate const. |
| - resolve(parseUnit( |
| + resolveAndTest(Joiner.on("\n").join( |
| "class Object {}", |
| "class B { const B() {} }", |
| "class C extends B {}", |
| - "class D { main() { new C(); } }"), getContext()); |
| - { |
| - ErrorCode[] expected = { |
| - DartCompilerErrorCode.CONST_CONSTRUCTOR_CANNOT_HAVE_BODY, |
| - }; |
| - checkExpectedErrors(expected); |
| - } |
| + "class D { main() { new C(); } }"), |
| + DartCompilerErrorCode.CONST_CONSTRUCTOR_CANNOT_HAVE_BODY); |
| } |
| public void testImplicitSuperCall_ImplicitCtor() { |
| // Check that we can properly resolve the super ctor that exists. |
| - resolve(parseUnit( |
| + resolveAndTest(Joiner.on("\n").join( |
| "class Object {}", |
| "class B { B() {} }", |
| "class C extends B {}", |
| - "class D { main() { new C(); } }"), getContext()); |
| - { |
| - ErrorCode[] expected = {}; |
| - checkExpectedErrors(expected); |
| - } |
| + "class D { main() { new C(); } }")); |
| } |
| public void testImplicitSuperCall_OnExistingCtor() { |
| // Check that we can properly resolve the super ctor that exists. |
| - resolve(parseUnit( |
| + resolveAndTest(Joiner.on("\n").join( |
| "class Object {}", |
| "class B { B() {} }", |
| "class C extends B { C(){} }", |
| - "class D { main() { new C(); } }"), getContext()); |
| - { |
| - ErrorCode[] expected = {}; |
| - checkExpectedErrors(expected); |
| - } |
| + "class D { main() { new C(); } }")); |
| } |
| public void testImplicitSuperCall_NonExistentSuper() { |
| // Check that we generate an error if the implicit constructor would call a non-existent super. |
| - resolve(parseUnit( |
| + resolveAndTest(Joiner.on("\n").join( |
| "class Object {}", |
| "class B { B(Object o) {} }", |
| "class C extends B {}", |
| - "class D { main() { new C(); } }"), getContext()); |
| - { |
| - ErrorCode[] expected = { |
| - DartCompilerErrorCode.CANNOT_RESOLVE_IMPLICIT_CALL_TO_SUPER_CONSTRUCTOR |
| - }; |
| - checkExpectedErrors(expected); |
| - } |
| + "class D { main() { new C(); } }"), |
| + DartCompilerErrorCode.CANNOT_RESOLVE_IMPLICIT_CALL_TO_SUPER_CONSTRUCTOR); |
| } |
| public void testCyclicSupertype() { |
| - resolve(parseUnit( |
| + resolveAndTest(Joiner.on("\n").join( |
| "class Object {}", |
| "interface int {}", |
| "interface bool {}", |
| @@ -337,9 +288,7 @@ public class ResolverTest extends ResolverTestCase { |
| "interface I2 extends I3 {", |
| "}", |
| "interface I3 extends I2 {", |
| - "}"), getContext()); |
| - ErrorCode[] expected = { |
| - DartCompilerErrorCode.CYCLIC_CLASS, |
| + "}"), |
| DartCompilerErrorCode.CYCLIC_CLASS, |
| DartCompilerErrorCode.CYCLIC_CLASS, |
| DartCompilerErrorCode.CYCLIC_CLASS, |
| @@ -347,18 +296,18 @@ public class ResolverTest extends ResolverTestCase { |
| DartCompilerErrorCode.CYCLIC_CLASS, |
| DartCompilerErrorCode.CYCLIC_CLASS, |
| DartCompilerErrorCode.CYCLIC_CLASS, |
| - }; |
| - checkExpectedErrors(expected); |
| + DartCompilerErrorCode.CYCLIC_CLASS |
| + ); |
| + |
| } |
| public void testBadFactory() { |
| - encounteredErrors = Lists.newArrayList(); |
| TestCompilerContext context1 = new TestCompilerContext(EventKind.TYPE_ERROR) { |
| @Override |
| public void compilationError(DartCompilationError event) { |
| - encounteredErrors.add(event); |
| + recordError(event); |
| } |
| @Override |
| public boolean shouldWarnOnNoSuchType() { |
| @@ -376,11 +325,11 @@ public class ResolverTest extends ResolverTestCase { |
| checkExpectedErrors(expected); |
| } |
| - encounteredErrors = Lists.newArrayList(); |
| + resetExpectedErrors(); |
| TestCompilerContext context2 = new TestCompilerContext(EventKind.TYPE_ERROR) { |
| @Override |
| public void compilationError(DartCompilationError event) { |
| - encounteredErrors.add(event); |
| + recordError(event); |
| } |
| @Override |
| public boolean shouldWarnOnNoSuchType() { |
| @@ -425,175 +374,111 @@ public class ResolverTest extends ResolverTestCase { |
| } |
| public void testUnresolvedSuper() { |
| - resolve(parseUnit( |
| + resolveAndTest(Joiner.on("\n").join( |
| "class Object {}", |
| "class Foo {", |
| " foo() { super.foo(); }", |
| - "}"), getContext()); |
| - ErrorCode[] expected = {}; |
| - checkExpectedErrors(expected); |
| + "}")); |
| } |
| public void testNameConflict() { |
| - resolve(parseUnit("class Object {}", |
| - "class A {", |
| - " var foo;", |
| - " var foo;", |
| - "}"), |
| - getContext()); |
| - ErrorCode[] expected1 = { |
| - DartCompilerErrorCode.NAME_CLASHES_EXISTING_MEMBER |
| - }; |
| - checkExpectedErrors(expected1); |
| + resolveAndTest(Joiner.on("\n").join( |
| + "class Object {}", |
| + "class A {", |
| + " var foo;", |
| + " var foo;", |
| + "}"), |
| + DartCompilerErrorCode.NAME_CLASHES_EXISTING_MEMBER); |
| - encounteredErrors = Lists.newArrayList(); |
| - resolve(parseUnit("class Object {}", |
| - "class A {", |
| - " foo() {}", |
| - " set foo(x) {}", |
| - "}"), |
| - getContext()); |
| - { |
| - ErrorCode[] expected = { |
| - DartCompilerErrorCode.NAME_CLASHES_EXISTING_MEMBER |
| - }; |
| - checkExpectedErrors(expected); |
| - } |
| + resolveAndTest(Joiner.on("\n").join( |
| + "class Object {}", |
| + "class A {", |
| + " foo() {}", |
| + " set foo(x) {}", |
| + "}"), |
| + DartCompilerErrorCode.NAME_CLASHES_EXISTING_MEMBER); |
| // Same test, but reverse the order of setter and method |
| - encounteredErrors = Lists.newArrayList(); |
| - resolve(parseUnit("class Object {}", |
| - "class A {", |
| - " set foo(x) {}", |
| - " foo() {}", |
| - "}"), |
| - getContext()); |
| - { |
| - ErrorCode[] expected = { |
| - DartCompilerErrorCode.NAME_CLASHES_EXISTING_MEMBER |
| - }; |
| - checkExpectedErrors(expected); |
| - } |
| + resolveAndTest(Joiner.on("\n").join( |
| + "class Object {}", |
| + "class A {", |
| + " set foo(x) {}", |
| + " foo() {}", |
| + "}"), |
| + DartCompilerErrorCode.NAME_CLASHES_EXISTING_MEMBER); |
| - encounteredErrors = Lists.newArrayList(); |
| - resolve(parseUnit("class Object {}", |
| - "class A {", |
| - " var foo;", |
| - " set foo(x) {}", |
| - "}"), |
| - getContext()); |
| - { |
| - ErrorCode[] expected = { |
| - DartCompilerErrorCode.NAME_CLASHES_EXISTING_MEMBER |
| - }; |
| - checkExpectedErrors(expected); |
| - } |
| + resolveAndTest(Joiner.on("\n").join( |
| + "class Object {}", |
| + "class A {", |
| + " var foo;", |
| + " set foo(x) {}", |
| + "}"), |
| + DartCompilerErrorCode.NAME_CLASHES_EXISTING_MEMBER); |
| - encounteredErrors = Lists.newArrayList(); |
| - resolve(parseUnit("class Object {}", |
| - "class A {", |
| - " get foo() {}", |
| - " var foo;", |
| - "}"), |
| - getContext()); |
| - { |
| - ErrorCode[] expected = { |
| - DartCompilerErrorCode.NAME_CLASHES_EXISTING_MEMBER |
| - }; |
| - checkExpectedErrors(expected); |
| - } |
| + resolveAndTest(Joiner.on("\n").join( |
| + "class Object {}", |
| + "class A {", |
| + " get foo() {}", |
| + " var foo;", |
| + "}"), |
| + DartCompilerErrorCode.NAME_CLASHES_EXISTING_MEMBER); |
| - encounteredErrors = Lists.newArrayList(); |
| - resolve(parseUnit("class Object {}", |
| - "class A {", |
| - " var foo;", |
| - " get foo() {}", |
| - "}"), |
| - getContext()); |
| - { |
| - ErrorCode[] expected = { |
| - DartCompilerErrorCode.NAME_CLASHES_EXISTING_MEMBER |
| - }; |
| - checkExpectedErrors(expected); |
| - } |
| - encounteredErrors = Lists.newArrayList(); |
| - resolve(parseUnit("class Object {}", |
| - "class A {", |
| - " set foo(x) {}", |
| - " var foo;", |
| - "}"), |
| - getContext()); |
| - { |
| - ErrorCode[] expected = { |
| - DartCompilerErrorCode.NAME_CLASHES_EXISTING_MEMBER |
| - }; |
| - checkExpectedErrors(expected); |
| - } |
| + resolveAndTest(Joiner.on("\n").join( |
| + "class Object {}", |
| + "class A {", |
| + " var foo;", |
| + " get foo() {}", |
| + "}"), |
| + DartCompilerErrorCode.NAME_CLASHES_EXISTING_MEMBER); |
| - encounteredErrors = Lists.newArrayList(); |
| - resolve(parseUnit("class Object {}", |
| - "get foo() {}", |
| - "class foo {}", |
| - "set bar(x) {}", |
| - "class bar {}"), |
| - getContext()); |
| - { |
| - ErrorCode[] expected = { |
| - DartCompilerErrorCode.DUPLICATE_DEFINITION, |
| - DartCompilerErrorCode.DUPLICATE_DEFINITION, |
| - DartCompilerErrorCode.DUPLICATE_DEFINITION, |
| - DartCompilerErrorCode.DUPLICATE_DEFINITION, |
| - }; |
| - checkExpectedErrors(expected); |
| - } |
| + resolveAndTest(Joiner.on("\n").join( |
| + "class Object {}", |
| + "class A {", |
| + " set foo(x) {}", |
| + " var foo;", |
| + "}"), |
| + DartCompilerErrorCode.NAME_CLASHES_EXISTING_MEMBER); |
| + |
| + resolveAndTest(Joiner.on("\n").join( |
| + "class Object {}", |
| + "get foo() {}", |
| + "class foo {}", |
| + "set bar(x) {}", |
| + "class bar {}"), |
| + DartCompilerErrorCode.DUPLICATE_DEFINITION, |
| + DartCompilerErrorCode.DUPLICATE_DEFINITION, |
| + DartCompilerErrorCode.DUPLICATE_DEFINITION, |
| + DartCompilerErrorCode.DUPLICATE_DEFINITION); |
| // Same test but in different order |
| - encounteredErrors = Lists.newArrayList(); |
| - resolve(parseUnit("class Object {}", |
| - "class foo {}", |
| - "get foo() {}", |
| - "class bar {}", |
| - "set bar(x) {}"), |
| - getContext()); |
| - { |
| - ErrorCode[] expected = { |
| - DartCompilerErrorCode.DUPLICATE_DEFINITION, |
| - DartCompilerErrorCode.DUPLICATE_DEFINITION, |
| - DartCompilerErrorCode.DUPLICATE_DEFINITION, |
| - DartCompilerErrorCode.DUPLICATE_DEFINITION, |
| - }; |
| - checkExpectedErrors(expected); |
| - } |
| + resolveAndTest(Joiner.on("\n").join( |
| + "class Object {}", |
| + "class foo {}", |
| + "get foo() {}", |
| + "class bar {}", |
| + "set bar(x) {}"), |
| + DartCompilerErrorCode.DUPLICATE_DEFINITION, |
| + DartCompilerErrorCode.DUPLICATE_DEFINITION, |
| + DartCompilerErrorCode.DUPLICATE_DEFINITION, |
| + DartCompilerErrorCode.DUPLICATE_DEFINITION); |
| - encounteredErrors = Lists.newArrayList(); |
| - resolve(parseUnit("class Object {}", |
| - "set bar(x) {}", |
| - "set bar(x) {}"), |
| - getContext()); |
| - { |
| - ErrorCode[] expected = { |
| - DartCompilerErrorCode.DUPLICATE_DEFINITION, |
| - DartCompilerErrorCode.DUPLICATE_DEFINITION, |
| - DartCompilerErrorCode.FIELD_CONFLICTS, |
| - }; |
| - checkExpectedErrors(expected); |
| - } |
| + resolveAndTest(Joiner.on("\n").join( |
| + "class Object {}", |
| + "set bar(x) {}", |
| + "set bar(x) {}"), |
| + DartCompilerErrorCode.DUPLICATE_DEFINITION, |
| + DartCompilerErrorCode.DUPLICATE_DEFINITION, |
| + DartCompilerErrorCode.FIELD_CONFLICTS); |
| - encounteredErrors = Lists.newArrayList(); |
| - resolve(parseUnit("class Object {}", |
| - "get bar() {}", |
| - "get bar() {}"), |
| - getContext()); |
| - { |
| - ErrorCode[] expected = { |
| + resolveAndTest(Joiner.on("\n").join( |
| + "class Object {}", |
| + "get bar() {}", |
| + "get bar() {}"), |
| DartCompilerErrorCode.DUPLICATE_DEFINITION, |
| DartCompilerErrorCode.DUPLICATE_DEFINITION, |
| - DartCompilerErrorCode.FIELD_CONFLICTS, |
| - }; |
| - checkExpectedErrors(expected); |
| - } |
| + DartCompilerErrorCode.FIELD_CONFLICTS); |
| } |
| /** |
| @@ -601,172 +486,51 @@ public class ResolverTest extends ResolverTestCase { |
| */ |
| public void testNewExpression() { |
| // A very ordinary new expression is OK |
| - encounteredErrors = Lists.newArrayList(); |
| - resolve(parseUnit("class Object {}", |
| - "class Foo {", |
| - " Foo create() {", |
| - " return new Foo();", |
| - " }", |
| - "}"), |
| - getContext()); |
| - { |
| - ErrorCode[] expected = { |
| - }; |
| - checkExpectedErrors(expected); |
| - } |
| + resolveAndTest(Joiner.on("\n").join( |
| + "class Object {}", |
| + "class Foo {", |
| + " Foo create() {", |
| + " return new Foo();", |
| + " }", |
| + "}")); |
| // A new expression with generic type argument is OK |
| - encounteredErrors = Lists.newArrayList(); |
| - resolve(parseUnit("class Object {}", |
| - "class Foo<T> {", |
| - " Foo<T> create() {", |
| - " return new Foo<T>();", |
| - " }", |
| - "}"), |
| - getContext()); |
| - { |
| - ErrorCode[] expected = { |
| - }; |
| - checkExpectedErrors(expected); |
| - } |
| + resolveAndTest(Joiner.on("\n").join( |
| + "class Object {}", |
| + "class Foo<T> {", |
| + " Foo<T> create() {", |
| + " return new Foo<T>();", |
| + " }", |
| + "}")); |
| // Trying new on a variable name shouldn't work. |
| - encounteredErrors = Lists.newArrayList(); |
| - resolve(parseUnit("class Object {}", |
| - "class Foo {", |
| - " var Bar;", |
| - " create() { return new Bar();}", |
| - "}"), |
| - getContext()); |
| - { |
| - ErrorCode[] expected = { |
| - DartCompilerErrorCode.NO_SUCH_TYPE, |
| - DartCompilerErrorCode.NEW_EXPRESSION_NOT_CONSTRUCTOR, |
| - }; |
| - checkExpectedErrors(expected); |
| - } |
| + resolveAndTest(Joiner.on("\n").join( |
| + "class Object {}", |
| + "class Foo {", |
| + " var Bar;", |
| + " create() { return new Bar();}", |
| + "}"), |
| + DartCompilerErrorCode.NO_SUCH_TYPE, |
| + DartCompilerErrorCode.NEW_EXPRESSION_NOT_CONSTRUCTOR); |
| // New expression tied to an unbound type variable is not allowed. |
| - encounteredErrors = Lists.newArrayList(); |
| - resolve(parseUnit("class Object {}", |
| - "class Foo<T> {", |
| - " T create() {", |
| - " return new T();", |
| - " }", |
| - "}"), |
| - getContext()); |
| - { |
| - ErrorCode[] expected = { |
| - DartCompilerErrorCode.NEW_EXPRESSION_CANT_USE_TYPE_VAR, |
| - }; |
| - checkExpectedErrors(expected); |
| - } |
| - |
| - // More cowbell. (Foo<T> isn't a type yet) |
| - encounteredErrors = Lists.newArrayList(); |
| - resolve(parseUnit("class Object {}", |
| - "class Foo<T> { }", |
| - "class B {", |
| - " foo() { return new Foo<T>(); }", |
| - "}"), |
| - getContext()); |
| - { |
| - ErrorCode[] expected = { |
| - DartCompilerErrorCode.NO_SUCH_TYPE, |
| - }; |
| - checkExpectedErrors(expected); |
| - } |
| - } |
| - |
| - private static DartUnit makeUnit(DartNode... topLevelElements) { |
|
zundel
2011/10/12 21:25:28
This stuff moved into ResolverTestCase so the logi
|
| - DartUnit unit = new DartUnit(null); |
| - for (DartNode topLevelElement : topLevelElements) { |
| - unit.addTopLevelNode(topLevelElement); |
| - } |
| - return unit; |
| - } |
| - |
| - private static DartTypeNode makeType(String name, String... arguments) { |
| - List<DartTypeNode> argumentNodes = makeTypes(arguments); |
| - return new DartTypeNode(new DartIdentifier(name), argumentNodes); |
| - } |
| - |
| - static List<DartTypeNode> makeTypes(String... typeNames) { |
| - List<DartTypeNode> types = new ArrayList<DartTypeNode>(); |
| - for (String typeName : typeNames) { |
| - types.add(makeType(typeName)); |
| - } |
| - return types; |
| - } |
| - |
| - private DartUnit parseUnit(String firstLine, String secondLine, String... rest) { |
| - return parseUnit(Joiner.on('\n').join(firstLine, secondLine, (Object[]) rest).toString()); |
| - } |
| - |
| - private DartUnit parseUnit(String string) { |
| - DartSourceString source = new DartSourceString("<source string>", string); |
| - return getParser(string).parseUnit(source); |
| - } |
| - |
| - private DartParser getParser(String string) { |
| - return new DartParser(new DartScannerParserContext(null, string, getListener())); |
| - } |
| - |
| - private DartCompilerListener getListener() { |
| - return new DartCompilerListener() { |
| - @Override |
| - public void compilationError(DartCompilationError event) { |
| - encounteredErrors.add(event); |
| - } |
| - |
| - @Override |
| - public void compilationWarning(DartCompilationError event) { |
| - compilationError(event); |
| - } |
| - |
| - @Override |
| - public void typeError(DartCompilationError event) { |
| - compilationError(event); |
| - } |
| - }; |
| - } |
| - |
| - private TestCompilerContext getContext() { |
| - return new TestCompilerContext() { |
| - @Override |
| - public void compilationError(DartCompilationError event) { |
| - encounteredErrors.add(event); |
| - } |
| - }; |
| - } |
| + resolveAndTest(Joiner.on("\n").join( |
| + "class Object {}", |
| + "class Foo<T> {", |
| + " T create() {", |
| + " return new T();", |
| + " }", |
| + "}"), |
| + DartCompilerErrorCode.NEW_EXPRESSION_CANT_USE_TYPE_VAR); |
| - private boolean checkExpectedErrors(ErrorCode[] errorCodes) { |
| - if (errorCodes.length != encounteredErrors.size()) { |
| - printEncountered(); |
| - assertEquals(errorCodes.length, encounteredErrors.size()); |
| - } |
| - int index = 0; |
| - for (ErrorCode errorCode : errorCodes) { |
| - ErrorCode found = encounteredErrors.get(index).getErrorCode(); |
| - if (!found.equals(errorCode)) { |
| - printEncountered(); |
| - assertEquals("Unexpected Error Code: ", errorCode, found); |
| - } |
| - index++; |
| - } |
| - return true; |
| - } |
| - /** |
| - * For debugging. |
| - */ |
| - private void printEncountered() { |
| - for (DartCompilationError error : encounteredErrors) { |
| - DartCompilerErrorCode errorCode = (DartCompilerErrorCode) error |
| - .getErrorCode(); |
| - String msg = String.format("%s > %s (%d:%d)", errorCode.name(), error |
| - .getMessage(), error.getLineNumber(), error.getColumnNumber()); |
| - System.out.println(msg); |
| - } |
| + // More cowbell. (Foo<T> isn't a type yet) |
| + resolveAndTest(Joiner.on("\n").join( |
| + "class Object {}", |
| + "class Foo<T> { }", |
| + "class B {", |
| + " foo() { return new Foo<T>(); }", |
| + "}"), |
| + DartCompilerErrorCode.NO_SUCH_TYPE); |
| } |
| } |