Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1772)

Unified Diff: compiler/javatests/com/google/dart/compiler/resolver/NegativeResolverTest.java

Issue 9124006: Blacklist types from core library, issue 969 (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Use Set for checking type names. Created 8 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: compiler/javatests/com/google/dart/compiler/resolver/NegativeResolverTest.java
diff --git a/compiler/javatests/com/google/dart/compiler/resolver/NegativeResolverTest.java b/compiler/javatests/com/google/dart/compiler/resolver/NegativeResolverTest.java
index 8ff0774f66f750bd379ed55d6dc33e2e6aa80d1d..ff2fb5ab23ab9182df4d614231b8c5aae26312fb 100644
--- a/compiler/javatests/com/google/dart/compiler/resolver/NegativeResolverTest.java
+++ b/compiler/javatests/com/google/dart/compiler/resolver/NegativeResolverTest.java
@@ -3,13 +3,14 @@
// BSD-style license that can be found in the LICENSE file.
package com.google.dart.compiler.resolver;
+import static com.google.dart.compiler.common.ErrorExpectation.assertErrors;
+import static com.google.dart.compiler.common.ErrorExpectation.errEx;
+
import com.google.dart.compiler.CompilerTestCase;
import com.google.dart.compiler.DartCompilationError;
import com.google.dart.compiler.ast.DartThisExpression;
import com.google.dart.compiler.ast.DartUnit;
import com.google.dart.compiler.common.ErrorExpectation;
-import static com.google.dart.compiler.common.ErrorExpectation.errEx;
-import static com.google.dart.compiler.common.ErrorExpectation.assertErrors;
import com.google.dart.compiler.testing.TestCompilerContext;
import java.util.ArrayList;
@@ -52,12 +53,16 @@ public class NegativeResolverTest extends CompilerTestCase {
}
private void resolve(DartUnit unit) {
+ unit.addTopLevelNode(ResolverTestCase.makeClass("bool", null));
+ unit.addTopLevelNode(ResolverTestCase.makeClass("num", null));
+ unit.addTopLevelNode(ResolverTestCase.makeClass("double", null));
unit.addTopLevelNode(ResolverTestCase.makeClass("int", null));
unit.addTopLevelNode(ResolverTestCase.makeClass("Object", null));
+ unit.addTopLevelNode(ResolverTestCase.makeClass("Null", null));
unit.addTopLevelNode(ResolverTestCase.makeClass("String", null));
unit.addTopLevelNode(ResolverTestCase.makeClass("Function", null));
- unit.addTopLevelNode(ResolverTestCase.makeClass("List", null, "T"));
- unit.addTopLevelNode(ResolverTestCase.makeClass("Map", null, "K", "V"));
+ unit.addTopLevelNode(ResolverTestCase.makeInterface("List", "T"));
+ unit.addTopLevelNode(ResolverTestCase.makeInterface("Map", "K", "V"));
ResolverTestCase.resolve(unit, getContext());
}
@@ -220,20 +225,53 @@ public class NegativeResolverTest extends CompilerTestCase {
public void testNameConflict_field_field() {
checkSourceErrors(
makeCode(
- "class ClassDeclarationWithLongEnoughNameToForceLineSplitting {",
+ "// filler filler filler filler filler filler filler filler filler filler",
+ "class A {",
" var foo;",
" var foo;",
"}"),
- errEx(ResolverErrorCode.DUPLICATE_MEMBER, 2, 7, 3),
- errEx(ResolverErrorCode.DUPLICATE_MEMBER, 3, 7, 3));
+ errEx(ResolverErrorCode.DUPLICATE_MEMBER, 3, 7, 3),
+ errEx(ResolverErrorCode.DUPLICATE_MEMBER, 4, 7, 3));
}
public void testCall1() {
checkNumErrors("StaticInstanceCallNegativeTest.dart", 1);
}
- public void testClassExtendsInterfaceNegativeTest() {
- checkNumErrors("ClassExtendsInterfaceNegativeTest.dart", 1);
+ /**
+ * Section 7.8: It is a compile-time error if the extends clause of a class C includes a type
+ * expression that does not denote a class available in the lexical scope of C.
+ */
+ public void test_classExtendsInterface() {
+ checkSourceErrors(
+ makeCode(
+ "// filler filler filler filler filler filler filler filler filler filler",
+ "interface I {}",
+ "class A extends I {",
+ "}"),
+ errEx(ResolverErrorCode.NOT_A_CLASS, 3, 17, 1));
+ }
+
+ /**
+ * Class can implement class, this causes implementation of an implicit interface.
+ */
+ public void test_classImplementsClass() {
+ checkSourceErrors(makeCode(
+ "// filler filler filler filler filler filler filler filler filler filler",
+ "class A {}",
+ "class B implements A {",
+ "}"));
+ }
+
+ /**
+ * Interface can extend class, this causes implementation of an implicit interface.
+ */
+ public void test_interfaceExtendsClass() {
+ checkSourceErrors(makeCode(
+ "// filler filler filler filler filler filler filler filler filler filler",
+ "class A {}",
+ "interface B extends A {",
+ "}"));
}
public void tesClassImplementsUnknownInterfaceNegativeTest() {
@@ -903,4 +941,117 @@ public class NegativeResolverTest extends CompilerTestCase {
}
};
}
+
+ public void test_blackListed_Dynamic() throws Exception {
+ checkSourceErrors(
+ makeCode(
+ "// filler filler filler filler filler filler filler filler filler filler",
+ "class A extends Dynamic {",
+ "}",
+ "class B implements Dynamic {",
+ "}"),
+ errEx(ResolverErrorCode.BLACK_LISTED_EXTENDS, 2, 17, 7),
+ errEx(ResolverErrorCode.BLACK_LISTED_IMPLEMENTS, 4, 20, 7));
+ assertEquals("'Dynamic' can not be used as superclass", errors.get(0).getMessage());
+ assertEquals("'Dynamic' can not be used as superinterface", errors.get(1).getMessage());
+ }
+
+ public void test_blackListed_Function() throws Exception {
+ checkSourceErrors(
+ makeCode(
+ "// filler filler filler filler filler filler filler filler filler filler",
+ "class A extends Function {",
+ "}",
+ "class B implements Function {",
+ "}"),
+ errEx(ResolverErrorCode.BLACK_LISTED_EXTENDS, 2, 17, 8),
+ errEx(ResolverErrorCode.BLACK_LISTED_IMPLEMENTS, 4, 20, 8));
+ }
+
+ public void test_blackListed_bool() throws Exception {
+ checkSourceErrors(
+ makeCode(
+ "// filler filler filler filler filler filler filler filler filler filler",
+ "class A extends bool {",
+ "}",
+ "class B implements bool {",
+ "}"),
+ errEx(ResolverErrorCode.BLACK_LISTED_EXTENDS, 2, 17, 4),
+ errEx(ResolverErrorCode.BLACK_LISTED_IMPLEMENTS, 4, 20, 4));
+ assertEquals("'bool' can not be used as superclass", errors.get(0).getMessage());
+ assertEquals("'bool' can not be used as superinterface", errors.get(1).getMessage());
+ }
+
+ public void test_blackListed_int() throws Exception {
+ checkSourceErrors(
+ makeCode(
+ "// filler filler filler filler filler filler filler filler filler filler",
+ "class A extends int {",
+ "}",
+ "class B implements int {",
+ "}"),
+ errEx(ResolverErrorCode.BLACK_LISTED_EXTENDS, 2, 17, 3),
+ errEx(ResolverErrorCode.BLACK_LISTED_IMPLEMENTS, 4, 20, 3));
+ }
+
+ public void test_blackListed_double() throws Exception {
+ checkSourceErrors(
+ makeCode(
+ "// filler filler filler filler filler filler filler filler filler filler",
+ "class A extends double {",
+ "}",
+ "class B implements double {",
+ "}"),
+ errEx(ResolverErrorCode.BLACK_LISTED_EXTENDS, 2, 17, 6),
+ errEx(ResolverErrorCode.BLACK_LISTED_IMPLEMENTS, 4, 20, 6));
+ }
+
+ public void test_blackListed_num() throws Exception {
+ checkSourceErrors(
+ makeCode(
+ "// filler filler filler filler filler filler filler filler filler filler",
+ "class A extends num {",
+ "}",
+ "class B implements num {",
+ "}"),
+ errEx(ResolverErrorCode.BLACK_LISTED_EXTENDS, 2, 17, 3),
+ errEx(ResolverErrorCode.BLACK_LISTED_IMPLEMENTS, 4, 20, 3));
+ }
+
+ public void test_blackListed_String() throws Exception {
+ checkSourceErrors(
+ makeCode(
+ "// filler filler filler filler filler filler filler filler filler filler",
+ "class A extends String {",
+ "}",
+ "class B implements String {",
+ "}"),
+ errEx(ResolverErrorCode.BLACK_LISTED_EXTENDS, 2, 17, 6),
+ errEx(ResolverErrorCode.BLACK_LISTED_IMPLEMENTS, 4, 20, 6));
+ }
+
+ public void test_noSuchType_classImplements() throws Exception {
+ checkSourceErrors(
+ makeCode(
+ "// filler filler filler filler filler filler filler filler filler filler",
+ "class MyClass implements Unknown {",
+ "}"),
+ errEx(ResolverErrorCode.NO_SUCH_TYPE, 2, 26, 7));
+ }
+
+ public void test_noSuchType_classImplementsTypeVariable() throws Exception {
+ checkSourceErrors(
+ makeCode(
+ "// filler filler filler filler filler filler filler filler filler filler",
+ "class MyClass<E> implements E {",
+ "}"),
+ errEx(ResolverErrorCode.NOT_A_CLASS_OR_INTERFACE, 2, 29, 1));
+ }
+
+ public void test_explicitDynamicTypeArgument() throws Exception {
+ checkSourceErrors(makeCode(
+ "// filler filler filler filler filler filler filler filler filler filler",
+ "class MyClass implements Map<Object, Dynamic> {",
+ "}"));
+ }
}

Powered by Google App Engine
This is Rietveld 408576698