| Index: dart/compiler/javatests/com/google/dart/compiler/parser/NegativeParserTest.java
|
| diff --git a/dart/compiler/javatests/com/google/dart/compiler/parser/NegativeParserTest.java b/dart/compiler/javatests/com/google/dart/compiler/parser/NegativeParserTest.java
|
| deleted file mode 100644
|
| index e1c94ca4e033a9e1a218effc8d3ee9ad840f2102..0000000000000000000000000000000000000000
|
| --- a/dart/compiler/javatests/com/google/dart/compiler/parser/NegativeParserTest.java
|
| +++ /dev/null
|
| @@ -1,1053 +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.parser;
|
| -
|
| -import com.google.common.base.Joiner;
|
| -import com.google.dart.compiler.CompilerTestCase;
|
| -import com.google.dart.compiler.ast.DartClass;
|
| -import com.google.dart.compiler.ast.DartIdentifier;
|
| -import com.google.dart.compiler.ast.DartMethodDefinition;
|
| -import com.google.dart.compiler.ast.DartNode;
|
| -import com.google.dart.compiler.ast.DartUnit;
|
| -
|
| -import static com.google.dart.compiler.common.ErrorExpectation.assertErrors;
|
| -import static com.google.dart.compiler.common.ErrorExpectation.errEx;
|
| -
|
| -import java.util.List;
|
| -import java.util.Set;
|
| -
|
| -/**
|
| - * Negative Parser/Syntax tests.
|
| - */
|
| -public class NegativeParserTest extends CompilerTestCase {
|
| - public void test_deprecatedGetterSyntax() {
|
| - parseExpectErrors("get foo() {}", errEx(ParserErrorCode.DEPRECATED_GETTER, 1, 5, 3));
|
| - }
|
| -
|
| - public void test_deprecatedStrictEQ() {
|
| - parseExpectErrors(makeCode(
|
| - "// filler filler filler filler filler filler filler filler filler filler",
|
| - "main() {",
|
| - " 1 === 2;",
|
| - "}",
|
| - ""), errEx(ParserErrorCode.DEPRECATED_STRICT_EQ, 3, 5, 3));
|
| - }
|
| -
|
| - public void test_deprecatedStrictNE() {
|
| - parseExpectErrors(makeCode(
|
| - "// filler filler filler filler filler filler filler filler filler filler",
|
| - "main() {",
|
| - " 1 !== 2;",
|
| - "}",
|
| - ""), errEx(ParserErrorCode.DEPRECATED_STRICT_NE, 3, 5, 3));
|
| - }
|
| -
|
| - public void test_deprecatedAbstract() {
|
| - parseExpectWarnings(makeCode(
|
| - "// filler filler filler filler filler filler filler filler filler filler",
|
| - "abstract class A {",
|
| - " abstract m();",
|
| - "}",
|
| - ""), errEx(ParserErrorCode.DEPRECATED_ABSTRACT_METHOD, 3, 3, 8));
|
| - }
|
| -
|
| - public void testFieldInitializerInRedirectionConstructor1() {
|
| - parseExpectErrors(
|
| - "class A { A(x) { } A.foo() : this(5), y = 5; var y; }",
|
| - errEx(ParserErrorCode.REDIRECTING_CONSTRUCTOR_OTHER, 1, 39, 5),
|
| - errEx(ParserErrorCode.REDIRECTING_CONSTRUCTOR_ITSELF, 1, 30, 7));
|
| - }
|
| -
|
| - public void test_deprecatedFunctionLiteral() {
|
| - parseExpectWarnings(
|
| - makeCode(
|
| - "// filler filler filler filler filler filler filler filler filler filler",
|
| - "main() {",
|
| - " var x = f() => 42;",
|
| - " var y = int g() => 87;",
|
| - "}",
|
| - ""),
|
| - errEx(ParserErrorCode.DEPRECATED_FUNCTION_LITERAL, 3, 11, 1),
|
| - errEx(ParserErrorCode.DEPRECATED_FUNCTION_LITERAL, 4, 11, 3));
|
| - }
|
| -
|
| - public void testFieldInitializerInRedirectionConstructor2() {
|
| - parseExpectErrors(
|
| - "class A { A(x) { } A.foo() : y = 5, this(5); var y; }",
|
| - errEx(ParserErrorCode.REDIRECTING_CONSTRUCTOR_OTHER, 1, 30, 5),
|
| - errEx(ParserErrorCode.REDIRECTING_CONSTRUCTOR_ITSELF, 1, 37, 7));
|
| - }
|
| -
|
| - public void testFieldInitializerInRedirectionConstructor3() {
|
| - parseExpectErrors(
|
| - "class A { A.foo(x) { } A() : y = 5, this.foo(5); var y; }",
|
| - errEx(ParserErrorCode.REDIRECTING_CONSTRUCTOR_OTHER, 1, 30, 5),
|
| - errEx(ParserErrorCode.REDIRECTING_CONSTRUCTOR_ITSELF, 1, 37, 11));
|
| - }
|
| -
|
| - public void testFieldInitializerInRedirectionConstructor4() {
|
| - parseExpectErrors(
|
| - "class A { A(x) { } A.foo(this.y, this.z) : this(5); var y; var z;}",
|
| - errEx(ParserErrorCode.REDIRECTING_CONSTRUCTOR_PARAM, 1, 26, 6),
|
| - errEx(ParserErrorCode.REDIRECTING_CONSTRUCTOR_PARAM, 1, 34, 6),
|
| - errEx(ParserErrorCode.REDIRECTING_CONSTRUCTOR_ITSELF, 1, 44, 7));
|
| - }
|
| -
|
| - public void testFieldInitializerInRedirectionConstructor5() {
|
| - parseExpectErrors(
|
| - "class A { A(x) { } A.foo(this.y) : this(5), z = 7; var y; var z;}",
|
| - errEx(ParserErrorCode.REDIRECTING_CONSTRUCTOR_PARAM, 1, 26, 6),
|
| - errEx(ParserErrorCode.REDIRECTING_CONSTRUCTOR_OTHER, 1, 45, 5),
|
| - errEx(ParserErrorCode.REDIRECTING_CONSTRUCTOR_ITSELF, 1, 36, 7));
|
| - }
|
| -
|
| - public void testSuperInRedirectionConstructor1() {
|
| - parseExpectErrors(
|
| - "class A { A(x) { } A.foo() : this(5), super(); var y; }",
|
| - errEx(ParserErrorCode.REDIRECTING_CONSTRUCTOR_OTHER, 1, 39, 7),
|
| - errEx(ParserErrorCode.REDIRECTING_CONSTRUCTOR_ITSELF, 1, 30, 7));
|
| - }
|
| -
|
| - public void testSuperInRedirectionConstructor2() {
|
| - parseExpectErrors(
|
| - "class A { A(x) { } A.foo() : super(), this(5); var y; }",
|
| - errEx(ParserErrorCode.REDIRECTING_CONSTRUCTOR_OTHER, 1, 30, 7),
|
| - errEx(ParserErrorCode.REDIRECTING_CONSTRUCTOR_ITSELF, 1, 39, 7));
|
| - }
|
| -
|
| - public void testMultipleRedirectionConstructors() {
|
| - parseExpectErrors(
|
| - "class A { A(x) { } A.foo() : this(1), this(2); }",
|
| - errEx(ParserErrorCode.REDIRECTING_CONSTRUCTOR_MULTIPLE, 1, 30, 7),
|
| - errEx(ParserErrorCode.REDIRECTING_CONSTRUCTOR_MULTIPLE, 1, 39, 7));
|
| - }
|
| -
|
| - /**
|
| - * May be parsing errors, but not exceptions.
|
| - * <p>
|
| - * http://code.google.com/p/dart/issues/detail?id=4040
|
| - */
|
| - public void test_incompleteArguments() {
|
| - parseSource(makeCode(
|
| - "// filler filler filler filler filler filler filler filler filler filler",
|
| - "main() {",
|
| - " f(a: 0,",
|
| - "}",
|
| - ""));
|
| - }
|
| -
|
| - public void testSuperMultipleInvocationsTest() {
|
| - String source =
|
| - makeCode(
|
| - "class A {",
|
| - " int a;",
|
| - " A(this.a);",
|
| - " A.foo(int x, int y);",
|
| - "}",
|
| - "",
|
| - "class B extends A {",
|
| - " int b1;",
|
| - " int b2;",
|
| - " B(int x) : this.b1 = x, super(x), this.b2 = x, super.foo(x, x);",
|
| - "}");
|
| - parseExpectErrors(
|
| - source,
|
| - errEx(ParserErrorCode.SUPER_CONSTRUCTOR_MULTIPLE, 10, 29, 8),
|
| - errEx(ParserErrorCode.SUPER_CONSTRUCTOR_MULTIPLE, 10, 52, 15));
|
| - }
|
| -
|
| - public void testIncompleteClassDeclaration_noLBrace() {
|
| - String sourceCode =
|
| - makeCode(
|
| - "class Baz",
|
| - "class Foo<T> implements Bar<T> {",
|
| - " Foo(T head, Bar<T> tail);",
|
| - "}");
|
| - DartUnit unit =
|
| - parseSourceUnitErrors(
|
| - sourceCode,
|
| - ParserErrorCode.EXPECTED_CLASS_DECLARATION_LBRACE.getMessage(),
|
| - 2,
|
| - 1);
|
| - // check structure of AST, top level Baz and Foo expected
|
| - assertEquals(2, unit.getTopLevelNodes().size());
|
| - assertEquals(
|
| - makeCode(
|
| - "// unit Test.dart",
|
| - "class Baz {",
|
| - "}",
|
| - "",
|
| - "class Foo<T> implements Bar<T> {",
|
| - "",
|
| - " Foo(T head, Bar<T> tail) ;",
|
| - "}",
|
| - ""),
|
| - unit.toSource());
|
| - }
|
| -
|
| - /**
|
| - * Language specification requires that factory should be declared in class. However declaring
|
| - * factory on top level should not cause exceptions in compiler. To ensure this we parse top level
|
| - * factory into normal {@link DartMethodDefinition}.
|
| - * <p>
|
| - * http://code.google.com/p/dart/issues/detail?id=345
|
| - */
|
| - public void test_badTopLevelFactory() {
|
| - DartUnit unit =
|
| - parseSourceUnitErrors(
|
| - "factory foo() {}",
|
| - ParserErrorCode.FACTORY_CANNOT_BE_TOP_LEVEL.getMessage(),
|
| - 1,
|
| - 1);
|
| - DartMethodDefinition factory = (DartMethodDefinition) unit.getTopLevelNodes().get(0);
|
| - assertNotNull(factory);
|
| - // this factory has name, which is allowed for normal method
|
| - assertEquals(true, factory.getName() instanceof DartIdentifier);
|
| - assertEquals("foo", ((DartIdentifier) factory.getName()).getName());
|
| - }
|
| -
|
| - public void test_defaultParameterValue_inClosureTypedef() {
|
| - parseExpectErrors(
|
| - "typedef void f(int a, [int b = 12345, inc c]);",
|
| - errEx(ParserErrorCode.DEFAULT_VALUE_CAN_NOT_BE_SPECIFIED_IN_TYPEDEF, 1, 32, 5));
|
| - }
|
| -
|
| - public void test_defaultParameterValue_inClosure() {
|
| - parseExpectErrors(
|
| - "class A {void f(void cb(int a, [int b = 12345, int c])) {}}",
|
| - errEx(ParserErrorCode.DEFAULT_VALUE_CAN_NOT_BE_SPECIFIED_IN_CLOSURE, 1, 41, 5));
|
| - }
|
| -
|
| - public void test_optionalPositionalParameterValue_inSetter() {
|
| - parseExpectErrors(
|
| - "class A { set f([int b]); }",
|
| - errEx(ParserErrorCode.OPTIONAL_POSITIONAL_PARAMETER_NOT_ALLOWED, 1, 18, 5));
|
| - }
|
| -
|
| - public void test_namedParameterValue_inSetter() {
|
| - parseExpectErrors(
|
| - "class A { set f({int b}); }",
|
| - errEx(ParserErrorCode.NAMED_PARAMETER_NOT_ALLOWED, 1, 18, 5));
|
| - }
|
| -
|
| - public void test_missingEndOfOptionalParameters() {
|
| - parseExpectErrors(
|
| - "class A {void m(var p1, [var p2 = const []) {} }",
|
| - errEx(ParserErrorCode.MISSING_OPTIONAL_PARAMETER_END, 1, 43, 1));
|
| - }
|
| -
|
| - public void test_optionalPositionalParameterValue_inOperator() {
|
| - parseExpectErrors(
|
| - "class A { operator []=(int a, [int b]); }",
|
| - errEx(ParserErrorCode.OPTIONAL_POSITIONAL_PARAMETER_NOT_ALLOWED, 1, 32, 5));
|
| - }
|
| -
|
| - public void test_namedParameterValue_inOperator() {
|
| - parseExpectErrors(
|
| - "class A { operator []=(int a, {int b}); }",
|
| - errEx(ParserErrorCode.NAMED_PARAMETER_NOT_ALLOWED, 1, 32, 5));
|
| - }
|
| -
|
| - /**
|
| - * If keyword "extends" is mistyped in type parameters declaration, we should report about this
|
| - * and then recover correctly.
|
| - * <p>
|
| - * http://code.google.com/p/dart/issues/detail?id=341
|
| - */
|
| - public void test_parseTypeParameter_expectedExtends_mistypedExtends() throws Exception {
|
| - DartParserRunner parserRunner =
|
| - parseSource(Joiner.on("\n").join(
|
| - "class A {",
|
| - "}",
|
| - "class B<X ex> {",
|
| - "}",
|
| - "class C<X extneds A> {",
|
| - "}",
|
| - "class D<X extneds A, Y extends A> {",
|
| - "}"));
|
| - // check expected errors
|
| - assertErrors(
|
| - parserRunner.getErrors(),
|
| - errEx(ParserErrorCode.EXPECTED_EXTENDS, 3, 11, 2),
|
| - errEx(ParserErrorCode.EXPECTED_EXTENDS, 5, 11, 7),
|
| - errEx(ParserErrorCode.EXPECTED_EXTENDS, 7, 11, 7));
|
| - // check structure of AST
|
| - DartUnit dartUnit = parserRunner.getDartUnit();
|
| - String expected =
|
| - Joiner.on("\n").join(
|
| - "// unit " + getName(),
|
| - "class A {",
|
| - "}",
|
| - "",
|
| - "class B<X> {",
|
| - "}",
|
| - "",
|
| - "class C<X extends A> {",
|
| - "}",
|
| - "",
|
| - "class D<X extends A, Y extends A> {",
|
| - "}");
|
| - String actual = dartUnit.toSource().trim();
|
| - if (!expected.equals(actual)) {
|
| - System.err.println("Expected:\n" + expected);
|
| - System.err.println("\nActual:\n" + actual);
|
| - }
|
| - assertEquals(expected, actual);
|
| - }
|
| -
|
| - /**
|
| - * Type parameters declaration is not finished.
|
| - * <p>
|
| - * http://code.google.com/p/dart/issues/detail?id=341
|
| - */
|
| - public void test_parseTypeParameter_unfinishedTypeParameters() throws Exception {
|
| - DartParserRunner parserRunner =
|
| - parseSource(Joiner.on("\n").join(
|
| - "class ClassWithLongEnoughName {",
|
| - "}",
|
| - "class B<X {",
|
| - "}",
|
| - "class C {",
|
| - "}"));
|
| - // check expected errors
|
| - assertErrors(
|
| - parserRunner.getErrors(),
|
| - errEx(ParserErrorCode.EXPECTED_EXTENDS, 3, 11, 1),
|
| - errEx(ParserErrorCode.EXPECTED_TOKEN, 4, 1, 1),
|
| - errEx(ParserErrorCode.EXPECTED_CLASS_DECLARATION_LBRACE, 5, 1, 5));
|
| - // check structure of AST
|
| - DartUnit dartUnit = parserRunner.getDartUnit();
|
| - assertEquals(
|
| - Joiner.on("\n").join(
|
| - "// unit " + getName(),
|
| - "class ClassWithLongEnoughName {",
|
| - "}",
|
| - "",
|
| - "class B<X> {",
|
| - "}",
|
| - "",
|
| - "class C {",
|
| - "}"),
|
| - dartUnit.toSource().trim());
|
| - }
|
| -
|
| - /**
|
| - * Type parameters declaration is not finished, next top level element beginning encountered. May
|
| - * be use just types new class declaration before existing one.
|
| - * <p>
|
| - * http://code.google.com/p/dart/issues/detail?id=341
|
| - */
|
| - public void test_parseTypeParameter_nextTopLevelInTheMiddle() throws Exception {
|
| - DartParserRunner parserRunner =
|
| - parseSource(Joiner.on("\n").join(
|
| - "class ClassWithLongEnoughName {",
|
| - "}",
|
| - "class B<X",
|
| - "class C {",
|
| - "}"));
|
| - // check expected errors
|
| - assertErrors(parserRunner.getErrors(),
|
| - errEx(ParserErrorCode.EXPECTED_TOKEN, 4, 1, 5));
|
| -
|
| - // check structure of AST
|
| - DartUnit dartUnit = parserRunner.getDartUnit();
|
| - assertEquals(
|
| - Joiner.on("\n").join(
|
| - "// unit " + getName(),
|
| - "class ClassWithLongEnoughName {",
|
| - "}",
|
| - "",
|
| - "class B<X> {",
|
| - "}",
|
| - "",
|
| - "class C {",
|
| - "}"),
|
| - dartUnit.toSource().trim());
|
| - }
|
| -
|
| - /**
|
| - * Function signatures require the name to be an identifier; especially true at the top level.
|
| - * <p>
|
| - * http://code.google.com/p/dart/issues/detail?id=839
|
| - */
|
| - public void testTopLevelFunctionNotIdentifier() {
|
| - parseExpectErrors(
|
| - "foo.baz() {}",
|
| - errEx(ParserErrorCode.FUNCTION_NAME_EXPECTED_IDENTIFIER, 1, 1, 7));
|
| - }
|
| -
|
| - public void testInvalidStringInterpolation() {
|
| - parseExpectErrors(
|
| - Joiner.on("\n").join(
|
| - "void main() {",
|
| - " print(\"1 ${42} 2 ${} 3\");",
|
| - " print(\"1 ${42} 2 ${10;} 3\");",
|
| - " print(\"1 ${42} 2 ${10,20} 3\");",
|
| - " print(\"1 ${42} 2 ${10 20} 3\");",
|
| - " print(\"$\");",
|
| - " print(\"$",
|
| - "}"),
|
| - errEx(ParserErrorCode.UNEXPECTED_TOKEN, 2, 22, 1),
|
| - errEx(ParserErrorCode.EXPECTED_TOKEN, 2, 23, 3),
|
| - errEx(ParserErrorCode.EXPECTED_TOKEN, 3, 24, 1),
|
| - errEx(ParserErrorCode.UNEXPECTED_TOKEN_IN_STRING_INTERPOLATION, 3, 25, 1),
|
| - errEx(ParserErrorCode.EXPECTED_TOKEN, 4, 24, 1),
|
| - errEx(ParserErrorCode.UNEXPECTED_TOKEN_IN_STRING_INTERPOLATION, 4, 25, 2),
|
| - errEx(ParserErrorCode.UNEXPECTED_TOKEN_IN_STRING_INTERPOLATION, 4, 27, 1),
|
| - errEx(ParserErrorCode.EXPECTED_TOKEN, 5, 25, 2),
|
| - errEx(ParserErrorCode.UNEXPECTED_TOKEN_IN_STRING_INTERPOLATION, 5, 27, 1),
|
| - errEx(ParserErrorCode.UNEXPECTED_TOKEN_IN_STRING_INTERPOLATION, 6, 11, 0),
|
| - errEx(ParserErrorCode.UNEXPECTED_TOKEN_IN_STRING_INTERPOLATION, 7, 11, 0),
|
| - errEx(ParserErrorCode.UNEXPECTED_TOKEN_IN_STRING_INTERPOLATION, 7, 11, 1),
|
| - errEx(ParserErrorCode.UNEXPECTED_TOKEN_IN_STRING_INTERPOLATION, 8, 1, 1),
|
| - errEx(ParserErrorCode.INCOMPLETE_STRING_LITERAL, 8, 1, 1),
|
| - errEx(ParserErrorCode.EXPECTED_COMMA_OR_RIGHT_PAREN, 8, 2, 0));
|
| - }
|
| -
|
| - public void testDeprecatedFactoryInInterface() {
|
| - parseExpectWarnings(
|
| - "interface foo factory bar {}",
|
| - errEx(ParserErrorCode.DEPRECATED_INTERFACE, 1, 1, 9),
|
| - errEx(ParserErrorCode.DEPRECATED_USE_OF_FACTORY_KEYWORD, 1, 15, 7));
|
| - }
|
| -
|
| - public void test_deprecatedRawString() {
|
| - parseExpectWarnings(
|
| - "String s() { return @'s'; }",
|
| - errEx(ParserErrorCode.DEPRECATED_RAW_STRING, 1, 21, 1));
|
| - }
|
| -
|
| - public void test_useExtendsInTypedef() {
|
| - parseExpectErrors(Joiner.on("\n").join(
|
| - "// filler filler filler filler filler filler filler filler filler filler",
|
| - "typedef ParameterizedFun1<T, U extends bool, V>(T t, U u);",
|
| - ""));
|
| - }
|
| -
|
| - public void test_abstractTopLevel_class() {
|
| - parseExpectErrors(Joiner.on("\n").join(
|
| - "// filler filler filler filler filler filler filler filler filler filler",
|
| - "abstract class A {",
|
| - "}"));
|
| - }
|
| -
|
| - public void test_abstractTopLevel_interface() {
|
| - parseExpectErrors(
|
| - Joiner.on("\n").join(
|
| - "// filler filler filler filler filler filler filler filler filler filler",
|
| - "abstract interface A {",
|
| - "}"),
|
| - errEx(ParserErrorCode.DEPRECATED_INTERFACE, 2, 10, 9),
|
| - errEx(ParserErrorCode.ABSTRACT_TOP_LEVEL_ELEMENT, 2, 1, 8));
|
| - }
|
| -
|
| - public void test_deprecatedInterface() {
|
| - parseExpectErrors(
|
| - Joiner.on("\n").join(
|
| - "// filler filler filler filler filler filler filler filler filler filler",
|
| - "interface A {",
|
| - "}"),
|
| - errEx(ParserErrorCode.DEPRECATED_INTERFACE, 2, 1, 9));
|
| - }
|
| -
|
| - public void test_abstractTopLevel_typedef() {
|
| - parseExpectErrors(
|
| - "abstract typedef void f();",
|
| - errEx(ParserErrorCode.ABSTRACT_TOP_LEVEL_ELEMENT, 1, 1, 8));
|
| - }
|
| -
|
| - public void test_abstractTopLevel_method() {
|
| - parseExpectErrors(
|
| - "abstract void foo() {}",
|
| - errEx(ParserErrorCode.ABSTRACT_TOP_LEVEL_ELEMENT, 1, 1, 8));
|
| - }
|
| -
|
| - public void test_incompleteExpressionInInterpolation() {
|
| - parseExpectErrors(
|
| - "var s = 'fib(3) = ${fib(3}';",
|
| - errEx(ParserErrorCode.EXPECTED_COMMA_OR_RIGHT_PAREN, 1, 26, 1));
|
| - }
|
| -
|
| - public void test_interfaceMethodWithBody() {
|
| - parseExpectErrors(
|
| - Joiner.on("\n").join(
|
| - "// filler filler filler filler filler filler filler filler filler filler",
|
| - "interface A {",
|
| - " foo() {",
|
| - " }",
|
| - "}"),
|
| - errEx(ParserErrorCode.DEPRECATED_INTERFACE, 2, 1, 9),
|
| - errEx(ParserErrorCode.INTERFACE_METHOD_WITH_BODY, 3, 3, 3));
|
| - }
|
| -
|
| - /**
|
| - * The Language Specification in the section 6.1 states: "It is a compile-time error to preface a
|
| - * function declaration with the built-in identifier static."
|
| - */
|
| - public void test_staticFunction_topLevel() {
|
| - parseExpectErrors(
|
| - Joiner.on("\n").join(
|
| - "// filler filler filler filler filler filler filler filler filler filler",
|
| - "static foo() {",
|
| - "}"),
|
| - errEx(ParserErrorCode.TOP_LEVEL_CANNOT_BE_STATIC, 2, 1, 6));
|
| - }
|
| -
|
| - /**
|
| - * The Language Specification in the section 6.1 states: "It is a compile-time error to preface a
|
| - * function declaration with the built-in identifier static."
|
| - */
|
| - public void test_staticFunction_local() {
|
| - DartParserRunner parserRunner =
|
| - parseExpectErrors(
|
| - Joiner.on("\n").join(
|
| - "// filler filler filler filler filler filler filler filler filler filler",
|
| - "topLevelMethodWithLongEnoughNameToForceWrapping() {",
|
| - " static int localFunction() {",
|
| - " }",
|
| - "}"),
|
| - errEx(ParserErrorCode.LOCAL_CANNOT_BE_STATIC, 3, 3, 6));
|
| - // Check that "static" was ignored and "int" parsed as return type.
|
| - assertEquals(
|
| - makeCode(
|
| - "// unit " + getName(),
|
| - "",
|
| - "topLevelMethodWithLongEnoughNameToForceWrapping() {",
|
| - " int localFunction() {",
|
| - " };",
|
| - "}"),
|
| - parserRunner.getDartUnit().toSource());
|
| - }
|
| -
|
| - public void test_positionalArgument_afterNamed() {
|
| - parseExpectErrors(
|
| - Joiner.on("\n").join(
|
| - "// filler filler filler filler filler filler filler filler filler filler",
|
| - "f(r1, [n1, n2]) {}",
|
| - "foo() {",
|
| - " f(-1, n1: 1, 2);",
|
| - "}"),
|
| - errEx(ParserErrorCode.POSITIONAL_AFTER_NAMED_ARGUMENT, 4, 16, 1));
|
| - }
|
| -
|
| - public void test_unaryPlus() {
|
| - parseExpectErrors(
|
| - Joiner.on("\n").join(
|
| - "// filler filler filler filler filler filler filler filler filler filler",
|
| - "var a = 1;",
|
| - "var b = -1;",
|
| - "var c = +1;",
|
| - "var d = -a;",
|
| - "var e = +a;",
|
| - "var f = + 1;",
|
| - ""),
|
| - errEx(ParserErrorCode.NO_UNARY_PLUS_OPERATOR, 6, 9, 1),
|
| - errEx(ParserErrorCode.NO_SPACE_AFTER_PLUS, 7, 9, 1));
|
| - }
|
| -
|
| - public void test_formalParameters_const() throws Exception {
|
| - parseExpectErrors(
|
| - Joiner.on("\n").join(
|
| - "func_const(const x) {}",
|
| - "func_constTyped(const int $) {}"),
|
| - errEx(ParserErrorCode.FORMAL_PARAMETER_IS_CONST, 1, 12, 5),
|
| - errEx(ParserErrorCode.FORMAL_PARAMETER_IS_CONST, 2, 17, 5));
|
| - }
|
| -
|
| - /**
|
| - * Test with variants of function declarations and function literal invocations.
|
| - */
|
| - public void test_functionDeclaration_functionLiteral() {
|
| - DartParserRunner parserRunner =
|
| - parseExpectErrors(Joiner.on("\n").join(
|
| - "// filler filler filler filler filler filler filler filler filler filler",
|
| - "foo() {",
|
| - " f0(p){}", // declaration of function as statement
|
| - " int f1(p){}", // declaration of function as statement, has type
|
| - " var res = (p){}(1);", // invocation of function literal in assignment
|
| - " (p){}(2);", // invocation of function literal in statement, no name
|
| - " f3(p) => 4;", // function with => arrow ends with ';'
|
| - " (5);", // this is separate statement, not invocation of previous function
|
| - " join(promises, (p) => 6);", // function with => arrow as argument
|
| - " join(promises, (p) {return 7;});", // function with block as argument
|
| - "}",
|
| - ""));
|
| - assertEquals(
|
| - makeCode(
|
| - "// unit " + getName(),
|
| - "",
|
| - "foo() {",
|
| - " f0(p) {",
|
| - " };",
|
| - " int f1(p) {",
|
| - " };",
|
| - " var res = (p) {",
|
| - " }(1);",
|
| - " (p) {",
|
| - " }(2);",
|
| - " f3(p) {",
|
| - " return 4;",
|
| - " };",
|
| - " (5);",
|
| - " join(promises, (p) {",
|
| - " return 6;",
|
| - " });",
|
| - " join(promises, (p) {",
|
| - " return 7;",
|
| - " });",
|
| - "}"),
|
| - parserRunner.getDartUnit().toSource());
|
| - }
|
| -
|
| - /**
|
| - * Test for {@link DartUnit#getTopDeclarationNames()}.
|
| - */
|
| - public void test_getTopDeclarationNames() throws Exception {
|
| - DartParserRunner parserRunner =
|
| - parseSource(Joiner.on("\n").join(
|
| - "// filler filler filler filler filler filler filler filler filler filler",
|
| - "class MyClass {}",
|
| - "class MyInterface {}",
|
| - "topLevelMethod() {}",
|
| - "int get topLevelGetter {return 0;}",
|
| - "void set topLevelSetter(int v) {}",
|
| - "typedef void MyTypeDef();",
|
| - ""));
|
| - DartUnit unit = parserRunner.getDartUnit();
|
| - // Check top level declarations.
|
| - Set<String> names = unit.getTopDeclarationNames();
|
| - assertEquals(6, names.size());
|
| - assertTrue(names.contains("MyClass"));
|
| - assertTrue(names.contains("MyInterface"));
|
| - assertTrue(names.contains("topLevelMethod"));
|
| - assertTrue(names.contains("topLevelGetter"));
|
| - assertTrue(names.contains("topLevelSetter"));
|
| - assertTrue(names.contains("MyTypeDef"));
|
| - }
|
| -
|
| - /**
|
| - * Test for {@link DartUnit#getTopDeclarationNames()} and qualified top-level method name.
|
| - * <p>
|
| - * http://code.google.com/p/dart/issues/detail?id=1738
|
| - */
|
| - public void test_getTopDeclarationNames_badName() throws Exception {
|
| - DartParserRunner parserRunner =
|
| - parseSource(Joiner.on("\n").join(
|
| - "// filler filler filler filler filler filler filler filler filler filler",
|
| - "void my.method() {}",
|
| - ""));
|
| - DartUnit unit = parserRunner.getDartUnit();
|
| - // We have top-level node...
|
| - List<DartNode> topLevelNodes = unit.getTopLevelNodes();
|
| - assertEquals(1, topLevelNodes.size());
|
| - // ...but it has wrong name, so ignored.
|
| - Set<String> names = unit.getTopDeclarationNames();
|
| - assertEquals(0, names.size());
|
| - }
|
| -
|
| - /**
|
| - * Test for {@link DartUnit#getDeclarationNames()}.
|
| - */
|
| - public void test_getDeclarationNames() throws Exception {
|
| - DartParserRunner parserRunner =
|
| - parseSource(Joiner.on("\n").join(
|
| - "// filler filler filler filler filler filler filler filler filler filler",
|
| - "class MyClass<TypeVar> {",
|
| - " myMethod(int pA, int pB) {",
|
| - " int varA;",
|
| - " try {",
|
| - " } catch(var ex) {",
|
| - " }",
|
| - " }",
|
| - "}",
|
| - "topLevelMethod() {}",
|
| - "int get topLevelGetter {return 0;}",
|
| - "void set topLevelSetter(int setterParam) {}",
|
| - "typedef void MyTypeDef();",
|
| - ""));
|
| - DartUnit unit = parserRunner.getDartUnit();
|
| - // Check all declarations.
|
| - Set<String> names = unit.getDeclarationNames();
|
| - assertEquals(12, names.size());
|
| - assertTrue(names.contains("MyClass"));
|
| - assertTrue(names.contains("TypeVar"));
|
| - assertTrue(names.contains("myMethod"));
|
| - assertTrue(names.contains("pA"));
|
| - assertTrue(names.contains("pB"));
|
| - assertTrue(names.contains("varA"));
|
| - assertTrue(names.contains("ex"));
|
| - assertTrue(names.contains("topLevelMethod"));
|
| - assertTrue(names.contains("topLevelGetter"));
|
| - assertTrue(names.contains("topLevelSetter"));
|
| - assertTrue(names.contains("setterParam"));
|
| - assertTrue(names.contains("MyTypeDef"));
|
| - }
|
| -
|
| - /**
|
| - * There was bug in diet parser, it did not understand new "arrow" syntax of function definition.
|
| - */
|
| - public void test_dietParser_functionArrow() {
|
| - DartParserRunner parserRunner =
|
| - DartParserRunner.parse(
|
| - getName(),
|
| - Joiner.on("\n").join(
|
| - "class ClassWithVeryLongNameEnoughToForceLineWrapping {",
|
| - " foo() => return 0;",
|
| - "}",
|
| - ""),
|
| - true);
|
| - assertErrors(parserRunner.getErrors());
|
| - assertEquals(
|
| - Joiner.on("\n").join(
|
| - "// unit " + getName(),
|
| - "class ClassWithVeryLongNameEnoughToForceLineWrapping {",
|
| - "",
|
| - " foo() {",
|
| - " }",
|
| - "}"),
|
| - parserRunner.getDartUnit().toSource().trim());
|
| - }
|
| -
|
| - /**
|
| - * "get" is valid name for method, it can cause warning, but not parsing failure.
|
| - */
|
| - public void test_methodNamed_get() {
|
| - parseExpectErrors(Joiner.on("\n").join(
|
| - "// filler filler filler filler filler filler filler filler filler filler",
|
| - "class A {",
|
| - " void get() {}",
|
| - "}",
|
| - ""));
|
| - }
|
| -
|
| - /**
|
| - * "set" is valid name for method, it can cause warning, but not parsing failure.
|
| - */
|
| - public void test_methodNamed_set() {
|
| - parseExpectErrors(Joiner.on("\n").join(
|
| - "// filler filler filler filler filler filler filler filler filler filler",
|
| - "class A {",
|
| - " void set() {}",
|
| - "}",
|
| - ""));
|
| - }
|
| -
|
| - /**
|
| - * "operator" is valid name for method, it can cause warning, but not parsing failure.
|
| - */
|
| - public void test_methodNamed_operator() {
|
| - parseExpectErrors(Joiner.on("\n").join(
|
| - "// filler filler filler filler filler filler filler filler filler filler",
|
| - "class A {",
|
| - " void operator() {}",
|
| - "}",
|
| - ""));
|
| - }
|
| -
|
| - /**
|
| - * We can parse operator "call" declaration.
|
| - */
|
| - public void test_operator_call() {
|
| - parseExpectErrors(Joiner.on("\n").join(
|
| - "// filler filler filler filler filler filler filler filler filler filler",
|
| - "class A {",
|
| - " operator call() {}",
|
| - "}",
|
| - ""));
|
| - }
|
| -
|
| - /**
|
| - * We can parse operator "equals" declaration.
|
| - */
|
| - public void test_operator_equals() {
|
| - DartParserRunner runner = parseExpectErrors(Joiner.on("\n").join(
|
| - "// filler filler filler filler filler filler filler filler filler filler",
|
| - "class A {",
|
| - " operator ==(other) => false;",
|
| - "}",
|
| - ""));
|
| - DartClass clazz = (DartClass) runner.getDartUnit().getTopLevelNodes().get(0);
|
| - DartMethodDefinition method = (DartMethodDefinition) clazz.getMembers().get(0);
|
| - assertTrue(method.getModifiers().isOperator());
|
| - }
|
| -
|
| - /**
|
| - * "native" can be specified only for classes.
|
| - */
|
| - public void test_native_inInterace() {
|
| - parseExpectErrors(
|
| - Joiner.on("\n").join(
|
| - "// filler filler filler filler filler filler filler filler filler filler",
|
| - "interface A native 'N' {",
|
| - "}",
|
| - ""),
|
| - errEx(ParserErrorCode.DEPRECATED_INTERFACE, 2, 1, 9),
|
| - errEx(ParserErrorCode.NATIVE_ONLY_CLASS, 2, 13, 6));
|
| - }
|
| -
|
| - /**
|
| - * "native" can be specified only for classes without "extends".
|
| - */
|
| - public void test_native_classWithExtends() {
|
| - parseExpectErrors(
|
| - Joiner.on("\n").join(
|
| - "// filler filler filler filler filler filler filler filler filler filler",
|
| - "class A {",
|
| - "}",
|
| - "class B extends A native 'N' {",
|
| - "}",
|
| - ""),
|
| - errEx(ParserErrorCode.NATIVE_ONLY_CORE_LIB, 4, 19, 6));
|
| - }
|
| -
|
| - /**
|
| - * "native" can be specified only in "corelib".
|
| - */
|
| - public void test_native_onlyCoreLib() {
|
| - parseExpectErrors(
|
| - Joiner.on("\n").join(
|
| - "// filler filler filler filler filler filler filler filler filler filler",
|
| - "class A native 'N' {",
|
| - "}",
|
| - ""),
|
| - errEx(ParserErrorCode.NATIVE_ONLY_CORE_LIB, 2, 9, 6));
|
| - }
|
| -
|
| - /**
|
| - * "native" can be specified only in "corelib".
|
| - */
|
| - public void test_native_onlyCoreLib_factory() {
|
| - parseExpectErrors(
|
| - Joiner.on("\n").join(
|
| - "// filler filler filler filler filler filler filler filler filler filler",
|
| - "class A {",
|
| - " factory A() native;",
|
| - "}",
|
| - ""),
|
| - errEx(ParserErrorCode.NATIVE_ONLY_CORE_LIB, 3, 15, 6));
|
| - }
|
| -
|
| - /**
|
| - * "native" can be specified only in "corelib".
|
| - */
|
| - public void test_native_onlyCoreLib_method() {
|
| - parseExpectErrors(
|
| - Joiner.on("\n").join(
|
| - "// filler filler filler filler filler filler filler filler filler filler",
|
| - "class A {",
|
| - " factory A() native;",
|
| - "}",
|
| - ""),
|
| - errEx(ParserErrorCode.NATIVE_ONLY_CORE_LIB, 3, 15, 6));
|
| - }
|
| -
|
| - /**
|
| - * The spec in the section 10.28 says:
|
| - * <p>
|
| - * It is a compile-time error if a built-in identifier is used as the declared name of a class,
|
| - * interface, type variable or type alias.
|
| - * <p>
|
| - * http://code.google.com/p/dart/issues/detail?id=3477
|
| - */
|
| - public void test_builtInIdentifier_asClassName() {
|
| - parseExpectErrors(
|
| - Joiner.on("\n").join(
|
| - "// filler filler filler filler filler filler filler filler filler filler",
|
| - "class abstract {}",
|
| - "class as {}",
|
| - "class dynamic {}",
|
| - "class export {}",
|
| - "class external {}",
|
| - "class factory {}",
|
| - "class get {}",
|
| - "class implements {}",
|
| - "class import {}",
|
| - "class library {}",
|
| - "class operator {}",
|
| - "class part {}",
|
| - "class set {}",
|
| - "class static {}",
|
| - "class typedef {}",
|
| - ""),
|
| - errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME, 2, 7, 8), // abstract
|
| - errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME, 3, 7, 2), // as
|
| - errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME, 4, 7, 7), // dynamic
|
| - errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME, 5, 7, 6), // export
|
| - errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME, 6, 7, 8), // external
|
| - errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME, 7, 7, 7), // factory
|
| - errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME, 8, 7, 3), // get
|
| - errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME, 9, 7, 10), // implements
|
| - errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME, 10, 7, 6), // import
|
| - errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME, 11, 7, 7), // library
|
| - errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME, 12, 7, 8), // operator
|
| - errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME, 13, 7, 4), // part
|
| - errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME, 14, 7, 3), // set
|
| - errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME, 15, 7, 6), // static
|
| - errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME, 16, 7, 7)); // typedef
|
| - }
|
| -
|
| - /**
|
| - * The spec in the section 10.28 says:
|
| - * <p>
|
| - * It is a compile-time error if a built-in identifier is used as the declared name of a class,
|
| - * interface, type variable or type alias.
|
| - * <p>
|
| - * http://code.google.com/p/dart/issues/detail?id=3477
|
| - */
|
| - public void test_builtInIdentifier_asTypevariableName() {
|
| - parseExpectErrors(
|
| - Joiner.on("\n").join(
|
| - "// filler filler filler filler filler filler filler filler filler filler",
|
| - "class C01<abstract> {}",
|
| - "class C02<as> {}",
|
| - "class C03<dynamic> {}",
|
| - "class C04<export> {}",
|
| - "class C05<external> {}",
|
| - "class C06<factory> {}",
|
| - "class C07<get> {}",
|
| - "class C08<implements> {}",
|
| - "class C09<import> {}",
|
| - "class C10<library> {}",
|
| - "class C11<operator> {}",
|
| - "class C12<part> {}",
|
| - "class C13<set> {}",
|
| - "class C14<static> {}",
|
| - "class C15<typedef> {}",
|
| - ""),
|
| - errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_VARIABLE_NAME, 2, 11, 8), // abstract
|
| - errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_VARIABLE_NAME, 3, 11, 2), // as
|
| - errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_VARIABLE_NAME, 4, 11, 7), // dynamic
|
| - errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_VARIABLE_NAME, 5, 11, 6), // export
|
| - errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_VARIABLE_NAME, 6, 11, 8), // external
|
| - errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_VARIABLE_NAME, 7, 11, 7), // factory
|
| - errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_VARIABLE_NAME, 8, 11, 3), // get
|
| - errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_VARIABLE_NAME, 9, 11, 10), // implements
|
| - errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_VARIABLE_NAME, 10, 11, 6), // import
|
| - errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_VARIABLE_NAME, 11, 11, 7), // library
|
| - errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_VARIABLE_NAME, 12, 11, 8), // operator
|
| - errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_VARIABLE_NAME, 13, 11, 4), // part
|
| - errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_VARIABLE_NAME, 14, 11, 3), // set
|
| - errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_VARIABLE_NAME, 15, 11, 6), // static
|
| - errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_VARIABLE_NAME, 16, 11, 7)); // typedef
|
| - }
|
| -
|
| - /**
|
| - * The spec in the section 10.28 says:
|
| - * <p>
|
| - * It is a compile-time error if a built-in identifier is used as the declared name of a class,
|
| - * interface, type variable or type alias.
|
| - * <p>
|
| - * http://code.google.com/p/dart/issues/detail?id=3477
|
| - */
|
| - public void test_builtInIdentifier_asTypedefName() {
|
| - parseExpectErrors(
|
| - Joiner.on("\n").join(
|
| - "// filler filler filler filler filler filler filler filler filler filler",
|
| - "typedef abstract();",
|
| - "typedef as();",
|
| - "typedef dynamic();",
|
| - "typedef export();",
|
| - "typedef external();",
|
| - "typedef factory();",
|
| - "typedef get();",
|
| - "typedef implements();",
|
| - "typedef import();",
|
| - "typedef library();",
|
| - "typedef operator();",
|
| - "typedef part();",
|
| - "typedef set();",
|
| - "typedef static();",
|
| - "typedef typedef();",
|
| - ""),
|
| - errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME, 2, 9, 8), // abstract
|
| - errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME, 3, 9, 2), // as
|
| - errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME, 4, 9, 7), // dynamic
|
| - errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME, 5, 9, 6), // export
|
| - errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME, 6, 9, 8), // external
|
| - errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME, 7, 9, 7), // factory
|
| - errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME, 8, 9, 3), // get
|
| - errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME, 9, 9, 10), // implements
|
| - errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME, 10, 9, 6), // import
|
| - errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME, 11, 9, 7), // library
|
| - errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME, 12, 9, 8), // operator
|
| - errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME, 13, 9, 4), // part
|
| - errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME, 14, 9, 3), // set
|
| - errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME, 15, 9, 6), // static
|
| - errEx(ParserErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME, 16, 9, 7)); // typedef
|
| - }
|
| -
|
| - /**
|
| - * There is ambiguity in parsing function expression inside of initializer.
|
| - * <p>
|
| - * But we should be able to parse when function expression is inside of "new expression".
|
| - * <p>
|
| - * http://code.google.com/p/dart/issues/detail?id=2339
|
| - */
|
| - public void test_functionExpression_inInitializer_newExpression() {
|
| - parseExpectErrors(
|
| - Joiner.on("\n").join(
|
| - "// filler filler filler filler filler filler filler filler filler filler",
|
| - "class A {",
|
| - " A(var p) {}",
|
| - "}",
|
| - "class B {",
|
| - " var f;",
|
| - " B() : f = new A(() => 42) {",
|
| - " }",
|
| - "}",
|
| - ""));
|
| - }
|
| -
|
| - /**
|
| - * There is ambiguity in parsing function expression inside of initializer.
|
| - * <p>
|
| - * But we should be able to parse when function expression is inside of "const expression".
|
| - * <p>
|
| - * http://code.google.com/p/dart/issues/detail?id=2339
|
| - */
|
| - public void test_functionExpression_inInitializer_constExpression() {
|
| - parseExpectErrors(
|
| - Joiner.on("\n").join(
|
| - "// filler filler filler filler filler filler filler filler filler filler",
|
| - "class A {",
|
| - " const A(var p) {}",
|
| - "}",
|
| - "class B {",
|
| - " var f;",
|
| - " B() : f = const A(() => 42) {",
|
| - " }",
|
| - "}",
|
| - ""));
|
| - }
|
| -
|
| - /**
|
| - * There is ambiguity in parsing function expression inside of initializer.
|
| - * <p>
|
| - * But we should be able to parse when function expression is inside of "method invocation".
|
| - * <p>
|
| - * http://code.google.com/p/dart/issues/detail?id=2339
|
| - */
|
| - public void test_functionExpression_inInitializer_methodInvocation() {
|
| - parseExpectErrors(
|
| - Joiner.on("\n").join(
|
| - "// filler filler filler filler filler filler filler filler filler filler",
|
| - "foo(var p) {}",
|
| - "class B {",
|
| - " var f;",
|
| - " B() : f = foo(() => 42) {",
|
| - " }",
|
| - "}",
|
| - ""));
|
| - }
|
| -
|
| - public void test_qualifiedType_inForIn() {
|
| - parseExpectErrors(Joiner.on("\n").join(
|
| - "// filler filler filler filler filler filler filler filler filler filler",
|
| - "foo() {",
|
| - " for (pref.A a in elements) {",
|
| - " }",
|
| - "}",
|
| - ""));
|
| - }
|
| -}
|
|
|