| Index: pkg/analyzer/test/generated/parser_test.dart
|
| diff --git a/pkg/analyzer/test/generated/parser_test.dart b/pkg/analyzer/test/generated/parser_test.dart
|
| index 914abd0a90b89b85cada166e116c469900886531..4db306b5f39087200664edd2448ba1521fc5daab 100644
|
| --- a/pkg/analyzer/test/generated/parser_test.dart
|
| +++ b/pkg/analyzer/test/generated/parser_test.dart
|
| @@ -30,6 +30,7 @@ main() {
|
| defineReflectiveTests(NonErrorParserTest);
|
| defineReflectiveTests(RecoveryParserTest);
|
| defineReflectiveTests(SimpleParserTest);
|
| + defineReflectiveTests(TopLevelParserTest);
|
| });
|
| }
|
|
|
| @@ -2942,7 +2943,9 @@ class NonErrorParserTest extends ParserTestCase {
|
| * Implementation of [AbstractParserTestCase] specialized for testing the
|
| * analyzer parser.
|
| */
|
| -class ParserTestCase extends EngineTestCase implements AbstractParserTestCase {
|
| +class ParserTestCase extends EngineTestCase
|
| + with ParserTestHelpers
|
| + implements AbstractParserTestCase {
|
| /**
|
| * A flag indicating whether parser is to parse function bodies.
|
| */
|
| @@ -3176,6 +3179,29 @@ class ParserTestCase extends EngineTestCase implements AbstractParserTestCase {
|
| }
|
|
|
| /**
|
| + * Helper methods that aid in parser tests.
|
| + *
|
| + * Intended to be mixed in to parser test case classes.
|
| + */
|
| +class ParserTestHelpers {
|
| + void expectCommentText(Comment comment, String expectedText) {
|
| + expect(comment.beginToken, same(comment.endToken));
|
| + expect(comment.beginToken.lexeme, expectedText);
|
| + }
|
| +
|
| + void expectDottedName(DottedName name, List<String> expectedComponents) {
|
| + int count = expectedComponents.length;
|
| + NodeList<SimpleIdentifier> components = name.components;
|
| + expect(components, hasLength(count));
|
| + for (int i = 0; i < count; i++) {
|
| + SimpleIdentifier component = components[i];
|
| + expect(component, isNotNull);
|
| + expect(component.name, expectedComponents[i]);
|
| + }
|
| + }
|
| +}
|
| +
|
| +/**
|
| * The class `RecoveryParserTest` defines parser tests that test the parsing of invalid code
|
| * sequences to ensure that the correct recovery steps are taken in the parser.
|
| */
|
| @@ -4491,49 +4517,6 @@ class SimpleParserTest extends ParserTestCase {
|
| expect(literal.isSynthetic, isTrue);
|
| }
|
|
|
| - void test_function_literal_allowed_at_toplevel() {
|
| - parseCompilationUnit("var x = () {};");
|
| - }
|
| -
|
| - void
|
| - test_function_literal_allowed_in_ArgumentList_in_ConstructorFieldInitializer() {
|
| - parseCompilationUnit("class C { C() : a = f(() {}); }");
|
| - }
|
| -
|
| - void
|
| - test_function_literal_allowed_in_IndexExpression_in_ConstructorFieldInitializer() {
|
| - parseCompilationUnit("class C { C() : a = x[() {}]; }");
|
| - }
|
| -
|
| - void
|
| - test_function_literal_allowed_in_ListLiteral_in_ConstructorFieldInitializer() {
|
| - parseCompilationUnit("class C { C() : a = [() {}]; }");
|
| - }
|
| -
|
| - void
|
| - test_function_literal_allowed_in_MapLiteral_in_ConstructorFieldInitializer() {
|
| - parseCompilationUnit("class C { C() : a = {'key': () {}}; }");
|
| - }
|
| -
|
| - void
|
| - test_function_literal_allowed_in_ParenthesizedExpression_in_ConstructorFieldInitializer() {
|
| - parseCompilationUnit("class C { C() : a = (() {}); }");
|
| - }
|
| -
|
| - void
|
| - test_function_literal_allowed_in_StringInterpolation_in_ConstructorFieldInitializer() {
|
| - parseCompilationUnit("class C { C() : a = \"\${(){}}\"; }");
|
| - }
|
| -
|
| - void test_import_as_show() {
|
| - parseCompilationUnit("import 'dart:math' as M show E;");
|
| - }
|
| -
|
| - void test_import_show_hide() {
|
| - parseCompilationUnit(
|
| - "import 'import1_lib.dart' show hide, show hide ugly;");
|
| - }
|
| -
|
| void test_isFunctionDeclaration_nameButNoReturn_block() {
|
| expect(_isFunctionDeclaration("f() {}"), isTrue);
|
| }
|
| @@ -5734,349 +5717,126 @@ class SimpleParserTest extends ParserTestCase {
|
| expect(section.propertyName, isNotNull);
|
| }
|
|
|
| - void test_parseClassDeclaration_abstract() {
|
| - createParser('abstract class A {}');
|
| - CompilationUnitMember member = parseFullCompilationUnitMember();
|
| + void test_parseClassMember_constructor_withInitializers() {
|
| + // TODO(brianwilkerson) Test other kinds of class members: fields, getters
|
| + // and setters.
|
| + createParser('C(_, _\$, this.__) : _a = _ + _\$ {}');
|
| + ClassMember member = parser.parseClassMember('C');
|
| expectNotNullIfNoErrors(member);
|
| listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<ClassDeclaration>());
|
| - ClassDeclaration declaration = member;
|
| - expect(declaration.documentationComment, isNull);
|
| - expect(declaration.abstractKeyword, isNotNull);
|
| - expect(declaration.extendsClause, isNull);
|
| - expect(declaration.implementsClause, isNull);
|
| - expect(declaration.classKeyword, isNotNull);
|
| - expect(declaration.leftBracket, isNotNull);
|
| - expect(declaration.name, isNotNull);
|
| - expect(declaration.members, hasLength(0));
|
| - expect(declaration.rightBracket, isNotNull);
|
| - expect(declaration.typeParameters, isNull);
|
| + expect(member, new isInstanceOf<ConstructorDeclaration>());
|
| + ConstructorDeclaration constructor = member;
|
| + expect(constructor.body, isNotNull);
|
| + expect(constructor.separator, isNotNull);
|
| + expect(constructor.externalKeyword, isNull);
|
| + expect(constructor.constKeyword, isNull);
|
| + expect(constructor.factoryKeyword, isNull);
|
| + expect(constructor.name, isNull);
|
| + expect(constructor.parameters, isNotNull);
|
| + expect(constructor.period, isNull);
|
| + expect(constructor.returnType, isNotNull);
|
| + expect(constructor.initializers, hasLength(1));
|
| }
|
|
|
| - void test_parseClassDeclaration_empty() {
|
| - createParser('class A {}');
|
| - CompilationUnitMember member = parseFullCompilationUnitMember();
|
| + void test_parseClassMember_field_covariant() {
|
| + createParser('covariant T f;');
|
| + ClassMember member = parser.parseClassMember('C');
|
| expectNotNullIfNoErrors(member);
|
| listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<ClassDeclaration>());
|
| - ClassDeclaration declaration = member;
|
| - expect(declaration.documentationComment, isNull);
|
| - expect(declaration.abstractKeyword, isNull);
|
| - expect(declaration.extendsClause, isNull);
|
| - expect(declaration.implementsClause, isNull);
|
| - expect(declaration.classKeyword, isNotNull);
|
| - expect(declaration.leftBracket, isNotNull);
|
| - expect(declaration.name, isNotNull);
|
| - expect(declaration.members, hasLength(0));
|
| - expect(declaration.rightBracket, isNotNull);
|
| - expect(declaration.typeParameters, isNull);
|
| + expect(member, new isInstanceOf<FieldDeclaration>());
|
| + FieldDeclaration field = member;
|
| + expect(field.covariantKeyword, isNotNull);
|
| + expect(field.documentationComment, isNull);
|
| + expect(field.metadata, hasLength(0));
|
| + expect(field.staticKeyword, isNull);
|
| + VariableDeclarationList list = field.fields;
|
| + expect(list, isNotNull);
|
| + NodeList<VariableDeclaration> variables = list.variables;
|
| + expect(variables, hasLength(1));
|
| + VariableDeclaration variable = variables[0];
|
| + expect(variable.name, isNotNull);
|
| }
|
|
|
| - void test_parseClassDeclaration_extends() {
|
| - createParser('class A extends B {}');
|
| - CompilationUnitMember member = parseFullCompilationUnitMember();
|
| + void test_parseClassMember_field_instance_prefixedType() {
|
| + createParser('p.A f;');
|
| + ClassMember member = parser.parseClassMember('C');
|
| expectNotNullIfNoErrors(member);
|
| listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<ClassDeclaration>());
|
| - ClassDeclaration declaration = member;
|
| - expect(declaration.documentationComment, isNull);
|
| - expect(declaration.abstractKeyword, isNull);
|
| - expect(declaration.extendsClause, isNotNull);
|
| - expect(declaration.implementsClause, isNull);
|
| - expect(declaration.classKeyword, isNotNull);
|
| - expect(declaration.leftBracket, isNotNull);
|
| - expect(declaration.name, isNotNull);
|
| - expect(declaration.members, hasLength(0));
|
| - expect(declaration.rightBracket, isNotNull);
|
| - expect(declaration.typeParameters, isNull);
|
| + expect(member, new isInstanceOf<FieldDeclaration>());
|
| + FieldDeclaration field = member;
|
| + expect(field.covariantKeyword, isNull);
|
| + expect(field.documentationComment, isNull);
|
| + expect(field.metadata, hasLength(0));
|
| + expect(field.staticKeyword, isNull);
|
| + VariableDeclarationList list = field.fields;
|
| + expect(list, isNotNull);
|
| + NodeList<VariableDeclaration> variables = list.variables;
|
| + expect(variables, hasLength(1));
|
| + VariableDeclaration variable = variables[0];
|
| + expect(variable.name, isNotNull);
|
| }
|
|
|
| - void test_parseClassDeclaration_extendsAndImplements() {
|
| - createParser('class A extends B implements C {}');
|
| - CompilationUnitMember member = parseFullCompilationUnitMember();
|
| + void test_parseClassMember_field_namedGet() {
|
| + createParser('var get;');
|
| + ClassMember member = parser.parseClassMember('C');
|
| expectNotNullIfNoErrors(member);
|
| listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<ClassDeclaration>());
|
| - ClassDeclaration declaration = member;
|
| - expect(declaration.documentationComment, isNull);
|
| - expect(declaration.abstractKeyword, isNull);
|
| - expect(declaration.extendsClause, isNotNull);
|
| - expect(declaration.implementsClause, isNotNull);
|
| - expect(declaration.classKeyword, isNotNull);
|
| - expect(declaration.leftBracket, isNotNull);
|
| - expect(declaration.name, isNotNull);
|
| - expect(declaration.members, hasLength(0));
|
| - expect(declaration.rightBracket, isNotNull);
|
| - expect(declaration.typeParameters, isNull);
|
| + expect(member, new isInstanceOf<FieldDeclaration>());
|
| + FieldDeclaration field = member;
|
| + expect(field.covariantKeyword, isNull);
|
| + expect(field.documentationComment, isNull);
|
| + expect(field.metadata, hasLength(0));
|
| + expect(field.staticKeyword, isNull);
|
| + VariableDeclarationList list = field.fields;
|
| + expect(list, isNotNull);
|
| + NodeList<VariableDeclaration> variables = list.variables;
|
| + expect(variables, hasLength(1));
|
| + VariableDeclaration variable = variables[0];
|
| + expect(variable.name, isNotNull);
|
| }
|
|
|
| - void test_parseClassDeclaration_extendsAndWith() {
|
| - createParser('class A extends B with C {}');
|
| - CompilationUnitMember member = parseFullCompilationUnitMember();
|
| + void test_parseClassMember_field_namedOperator() {
|
| + createParser('var operator;');
|
| + ClassMember member = parser.parseClassMember('C');
|
| expectNotNullIfNoErrors(member);
|
| listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<ClassDeclaration>());
|
| - ClassDeclaration declaration = member;
|
| - expect(declaration.documentationComment, isNull);
|
| - expect(declaration.abstractKeyword, isNull);
|
| - expect(declaration.classKeyword, isNotNull);
|
| - expect(declaration.name, isNotNull);
|
| - expect(declaration.typeParameters, isNull);
|
| - expect(declaration.extendsClause, isNotNull);
|
| - expect(declaration.withClause, isNotNull);
|
| - expect(declaration.implementsClause, isNull);
|
| - expect(declaration.leftBracket, isNotNull);
|
| - expect(declaration.members, hasLength(0));
|
| - expect(declaration.rightBracket, isNotNull);
|
| + expect(member, new isInstanceOf<FieldDeclaration>());
|
| + FieldDeclaration field = member;
|
| + expect(field.covariantKeyword, isNull);
|
| + expect(field.documentationComment, isNull);
|
| + expect(field.metadata, hasLength(0));
|
| + expect(field.staticKeyword, isNull);
|
| + VariableDeclarationList list = field.fields;
|
| + expect(list, isNotNull);
|
| + NodeList<VariableDeclaration> variables = list.variables;
|
| + expect(variables, hasLength(1));
|
| + VariableDeclaration variable = variables[0];
|
| + expect(variable.name, isNotNull);
|
| }
|
|
|
| - void test_parseClassDeclaration_extendsAndWithAndImplements() {
|
| - createParser('class A extends B with C implements D {}');
|
| - CompilationUnitMember member = parseFullCompilationUnitMember();
|
| + void test_parseClassMember_field_namedOperator_withAssignment() {
|
| + createParser('var operator = (5);');
|
| + ClassMember member = parser.parseClassMember('C');
|
| expectNotNullIfNoErrors(member);
|
| listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<ClassDeclaration>());
|
| - ClassDeclaration declaration = member;
|
| - expect(declaration.documentationComment, isNull);
|
| - expect(declaration.abstractKeyword, isNull);
|
| - expect(declaration.classKeyword, isNotNull);
|
| - expect(declaration.name, isNotNull);
|
| - expect(declaration.typeParameters, isNull);
|
| - expect(declaration.extendsClause, isNotNull);
|
| - expect(declaration.withClause, isNotNull);
|
| - expect(declaration.implementsClause, isNotNull);
|
| - expect(declaration.leftBracket, isNotNull);
|
| - expect(declaration.members, hasLength(0));
|
| - expect(declaration.rightBracket, isNotNull);
|
| + expect(member, new isInstanceOf<FieldDeclaration>());
|
| + FieldDeclaration field = member;
|
| + expect(field.covariantKeyword, isNull);
|
| + expect(field.documentationComment, isNull);
|
| + expect(field.metadata, hasLength(0));
|
| + expect(field.staticKeyword, isNull);
|
| + VariableDeclarationList list = field.fields;
|
| + expect(list, isNotNull);
|
| + NodeList<VariableDeclaration> variables = list.variables;
|
| + expect(variables, hasLength(1));
|
| + VariableDeclaration variable = variables[0];
|
| + expect(variable.name, isNotNull);
|
| + expect(variable.initializer, isNotNull);
|
| }
|
|
|
| - void test_parseClassDeclaration_implements() {
|
| - createParser('class A implements C {}');
|
| - CompilationUnitMember member = parseFullCompilationUnitMember();
|
| - expectNotNullIfNoErrors(member);
|
| - listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<ClassDeclaration>());
|
| - ClassDeclaration declaration = member;
|
| - expect(declaration.documentationComment, isNull);
|
| - expect(declaration.abstractKeyword, isNull);
|
| - expect(declaration.extendsClause, isNull);
|
| - expect(declaration.implementsClause, isNotNull);
|
| - expect(declaration.classKeyword, isNotNull);
|
| - expect(declaration.leftBracket, isNotNull);
|
| - expect(declaration.name, isNotNull);
|
| - expect(declaration.members, hasLength(0));
|
| - expect(declaration.rightBracket, isNotNull);
|
| - expect(declaration.typeParameters, isNull);
|
| - }
|
| -
|
| - void test_parseClassDeclaration_native() {
|
| - createParser('class A native "nativeValue" {}');
|
| - CompilationUnitMember member = parseFullCompilationUnitMember();
|
| - expectNotNullIfNoErrors(member);
|
| - listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<ClassDeclaration>());
|
| - ClassDeclaration declaration = member;
|
| - NativeClause nativeClause = declaration.nativeClause;
|
| - expect(nativeClause, isNotNull);
|
| - expect(nativeClause.nativeKeyword, isNotNull);
|
| - expect(nativeClause.name.stringValue, "nativeValue");
|
| - expect(nativeClause.beginToken, same(nativeClause.nativeKeyword));
|
| - expect(nativeClause.endToken, same(nativeClause.name.endToken));
|
| - }
|
| -
|
| - void test_parseClassDeclaration_nonEmpty() {
|
| - createParser('class A {var f;}');
|
| - CompilationUnitMember member = parseFullCompilationUnitMember();
|
| - expectNotNullIfNoErrors(member);
|
| - listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<ClassDeclaration>());
|
| - ClassDeclaration declaration = member;
|
| - expect(declaration.documentationComment, isNull);
|
| - expect(declaration.abstractKeyword, isNull);
|
| - expect(declaration.extendsClause, isNull);
|
| - expect(declaration.implementsClause, isNull);
|
| - expect(declaration.classKeyword, isNotNull);
|
| - expect(declaration.leftBracket, isNotNull);
|
| - expect(declaration.name, isNotNull);
|
| - expect(declaration.members, hasLength(1));
|
| - expect(declaration.rightBracket, isNotNull);
|
| - expect(declaration.typeParameters, isNull);
|
| - }
|
| -
|
| - void test_parseClassDeclaration_typeAlias_implementsC() {
|
| - createParser('class A = Object with B implements C;');
|
| - CompilationUnitMember member = parseFullCompilationUnitMember();
|
| - expectNotNullIfNoErrors(member);
|
| - listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<ClassTypeAlias>());
|
| - ClassTypeAlias typeAlias = member;
|
| - expect(typeAlias.typedefKeyword, isNotNull);
|
| - expect(typeAlias.name, isNotNull);
|
| - expect(typeAlias.typeParameters, isNull);
|
| - expect(typeAlias.withClause, isNotNull);
|
| - expect(typeAlias.implementsClause, isNotNull);
|
| - expect(typeAlias.implementsClause.implementsKeyword, isNotNull);
|
| - expect(typeAlias.implementsClause.interfaces.length, 1);
|
| - expect(typeAlias.semicolon, isNotNull);
|
| - }
|
| -
|
| - void test_parseClassDeclaration_typeAlias_withB() {
|
| - createParser('class A = Object with B;');
|
| - CompilationUnitMember member = parseFullCompilationUnitMember();
|
| - expectNotNullIfNoErrors(member);
|
| - listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<ClassTypeAlias>());
|
| - ClassTypeAlias typeAlias = member;
|
| - expect(typeAlias.typedefKeyword, isNotNull);
|
| - expect(typeAlias.name, isNotNull);
|
| - expect(typeAlias.typeParameters, isNull);
|
| - expect(typeAlias.withClause, isNotNull);
|
| - expect(typeAlias.withClause.withKeyword, isNotNull);
|
| - expect(typeAlias.withClause.mixinTypes.length, 1);
|
| - expect(typeAlias.implementsClause, isNull);
|
| - expect(typeAlias.semicolon, isNotNull);
|
| - }
|
| -
|
| - void test_parseClassDeclaration_typeParameters() {
|
| - createParser('class A<B> {}');
|
| - CompilationUnitMember member = parseFullCompilationUnitMember();
|
| - expectNotNullIfNoErrors(member);
|
| - listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<ClassDeclaration>());
|
| - ClassDeclaration declaration = member;
|
| - expect(declaration.documentationComment, isNull);
|
| - expect(declaration.abstractKeyword, isNull);
|
| - expect(declaration.extendsClause, isNull);
|
| - expect(declaration.implementsClause, isNull);
|
| - expect(declaration.classKeyword, isNotNull);
|
| - expect(declaration.leftBracket, isNotNull);
|
| - expect(declaration.name, isNotNull);
|
| - expect(declaration.members, hasLength(0));
|
| - expect(declaration.rightBracket, isNotNull);
|
| - expect(declaration.typeParameters, isNotNull);
|
| - expect(declaration.typeParameters.typeParameters, hasLength(1));
|
| - }
|
| -
|
| - void test_parseClassMember_constructor_withInitializers() {
|
| - // TODO(brianwilkerson) Test other kinds of class members: fields, getters
|
| - // and setters.
|
| - createParser('C(_, _\$, this.__) : _a = _ + _\$ {}');
|
| - ClassMember member = parser.parseClassMember('C');
|
| - expectNotNullIfNoErrors(member);
|
| - listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<ConstructorDeclaration>());
|
| - ConstructorDeclaration constructor = member;
|
| - expect(constructor.body, isNotNull);
|
| - expect(constructor.separator, isNotNull);
|
| - expect(constructor.externalKeyword, isNull);
|
| - expect(constructor.constKeyword, isNull);
|
| - expect(constructor.factoryKeyword, isNull);
|
| - expect(constructor.name, isNull);
|
| - expect(constructor.parameters, isNotNull);
|
| - expect(constructor.period, isNull);
|
| - expect(constructor.returnType, isNotNull);
|
| - expect(constructor.initializers, hasLength(1));
|
| - }
|
| -
|
| - void test_parseClassMember_field_covariant() {
|
| - createParser('covariant T f;');
|
| - ClassMember member = parser.parseClassMember('C');
|
| - expectNotNullIfNoErrors(member);
|
| - listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<FieldDeclaration>());
|
| - FieldDeclaration field = member;
|
| - expect(field.covariantKeyword, isNotNull);
|
| - expect(field.documentationComment, isNull);
|
| - expect(field.metadata, hasLength(0));
|
| - expect(field.staticKeyword, isNull);
|
| - VariableDeclarationList list = field.fields;
|
| - expect(list, isNotNull);
|
| - NodeList<VariableDeclaration> variables = list.variables;
|
| - expect(variables, hasLength(1));
|
| - VariableDeclaration variable = variables[0];
|
| - expect(variable.name, isNotNull);
|
| - }
|
| -
|
| - void test_parseClassMember_field_instance_prefixedType() {
|
| - createParser('p.A f;');
|
| - ClassMember member = parser.parseClassMember('C');
|
| - expectNotNullIfNoErrors(member);
|
| - listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<FieldDeclaration>());
|
| - FieldDeclaration field = member;
|
| - expect(field.covariantKeyword, isNull);
|
| - expect(field.documentationComment, isNull);
|
| - expect(field.metadata, hasLength(0));
|
| - expect(field.staticKeyword, isNull);
|
| - VariableDeclarationList list = field.fields;
|
| - expect(list, isNotNull);
|
| - NodeList<VariableDeclaration> variables = list.variables;
|
| - expect(variables, hasLength(1));
|
| - VariableDeclaration variable = variables[0];
|
| - expect(variable.name, isNotNull);
|
| - }
|
| -
|
| - void test_parseClassMember_field_namedGet() {
|
| - createParser('var get;');
|
| - ClassMember member = parser.parseClassMember('C');
|
| - expectNotNullIfNoErrors(member);
|
| - listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<FieldDeclaration>());
|
| - FieldDeclaration field = member;
|
| - expect(field.covariantKeyword, isNull);
|
| - expect(field.documentationComment, isNull);
|
| - expect(field.metadata, hasLength(0));
|
| - expect(field.staticKeyword, isNull);
|
| - VariableDeclarationList list = field.fields;
|
| - expect(list, isNotNull);
|
| - NodeList<VariableDeclaration> variables = list.variables;
|
| - expect(variables, hasLength(1));
|
| - VariableDeclaration variable = variables[0];
|
| - expect(variable.name, isNotNull);
|
| - }
|
| -
|
| - void test_parseClassMember_field_namedOperator() {
|
| - createParser('var operator;');
|
| - ClassMember member = parser.parseClassMember('C');
|
| - expectNotNullIfNoErrors(member);
|
| - listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<FieldDeclaration>());
|
| - FieldDeclaration field = member;
|
| - expect(field.covariantKeyword, isNull);
|
| - expect(field.documentationComment, isNull);
|
| - expect(field.metadata, hasLength(0));
|
| - expect(field.staticKeyword, isNull);
|
| - VariableDeclarationList list = field.fields;
|
| - expect(list, isNotNull);
|
| - NodeList<VariableDeclaration> variables = list.variables;
|
| - expect(variables, hasLength(1));
|
| - VariableDeclaration variable = variables[0];
|
| - expect(variable.name, isNotNull);
|
| - }
|
| -
|
| - void test_parseClassMember_field_namedOperator_withAssignment() {
|
| - createParser('var operator = (5);');
|
| - ClassMember member = parser.parseClassMember('C');
|
| - expectNotNullIfNoErrors(member);
|
| - listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<FieldDeclaration>());
|
| - FieldDeclaration field = member;
|
| - expect(field.covariantKeyword, isNull);
|
| - expect(field.documentationComment, isNull);
|
| - expect(field.metadata, hasLength(0));
|
| - expect(field.staticKeyword, isNull);
|
| - VariableDeclarationList list = field.fields;
|
| - expect(list, isNotNull);
|
| - NodeList<VariableDeclaration> variables = list.variables;
|
| - expect(variables, hasLength(1));
|
| - VariableDeclaration variable = variables[0];
|
| - expect(variable.name, isNotNull);
|
| - expect(variable.initializer, isNotNull);
|
| - }
|
| -
|
| - void test_parseClassMember_field_namedSet() {
|
| - createParser('var set;');
|
| - ClassMember member = parser.parseClassMember('C');
|
| + void test_parseClassMember_field_namedSet() {
|
| + createParser('var set;');
|
| + ClassMember member = parser.parseClassMember('C');
|
| expectNotNullIfNoErrors(member);
|
| listener.assertNoErrors();
|
| expect(member, new isInstanceOf<FieldDeclaration>());
|
| @@ -7260,7181 +7020,7438 @@ void''');
|
| expect(reference.offset, 15);
|
| }
|
|
|
| - void test_parseCompilationUnit_abstractAsPrefix_parameterized() {
|
| - createParser('abstract<dynamic> _abstract = new abstract.A();');
|
| - CompilationUnit unit = parser.parseCompilationUnit2();
|
| - expectNotNullIfNoErrors(unit);
|
| + void test_parseConditionalExpression() {
|
| + createParser('x ? y : z');
|
| + ConditionalExpression expression = parser.parseConditionalExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(unit.scriptTag, isNull);
|
| - expect(unit.directives, hasLength(0));
|
| - expect(unit.declarations, hasLength(1));
|
| - }
|
| -
|
| - void test_parseCompilationUnit_builtIn_asFunctionName() {
|
| - parseCompilationUnit('abstract(x) => 0;');
|
| - parseCompilationUnit('as(x) => 0;');
|
| - parseCompilationUnit('dynamic(x) => 0;');
|
| - parseCompilationUnit('export(x) => 0;');
|
| - parseCompilationUnit('external(x) => 0;');
|
| - parseCompilationUnit('factory(x) => 0;');
|
| - parseCompilationUnit('get(x) => 0;');
|
| - parseCompilationUnit('implements(x) => 0;');
|
| - parseCompilationUnit('import(x) => 0;');
|
| - parseCompilationUnit('library(x) => 0;');
|
| - parseCompilationUnit('operator(x) => 0;');
|
| - parseCompilationUnit('part(x) => 0;');
|
| - parseCompilationUnit('set(x) => 0;');
|
| - parseCompilationUnit('static(x) => 0;');
|
| - parseCompilationUnit('typedef(x) => 0;');
|
| + expect(expression.condition, isNotNull);
|
| + expect(expression.question, isNotNull);
|
| + expect(expression.thenExpression, isNotNull);
|
| + expect(expression.colon, isNotNull);
|
| + expect(expression.elseExpression, isNotNull);
|
| }
|
|
|
| - void test_parseCompilationUnit_directives_multiple() {
|
| - createParser("library l;\npart 'a.dart';");
|
| - CompilationUnit unit = parser.parseCompilationUnit2();
|
| - expectNotNullIfNoErrors(unit);
|
| + void test_parseConfiguration_noOperator_dottedIdentifier() {
|
| + createParser("if (a.b) 'c.dart'");
|
| + Configuration configuration = parser.parseConfiguration();
|
| + expectNotNullIfNoErrors(configuration);
|
| listener.assertNoErrors();
|
| - expect(unit.scriptTag, isNull);
|
| - expect(unit.directives, hasLength(2));
|
| - expect(unit.declarations, hasLength(0));
|
| + expect(configuration.ifKeyword, isNotNull);
|
| + expect(configuration.leftParenthesis, isNotNull);
|
| + expectDottedName(configuration.name, ["a", "b"]);
|
| + expect(configuration.equalToken, isNull);
|
| + expect(configuration.value, isNull);
|
| + expect(configuration.rightParenthesis, isNotNull);
|
| + expect(configuration.uri, isNotNull);
|
| }
|
|
|
| - void test_parseCompilationUnit_directives_single() {
|
| - createParser('library l;');
|
| - CompilationUnit unit = parser.parseCompilationUnit2();
|
| - expectNotNullIfNoErrors(unit);
|
| + void test_parseConfiguration_noOperator_simpleIdentifier() {
|
| + createParser("if (a) 'b.dart'");
|
| + Configuration configuration = parser.parseConfiguration();
|
| + expectNotNullIfNoErrors(configuration);
|
| listener.assertNoErrors();
|
| - expect(unit.scriptTag, isNull);
|
| - expect(unit.directives, hasLength(1));
|
| - expect(unit.declarations, hasLength(0));
|
| + expect(configuration.ifKeyword, isNotNull);
|
| + expect(configuration.leftParenthesis, isNotNull);
|
| + expectDottedName(configuration.name, ["a"]);
|
| + expect(configuration.equalToken, isNull);
|
| + expect(configuration.value, isNull);
|
| + expect(configuration.rightParenthesis, isNotNull);
|
| + expect(configuration.uri, isNotNull);
|
| }
|
|
|
| - void test_parseCompilationUnit_empty() {
|
| - createParser('');
|
| - CompilationUnit unit = parser.parseCompilationUnit2();
|
| - expectNotNullIfNoErrors(unit);
|
| + void test_parseConfiguration_operator_dottedIdentifier() {
|
| + createParser("if (a.b == 'c') 'd.dart'");
|
| + Configuration configuration = parser.parseConfiguration();
|
| + expectNotNullIfNoErrors(configuration);
|
| listener.assertNoErrors();
|
| - expect(unit.scriptTag, isNull);
|
| - expect(unit.directives, hasLength(0));
|
| - expect(unit.declarations, hasLength(0));
|
| + expect(configuration.ifKeyword, isNotNull);
|
| + expect(configuration.leftParenthesis, isNotNull);
|
| + expectDottedName(configuration.name, ["a", "b"]);
|
| + expect(configuration.equalToken, isNotNull);
|
| + expect(configuration.value, isNotNull);
|
| + expect(configuration.rightParenthesis, isNotNull);
|
| + expect(configuration.uri, isNotNull);
|
| }
|
|
|
| - void test_parseCompilationUnit_exportAsPrefix() {
|
| - createParser('export.A _export = new export.A();');
|
| - CompilationUnit unit = parser.parseCompilationUnit2();
|
| - expectNotNullIfNoErrors(unit);
|
| + void test_parseConfiguration_operator_simpleIdentifier() {
|
| + createParser("if (a == 'b') 'c.dart'");
|
| + Configuration configuration = parser.parseConfiguration();
|
| + expectNotNullIfNoErrors(configuration);
|
| listener.assertNoErrors();
|
| - expect(unit.scriptTag, isNull);
|
| - expect(unit.directives, hasLength(0));
|
| - expect(unit.declarations, hasLength(1));
|
| + expect(configuration.ifKeyword, isNotNull);
|
| + expect(configuration.leftParenthesis, isNotNull);
|
| + expectDottedName(configuration.name, ["a"]);
|
| + expect(configuration.equalToken, isNotNull);
|
| + expect(configuration.value, isNotNull);
|
| + expect(configuration.rightParenthesis, isNotNull);
|
| + expect(configuration.uri, isNotNull);
|
| }
|
|
|
| - void test_parseCompilationUnit_exportAsPrefix_parameterized() {
|
| - createParser('export<dynamic> _export = new export.A();');
|
| - CompilationUnit unit = parser.parseCompilationUnit2();
|
| - expectNotNullIfNoErrors(unit);
|
| + void test_parseConstExpression_instanceCreation() {
|
| + createParser('const A()');
|
| + Expression expression = parser.parseConstExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(unit.scriptTag, isNull);
|
| - expect(unit.directives, hasLength(0));
|
| - expect(unit.declarations, hasLength(1));
|
| + expect(expression, new isInstanceOf<InstanceCreationExpression>());
|
| + InstanceCreationExpression instanceCreation = expression;
|
| + expect(instanceCreation.keyword, isNotNull);
|
| + ConstructorName name = instanceCreation.constructorName;
|
| + expect(name, isNotNull);
|
| + expect(name.type, isNotNull);
|
| + expect(name.period, isNull);
|
| + expect(name.name, isNull);
|
| + expect(instanceCreation.argumentList, isNotNull);
|
| }
|
|
|
| - void test_parseCompilationUnit_operatorAsPrefix_parameterized() {
|
| - createParser('operator<dynamic> _operator = new operator.A();');
|
| - CompilationUnit unit = parser.parseCompilationUnit2();
|
| - expectNotNullIfNoErrors(unit);
|
| + void test_parseConstExpression_listLiteral_typed() {
|
| + createParser('const <A> []');
|
| + Expression expression = parser.parseConstExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(unit.scriptTag, isNull);
|
| - expect(unit.directives, hasLength(0));
|
| - expect(unit.declarations, hasLength(1));
|
| + expect(expression, new isInstanceOf<ListLiteral>());
|
| + ListLiteral literal = expression;
|
| + expect(literal.constKeyword, isNotNull);
|
| + expect(literal.typeArguments, isNotNull);
|
| + expect(literal.leftBracket, isNotNull);
|
| + expect(literal.elements, hasLength(0));
|
| + expect(literal.rightBracket, isNotNull);
|
| }
|
|
|
| - void test_parseCompilationUnit_script() {
|
| - createParser('#! /bin/dart');
|
| - CompilationUnit unit = parser.parseCompilationUnit2();
|
| - expectNotNullIfNoErrors(unit);
|
| + void test_parseConstExpression_listLiteral_typed_genericComment() {
|
| + enableGenericMethodComments = true;
|
| + createParser('const /*<A>*/ []');
|
| + Expression expression = parser.parseConstExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(unit.scriptTag, isNotNull);
|
| - expect(unit.directives, hasLength(0));
|
| - expect(unit.declarations, hasLength(0));
|
| + expect(expression, new isInstanceOf<ListLiteral>());
|
| + ListLiteral literal = expression;
|
| + expect(literal.constKeyword, isNotNull);
|
| + expect(literal.typeArguments, isNotNull);
|
| + expect(literal.leftBracket, isNotNull);
|
| + expect(literal.elements, hasLength(0));
|
| + expect(literal.rightBracket, isNotNull);
|
| }
|
|
|
| - void test_parseCompilationUnit_skipFunctionBody_withInterpolation() {
|
| - ParserTestCase.parseFunctionBodies = false;
|
| - createParser('f() { "\${n}"; }');
|
| - CompilationUnit unit = parser.parseCompilationUnit2();
|
| - expectNotNullIfNoErrors(unit);
|
| + void test_parseConstExpression_listLiteral_untyped() {
|
| + createParser('const []');
|
| + Expression expression = parser.parseConstExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(unit.scriptTag, isNull);
|
| - expect(unit.declarations, hasLength(1));
|
| + expect(expression, new isInstanceOf<ListLiteral>());
|
| + ListLiteral literal = expression;
|
| + expect(literal.constKeyword, isNotNull);
|
| + expect(literal.typeArguments, isNull);
|
| + expect(literal.leftBracket, isNotNull);
|
| + expect(literal.elements, hasLength(0));
|
| + expect(literal.rightBracket, isNotNull);
|
| }
|
|
|
| - void test_parseCompilationUnit_topLevelDeclaration() {
|
| - createParser('class A {}');
|
| - CompilationUnit unit = parser.parseCompilationUnit2();
|
| - expectNotNullIfNoErrors(unit);
|
| + void test_parseConstExpression_mapLiteral_typed() {
|
| + createParser('const <A, B> {}');
|
| + Expression expression = parser.parseConstExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(unit.scriptTag, isNull);
|
| - expect(unit.directives, hasLength(0));
|
| - expect(unit.declarations, hasLength(1));
|
| + expect(expression, new isInstanceOf<MapLiteral>());
|
| + MapLiteral literal = expression;
|
| + expect(literal.leftBracket, isNotNull);
|
| + expect(literal.entries, hasLength(0));
|
| + expect(literal.rightBracket, isNotNull);
|
| + expect(literal.typeArguments, isNotNull);
|
| }
|
|
|
| - void test_parseCompilationUnit_typedefAsPrefix() {
|
| - createParser('typedef.A _typedef = new typedef.A();');
|
| - CompilationUnit unit = parser.parseCompilationUnit2();
|
| - expectNotNullIfNoErrors(unit);
|
| + void test_parseConstExpression_mapLiteral_typed_genericComment() {
|
| + enableGenericMethodComments = true;
|
| + createParser('const /*<A, B>*/ {}');
|
| + Expression expression = parser.parseConstExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(unit.scriptTag, isNull);
|
| - expect(unit.directives, hasLength(0));
|
| - expect(unit.declarations, hasLength(1));
|
| + expect(expression, new isInstanceOf<MapLiteral>());
|
| + MapLiteral literal = expression;
|
| + expect(literal.leftBracket, isNotNull);
|
| + expect(literal.entries, hasLength(0));
|
| + expect(literal.rightBracket, isNotNull);
|
| + expect(literal.typeArguments, isNotNull);
|
| }
|
|
|
| - void test_parseCompilationUnitMember_abstractAsPrefix() {
|
| - createParser('abstract.A _abstract = new abstract.A();');
|
| - CompilationUnitMember member = parseFullCompilationUnitMember();
|
| - expectNotNullIfNoErrors(member);
|
| + void test_parseConstExpression_mapLiteral_untyped() {
|
| + createParser('const {}');
|
| + Expression expression = parser.parseConstExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<TopLevelVariableDeclaration>());
|
| - TopLevelVariableDeclaration declaration = member;
|
| - expect(declaration.semicolon, isNotNull);
|
| - expect(declaration.variables, isNotNull);
|
| + expect(expression, new isInstanceOf<MapLiteral>());
|
| + MapLiteral literal = expression;
|
| + expect(literal.leftBracket, isNotNull);
|
| + expect(literal.entries, hasLength(0));
|
| + expect(literal.rightBracket, isNotNull);
|
| + expect(literal.typeArguments, isNull);
|
| }
|
|
|
| - void test_parseCompilationUnitMember_class() {
|
| - createParser('class A {}');
|
| - CompilationUnitMember member = parseFullCompilationUnitMember();
|
| - expectNotNullIfNoErrors(member);
|
| - listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<ClassDeclaration>());
|
| - ClassDeclaration declaration = member;
|
| - expect(declaration.name.name, "A");
|
| - expect(declaration.members, hasLength(0));
|
| + void test_parseConstructor() {
|
| + // TODO(brianwilkerson) Implement tests for this method.
|
| }
|
|
|
| - void test_parseCompilationUnitMember_classTypeAlias() {
|
| - createParser('abstract class A = B with C;');
|
| - CompilationUnitMember member = parseFullCompilationUnitMember();
|
| + void test_parseConstructor_assert() {
|
| + enableAssertInitializer = true;
|
| + createParser('C(x, y) : _x = x, assert (x < y), _y = y;');
|
| + ClassMember member = parser.parseClassMember('C');
|
| expectNotNullIfNoErrors(member);
|
| listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<ClassTypeAlias>());
|
| - ClassTypeAlias declaration = member;
|
| - expect(declaration.name.name, "A");
|
| - expect(declaration.abstractKeyword, isNotNull);
|
| + expect(member, new isInstanceOf<ConstructorDeclaration>());
|
| + ConstructorDeclaration constructor = member as ConstructorDeclaration;
|
| + NodeList<ConstructorInitializer> initializers = constructor.initializers;
|
| + expect(initializers, hasLength(3));
|
| + ConstructorInitializer initializer = initializers[1];
|
| + expect(initializer, new isInstanceOf<AssertInitializer>());
|
| + AssertInitializer assertInitializer = initializer;
|
| + expect(assertInitializer.condition, isNotNull);
|
| + expect(assertInitializer.message, isNull);
|
| }
|
|
|
| - void test_parseCompilationUnitMember_constVariable() {
|
| - createParser('const int x = 0;');
|
| - CompilationUnitMember member = parseFullCompilationUnitMember();
|
| + void test_parseConstructor_with_pseudo_function_literal() {
|
| + // "(b) {}" should not be misinterpreted as a function literal even though
|
| + // it looks like one.
|
| + createParser('C() : a = (b) {}');
|
| + ClassMember member = parser.parseClassMember('C');
|
| expectNotNullIfNoErrors(member);
|
| listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<TopLevelVariableDeclaration>());
|
| - TopLevelVariableDeclaration declaration = member;
|
| - expect(declaration.semicolon, isNotNull);
|
| - expect(declaration.variables, isNotNull);
|
| + expect(member, new isInstanceOf<ConstructorDeclaration>());
|
| + ConstructorDeclaration constructor = member as ConstructorDeclaration;
|
| + NodeList<ConstructorInitializer> initializers = constructor.initializers;
|
| + expect(initializers, hasLength(1));
|
| + ConstructorInitializer initializer = initializers[0];
|
| + EngineTestCase.assertInstanceOf((obj) => obj is ConstructorFieldInitializer,
|
| + ConstructorFieldInitializer, initializer);
|
| + EngineTestCase.assertInstanceOf(
|
| + (obj) => obj is ParenthesizedExpression,
|
| + ParenthesizedExpression,
|
| + (initializer as ConstructorFieldInitializer).expression);
|
| + EngineTestCase.assertInstanceOf(
|
| + (obj) => obj is BlockFunctionBody, BlockFunctionBody, constructor.body);
|
| }
|
|
|
| - void test_parseCompilationUnitMember_finalVariable() {
|
| - createParser('final x = 0;');
|
| - CompilationUnitMember member = parseFullCompilationUnitMember();
|
| - expectNotNullIfNoErrors(member);
|
| - listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<TopLevelVariableDeclaration>());
|
| - TopLevelVariableDeclaration declaration = member;
|
| - expect(declaration.semicolon, isNotNull);
|
| - expect(declaration.variables, isNotNull);
|
| - }
|
| -
|
| - void test_parseCompilationUnitMember_function_external_noType() {
|
| - createParser('external f();');
|
| - CompilationUnitMember member = parseFullCompilationUnitMember();
|
| - expectNotNullIfNoErrors(member);
|
| + void test_parseConstructorFieldInitializer_qualified() {
|
| + createParser('this.a = b');
|
| + ConstructorFieldInitializer initializer =
|
| + parser.parseConstructorFieldInitializer(true);
|
| + expectNotNullIfNoErrors(initializer);
|
| listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<FunctionDeclaration>());
|
| - FunctionDeclaration declaration = member;
|
| - expect(declaration.externalKeyword, isNotNull);
|
| - expect(declaration.functionExpression, isNotNull);
|
| - expect(declaration.propertyKeyword, isNull);
|
| + expect(initializer.equals, isNotNull);
|
| + expect(initializer.expression, isNotNull);
|
| + expect(initializer.fieldName, isNotNull);
|
| + expect(initializer.thisKeyword, isNotNull);
|
| + expect(initializer.period, isNotNull);
|
| }
|
|
|
| - void test_parseCompilationUnitMember_function_external_type() {
|
| - createParser('external int f();');
|
| - CompilationUnitMember member = parseFullCompilationUnitMember();
|
| - expectNotNullIfNoErrors(member);
|
| + void test_parseConstructorFieldInitializer_unqualified() {
|
| + createParser('a = b');
|
| + ConstructorFieldInitializer initializer =
|
| + parser.parseConstructorFieldInitializer(false);
|
| + expectNotNullIfNoErrors(initializer);
|
| listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<FunctionDeclaration>());
|
| - FunctionDeclaration declaration = member;
|
| - expect(declaration.externalKeyword, isNotNull);
|
| - expect(declaration.functionExpression, isNotNull);
|
| - expect(declaration.propertyKeyword, isNull);
|
| + expect(initializer.equals, isNotNull);
|
| + expect(initializer.expression, isNotNull);
|
| + expect(initializer.fieldName, isNotNull);
|
| + expect(initializer.thisKeyword, isNull);
|
| + expect(initializer.period, isNull);
|
| }
|
|
|
| - void test_parseCompilationUnitMember_function_generic_noReturnType() {
|
| - createParser('f<E>() {}');
|
| - CompilationUnitMember member = parseFullCompilationUnitMember();
|
| - expectNotNullIfNoErrors(member);
|
| + void test_parseConstructorName_named_noPrefix() {
|
| + createParser('A.n;');
|
| + ConstructorName name = parser.parseConstructorName();
|
| + expectNotNullIfNoErrors(name);
|
| listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<FunctionDeclaration>());
|
| - FunctionDeclaration declaration = member;
|
| - expect(declaration.returnType, isNull);
|
| - expect(declaration.functionExpression.typeParameters, isNotNull);
|
| + expect(name.type, isNotNull);
|
| + expect(name.period, isNull);
|
| + expect(name.name, isNull);
|
| }
|
|
|
| - void
|
| - test_parseCompilationUnitMember_function_generic_noReturnType_annotated() {
|
| - createParser('f<@a E>() {}');
|
| - CompilationUnitMember member = parseFullCompilationUnitMember();
|
| - expectNotNullIfNoErrors(member);
|
| + void test_parseConstructorName_named_prefixed() {
|
| + createParser('p.A.n;');
|
| + ConstructorName name = parser.parseConstructorName();
|
| + expectNotNullIfNoErrors(name);
|
| listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<FunctionDeclaration>());
|
| - FunctionDeclaration declaration = member;
|
| - expect(declaration.returnType, isNull);
|
| - expect(declaration.functionExpression.typeParameters, isNotNull);
|
| + expect(name.type, isNotNull);
|
| + expect(name.period, isNotNull);
|
| + expect(name.name, isNotNull);
|
| }
|
|
|
| - void test_parseCompilationUnitMember_function_generic_returnType() {
|
| - createParser('E f<E>() {}');
|
| - CompilationUnitMember member = parseFullCompilationUnitMember();
|
| - expectNotNullIfNoErrors(member);
|
| + void test_parseConstructorName_unnamed_noPrefix() {
|
| + createParser('A;');
|
| + ConstructorName name = parser.parseConstructorName();
|
| + expectNotNullIfNoErrors(name);
|
| listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<FunctionDeclaration>());
|
| - FunctionDeclaration declaration = member;
|
| - expect(declaration.returnType, isNotNull);
|
| - expect(declaration.functionExpression.typeParameters, isNotNull);
|
| + expect(name.type, isNotNull);
|
| + expect(name.period, isNull);
|
| + expect(name.name, isNull);
|
| }
|
|
|
| - void test_parseCompilationUnitMember_function_generic_void() {
|
| - createParser('void f<T>(T t) {}');
|
| - CompilationUnitMember member = parseFullCompilationUnitMember();
|
| - expectNotNullIfNoErrors(member);
|
| + void test_parseConstructorName_unnamed_prefixed() {
|
| + createParser('p.A;');
|
| + ConstructorName name = parser.parseConstructorName();
|
| + expectNotNullIfNoErrors(name);
|
| listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<FunctionDeclaration>());
|
| - FunctionDeclaration declaration = member;
|
| - expect(declaration.functionExpression, isNotNull);
|
| - expect(declaration.propertyKeyword, isNull);
|
| + expect(name.type, isNotNull);
|
| + expect(name.period, isNull);
|
| + expect(name.name, isNull);
|
| }
|
|
|
| - void test_parseCompilationUnitMember_function_noType() {
|
| - createParser('f() {}');
|
| - CompilationUnitMember member = parseFullCompilationUnitMember();
|
| - expectNotNullIfNoErrors(member);
|
| - listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<FunctionDeclaration>());
|
| - FunctionDeclaration declaration = member;
|
| - expect(declaration.functionExpression, isNotNull);
|
| - expect(declaration.propertyKeyword, isNull);
|
| + void test_parseContinueStatement_label() {
|
| + createParser('continue foo;');
|
| + ContinueStatement statement = parser.parseContinueStatement();
|
| + expectNotNullIfNoErrors(statement);
|
| + listener.assertErrorsWithCodes([ParserErrorCode.CONTINUE_OUTSIDE_OF_LOOP]);
|
| + expect(statement.continueKeyword, isNotNull);
|
| + expect(statement.label, isNotNull);
|
| + expect(statement.semicolon, isNotNull);
|
| }
|
|
|
| - void test_parseCompilationUnitMember_function_type() {
|
| - createParser('int f() {}');
|
| - CompilationUnitMember member = parseFullCompilationUnitMember();
|
| - expectNotNullIfNoErrors(member);
|
| - listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<FunctionDeclaration>());
|
| - FunctionDeclaration declaration = member;
|
| - expect(declaration.functionExpression, isNotNull);
|
| - expect(declaration.propertyKeyword, isNull);
|
| + void test_parseContinueStatement_noLabel() {
|
| + createParser('continue;');
|
| + ContinueStatement statement = parser.parseContinueStatement();
|
| + expectNotNullIfNoErrors(statement);
|
| + listener.assertErrorsWithCodes([ParserErrorCode.CONTINUE_OUTSIDE_OF_LOOP]);
|
| + expect(statement.continueKeyword, isNotNull);
|
| + expect(statement.label, isNull);
|
| + expect(statement.semicolon, isNotNull);
|
| }
|
|
|
| - void test_parseCompilationUnitMember_function_void() {
|
| - createParser('void f() {}');
|
| - CompilationUnitMember member = parseFullCompilationUnitMember();
|
| - expectNotNullIfNoErrors(member);
|
| + void test_parseDocumentationComment_block() {
|
| + createParser('/** */ class');
|
| + Comment comment = parser
|
| + .parseDocumentationComment(parser.parseDocumentationCommentTokens());
|
| + expectNotNullIfNoErrors(comment);
|
| listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<FunctionDeclaration>());
|
| - FunctionDeclaration declaration = member;
|
| - expect(declaration.returnType, isNotNull);
|
| + expect(comment.isBlock, isFalse);
|
| + expect(comment.isDocumentation, isTrue);
|
| + expect(comment.isEndOfLine, isFalse);
|
| }
|
|
|
| - void test_parseCompilationUnitMember_getter_external_noType() {
|
| - createParser('external get p;');
|
| - CompilationUnitMember member = parseFullCompilationUnitMember();
|
| - expectNotNullIfNoErrors(member);
|
| + void test_parseDocumentationComment_block_withReference() {
|
| + createParser('/** [a] */ class');
|
| + Comment comment = parser
|
| + .parseDocumentationComment(parser.parseDocumentationCommentTokens());
|
| + expectNotNullIfNoErrors(comment);
|
| listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<FunctionDeclaration>());
|
| - FunctionDeclaration declaration = member;
|
| - expect(declaration.externalKeyword, isNotNull);
|
| - expect(declaration.functionExpression, isNotNull);
|
| - expect(declaration.propertyKeyword, isNotNull);
|
| + expect(comment.isBlock, isFalse);
|
| + expect(comment.isDocumentation, isTrue);
|
| + expect(comment.isEndOfLine, isFalse);
|
| + NodeList<CommentReference> references = comment.references;
|
| + expect(references, hasLength(1));
|
| + CommentReference reference = references[0];
|
| + expect(reference, isNotNull);
|
| + expect(reference.offset, 5);
|
| }
|
|
|
| - void test_parseCompilationUnitMember_getter_external_type() {
|
| - createParser('external int get p;');
|
| - CompilationUnitMember member = parseFullCompilationUnitMember();
|
| - expectNotNullIfNoErrors(member);
|
| + void test_parseDocumentationComment_endOfLine() {
|
| + createParser('/// \n/// \n class');
|
| + Comment comment = parser
|
| + .parseDocumentationComment(parser.parseDocumentationCommentTokens());
|
| + expectNotNullIfNoErrors(comment);
|
| listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<FunctionDeclaration>());
|
| - FunctionDeclaration declaration = member;
|
| - expect(declaration.externalKeyword, isNotNull);
|
| - expect(declaration.functionExpression, isNotNull);
|
| - expect(declaration.propertyKeyword, isNotNull);
|
| + expect(comment.isBlock, isFalse);
|
| + expect(comment.isDocumentation, isTrue);
|
| + expect(comment.isEndOfLine, isFalse);
|
| }
|
|
|
| - void test_parseCompilationUnitMember_getter_noType() {
|
| - createParser('get p => 0;');
|
| - CompilationUnitMember member = parseFullCompilationUnitMember();
|
| - expectNotNullIfNoErrors(member);
|
| + void test_parseDoStatement() {
|
| + createParser('do {} while (x);');
|
| + DoStatement statement = parser.parseDoStatement();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<FunctionDeclaration>());
|
| - FunctionDeclaration declaration = member;
|
| - expect(declaration.functionExpression, isNotNull);
|
| - expect(declaration.propertyKeyword, isNotNull);
|
| + expect(statement.doKeyword, isNotNull);
|
| + expect(statement.body, isNotNull);
|
| + expect(statement.whileKeyword, isNotNull);
|
| + expect(statement.leftParenthesis, isNotNull);
|
| + expect(statement.condition, isNotNull);
|
| + expect(statement.rightParenthesis, isNotNull);
|
| + expect(statement.semicolon, isNotNull);
|
| }
|
|
|
| - void test_parseCompilationUnitMember_getter_type() {
|
| - createParser('int get p => 0;');
|
| - CompilationUnitMember member = parseFullCompilationUnitMember();
|
| - expectNotNullIfNoErrors(member);
|
| + void test_parseDottedName_multiple() {
|
| + createParser('a.b.c');
|
| + DottedName name = parser.parseDottedName();
|
| + expectNotNullIfNoErrors(name);
|
| listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<FunctionDeclaration>());
|
| - FunctionDeclaration declaration = member;
|
| - expect(declaration.functionExpression, isNotNull);
|
| - expect(declaration.propertyKeyword, isNotNull);
|
| + expectDottedName(name, ["a", "b", "c"]);
|
| }
|
|
|
| - void test_parseCompilationUnitMember_setter_external_noType() {
|
| - createParser('external set p(v);');
|
| - CompilationUnitMember member = parseFullCompilationUnitMember();
|
| - expectNotNullIfNoErrors(member);
|
| + void test_parseDottedName_single() {
|
| + createParser('a');
|
| + DottedName name = parser.parseDottedName();
|
| + expectNotNullIfNoErrors(name);
|
| listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<FunctionDeclaration>());
|
| - FunctionDeclaration declaration = member;
|
| - expect(declaration.externalKeyword, isNotNull);
|
| - expect(declaration.functionExpression, isNotNull);
|
| - expect(declaration.propertyKeyword, isNotNull);
|
| + expectDottedName(name, ["a"]);
|
| }
|
|
|
| - void test_parseCompilationUnitMember_setter_external_type() {
|
| - createParser('external void set p(int v);');
|
| - CompilationUnitMember member = parseFullCompilationUnitMember();
|
| - expectNotNullIfNoErrors(member);
|
| + void test_parseEmptyStatement() {
|
| + createParser(';');
|
| + EmptyStatement statement = parser.parseEmptyStatement();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<FunctionDeclaration>());
|
| - FunctionDeclaration declaration = member;
|
| - expect(declaration.externalKeyword, isNotNull);
|
| - expect(declaration.functionExpression, isNotNull);
|
| - expect(declaration.propertyKeyword, isNotNull);
|
| + expect(statement.semicolon, isNotNull);
|
| }
|
|
|
| - void test_parseCompilationUnitMember_setter_noType() {
|
| - createParser('set p(v) {}');
|
| - CompilationUnitMember member = parseFullCompilationUnitMember();
|
| - expectNotNullIfNoErrors(member);
|
| - listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<FunctionDeclaration>());
|
| - FunctionDeclaration declaration = member;
|
| - expect(declaration.functionExpression, isNotNull);
|
| - expect(declaration.propertyKeyword, isNotNull);
|
| + void test_parseEqualityExpression_normal() {
|
| + createParser('x == y');
|
| + BinaryExpression expression = parser.parseEqualityExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| + listener.assertNoErrors();
|
| + expect(expression.leftOperand, isNotNull);
|
| + expect(expression.operator, isNotNull);
|
| + expect(expression.operator.type, TokenType.EQ_EQ);
|
| + expect(expression.rightOperand, isNotNull);
|
| }
|
|
|
| - void test_parseCompilationUnitMember_setter_type() {
|
| - createParser('void set p(int v) {}');
|
| - CompilationUnitMember member = parseFullCompilationUnitMember();
|
| - expectNotNullIfNoErrors(member);
|
| + void test_parseEqualityExpression_super() {
|
| + createParser('super == y');
|
| + BinaryExpression expression = parser.parseEqualityExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<FunctionDeclaration>());
|
| - FunctionDeclaration declaration = member;
|
| - expect(declaration.functionExpression, isNotNull);
|
| - expect(declaration.propertyKeyword, isNotNull);
|
| - expect(declaration.returnType, isNotNull);
|
| + expect(expression.leftOperand, new isInstanceOf<SuperExpression>());
|
| + expect(expression.operator, isNotNull);
|
| + expect(expression.operator.type, TokenType.EQ_EQ);
|
| + expect(expression.rightOperand, isNotNull);
|
| }
|
|
|
| - void test_parseCompilationUnitMember_typeAlias_abstract() {
|
| - createParser('abstract class C = S with M;');
|
| - CompilationUnitMember member = parseFullCompilationUnitMember();
|
| - expectNotNullIfNoErrors(member);
|
| - listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<ClassTypeAlias>());
|
| - ClassTypeAlias typeAlias = member;
|
| - expect(typeAlias.typedefKeyword, isNotNull);
|
| - expect(typeAlias.name.name, "C");
|
| - expect(typeAlias.typeParameters, isNull);
|
| - expect(typeAlias.equals, isNotNull);
|
| - expect(typeAlias.abstractKeyword, isNotNull);
|
| - expect(typeAlias.superclass.name.name, "S");
|
| - expect(typeAlias.withClause, isNotNull);
|
| - expect(typeAlias.implementsClause, isNull);
|
| - expect(typeAlias.semicolon, isNotNull);
|
| + void test_parseExpression_assign() {
|
| + // TODO(brianwilkerson) Implement more tests for this method.
|
| + Expression expression = parseExpression('x = y');
|
| + expect(expression, new isInstanceOf<AssignmentExpression>());
|
| + AssignmentExpression assignmentExpression = expression;
|
| + expect(assignmentExpression.leftHandSide, isNotNull);
|
| + expect(assignmentExpression.operator, isNotNull);
|
| + expect(assignmentExpression.operator.type, TokenType.EQ);
|
| + expect(assignmentExpression.rightHandSide, isNotNull);
|
| }
|
|
|
| - void test_parseCompilationUnitMember_typeAlias_generic() {
|
| - createParser('class C<E> = S<E> with M<E> implements I<E>;');
|
| - CompilationUnitMember member = parseFullCompilationUnitMember();
|
| - expectNotNullIfNoErrors(member);
|
| - listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<ClassTypeAlias>());
|
| - ClassTypeAlias typeAlias = member;
|
| - expect(typeAlias.typedefKeyword, isNotNull);
|
| - expect(typeAlias.name.name, "C");
|
| - expect(typeAlias.typeParameters.typeParameters, hasLength(1));
|
| - expect(typeAlias.equals, isNotNull);
|
| - expect(typeAlias.abstractKeyword, isNull);
|
| - expect(typeAlias.superclass.name.name, "S");
|
| - expect(typeAlias.withClause, isNotNull);
|
| - expect(typeAlias.implementsClause, isNotNull);
|
| - expect(typeAlias.semicolon, isNotNull);
|
| + void test_parseExpression_assign_compound() {
|
| + enableLazyAssignmentOperators = true;
|
| + Expression expression = parseExpression('x ||= y');
|
| + expect(expression, new isInstanceOf<AssignmentExpression>());
|
| + AssignmentExpression assignmentExpression = expression;
|
| + expect(assignmentExpression.leftHandSide, isNotNull);
|
| + expect(assignmentExpression.operator, isNotNull);
|
| + expect(assignmentExpression.operator.type, TokenType.BAR_BAR_EQ);
|
| + expect(assignmentExpression.rightHandSide, isNotNull);
|
| }
|
|
|
| - void test_parseCompilationUnitMember_typeAlias_implements() {
|
| - createParser('class C = S with M implements I;');
|
| - CompilationUnitMember member = parseFullCompilationUnitMember();
|
| - expectNotNullIfNoErrors(member);
|
| - listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<ClassTypeAlias>());
|
| - ClassTypeAlias typeAlias = member;
|
| - expect(typeAlias.typedefKeyword, isNotNull);
|
| - expect(typeAlias.name.name, "C");
|
| - expect(typeAlias.typeParameters, isNull);
|
| - expect(typeAlias.equals, isNotNull);
|
| - expect(typeAlias.abstractKeyword, isNull);
|
| - expect(typeAlias.superclass.name.name, "S");
|
| - expect(typeAlias.withClause, isNotNull);
|
| - expect(typeAlias.implementsClause, isNotNull);
|
| - expect(typeAlias.semicolon, isNotNull);
|
| + void test_parseExpression_comparison() {
|
| + Expression expression = parseExpression('--a.b == c');
|
| + expect(expression, new isInstanceOf<BinaryExpression>());
|
| + BinaryExpression binaryExpression = expression;
|
| + expect(binaryExpression.leftOperand, isNotNull);
|
| + expect(binaryExpression.operator, isNotNull);
|
| + expect(binaryExpression.operator.type, TokenType.EQ_EQ);
|
| + expect(binaryExpression.rightOperand, isNotNull);
|
| }
|
|
|
| - void test_parseCompilationUnitMember_typeAlias_noImplements() {
|
| - createParser('class C = S with M;');
|
| - CompilationUnitMember member = parseFullCompilationUnitMember();
|
| - expectNotNullIfNoErrors(member);
|
| - listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<ClassTypeAlias>());
|
| - ClassTypeAlias typeAlias = member;
|
| - expect(typeAlias.typedefKeyword, isNotNull);
|
| - expect(typeAlias.name.name, "C");
|
| - expect(typeAlias.typeParameters, isNull);
|
| - expect(typeAlias.equals, isNotNull);
|
| - expect(typeAlias.abstractKeyword, isNull);
|
| - expect(typeAlias.superclass.name.name, "S");
|
| - expect(typeAlias.withClause, isNotNull);
|
| - expect(typeAlias.implementsClause, isNull);
|
| - expect(typeAlias.semicolon, isNotNull);
|
| + void test_parseExpression_function_async() {
|
| + Expression expression = parseExpression('() async {}');
|
| + expect(expression, new isInstanceOf<FunctionExpression>());
|
| + FunctionExpression functionExpression = expression;
|
| + expect(functionExpression.body, isNotNull);
|
| + expect(functionExpression.body.isAsynchronous, isTrue);
|
| + expect(functionExpression.body.isGenerator, isFalse);
|
| + expect(functionExpression.parameters, isNotNull);
|
| }
|
|
|
| - void test_parseCompilationUnitMember_typedef() {
|
| - createParser('typedef F();');
|
| - CompilationUnitMember member = parseFullCompilationUnitMember();
|
| - expectNotNullIfNoErrors(member);
|
| - listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<FunctionTypeAlias>());
|
| - FunctionTypeAlias typeAlias = member;
|
| - expect(typeAlias.name.name, "F");
|
| - expect(typeAlias.parameters.parameters, hasLength(0));
|
| + void test_parseExpression_function_asyncStar() {
|
| + Expression expression = parseExpression('() async* {}');
|
| + expect(expression, new isInstanceOf<FunctionExpression>());
|
| + FunctionExpression functionExpression = expression;
|
| + expect(functionExpression.body, isNotNull);
|
| + expect(functionExpression.body.isAsynchronous, isTrue);
|
| + expect(functionExpression.body.isGenerator, isTrue);
|
| + expect(functionExpression.parameters, isNotNull);
|
| }
|
|
|
| - void test_parseCompilationUnitMember_variable() {
|
| - createParser('var x = 0;');
|
| - CompilationUnitMember member = parseFullCompilationUnitMember();
|
| - expectNotNullIfNoErrors(member);
|
| - listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<TopLevelVariableDeclaration>());
|
| - TopLevelVariableDeclaration declaration = member;
|
| - expect(declaration.semicolon, isNotNull);
|
| - expect(declaration.variables, isNotNull);
|
| + void test_parseExpression_function_sync() {
|
| + Expression expression = parseExpression('() {}');
|
| + expect(expression, new isInstanceOf<FunctionExpression>());
|
| + FunctionExpression functionExpression = expression;
|
| + expect(functionExpression.body, isNotNull);
|
| + expect(functionExpression.body.isAsynchronous, isFalse);
|
| + expect(functionExpression.body.isGenerator, isFalse);
|
| + expect(functionExpression.parameters, isNotNull);
|
| }
|
|
|
| - void test_parseCompilationUnitMember_variableGet() {
|
| - createParser('String get = null;');
|
| - CompilationUnitMember member = parseFullCompilationUnitMember();
|
| - expectNotNullIfNoErrors(member);
|
| - listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<TopLevelVariableDeclaration>());
|
| - TopLevelVariableDeclaration declaration = member;
|
| - expect(declaration.semicolon, isNotNull);
|
| - expect(declaration.variables, isNotNull);
|
| + void test_parseExpression_function_syncStar() {
|
| + Expression expression = parseExpression('() sync* {}');
|
| + expect(expression, new isInstanceOf<FunctionExpression>());
|
| + FunctionExpression functionExpression = expression;
|
| + expect(functionExpression.body, isNotNull);
|
| + expect(functionExpression.body.isAsynchronous, isFalse);
|
| + expect(functionExpression.body.isGenerator, isTrue);
|
| + expect(functionExpression.parameters, isNotNull);
|
| }
|
|
|
| - void test_parseCompilationUnitMember_variableSet() {
|
| - createParser('String set = null;');
|
| - CompilationUnitMember member = parseFullCompilationUnitMember();
|
| - expectNotNullIfNoErrors(member);
|
| - listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<TopLevelVariableDeclaration>());
|
| - TopLevelVariableDeclaration declaration = member;
|
| - expect(declaration.semicolon, isNotNull);
|
| - expect(declaration.variables, isNotNull);
|
| + void test_parseExpression_invokeFunctionExpression() {
|
| + Expression expression = parseExpression('(a) {return a + a;} (3)');
|
| + expect(expression, new isInstanceOf<FunctionExpressionInvocation>());
|
| + FunctionExpressionInvocation invocation = expression;
|
| + expect(invocation.function, new isInstanceOf<FunctionExpression>());
|
| + FunctionExpression functionExpression =
|
| + invocation.function as FunctionExpression;
|
| + expect(functionExpression.parameters, isNotNull);
|
| + expect(functionExpression.body, isNotNull);
|
| + expect(invocation.typeArguments, isNull);
|
| + ArgumentList list = invocation.argumentList;
|
| + expect(list, isNotNull);
|
| + expect(list.arguments, hasLength(1));
|
| }
|
|
|
| - void test_parseConditionalExpression() {
|
| - createParser('x ? y : z');
|
| - ConditionalExpression expression = parser.parseConditionalExpression();
|
| - expectNotNullIfNoErrors(expression);
|
| - listener.assertNoErrors();
|
| - expect(expression.condition, isNotNull);
|
| - expect(expression.question, isNotNull);
|
| - expect(expression.thenExpression, isNotNull);
|
| - expect(expression.colon, isNotNull);
|
| - expect(expression.elseExpression, isNotNull);
|
| + void test_parseExpression_nonAwait() {
|
| + Expression expression = parseExpression('await()');
|
| + expect(expression, new isInstanceOf<MethodInvocation>());
|
| + MethodInvocation invocation = expression;
|
| + expect(invocation.methodName.name, 'await');
|
| + expect(invocation.typeArguments, isNull);
|
| + expect(invocation.argumentList, isNotNull);
|
| }
|
|
|
| - void test_parseConfiguration_noOperator_dottedIdentifier() {
|
| - createParser("if (a.b) 'c.dart'");
|
| - Configuration configuration = parser.parseConfiguration();
|
| - expectNotNullIfNoErrors(configuration);
|
| - listener.assertNoErrors();
|
| - expect(configuration.ifKeyword, isNotNull);
|
| - expect(configuration.leftParenthesis, isNotNull);
|
| - _expectDottedName(configuration.name, ["a", "b"]);
|
| - expect(configuration.equalToken, isNull);
|
| - expect(configuration.value, isNull);
|
| - expect(configuration.rightParenthesis, isNotNull);
|
| - expect(configuration.uri, isNotNull);
|
| + void test_parseExpression_superMethodInvocation() {
|
| + Expression expression = parseExpression('super.m()');
|
| + expect(expression, new isInstanceOf<MethodInvocation>());
|
| + MethodInvocation invocation = expression;
|
| + expect(invocation.target, isNotNull);
|
| + expect(invocation.methodName, isNotNull);
|
| + expect(invocation.typeArguments, isNull);
|
| + expect(invocation.argumentList, isNotNull);
|
| }
|
|
|
| - void test_parseConfiguration_noOperator_simpleIdentifier() {
|
| - createParser("if (a) 'b.dart'");
|
| - Configuration configuration = parser.parseConfiguration();
|
| - expectNotNullIfNoErrors(configuration);
|
| - listener.assertNoErrors();
|
| - expect(configuration.ifKeyword, isNotNull);
|
| - expect(configuration.leftParenthesis, isNotNull);
|
| - _expectDottedName(configuration.name, ["a"]);
|
| - expect(configuration.equalToken, isNull);
|
| - expect(configuration.value, isNull);
|
| - expect(configuration.rightParenthesis, isNotNull);
|
| - expect(configuration.uri, isNotNull);
|
| + void test_parseExpression_superMethodInvocation_typeArgumentComments() {
|
| + enableGenericMethodComments = true;
|
| + Expression expression = parseExpression('super.m/*<E>*/()');
|
| + expect(expression, new isInstanceOf<MethodInvocation>());
|
| + MethodInvocation invocation = expression;
|
| + expect(invocation.target, isNotNull);
|
| + expect(invocation.methodName, isNotNull);
|
| + expect(invocation.typeArguments, isNotNull);
|
| + expect(invocation.argumentList, isNotNull);
|
| }
|
|
|
| - void test_parseConfiguration_operator_dottedIdentifier() {
|
| - createParser("if (a.b == 'c') 'd.dart'");
|
| - Configuration configuration = parser.parseConfiguration();
|
| - expectNotNullIfNoErrors(configuration);
|
| - listener.assertNoErrors();
|
| - expect(configuration.ifKeyword, isNotNull);
|
| - expect(configuration.leftParenthesis, isNotNull);
|
| - _expectDottedName(configuration.name, ["a", "b"]);
|
| - expect(configuration.equalToken, isNotNull);
|
| - expect(configuration.value, isNotNull);
|
| - expect(configuration.rightParenthesis, isNotNull);
|
| - expect(configuration.uri, isNotNull);
|
| + void test_parseExpression_superMethodInvocation_typeArguments() {
|
| + Expression expression = parseExpression('super.m<E>()');
|
| + expect(expression, new isInstanceOf<MethodInvocation>());
|
| + MethodInvocation invocation = expression;
|
| + expect(invocation.target, isNotNull);
|
| + expect(invocation.methodName, isNotNull);
|
| + expect(invocation.typeArguments, isNotNull);
|
| + expect(invocation.argumentList, isNotNull);
|
| }
|
|
|
| - void test_parseConfiguration_operator_simpleIdentifier() {
|
| - createParser("if (a == 'b') 'c.dart'");
|
| - Configuration configuration = parser.parseConfiguration();
|
| - expectNotNullIfNoErrors(configuration);
|
| + void test_parseExpressionList_multiple() {
|
| + createParser('1, 2, 3');
|
| + List<Expression> result = parser.parseExpressionList();
|
| + expectNotNullIfNoErrors(result);
|
| listener.assertNoErrors();
|
| - expect(configuration.ifKeyword, isNotNull);
|
| - expect(configuration.leftParenthesis, isNotNull);
|
| - _expectDottedName(configuration.name, ["a"]);
|
| - expect(configuration.equalToken, isNotNull);
|
| - expect(configuration.value, isNotNull);
|
| - expect(configuration.rightParenthesis, isNotNull);
|
| - expect(configuration.uri, isNotNull);
|
| + expect(result, hasLength(3));
|
| }
|
|
|
| - void test_parseConstExpression_instanceCreation() {
|
| - createParser('const A()');
|
| - Expression expression = parser.parseConstExpression();
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseExpressionList_single() {
|
| + createParser('1');
|
| + List<Expression> result = parser.parseExpressionList();
|
| + expectNotNullIfNoErrors(result);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<InstanceCreationExpression>());
|
| - InstanceCreationExpression instanceCreation = expression;
|
| - expect(instanceCreation.keyword, isNotNull);
|
| - ConstructorName name = instanceCreation.constructorName;
|
| - expect(name, isNotNull);
|
| - expect(name.type, isNotNull);
|
| - expect(name.period, isNull);
|
| - expect(name.name, isNull);
|
| - expect(instanceCreation.argumentList, isNotNull);
|
| + expect(result, hasLength(1));
|
| }
|
|
|
| - void test_parseConstExpression_listLiteral_typed() {
|
| - createParser('const <A> []');
|
| - Expression expression = parser.parseConstExpression();
|
| + void test_parseExpressionWithoutCascade_assign() {
|
| + // TODO(brianwilkerson) Implement more tests for this method.
|
| + createParser('x = y');
|
| + Expression expression = parser.parseExpressionWithoutCascade();
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<ListLiteral>());
|
| - ListLiteral literal = expression;
|
| - expect(literal.constKeyword, isNotNull);
|
| - expect(literal.typeArguments, isNotNull);
|
| - expect(literal.leftBracket, isNotNull);
|
| - expect(literal.elements, hasLength(0));
|
| - expect(literal.rightBracket, isNotNull);
|
| + expect(expression, new isInstanceOf<AssignmentExpression>());
|
| + AssignmentExpression assignmentExpression = expression;
|
| + expect(assignmentExpression.leftHandSide, isNotNull);
|
| + expect(assignmentExpression.operator, isNotNull);
|
| + expect(assignmentExpression.operator.type, TokenType.EQ);
|
| + expect(assignmentExpression.rightHandSide, isNotNull);
|
| }
|
|
|
| - void test_parseConstExpression_listLiteral_typed_genericComment() {
|
| - enableGenericMethodComments = true;
|
| - createParser('const /*<A>*/ []');
|
| - Expression expression = parser.parseConstExpression();
|
| + void test_parseExpressionWithoutCascade_comparison() {
|
| + createParser('--a.b == c');
|
| + Expression expression = parser.parseExpressionWithoutCascade();
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<ListLiteral>());
|
| - ListLiteral literal = expression;
|
| - expect(literal.constKeyword, isNotNull);
|
| - expect(literal.typeArguments, isNotNull);
|
| - expect(literal.leftBracket, isNotNull);
|
| - expect(literal.elements, hasLength(0));
|
| - expect(literal.rightBracket, isNotNull);
|
| + expect(expression, new isInstanceOf<BinaryExpression>());
|
| + BinaryExpression binaryExpression = expression;
|
| + expect(binaryExpression.leftOperand, isNotNull);
|
| + expect(binaryExpression.operator, isNotNull);
|
| + expect(binaryExpression.operator.type, TokenType.EQ_EQ);
|
| + expect(binaryExpression.rightOperand, isNotNull);
|
| }
|
|
|
| - void test_parseConstExpression_listLiteral_untyped() {
|
| - createParser('const []');
|
| - Expression expression = parser.parseConstExpression();
|
| + void test_parseExpressionWithoutCascade_superMethodInvocation() {
|
| + createParser('super.m()');
|
| + Expression expression = parser.parseExpressionWithoutCascade();
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<ListLiteral>());
|
| - ListLiteral literal = expression;
|
| - expect(literal.constKeyword, isNotNull);
|
| - expect(literal.typeArguments, isNull);
|
| - expect(literal.leftBracket, isNotNull);
|
| - expect(literal.elements, hasLength(0));
|
| - expect(literal.rightBracket, isNotNull);
|
| + expect(expression, new isInstanceOf<MethodInvocation>());
|
| + MethodInvocation invocation = expression;
|
| + expect(invocation.target, isNotNull);
|
| + expect(invocation.methodName, isNotNull);
|
| + expect(invocation.typeArguments, isNull);
|
| + expect(invocation.argumentList, isNotNull);
|
| }
|
|
|
| - void test_parseConstExpression_mapLiteral_typed() {
|
| - createParser('const <A, B> {}');
|
| - Expression expression = parser.parseConstExpression();
|
| + void
|
| + test_parseExpressionWithoutCascade_superMethodInvocation_typeArgumentComments() {
|
| + enableGenericMethodComments = true;
|
| + createParser('super.m/*<E>*/()');
|
| + Expression expression = parser.parseExpressionWithoutCascade();
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<MapLiteral>());
|
| - MapLiteral literal = expression;
|
| - expect(literal.leftBracket, isNotNull);
|
| - expect(literal.entries, hasLength(0));
|
| - expect(literal.rightBracket, isNotNull);
|
| - expect(literal.typeArguments, isNotNull);
|
| + expect(expression, new isInstanceOf<MethodInvocation>());
|
| + MethodInvocation invocation = expression;
|
| + expect(invocation.target, isNotNull);
|
| + expect(invocation.methodName, isNotNull);
|
| + expect(invocation.typeArguments, isNotNull);
|
| + expect(invocation.argumentList, isNotNull);
|
| }
|
|
|
| - void test_parseConstExpression_mapLiteral_typed_genericComment() {
|
| - enableGenericMethodComments = true;
|
| - createParser('const /*<A, B>*/ {}');
|
| - Expression expression = parser.parseConstExpression();
|
| + void
|
| + test_parseExpressionWithoutCascade_superMethodInvocation_typeArguments() {
|
| + createParser('super.m<E>()');
|
| + Expression expression = parser.parseExpressionWithoutCascade();
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<MapLiteral>());
|
| - MapLiteral literal = expression;
|
| - expect(literal.leftBracket, isNotNull);
|
| - expect(literal.entries, hasLength(0));
|
| - expect(literal.rightBracket, isNotNull);
|
| - expect(literal.typeArguments, isNotNull);
|
| + expect(expression, new isInstanceOf<MethodInvocation>());
|
| + MethodInvocation invocation = expression;
|
| + expect(invocation.target, isNotNull);
|
| + expect(invocation.methodName, isNotNull);
|
| + expect(invocation.typeArguments, isNotNull);
|
| + expect(invocation.argumentList, isNotNull);
|
| }
|
|
|
| - void test_parseConstExpression_mapLiteral_untyped() {
|
| - createParser('const {}');
|
| - Expression expression = parser.parseConstExpression();
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseExtendsClause() {
|
| + createParser('extends B');
|
| + ExtendsClause clause = parser.parseExtendsClause();
|
| + expectNotNullIfNoErrors(clause);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<MapLiteral>());
|
| - MapLiteral literal = expression;
|
| - expect(literal.leftBracket, isNotNull);
|
| - expect(literal.entries, hasLength(0));
|
| - expect(literal.rightBracket, isNotNull);
|
| - expect(literal.typeArguments, isNull);
|
| + expect(clause.extendsKeyword, isNotNull);
|
| + expect(clause.superclass, isNotNull);
|
| + expect(clause.superclass, new isInstanceOf<TypeName>());
|
| }
|
|
|
| - void test_parseConstructor() {
|
| - // TODO(brianwilkerson) Implement tests for this method.
|
| + void test_parseFinalConstVarOrType_const_functionType() {
|
| + createParser('const int Function(int) f');
|
| + FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
|
| + expectNotNullIfNoErrors(result);
|
| + listener.assertNoErrors();
|
| + Token keyword = result.keyword;
|
| + expect(keyword, isNotNull);
|
| + expect(keyword.type, TokenType.KEYWORD);
|
| + expect(keyword.keyword, Keyword.CONST);
|
| + expect(result.type, isNotNull);
|
| }
|
|
|
| - void test_parseConstructor_assert() {
|
| - enableAssertInitializer = true;
|
| - createParser('C(x, y) : _x = x, assert (x < y), _y = y;');
|
| - ClassMember member = parser.parseClassMember('C');
|
| - expectNotNullIfNoErrors(member);
|
| + void test_parseFinalConstVarOrType_const_namedType() {
|
| + createParser('const A a');
|
| + FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
|
| + expectNotNullIfNoErrors(result);
|
| listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<ConstructorDeclaration>());
|
| - ConstructorDeclaration constructor = member as ConstructorDeclaration;
|
| - NodeList<ConstructorInitializer> initializers = constructor.initializers;
|
| - expect(initializers, hasLength(3));
|
| - ConstructorInitializer initializer = initializers[1];
|
| - expect(initializer, new isInstanceOf<AssertInitializer>());
|
| - AssertInitializer assertInitializer = initializer;
|
| - expect(assertInitializer.condition, isNotNull);
|
| - expect(assertInitializer.message, isNull);
|
| + Token keyword = result.keyword;
|
| + expect(keyword, isNotNull);
|
| + expect(keyword.type, TokenType.KEYWORD);
|
| + expect(keyword.keyword, Keyword.CONST);
|
| + expect(result.type, isNotNull);
|
| }
|
|
|
| - void test_parseConstructor_with_pseudo_function_literal() {
|
| - // "(b) {}" should not be misinterpreted as a function literal even though
|
| - // it looks like one.
|
| - createParser('C() : a = (b) {}');
|
| - ClassMember member = parser.parseClassMember('C');
|
| - expectNotNullIfNoErrors(member);
|
| + void test_parseFinalConstVarOrType_const_noType() {
|
| + createParser('const');
|
| + FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
|
| + expectNotNullIfNoErrors(result);
|
| listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<ConstructorDeclaration>());
|
| - ConstructorDeclaration constructor = member as ConstructorDeclaration;
|
| - NodeList<ConstructorInitializer> initializers = constructor.initializers;
|
| - expect(initializers, hasLength(1));
|
| - ConstructorInitializer initializer = initializers[0];
|
| - EngineTestCase.assertInstanceOf((obj) => obj is ConstructorFieldInitializer,
|
| - ConstructorFieldInitializer, initializer);
|
| - EngineTestCase.assertInstanceOf(
|
| - (obj) => obj is ParenthesizedExpression,
|
| - ParenthesizedExpression,
|
| - (initializer as ConstructorFieldInitializer).expression);
|
| - EngineTestCase.assertInstanceOf(
|
| - (obj) => obj is BlockFunctionBody, BlockFunctionBody, constructor.body);
|
| + Token keyword = result.keyword;
|
| + expect(keyword, isNotNull);
|
| + expect(keyword.type, TokenType.KEYWORD);
|
| + expect(keyword.keyword, Keyword.CONST);
|
| + expect(result.type, isNull);
|
| }
|
|
|
| - void test_parseConstructorFieldInitializer_qualified() {
|
| - createParser('this.a = b');
|
| - ConstructorFieldInitializer initializer =
|
| - parser.parseConstructorFieldInitializer(true);
|
| - expectNotNullIfNoErrors(initializer);
|
| + void test_parseFinalConstVarOrType_final_functionType() {
|
| + createParser('final int Function(int) f');
|
| + FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
|
| + expectNotNullIfNoErrors(result);
|
| listener.assertNoErrors();
|
| - expect(initializer.equals, isNotNull);
|
| - expect(initializer.expression, isNotNull);
|
| - expect(initializer.fieldName, isNotNull);
|
| - expect(initializer.thisKeyword, isNotNull);
|
| - expect(initializer.period, isNotNull);
|
| + Token keyword = result.keyword;
|
| + expect(keyword, isNotNull);
|
| + expect(keyword.type, TokenType.KEYWORD);
|
| + expect(keyword.keyword, Keyword.FINAL);
|
| + expect(result.type, isNotNull);
|
| }
|
|
|
| - void test_parseConstructorFieldInitializer_unqualified() {
|
| - createParser('a = b');
|
| - ConstructorFieldInitializer initializer =
|
| - parser.parseConstructorFieldInitializer(false);
|
| - expectNotNullIfNoErrors(initializer);
|
| - listener.assertNoErrors();
|
| - expect(initializer.equals, isNotNull);
|
| - expect(initializer.expression, isNotNull);
|
| - expect(initializer.fieldName, isNotNull);
|
| - expect(initializer.thisKeyword, isNull);
|
| - expect(initializer.period, isNull);
|
| - }
|
| -
|
| - void test_parseConstructorName_named_noPrefix() {
|
| - createParser('A.n;');
|
| - ConstructorName name = parser.parseConstructorName();
|
| - expectNotNullIfNoErrors(name);
|
| + void test_parseFinalConstVarOrType_final_namedType() {
|
| + createParser('final A a');
|
| + FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
|
| + expectNotNullIfNoErrors(result);
|
| listener.assertNoErrors();
|
| - expect(name.type, isNotNull);
|
| - expect(name.period, isNull);
|
| - expect(name.name, isNull);
|
| + Token keyword = result.keyword;
|
| + expect(keyword, isNotNull);
|
| + expect(keyword.type, TokenType.KEYWORD);
|
| + expect(keyword.keyword, Keyword.FINAL);
|
| + expect(result.type, isNotNull);
|
| }
|
|
|
| - void test_parseConstructorName_named_prefixed() {
|
| - createParser('p.A.n;');
|
| - ConstructorName name = parser.parseConstructorName();
|
| - expectNotNullIfNoErrors(name);
|
| + void test_parseFinalConstVarOrType_final_noType() {
|
| + createParser('final');
|
| + FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
|
| + expectNotNullIfNoErrors(result);
|
| listener.assertNoErrors();
|
| - expect(name.type, isNotNull);
|
| - expect(name.period, isNotNull);
|
| - expect(name.name, isNotNull);
|
| + Token keyword = result.keyword;
|
| + expect(keyword, isNotNull);
|
| + expect(keyword.type, TokenType.KEYWORD);
|
| + expect(keyword.keyword, Keyword.FINAL);
|
| + expect(result.type, isNull);
|
| }
|
|
|
| - void test_parseConstructorName_unnamed_noPrefix() {
|
| - createParser('A;');
|
| - ConstructorName name = parser.parseConstructorName();
|
| - expectNotNullIfNoErrors(name);
|
| + void test_parseFinalConstVarOrType_final_prefixedType() {
|
| + createParser('final p.A a');
|
| + FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
|
| + expectNotNullIfNoErrors(result);
|
| listener.assertNoErrors();
|
| - expect(name.type, isNotNull);
|
| - expect(name.period, isNull);
|
| - expect(name.name, isNull);
|
| + Token keyword = result.keyword;
|
| + expect(keyword, isNotNull);
|
| + expect(keyword.type, TokenType.KEYWORD);
|
| + expect(keyword.keyword, Keyword.FINAL);
|
| + expect(result.type, isNotNull);
|
| }
|
|
|
| - void test_parseConstructorName_unnamed_prefixed() {
|
| - createParser('p.A;');
|
| - ConstructorName name = parser.parseConstructorName();
|
| - expectNotNullIfNoErrors(name);
|
| + void test_parseFinalConstVarOrType_type_function() {
|
| + createParser('int Function(int) f');
|
| + FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
|
| + expectNotNullIfNoErrors(result);
|
| listener.assertNoErrors();
|
| - expect(name.type, isNotNull);
|
| - expect(name.period, isNull);
|
| - expect(name.name, isNull);
|
| - }
|
| -
|
| - void test_parseContinueStatement_label() {
|
| - createParser('continue foo;');
|
| - ContinueStatement statement = parser.parseContinueStatement();
|
| - expectNotNullIfNoErrors(statement);
|
| - listener.assertErrorsWithCodes([ParserErrorCode.CONTINUE_OUTSIDE_OF_LOOP]);
|
| - expect(statement.continueKeyword, isNotNull);
|
| - expect(statement.label, isNotNull);
|
| - expect(statement.semicolon, isNotNull);
|
| + expect(result.keyword, isNull);
|
| + expect(result.type, isNotNull);
|
| }
|
|
|
| - void test_parseContinueStatement_noLabel() {
|
| - createParser('continue;');
|
| - ContinueStatement statement = parser.parseContinueStatement();
|
| - expectNotNullIfNoErrors(statement);
|
| - listener.assertErrorsWithCodes([ParserErrorCode.CONTINUE_OUTSIDE_OF_LOOP]);
|
| - expect(statement.continueKeyword, isNotNull);
|
| - expect(statement.label, isNull);
|
| - expect(statement.semicolon, isNotNull);
|
| + void test_parseFinalConstVarOrType_type_parameterized() {
|
| + createParser('A<B> a');
|
| + FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
|
| + expectNotNullIfNoErrors(result);
|
| + listener.assertNoErrors();
|
| + expect(result.keyword, isNull);
|
| + expect(result.type, isNotNull);
|
| }
|
|
|
| - void test_parseDirective_export() {
|
| - createParser("export 'lib/lib.dart';");
|
| - Directive directive = parseFullDirective();
|
| - expectNotNullIfNoErrors(directive);
|
| + void test_parseFinalConstVarOrType_type_prefixed() {
|
| + createParser('p.A a');
|
| + FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
|
| + expectNotNullIfNoErrors(result);
|
| listener.assertNoErrors();
|
| - expect(directive, new isInstanceOf<ExportDirective>());
|
| - ExportDirective exportDirective = directive;
|
| - expect(exportDirective.keyword, isNotNull);
|
| - expect(exportDirective.uri, isNotNull);
|
| - expect(exportDirective.combinators, hasLength(0));
|
| - expect(exportDirective.semicolon, isNotNull);
|
| + expect(result.keyword, isNull);
|
| + expect(result.type, isNotNull);
|
| }
|
|
|
| - void test_parseDirective_import() {
|
| - createParser("import 'lib/lib.dart';");
|
| - Directive directive = parseFullDirective();
|
| - expectNotNullIfNoErrors(directive);
|
| + void test_parseFinalConstVarOrType_type_prefixed_noIdentifier() {
|
| + createParser('p.A,');
|
| + FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
|
| + expectNotNullIfNoErrors(result);
|
| listener.assertNoErrors();
|
| - expect(directive, new isInstanceOf<ImportDirective>());
|
| - ImportDirective importDirective = directive;
|
| - expect(importDirective.keyword, isNotNull);
|
| - expect(importDirective.uri, isNotNull);
|
| - expect(importDirective.asKeyword, isNull);
|
| - expect(importDirective.prefix, isNull);
|
| - expect(importDirective.combinators, hasLength(0));
|
| - expect(importDirective.semicolon, isNotNull);
|
| + expect(result.keyword, isNull);
|
| + expect(result.type, isNotNull);
|
| }
|
|
|
| - void test_parseDirective_library() {
|
| - createParser("library l;");
|
| - Directive directive = parseFullDirective();
|
| - expectNotNullIfNoErrors(directive);
|
| + void test_parseFinalConstVarOrType_type_prefixedAndParameterized() {
|
| + createParser('p.A<B> a');
|
| + FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
|
| + expectNotNullIfNoErrors(result);
|
| listener.assertNoErrors();
|
| - expect(directive, new isInstanceOf<LibraryDirective>());
|
| - LibraryDirective libraryDirective = directive;
|
| - expect(libraryDirective.libraryKeyword, isNotNull);
|
| - expect(libraryDirective.name, isNotNull);
|
| - expect(libraryDirective.semicolon, isNotNull);
|
| + expect(result.keyword, isNull);
|
| + expect(result.type, isNotNull);
|
| }
|
|
|
| - void test_parseDirective_part() {
|
| - createParser("part 'lib/lib.dart';");
|
| - Directive directive = parseFullDirective();
|
| - expectNotNullIfNoErrors(directive);
|
| + void test_parseFinalConstVarOrType_type_simple() {
|
| + createParser('A a');
|
| + FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
|
| + expectNotNullIfNoErrors(result);
|
| listener.assertNoErrors();
|
| - expect(directive, new isInstanceOf<PartDirective>());
|
| - PartDirective partDirective = directive;
|
| - expect(partDirective.partKeyword, isNotNull);
|
| - expect(partDirective.uri, isNotNull);
|
| - expect(partDirective.semicolon, isNotNull);
|
| + expect(result.keyword, isNull);
|
| + expect(result.type, isNotNull);
|
| }
|
|
|
| - void test_parseDirective_partOf() {
|
| - createParser("part of l;");
|
| - Directive directive = parseFullDirective();
|
| - expectNotNullIfNoErrors(directive);
|
| + void test_parseFinalConstVarOrType_type_simple_noIdentifier_inFunctionType() {
|
| + createParser('A,');
|
| + FinalConstVarOrType result =
|
| + parser.parseFinalConstVarOrType(false, inFunctionType: true);
|
| + expectNotNullIfNoErrors(result);
|
| listener.assertNoErrors();
|
| - expect(directive, new isInstanceOf<PartOfDirective>());
|
| - PartOfDirective partOfDirective = directive;
|
| - expect(partOfDirective.partKeyword, isNotNull);
|
| - expect(partOfDirective.ofKeyword, isNotNull);
|
| - expect(partOfDirective.libraryName, isNotNull);
|
| - expect(partOfDirective.semicolon, isNotNull);
|
| + expect(result.keyword, isNull);
|
| + expect(result.type, isNotNull);
|
| }
|
|
|
| - void test_parseDirectives_complete() {
|
| - CompilationUnit unit =
|
| - _parseDirectives("#! /bin/dart\nlibrary l;\nclass A {}");
|
| - expect(unit.scriptTag, isNotNull);
|
| - expect(unit.directives, hasLength(1));
|
| + void test_parseFinalConstVarOrType_var() {
|
| + createParser('var');
|
| + FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
|
| + expectNotNullIfNoErrors(result);
|
| + listener.assertNoErrors();
|
| + Token keyword = result.keyword;
|
| + expect(keyword, isNotNull);
|
| + expect(keyword.type, TokenType.KEYWORD);
|
| + expect(keyword.keyword, Keyword.VAR);
|
| + expect(result.type, isNull);
|
| }
|
|
|
| - void test_parseDirectives_empty() {
|
| - CompilationUnit unit = _parseDirectives("");
|
| - expect(unit.scriptTag, isNull);
|
| - expect(unit.directives, hasLength(0));
|
| + void test_parseFinalConstVarOrType_void() {
|
| + createParser('void f()');
|
| + FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
|
| + expectNotNullIfNoErrors(result);
|
| + listener.assertNoErrors();
|
| + expect(result.keyword, isNull);
|
| + expect(result.type, isNotNull);
|
| }
|
|
|
| - void test_parseDirectives_mixed() {
|
| - CompilationUnit unit =
|
| - _parseDirectives("library l; class A {} part 'foo.dart';");
|
| - expect(unit.scriptTag, isNull);
|
| - expect(unit.directives, hasLength(1));
|
| + void test_parseFinalConstVarOrType_void_noIdentifier() {
|
| + createParser('void,');
|
| + FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
|
| + expectNotNullIfNoErrors(result);
|
| + listener.assertNoErrors();
|
| + expect(result.keyword, isNull);
|
| + expect(result.type, isNotNull);
|
| }
|
|
|
| - void test_parseDirectives_multiple() {
|
| - CompilationUnit unit = _parseDirectives("library l;\npart 'a.dart';");
|
| - expect(unit.scriptTag, isNull);
|
| - expect(unit.directives, hasLength(2));
|
| + void test_parseFormalParameter_covariant_final_named() {
|
| + ParameterKind kind = ParameterKind.NAMED;
|
| + createParser('covariant final a : null');
|
| + FormalParameter parameter = parser.parseFormalParameter(kind);
|
| + expectNotNullIfNoErrors(parameter);
|
| + listener.assertNoErrors();
|
| + expect(parameter, new isInstanceOf<DefaultFormalParameter>());
|
| + DefaultFormalParameter defaultParameter = parameter;
|
| + SimpleFormalParameter simpleParameter =
|
| + defaultParameter.parameter as SimpleFormalParameter;
|
| + expect(simpleParameter.covariantKeyword, isNotNull);
|
| + expect(simpleParameter.identifier, isNotNull);
|
| + expect(simpleParameter.keyword, isNotNull);
|
| + expect(simpleParameter.type, isNull);
|
| + expect(simpleParameter.kind, kind);
|
| + expect(defaultParameter.separator, isNotNull);
|
| + expect(defaultParameter.defaultValue, isNotNull);
|
| + expect(defaultParameter.kind, kind);
|
| }
|
|
|
| - void test_parseDirectives_script() {
|
| - CompilationUnit unit = _parseDirectives("#! /bin/dart");
|
| - expect(unit.scriptTag, isNotNull);
|
| - expect(unit.directives, hasLength(0));
|
| + void test_parseFormalParameter_covariant_final_normal() {
|
| + ParameterKind kind = ParameterKind.REQUIRED;
|
| + createParser('covariant final a');
|
| + FormalParameter parameter = parser.parseFormalParameter(kind);
|
| + expectNotNullIfNoErrors(parameter);
|
| + listener.assertNoErrors();
|
| + expect(parameter, new isInstanceOf<SimpleFormalParameter>());
|
| + SimpleFormalParameter simpleParameter = parameter;
|
| + expect(simpleParameter.covariantKeyword, isNotNull);
|
| + expect(simpleParameter.identifier, isNotNull);
|
| + expect(simpleParameter.keyword, isNotNull);
|
| + expect(simpleParameter.type, isNull);
|
| + expect(simpleParameter.kind, kind);
|
| }
|
|
|
| - void test_parseDirectives_single() {
|
| - CompilationUnit unit = _parseDirectives("library l;");
|
| - expect(unit.scriptTag, isNull);
|
| - expect(unit.directives, hasLength(1));
|
| - }
|
| -
|
| - void test_parseDirectives_topLevelDeclaration() {
|
| - CompilationUnit unit = _parseDirectives("class A {}");
|
| - expect(unit.scriptTag, isNull);
|
| - expect(unit.directives, hasLength(0));
|
| - }
|
| -
|
| - void test_parseDocumentationComment_block() {
|
| - createParser('/** */ class');
|
| - Comment comment = parser
|
| - .parseDocumentationComment(parser.parseDocumentationCommentTokens());
|
| - expectNotNullIfNoErrors(comment);
|
| + void test_parseFormalParameter_covariant_final_positional() {
|
| + ParameterKind kind = ParameterKind.POSITIONAL;
|
| + createParser('covariant final a = null');
|
| + FormalParameter parameter = parser.parseFormalParameter(kind);
|
| + expectNotNullIfNoErrors(parameter);
|
| listener.assertNoErrors();
|
| - expect(comment.isBlock, isFalse);
|
| - expect(comment.isDocumentation, isTrue);
|
| - expect(comment.isEndOfLine, isFalse);
|
| + expect(parameter, new isInstanceOf<DefaultFormalParameter>());
|
| + DefaultFormalParameter defaultParameter = parameter;
|
| + SimpleFormalParameter simpleParameter =
|
| + defaultParameter.parameter as SimpleFormalParameter;
|
| + expect(simpleParameter.covariantKeyword, isNotNull);
|
| + expect(simpleParameter.identifier, isNotNull);
|
| + expect(simpleParameter.keyword, isNotNull);
|
| + expect(simpleParameter.type, isNull);
|
| + expect(simpleParameter.kind, kind);
|
| + expect(defaultParameter.separator, isNotNull);
|
| + expect(defaultParameter.defaultValue, isNotNull);
|
| + expect(defaultParameter.kind, kind);
|
| }
|
|
|
| - void test_parseDocumentationComment_block_withReference() {
|
| - createParser('/** [a] */ class');
|
| - Comment comment = parser
|
| - .parseDocumentationComment(parser.parseDocumentationCommentTokens());
|
| - expectNotNullIfNoErrors(comment);
|
| + void test_parseFormalParameter_covariant_final_type_named() {
|
| + ParameterKind kind = ParameterKind.NAMED;
|
| + createParser('covariant final A a : null');
|
| + FormalParameter parameter = parser.parseFormalParameter(kind);
|
| + expectNotNullIfNoErrors(parameter);
|
| listener.assertNoErrors();
|
| - expect(comment.isBlock, isFalse);
|
| - expect(comment.isDocumentation, isTrue);
|
| - expect(comment.isEndOfLine, isFalse);
|
| - NodeList<CommentReference> references = comment.references;
|
| - expect(references, hasLength(1));
|
| - CommentReference reference = references[0];
|
| - expect(reference, isNotNull);
|
| - expect(reference.offset, 5);
|
| + expect(parameter, new isInstanceOf<DefaultFormalParameter>());
|
| + DefaultFormalParameter defaultParameter = parameter;
|
| + SimpleFormalParameter simpleParameter =
|
| + defaultParameter.parameter as SimpleFormalParameter;
|
| + expect(simpleParameter.covariantKeyword, isNotNull);
|
| + expect(simpleParameter.identifier, isNotNull);
|
| + expect(simpleParameter.keyword, isNotNull);
|
| + expect(simpleParameter.type, isNotNull);
|
| + expect(simpleParameter.kind, kind);
|
| + expect(defaultParameter.separator, isNotNull);
|
| + expect(defaultParameter.defaultValue, isNotNull);
|
| + expect(defaultParameter.kind, kind);
|
| }
|
|
|
| - void test_parseDocumentationComment_endOfLine() {
|
| - createParser('/// \n/// \n class');
|
| - Comment comment = parser
|
| - .parseDocumentationComment(parser.parseDocumentationCommentTokens());
|
| - expectNotNullIfNoErrors(comment);
|
| + void test_parseFormalParameter_covariant_final_type_normal() {
|
| + ParameterKind kind = ParameterKind.REQUIRED;
|
| + createParser('covariant final A a');
|
| + FormalParameter parameter = parser.parseFormalParameter(kind);
|
| + expectNotNullIfNoErrors(parameter);
|
| listener.assertNoErrors();
|
| - expect(comment.isBlock, isFalse);
|
| - expect(comment.isDocumentation, isTrue);
|
| - expect(comment.isEndOfLine, isFalse);
|
| + expect(parameter, new isInstanceOf<SimpleFormalParameter>());
|
| + SimpleFormalParameter simpleParameter = parameter;
|
| + expect(simpleParameter.covariantKeyword, isNotNull);
|
| + expect(simpleParameter.identifier, isNotNull);
|
| + expect(simpleParameter.keyword, isNotNull);
|
| + expect(simpleParameter.type, isNotNull);
|
| + expect(simpleParameter.kind, kind);
|
| }
|
|
|
| - void test_parseDoStatement() {
|
| - createParser('do {} while (x);');
|
| - DoStatement statement = parser.parseDoStatement();
|
| - expectNotNullIfNoErrors(statement);
|
| + void test_parseFormalParameter_covariant_final_type_positional() {
|
| + ParameterKind kind = ParameterKind.POSITIONAL;
|
| + createParser('covariant final A a = null');
|
| + FormalParameter parameter = parser.parseFormalParameter(kind);
|
| + expectNotNullIfNoErrors(parameter);
|
| listener.assertNoErrors();
|
| - expect(statement.doKeyword, isNotNull);
|
| - expect(statement.body, isNotNull);
|
| - expect(statement.whileKeyword, isNotNull);
|
| - expect(statement.leftParenthesis, isNotNull);
|
| - expect(statement.condition, isNotNull);
|
| - expect(statement.rightParenthesis, isNotNull);
|
| - expect(statement.semicolon, isNotNull);
|
| + expect(parameter, new isInstanceOf<DefaultFormalParameter>());
|
| + DefaultFormalParameter defaultParameter = parameter;
|
| + SimpleFormalParameter simpleParameter =
|
| + defaultParameter.parameter as SimpleFormalParameter;
|
| + expect(simpleParameter.covariantKeyword, isNotNull);
|
| + expect(simpleParameter.identifier, isNotNull);
|
| + expect(simpleParameter.keyword, isNotNull);
|
| + expect(simpleParameter.type, isNotNull);
|
| + expect(simpleParameter.kind, kind);
|
| + expect(defaultParameter.separator, isNotNull);
|
| + expect(defaultParameter.defaultValue, isNotNull);
|
| + expect(defaultParameter.kind, kind);
|
| }
|
|
|
| - void test_parseDottedName_multiple() {
|
| - createParser('a.b.c');
|
| - DottedName name = parser.parseDottedName();
|
| - expectNotNullIfNoErrors(name);
|
| + @failingTest
|
| + void test_parseFormalParameter_covariant_type_function() {
|
| + ParameterKind kind = ParameterKind.REQUIRED;
|
| + createParser('covariant String Function(int) a');
|
| + FormalParameter parameter = parser.parseFormalParameter(kind);
|
| + expectNotNullIfNoErrors(parameter);
|
| listener.assertNoErrors();
|
| - _expectDottedName(name, ["a", "b", "c"]);
|
| + expect(parameter, new isInstanceOf<SimpleFormalParameter>());
|
| + SimpleFormalParameter simpleParameter = parameter;
|
| + expect(simpleParameter.covariantKeyword, isNotNull);
|
| + expect(simpleParameter.identifier, isNotNull);
|
| + expect(simpleParameter.keyword, isNull);
|
| + expect(simpleParameter.type, new isInstanceOf<GenericFunctionType>());
|
| + expect(simpleParameter.kind, kind);
|
| }
|
|
|
| - void test_parseDottedName_single() {
|
| - createParser('a');
|
| - DottedName name = parser.parseDottedName();
|
| - expectNotNullIfNoErrors(name);
|
| + void test_parseFormalParameter_covariant_type_named() {
|
| + ParameterKind kind = ParameterKind.NAMED;
|
| + createParser('covariant A a : null');
|
| + FormalParameter parameter = parser.parseFormalParameter(kind);
|
| + expectNotNullIfNoErrors(parameter);
|
| listener.assertNoErrors();
|
| - _expectDottedName(name, ["a"]);
|
| + expect(parameter, new isInstanceOf<DefaultFormalParameter>());
|
| + DefaultFormalParameter defaultParameter = parameter;
|
| + SimpleFormalParameter simpleParameter =
|
| + defaultParameter.parameter as SimpleFormalParameter;
|
| + expect(simpleParameter.covariantKeyword, isNotNull);
|
| + expect(simpleParameter.identifier, isNotNull);
|
| + expect(simpleParameter.keyword, isNull);
|
| + expect(simpleParameter.type, isNotNull);
|
| + expect(simpleParameter.kind, kind);
|
| + expect(defaultParameter.separator, isNotNull);
|
| + expect(defaultParameter.defaultValue, isNotNull);
|
| + expect(defaultParameter.kind, kind);
|
| }
|
|
|
| - void test_parseEmptyStatement() {
|
| - createParser(';');
|
| - EmptyStatement statement = parser.parseEmptyStatement();
|
| - expectNotNullIfNoErrors(statement);
|
| + void test_parseFormalParameter_covariant_type_normal() {
|
| + ParameterKind kind = ParameterKind.REQUIRED;
|
| + createParser('covariant A<B<C>> a');
|
| + FormalParameter parameter = parser.parseFormalParameter(kind);
|
| + expectNotNullIfNoErrors(parameter);
|
| listener.assertNoErrors();
|
| - expect(statement.semicolon, isNotNull);
|
| + expect(parameter, new isInstanceOf<SimpleFormalParameter>());
|
| + SimpleFormalParameter simpleParameter = parameter;
|
| + expect(simpleParameter.covariantKeyword, isNotNull);
|
| + expect(simpleParameter.identifier, isNotNull);
|
| + expect(simpleParameter.keyword, isNull);
|
| + expect(simpleParameter.type, isNotNull);
|
| + expect(simpleParameter.kind, kind);
|
| }
|
|
|
| - void test_parseEnumDeclaration_one() {
|
| - createParser("enum E {ONE}");
|
| - EnumDeclaration declaration = parseFullCompilationUnitMember();
|
| - expectNotNullIfNoErrors(declaration);
|
| + void test_parseFormalParameter_covariant_type_positional() {
|
| + ParameterKind kind = ParameterKind.POSITIONAL;
|
| + createParser('covariant A a = null');
|
| + FormalParameter parameter = parser.parseFormalParameter(kind);
|
| + expectNotNullIfNoErrors(parameter);
|
| listener.assertNoErrors();
|
| - expect(declaration.documentationComment, isNull);
|
| - expect(declaration.enumKeyword, isNotNull);
|
| - expect(declaration.leftBracket, isNotNull);
|
| - expect(declaration.name, isNotNull);
|
| - expect(declaration.constants, hasLength(1));
|
| - expect(declaration.rightBracket, isNotNull);
|
| + expect(parameter, new isInstanceOf<DefaultFormalParameter>());
|
| + DefaultFormalParameter defaultParameter = parameter;
|
| + SimpleFormalParameter simpleParameter =
|
| + defaultParameter.parameter as SimpleFormalParameter;
|
| + expect(simpleParameter.covariantKeyword, isNotNull);
|
| + expect(simpleParameter.identifier, isNotNull);
|
| + expect(simpleParameter.keyword, isNull);
|
| + expect(simpleParameter.type, isNotNull);
|
| + expect(simpleParameter.kind, kind);
|
| + expect(defaultParameter.separator, isNotNull);
|
| + expect(defaultParameter.defaultValue, isNotNull);
|
| + expect(defaultParameter.kind, kind);
|
| }
|
|
|
| - void test_parseEnumDeclaration_trailingComma() {
|
| - createParser("enum E {ONE,}");
|
| - EnumDeclaration declaration = parseFullCompilationUnitMember();
|
| - expectNotNullIfNoErrors(declaration);
|
| + void test_parseFormalParameter_covariant_var_named() {
|
| + ParameterKind kind = ParameterKind.NAMED;
|
| + createParser('covariant var a : null');
|
| + FormalParameter parameter = parser.parseFormalParameter(kind);
|
| + expectNotNullIfNoErrors(parameter);
|
| listener.assertNoErrors();
|
| - expect(declaration.documentationComment, isNull);
|
| - expect(declaration.enumKeyword, isNotNull);
|
| - expect(declaration.leftBracket, isNotNull);
|
| - expect(declaration.name, isNotNull);
|
| - expect(declaration.constants, hasLength(1));
|
| - expect(declaration.rightBracket, isNotNull);
|
| + expect(parameter, new isInstanceOf<DefaultFormalParameter>());
|
| + DefaultFormalParameter defaultParameter = parameter;
|
| + SimpleFormalParameter simpleParameter =
|
| + defaultParameter.parameter as SimpleFormalParameter;
|
| + expect(simpleParameter.covariantKeyword, isNotNull);
|
| + expect(simpleParameter.identifier, isNotNull);
|
| + expect(simpleParameter.keyword, isNotNull);
|
| + expect(simpleParameter.type, isNull);
|
| + expect(simpleParameter.kind, kind);
|
| + expect(defaultParameter.separator, isNotNull);
|
| + expect(defaultParameter.defaultValue, isNotNull);
|
| + expect(defaultParameter.kind, kind);
|
| }
|
|
|
| - void test_parseEnumDeclaration_two() {
|
| - createParser("enum E {ONE, TWO}");
|
| - EnumDeclaration declaration = parseFullCompilationUnitMember();
|
| - expectNotNullIfNoErrors(declaration);
|
| + void test_parseFormalParameter_covariant_var_normal() {
|
| + ParameterKind kind = ParameterKind.REQUIRED;
|
| + createParser('covariant var a');
|
| + FormalParameter parameter = parser.parseFormalParameter(kind);
|
| + expectNotNullIfNoErrors(parameter);
|
| listener.assertNoErrors();
|
| - expect(declaration.documentationComment, isNull);
|
| - expect(declaration.enumKeyword, isNotNull);
|
| - expect(declaration.leftBracket, isNotNull);
|
| - expect(declaration.name, isNotNull);
|
| - expect(declaration.constants, hasLength(2));
|
| - expect(declaration.rightBracket, isNotNull);
|
| + expect(parameter, new isInstanceOf<SimpleFormalParameter>());
|
| + SimpleFormalParameter simpleParameter = parameter;
|
| + expect(simpleParameter.covariantKeyword, isNotNull);
|
| + expect(simpleParameter.identifier, isNotNull);
|
| + expect(simpleParameter.keyword, isNotNull);
|
| + expect(simpleParameter.type, isNull);
|
| + expect(simpleParameter.kind, kind);
|
| }
|
|
|
| - void test_parseEqualityExpression_normal() {
|
| - createParser('x == y');
|
| - BinaryExpression expression = parser.parseEqualityExpression();
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseFormalParameter_covariant_var_positional() {
|
| + ParameterKind kind = ParameterKind.POSITIONAL;
|
| + createParser('covariant var a = null');
|
| + FormalParameter parameter = parser.parseFormalParameter(kind);
|
| + expectNotNullIfNoErrors(parameter);
|
| listener.assertNoErrors();
|
| - expect(expression.leftOperand, isNotNull);
|
| - expect(expression.operator, isNotNull);
|
| - expect(expression.operator.type, TokenType.EQ_EQ);
|
| - expect(expression.rightOperand, isNotNull);
|
| - }
|
| -
|
| - void test_parseEqualityExpression_super() {
|
| - createParser('super == y');
|
| - BinaryExpression expression = parser.parseEqualityExpression();
|
| - expectNotNullIfNoErrors(expression);
|
| + expect(parameter, new isInstanceOf<DefaultFormalParameter>());
|
| + DefaultFormalParameter defaultParameter = parameter;
|
| + SimpleFormalParameter simpleParameter =
|
| + defaultParameter.parameter as SimpleFormalParameter;
|
| + expect(simpleParameter.covariantKeyword, isNotNull);
|
| + expect(simpleParameter.identifier, isNotNull);
|
| + expect(simpleParameter.keyword, isNotNull);
|
| + expect(simpleParameter.type, isNull);
|
| + expect(simpleParameter.kind, kind);
|
| + expect(defaultParameter.separator, isNotNull);
|
| + expect(defaultParameter.defaultValue, isNotNull);
|
| + expect(defaultParameter.kind, kind);
|
| + }
|
| +
|
| + void test_parseFormalParameter_final_named() {
|
| + ParameterKind kind = ParameterKind.NAMED;
|
| + createParser('final a : null');
|
| + FormalParameter parameter = parser.parseFormalParameter(kind);
|
| + expectNotNullIfNoErrors(parameter);
|
| listener.assertNoErrors();
|
| - expect(expression.leftOperand, new isInstanceOf<SuperExpression>());
|
| - expect(expression.operator, isNotNull);
|
| - expect(expression.operator.type, TokenType.EQ_EQ);
|
| - expect(expression.rightOperand, isNotNull);
|
| + expect(parameter, new isInstanceOf<DefaultFormalParameter>());
|
| + DefaultFormalParameter defaultParameter = parameter;
|
| + SimpleFormalParameter simpleParameter =
|
| + defaultParameter.parameter as SimpleFormalParameter;
|
| + expect(simpleParameter.covariantKeyword, isNull);
|
| + expect(simpleParameter.identifier, isNotNull);
|
| + expect(simpleParameter.keyword, isNotNull);
|
| + expect(simpleParameter.type, isNull);
|
| + expect(simpleParameter.kind, kind);
|
| + expect(defaultParameter.separator, isNotNull);
|
| + expect(defaultParameter.defaultValue, isNotNull);
|
| + expect(defaultParameter.kind, kind);
|
| }
|
|
|
| - void test_parseExportDirective_configuration_multiple() {
|
| - createParser("export 'lib/lib.dart' if (a) 'b.dart' if (c) 'd.dart';");
|
| - ExportDirective directive = parseFullDirective();
|
| - expectNotNullIfNoErrors(directive);
|
| + void test_parseFormalParameter_final_normal() {
|
| + ParameterKind kind = ParameterKind.REQUIRED;
|
| + createParser('final a');
|
| + FormalParameter parameter = parser.parseFormalParameter(kind);
|
| + expectNotNullIfNoErrors(parameter);
|
| listener.assertNoErrors();
|
| - expect(directive.keyword, isNotNull);
|
| - expect(directive.uri, isNotNull);
|
| - expect(directive.configurations, hasLength(2));
|
| - _expectDottedName(directive.configurations[0].name, ['a']);
|
| - _expectDottedName(directive.configurations[1].name, ['c']);
|
| - expect(directive.combinators, hasLength(0));
|
| - expect(directive.semicolon, isNotNull);
|
| + expect(parameter, new isInstanceOf<SimpleFormalParameter>());
|
| + SimpleFormalParameter simpleParameter = parameter;
|
| + expect(simpleParameter.covariantKeyword, isNull);
|
| + expect(simpleParameter.identifier, isNotNull);
|
| + expect(simpleParameter.keyword, isNotNull);
|
| + expect(simpleParameter.type, isNull);
|
| + expect(simpleParameter.kind, kind);
|
| }
|
|
|
| - void test_parseExportDirective_configuration_single() {
|
| - createParser("export 'lib/lib.dart' if (a.b == 'c.dart') '';");
|
| - ExportDirective directive = parseFullDirective();
|
| - expectNotNullIfNoErrors(directive);
|
| + void test_parseFormalParameter_final_positional() {
|
| + ParameterKind kind = ParameterKind.POSITIONAL;
|
| + createParser('final a = null');
|
| + FormalParameter parameter = parser.parseFormalParameter(kind);
|
| + expectNotNullIfNoErrors(parameter);
|
| listener.assertNoErrors();
|
| - expect(directive.keyword, isNotNull);
|
| - expect(directive.uri, isNotNull);
|
| - expect(directive.configurations, hasLength(1));
|
| - _expectDottedName(directive.configurations[0].name, ['a', 'b']);
|
| - expect(directive.combinators, hasLength(0));
|
| - expect(directive.semicolon, isNotNull);
|
| + expect(parameter, new isInstanceOf<DefaultFormalParameter>());
|
| + DefaultFormalParameter defaultParameter = parameter;
|
| + SimpleFormalParameter simpleParameter =
|
| + defaultParameter.parameter as SimpleFormalParameter;
|
| + expect(simpleParameter.covariantKeyword, isNull);
|
| + expect(simpleParameter.identifier, isNotNull);
|
| + expect(simpleParameter.keyword, isNotNull);
|
| + expect(simpleParameter.type, isNull);
|
| + expect(simpleParameter.kind, kind);
|
| + expect(defaultParameter.separator, isNotNull);
|
| + expect(defaultParameter.defaultValue, isNotNull);
|
| + expect(defaultParameter.kind, kind);
|
| }
|
|
|
| - void test_parseExportDirective_hide() {
|
| - createParser("export 'lib/lib.dart' hide A, B;");
|
| - ExportDirective directive = parseFullDirective();
|
| - expectNotNullIfNoErrors(directive);
|
| + void test_parseFormalParameter_final_type_named() {
|
| + ParameterKind kind = ParameterKind.NAMED;
|
| + createParser('final A a : null');
|
| + FormalParameter parameter = parser.parseFormalParameter(kind);
|
| + expectNotNullIfNoErrors(parameter);
|
| listener.assertNoErrors();
|
| - expect(directive.keyword, isNotNull);
|
| - expect(directive.uri, isNotNull);
|
| - expect(directive.combinators, hasLength(1));
|
| - expect(directive.semicolon, isNotNull);
|
| + expect(parameter, new isInstanceOf<DefaultFormalParameter>());
|
| + DefaultFormalParameter defaultParameter = parameter;
|
| + SimpleFormalParameter simpleParameter =
|
| + defaultParameter.parameter as SimpleFormalParameter;
|
| + expect(simpleParameter.covariantKeyword, isNull);
|
| + expect(simpleParameter.identifier, isNotNull);
|
| + expect(simpleParameter.keyword, isNotNull);
|
| + expect(simpleParameter.type, isNotNull);
|
| + expect(simpleParameter.kind, kind);
|
| + expect(defaultParameter.separator, isNotNull);
|
| + expect(defaultParameter.defaultValue, isNotNull);
|
| + expect(defaultParameter.kind, kind);
|
| }
|
|
|
| - void test_parseExportDirective_hide_show() {
|
| - createParser("export 'lib/lib.dart' hide A show B;");
|
| - ExportDirective directive = parseFullDirective();
|
| - expectNotNullIfNoErrors(directive);
|
| + void test_parseFormalParameter_final_type_normal() {
|
| + ParameterKind kind = ParameterKind.REQUIRED;
|
| + createParser('final A a');
|
| + FormalParameter parameter = parser.parseFormalParameter(kind);
|
| + expectNotNullIfNoErrors(parameter);
|
| listener.assertNoErrors();
|
| - expect(directive.keyword, isNotNull);
|
| - expect(directive.uri, isNotNull);
|
| - expect(directive.combinators, hasLength(2));
|
| - expect(directive.semicolon, isNotNull);
|
| + expect(parameter, new isInstanceOf<SimpleFormalParameter>());
|
| + SimpleFormalParameter simpleParameter = parameter;
|
| + expect(simpleParameter.covariantKeyword, isNull);
|
| + expect(simpleParameter.identifier, isNotNull);
|
| + expect(simpleParameter.keyword, isNotNull);
|
| + expect(simpleParameter.type, isNotNull);
|
| + expect(simpleParameter.kind, kind);
|
| }
|
|
|
| - void test_parseExportDirective_noCombinator() {
|
| - createParser("export 'lib/lib.dart';");
|
| - ExportDirective directive = parseFullDirective();
|
| - expectNotNullIfNoErrors(directive);
|
| + void test_parseFormalParameter_final_type_positional() {
|
| + ParameterKind kind = ParameterKind.POSITIONAL;
|
| + createParser('final A a = null');
|
| + FormalParameter parameter = parser.parseFormalParameter(kind);
|
| + expectNotNullIfNoErrors(parameter);
|
| listener.assertNoErrors();
|
| - expect(directive.keyword, isNotNull);
|
| - expect(directive.uri, isNotNull);
|
| - expect(directive.combinators, hasLength(0));
|
| - expect(directive.semicolon, isNotNull);
|
| + expect(parameter, new isInstanceOf<DefaultFormalParameter>());
|
| + DefaultFormalParameter defaultParameter = parameter;
|
| + SimpleFormalParameter simpleParameter =
|
| + defaultParameter.parameter as SimpleFormalParameter;
|
| + expect(simpleParameter.covariantKeyword, isNull);
|
| + expect(simpleParameter.identifier, isNotNull);
|
| + expect(simpleParameter.keyword, isNotNull);
|
| + expect(simpleParameter.type, isNotNull);
|
| + expect(simpleParameter.kind, kind);
|
| + expect(defaultParameter.separator, isNotNull);
|
| + expect(defaultParameter.defaultValue, isNotNull);
|
| + expect(defaultParameter.kind, kind);
|
| }
|
|
|
| - void test_parseExportDirective_show() {
|
| - createParser("export 'lib/lib.dart' show A, B;");
|
| - ExportDirective directive = parseFullDirective();
|
| - expectNotNullIfNoErrors(directive);
|
| + @failingTest
|
| + void test_parseFormalParameter_type_function() {
|
| + ParameterKind kind = ParameterKind.REQUIRED;
|
| + createParser('String Function(int) a');
|
| + FormalParameter parameter = parser.parseFormalParameter(kind);
|
| + expectNotNullIfNoErrors(parameter);
|
| listener.assertNoErrors();
|
| - expect(directive.keyword, isNotNull);
|
| - expect(directive.uri, isNotNull);
|
| - expect(directive.combinators, hasLength(1));
|
| - expect(directive.semicolon, isNotNull);
|
| + expect(parameter, new isInstanceOf<SimpleFormalParameter>());
|
| + SimpleFormalParameter simpleParameter = parameter;
|
| + expect(simpleParameter.covariantKeyword, isNull);
|
| + expect(simpleParameter.identifier, isNotNull);
|
| + expect(simpleParameter.keyword, isNull);
|
| + expect(simpleParameter.type, new isInstanceOf<GenericFunctionType>());
|
| + expect(simpleParameter.kind, kind);
|
| }
|
|
|
| - void test_parseExportDirective_show_hide() {
|
| - createParser("export 'lib/lib.dart' show B hide A;");
|
| - ExportDirective directive = parseFullDirective();
|
| - expectNotNullIfNoErrors(directive);
|
| + void test_parseFormalParameter_type_named() {
|
| + ParameterKind kind = ParameterKind.NAMED;
|
| + createParser('A a : null');
|
| + FormalParameter parameter = parser.parseFormalParameter(kind);
|
| + expectNotNullIfNoErrors(parameter);
|
| listener.assertNoErrors();
|
| - expect(directive.keyword, isNotNull);
|
| - expect(directive.uri, isNotNull);
|
| - expect(directive.combinators, hasLength(2));
|
| - expect(directive.semicolon, isNotNull);
|
| + expect(parameter, new isInstanceOf<DefaultFormalParameter>());
|
| + DefaultFormalParameter defaultParameter = parameter;
|
| + SimpleFormalParameter simpleParameter =
|
| + defaultParameter.parameter as SimpleFormalParameter;
|
| + expect(simpleParameter.covariantKeyword, isNull);
|
| + expect(simpleParameter.identifier, isNotNull);
|
| + expect(simpleParameter.keyword, isNull);
|
| + expect(simpleParameter.type, isNotNull);
|
| + expect(simpleParameter.kind, kind);
|
| + expect(defaultParameter.separator, isNotNull);
|
| + expect(defaultParameter.defaultValue, isNotNull);
|
| + expect(defaultParameter.kind, kind);
|
| }
|
|
|
| - void test_parseExpression_assign() {
|
| - // TODO(brianwilkerson) Implement more tests for this method.
|
| - Expression expression = parseExpression('x = y');
|
| - expect(expression, new isInstanceOf<AssignmentExpression>());
|
| - AssignmentExpression assignmentExpression = expression;
|
| - expect(assignmentExpression.leftHandSide, isNotNull);
|
| - expect(assignmentExpression.operator, isNotNull);
|
| - expect(assignmentExpression.operator.type, TokenType.EQ);
|
| - expect(assignmentExpression.rightHandSide, isNotNull);
|
| + void test_parseFormalParameter_type_normal() {
|
| + ParameterKind kind = ParameterKind.REQUIRED;
|
| + createParser('A a');
|
| + FormalParameter parameter = parser.parseFormalParameter(kind);
|
| + expectNotNullIfNoErrors(parameter);
|
| + listener.assertNoErrors();
|
| + expect(parameter, new isInstanceOf<SimpleFormalParameter>());
|
| + SimpleFormalParameter simpleParameter = parameter;
|
| + expect(simpleParameter.covariantKeyword, isNull);
|
| + expect(simpleParameter.identifier, isNotNull);
|
| + expect(simpleParameter.keyword, isNull);
|
| + expect(simpleParameter.type, isNotNull);
|
| + expect(simpleParameter.kind, kind);
|
| }
|
|
|
| - void test_parseExpression_assign_compound() {
|
| - enableLazyAssignmentOperators = true;
|
| - Expression expression = parseExpression('x ||= y');
|
| - expect(expression, new isInstanceOf<AssignmentExpression>());
|
| - AssignmentExpression assignmentExpression = expression;
|
| - expect(assignmentExpression.leftHandSide, isNotNull);
|
| - expect(assignmentExpression.operator, isNotNull);
|
| - expect(assignmentExpression.operator.type, TokenType.BAR_BAR_EQ);
|
| - expect(assignmentExpression.rightHandSide, isNotNull);
|
| + void test_parseFormalParameter_type_positional() {
|
| + ParameterKind kind = ParameterKind.POSITIONAL;
|
| + createParser('A a = null');
|
| + FormalParameter parameter = parser.parseFormalParameter(kind);
|
| + expectNotNullIfNoErrors(parameter);
|
| + listener.assertNoErrors();
|
| + expect(parameter, new isInstanceOf<DefaultFormalParameter>());
|
| + DefaultFormalParameter defaultParameter = parameter;
|
| + SimpleFormalParameter simpleParameter =
|
| + defaultParameter.parameter as SimpleFormalParameter;
|
| + expect(simpleParameter.covariantKeyword, isNull);
|
| + expect(simpleParameter.identifier, isNotNull);
|
| + expect(simpleParameter.keyword, isNull);
|
| + expect(simpleParameter.type, isNotNull);
|
| + expect(simpleParameter.kind, kind);
|
| + expect(defaultParameter.separator, isNotNull);
|
| + expect(defaultParameter.defaultValue, isNotNull);
|
| + expect(defaultParameter.kind, kind);
|
| }
|
|
|
| - void test_parseExpression_comparison() {
|
| - Expression expression = parseExpression('--a.b == c');
|
| - expect(expression, new isInstanceOf<BinaryExpression>());
|
| - BinaryExpression binaryExpression = expression;
|
| - expect(binaryExpression.leftOperand, isNotNull);
|
| - expect(binaryExpression.operator, isNotNull);
|
| - expect(binaryExpression.operator.type, TokenType.EQ_EQ);
|
| - expect(binaryExpression.rightOperand, isNotNull);
|
| - }
|
| -
|
| - void test_parseExpression_function_async() {
|
| - Expression expression = parseExpression('() async {}');
|
| - expect(expression, new isInstanceOf<FunctionExpression>());
|
| - FunctionExpression functionExpression = expression;
|
| - expect(functionExpression.body, isNotNull);
|
| - expect(functionExpression.body.isAsynchronous, isTrue);
|
| - expect(functionExpression.body.isGenerator, isFalse);
|
| - expect(functionExpression.parameters, isNotNull);
|
| + void test_parseFormalParameter_var_named() {
|
| + ParameterKind kind = ParameterKind.NAMED;
|
| + createParser('var a : null');
|
| + FormalParameter parameter = parser.parseFormalParameter(kind);
|
| + expectNotNullIfNoErrors(parameter);
|
| + listener.assertNoErrors();
|
| + expect(parameter, new isInstanceOf<DefaultFormalParameter>());
|
| + DefaultFormalParameter defaultParameter = parameter;
|
| + SimpleFormalParameter simpleParameter =
|
| + defaultParameter.parameter as SimpleFormalParameter;
|
| + expect(simpleParameter.covariantKeyword, isNull);
|
| + expect(simpleParameter.identifier, isNotNull);
|
| + expect(simpleParameter.keyword, isNotNull);
|
| + expect(simpleParameter.type, isNull);
|
| + expect(simpleParameter.kind, kind);
|
| + expect(defaultParameter.separator, isNotNull);
|
| + expect(defaultParameter.defaultValue, isNotNull);
|
| + expect(defaultParameter.kind, kind);
|
| }
|
|
|
| - void test_parseExpression_function_asyncStar() {
|
| - Expression expression = parseExpression('() async* {}');
|
| - expect(expression, new isInstanceOf<FunctionExpression>());
|
| - FunctionExpression functionExpression = expression;
|
| - expect(functionExpression.body, isNotNull);
|
| - expect(functionExpression.body.isAsynchronous, isTrue);
|
| - expect(functionExpression.body.isGenerator, isTrue);
|
| - expect(functionExpression.parameters, isNotNull);
|
| + void test_parseFormalParameter_var_normal() {
|
| + ParameterKind kind = ParameterKind.REQUIRED;
|
| + createParser('var a');
|
| + FormalParameter parameter = parser.parseFormalParameter(kind);
|
| + expectNotNullIfNoErrors(parameter);
|
| + listener.assertNoErrors();
|
| + expect(parameter, new isInstanceOf<SimpleFormalParameter>());
|
| + SimpleFormalParameter simpleParameter = parameter;
|
| + expect(simpleParameter.covariantKeyword, isNull);
|
| + expect(simpleParameter.identifier, isNotNull);
|
| + expect(simpleParameter.keyword, isNotNull);
|
| + expect(simpleParameter.type, isNull);
|
| + expect(simpleParameter.kind, kind);
|
| }
|
|
|
| - void test_parseExpression_function_sync() {
|
| - Expression expression = parseExpression('() {}');
|
| - expect(expression, new isInstanceOf<FunctionExpression>());
|
| - FunctionExpression functionExpression = expression;
|
| - expect(functionExpression.body, isNotNull);
|
| - expect(functionExpression.body.isAsynchronous, isFalse);
|
| - expect(functionExpression.body.isGenerator, isFalse);
|
| - expect(functionExpression.parameters, isNotNull);
|
| + void test_parseFormalParameter_var_positional() {
|
| + ParameterKind kind = ParameterKind.POSITIONAL;
|
| + createParser('var a = null');
|
| + FormalParameter parameter = parser.parseFormalParameter(kind);
|
| + expectNotNullIfNoErrors(parameter);
|
| + listener.assertNoErrors();
|
| + expect(parameter, new isInstanceOf<DefaultFormalParameter>());
|
| + DefaultFormalParameter defaultParameter = parameter;
|
| + SimpleFormalParameter simpleParameter =
|
| + defaultParameter.parameter as SimpleFormalParameter;
|
| + expect(simpleParameter.covariantKeyword, isNull);
|
| + expect(simpleParameter.identifier, isNotNull);
|
| + expect(simpleParameter.keyword, isNotNull);
|
| + expect(simpleParameter.type, isNull);
|
| + expect(simpleParameter.kind, kind);
|
| + expect(defaultParameter.separator, isNotNull);
|
| + expect(defaultParameter.defaultValue, isNotNull);
|
| + expect(defaultParameter.kind, kind);
|
| }
|
|
|
| - void test_parseExpression_function_syncStar() {
|
| - Expression expression = parseExpression('() sync* {}');
|
| - expect(expression, new isInstanceOf<FunctionExpression>());
|
| - FunctionExpression functionExpression = expression;
|
| - expect(functionExpression.body, isNotNull);
|
| - expect(functionExpression.body.isAsynchronous, isFalse);
|
| - expect(functionExpression.body.isGenerator, isTrue);
|
| - expect(functionExpression.parameters, isNotNull);
|
| + void test_parseFormalParameterList_empty() {
|
| + createParser('()');
|
| + FormalParameterList list = parser.parseFormalParameterList();
|
| + expectNotNullIfNoErrors(list);
|
| + listener.assertNoErrors();
|
| + expect(list.leftParenthesis, isNotNull);
|
| + expect(list.leftDelimiter, isNull);
|
| + expect(list.parameters, hasLength(0));
|
| + expect(list.rightDelimiter, isNull);
|
| + expect(list.rightParenthesis, isNotNull);
|
| }
|
|
|
| - void test_parseExpression_invokeFunctionExpression() {
|
| - Expression expression = parseExpression('(a) {return a + a;} (3)');
|
| - expect(expression, new isInstanceOf<FunctionExpressionInvocation>());
|
| - FunctionExpressionInvocation invocation = expression;
|
| - expect(invocation.function, new isInstanceOf<FunctionExpression>());
|
| - FunctionExpression functionExpression =
|
| - invocation.function as FunctionExpression;
|
| - expect(functionExpression.parameters, isNotNull);
|
| - expect(functionExpression.body, isNotNull);
|
| - expect(invocation.typeArguments, isNull);
|
| - ArgumentList list = invocation.argumentList;
|
| - expect(list, isNotNull);
|
| - expect(list.arguments, hasLength(1));
|
| + void test_parseFormalParameterList_named_multiple() {
|
| + createParser('({A a : 1, B b, C c : 3})');
|
| + FormalParameterList list = parser.parseFormalParameterList();
|
| + expectNotNullIfNoErrors(list);
|
| + listener.assertNoErrors();
|
| + expect(list.leftParenthesis, isNotNull);
|
| + expect(list.leftDelimiter, isNotNull);
|
| + expect(list.parameters, hasLength(3));
|
| + expect(list.rightDelimiter, isNotNull);
|
| + expect(list.rightParenthesis, isNotNull);
|
| }
|
|
|
| - void test_parseExpression_nonAwait() {
|
| - Expression expression = parseExpression('await()');
|
| - expect(expression, new isInstanceOf<MethodInvocation>());
|
| - MethodInvocation invocation = expression;
|
| - expect(invocation.methodName.name, 'await');
|
| - expect(invocation.typeArguments, isNull);
|
| - expect(invocation.argumentList, isNotNull);
|
| + void test_parseFormalParameterList_named_single() {
|
| + createParser('({A a})');
|
| + FormalParameterList list = parser.parseFormalParameterList();
|
| + expectNotNullIfNoErrors(list);
|
| + listener.assertNoErrors();
|
| + expect(list.leftParenthesis, isNotNull);
|
| + expect(list.leftDelimiter, isNotNull);
|
| + expect(list.parameters, hasLength(1));
|
| + expect(list.rightDelimiter, isNotNull);
|
| + expect(list.rightParenthesis, isNotNull);
|
| }
|
|
|
| - void test_parseExpression_superMethodInvocation() {
|
| - Expression expression = parseExpression('super.m()');
|
| - expect(expression, new isInstanceOf<MethodInvocation>());
|
| - MethodInvocation invocation = expression;
|
| - expect(invocation.target, isNotNull);
|
| - expect(invocation.methodName, isNotNull);
|
| - expect(invocation.typeArguments, isNull);
|
| - expect(invocation.argumentList, isNotNull);
|
| + void test_parseFormalParameterList_named_trailing_comma() {
|
| + createParser('(A a, {B b,})');
|
| + FormalParameterList list = parser.parseFormalParameterList();
|
| + expectNotNullIfNoErrors(list);
|
| + listener.assertNoErrors();
|
| + expect(list.leftParenthesis, isNotNull);
|
| + expect(list.leftDelimiter, isNotNull);
|
| + expect(list.parameters, hasLength(2));
|
| + expect(list.rightDelimiter, isNotNull);
|
| + expect(list.rightParenthesis, isNotNull);
|
| }
|
|
|
| - void test_parseExpression_superMethodInvocation_typeArgumentComments() {
|
| - enableGenericMethodComments = true;
|
| - Expression expression = parseExpression('super.m/*<E>*/()');
|
| - expect(expression, new isInstanceOf<MethodInvocation>());
|
| - MethodInvocation invocation = expression;
|
| - expect(invocation.target, isNotNull);
|
| - expect(invocation.methodName, isNotNull);
|
| - expect(invocation.typeArguments, isNotNull);
|
| - expect(invocation.argumentList, isNotNull);
|
| + void test_parseFormalParameterList_normal_multiple() {
|
| + createParser('(A a, B b, C c)');
|
| + FormalParameterList list = parser.parseFormalParameterList();
|
| + expectNotNullIfNoErrors(list);
|
| + listener.assertNoErrors();
|
| + expect(list.leftParenthesis, isNotNull);
|
| + expect(list.leftDelimiter, isNull);
|
| + expect(list.parameters, hasLength(3));
|
| + expect(list.rightDelimiter, isNull);
|
| + expect(list.rightParenthesis, isNotNull);
|
| }
|
|
|
| - void test_parseExpression_superMethodInvocation_typeArguments() {
|
| - Expression expression = parseExpression('super.m<E>()');
|
| - expect(expression, new isInstanceOf<MethodInvocation>());
|
| - MethodInvocation invocation = expression;
|
| - expect(invocation.target, isNotNull);
|
| - expect(invocation.methodName, isNotNull);
|
| - expect(invocation.typeArguments, isNotNull);
|
| - expect(invocation.argumentList, isNotNull);
|
| + void test_parseFormalParameterList_normal_named() {
|
| + createParser('(A a, {B b})');
|
| + FormalParameterList list = parser.parseFormalParameterList();
|
| + expectNotNullIfNoErrors(list);
|
| + listener.assertNoErrors();
|
| + expect(list.leftParenthesis, isNotNull);
|
| + expect(list.leftDelimiter, isNotNull);
|
| + expect(list.parameters, hasLength(2));
|
| + expect(list.rightDelimiter, isNotNull);
|
| + expect(list.rightParenthesis, isNotNull);
|
| }
|
|
|
| - void test_parseExpressionList_multiple() {
|
| - createParser('1, 2, 3');
|
| - List<Expression> result = parser.parseExpressionList();
|
| - expectNotNullIfNoErrors(result);
|
| + void test_parseFormalParameterList_normal_named_inFunctionType() {
|
| + createParser('(A, {B b})');
|
| + FormalParameterList list =
|
| + parser.parseFormalParameterList(inFunctionType: true);
|
| + expectNotNullIfNoErrors(list);
|
| listener.assertNoErrors();
|
| - expect(result, hasLength(3));
|
| + expect(list.leftParenthesis, isNotNull);
|
| + expect(list.leftDelimiter, isNotNull);
|
| + expect(list.rightDelimiter, isNotNull);
|
| + expect(list.rightParenthesis, isNotNull);
|
| + NodeList<FormalParameter> parameters = list.parameters;
|
| + expect(parameters, hasLength(2));
|
| +
|
| + expect(parameters[0], new isInstanceOf<SimpleFormalParameter>());
|
| + SimpleFormalParameter required = parameters[0];
|
| + expect(required.identifier, isNull);
|
| + expect(required.type, new isInstanceOf<TypeName>());
|
| + expect((required.type as TypeName).name.name, 'A');
|
| +
|
| + expect(parameters[1], new isInstanceOf<DefaultFormalParameter>());
|
| + DefaultFormalParameter named = parameters[1];
|
| + expect(named.identifier, isNotNull);
|
| + expect(named.parameter, new isInstanceOf<SimpleFormalParameter>());
|
| + SimpleFormalParameter simple = named.parameter;
|
| + expect(simple.type, new isInstanceOf<TypeName>());
|
| + expect((simple.type as TypeName).name.name, 'B');
|
| }
|
|
|
| - void test_parseExpressionList_single() {
|
| - createParser('1');
|
| - List<Expression> result = parser.parseExpressionList();
|
| - expectNotNullIfNoErrors(result);
|
| + void test_parseFormalParameterList_normal_positional() {
|
| + createParser('(A a, [B b])');
|
| + FormalParameterList list = parser.parseFormalParameterList();
|
| + expectNotNullIfNoErrors(list);
|
| listener.assertNoErrors();
|
| - expect(result, hasLength(1));
|
| + expect(list.leftParenthesis, isNotNull);
|
| + expect(list.leftDelimiter, isNotNull);
|
| + expect(list.parameters, hasLength(2));
|
| + expect(list.rightDelimiter, isNotNull);
|
| + expect(list.rightParenthesis, isNotNull);
|
| }
|
|
|
| - void test_parseExpressionWithoutCascade_assign() {
|
| - // TODO(brianwilkerson) Implement more tests for this method.
|
| - createParser('x = y');
|
| - Expression expression = parser.parseExpressionWithoutCascade();
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseFormalParameterList_normal_single() {
|
| + createParser('(A a)');
|
| + FormalParameterList list = parser.parseFormalParameterList();
|
| + expectNotNullIfNoErrors(list);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<AssignmentExpression>());
|
| - AssignmentExpression assignmentExpression = expression;
|
| - expect(assignmentExpression.leftHandSide, isNotNull);
|
| - expect(assignmentExpression.operator, isNotNull);
|
| - expect(assignmentExpression.operator.type, TokenType.EQ);
|
| - expect(assignmentExpression.rightHandSide, isNotNull);
|
| + expect(list.leftParenthesis, isNotNull);
|
| + expect(list.leftDelimiter, isNull);
|
| + expect(list.parameters, hasLength(1));
|
| + expect(list.rightDelimiter, isNull);
|
| + expect(list.rightParenthesis, isNotNull);
|
| }
|
|
|
| - void test_parseExpressionWithoutCascade_comparison() {
|
| - createParser('--a.b == c');
|
| - Expression expression = parser.parseExpressionWithoutCascade();
|
| - expectNotNullIfNoErrors(expression);
|
| - listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<BinaryExpression>());
|
| - BinaryExpression binaryExpression = expression;
|
| - expect(binaryExpression.leftOperand, isNotNull);
|
| - expect(binaryExpression.operator, isNotNull);
|
| - expect(binaryExpression.operator.type, TokenType.EQ_EQ);
|
| - expect(binaryExpression.rightOperand, isNotNull);
|
| - }
|
| -
|
| - void test_parseExpressionWithoutCascade_superMethodInvocation() {
|
| - createParser('super.m()');
|
| - Expression expression = parser.parseExpressionWithoutCascade();
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseFormalParameterList_normal_single_Function() {
|
| + createParser('(Function f)');
|
| + FormalParameterList list = parser.parseFormalParameterList();
|
| + expectNotNullIfNoErrors(list);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<MethodInvocation>());
|
| - MethodInvocation invocation = expression;
|
| - expect(invocation.target, isNotNull);
|
| - expect(invocation.methodName, isNotNull);
|
| - expect(invocation.typeArguments, isNull);
|
| - expect(invocation.argumentList, isNotNull);
|
| + expect(list.leftParenthesis, isNotNull);
|
| + expect(list.leftDelimiter, isNull);
|
| + expect(list.parameters, hasLength(1));
|
| + expect(list.rightDelimiter, isNull);
|
| + expect(list.rightParenthesis, isNotNull);
|
| }
|
|
|
| - void
|
| - test_parseExpressionWithoutCascade_superMethodInvocation_typeArgumentComments() {
|
| - enableGenericMethodComments = true;
|
| - createParser('super.m/*<E>*/()');
|
| - Expression expression = parser.parseExpressionWithoutCascade();
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseFormalParameterList_normal_single_trailing_comma() {
|
| + createParser('(A a,)');
|
| + FormalParameterList list = parser.parseFormalParameterList();
|
| + expectNotNullIfNoErrors(list);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<MethodInvocation>());
|
| - MethodInvocation invocation = expression;
|
| - expect(invocation.target, isNotNull);
|
| - expect(invocation.methodName, isNotNull);
|
| - expect(invocation.typeArguments, isNotNull);
|
| - expect(invocation.argumentList, isNotNull);
|
| + expect(list.leftParenthesis, isNotNull);
|
| + expect(list.leftDelimiter, isNull);
|
| + expect(list.parameters, hasLength(1));
|
| + expect(list.rightDelimiter, isNull);
|
| + expect(list.rightParenthesis, isNotNull);
|
| }
|
|
|
| - void
|
| - test_parseExpressionWithoutCascade_superMethodInvocation_typeArguments() {
|
| - createParser('super.m<E>()');
|
| - Expression expression = parser.parseExpressionWithoutCascade();
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseFormalParameterList_positional_multiple() {
|
| + createParser('([A a = null, B b, C c = null])');
|
| + FormalParameterList list = parser.parseFormalParameterList();
|
| + expectNotNullIfNoErrors(list);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<MethodInvocation>());
|
| - MethodInvocation invocation = expression;
|
| - expect(invocation.target, isNotNull);
|
| - expect(invocation.methodName, isNotNull);
|
| - expect(invocation.typeArguments, isNotNull);
|
| - expect(invocation.argumentList, isNotNull);
|
| + expect(list.leftParenthesis, isNotNull);
|
| + expect(list.leftDelimiter, isNotNull);
|
| + expect(list.parameters, hasLength(3));
|
| + expect(list.rightDelimiter, isNotNull);
|
| + expect(list.rightParenthesis, isNotNull);
|
| }
|
|
|
| - void test_parseExtendsClause() {
|
| - createParser('extends B');
|
| - ExtendsClause clause = parser.parseExtendsClause();
|
| - expectNotNullIfNoErrors(clause);
|
| + void test_parseFormalParameterList_positional_single() {
|
| + createParser('([A a = null])');
|
| + FormalParameterList list = parser.parseFormalParameterList();
|
| + expectNotNullIfNoErrors(list);
|
| listener.assertNoErrors();
|
| - expect(clause.extendsKeyword, isNotNull);
|
| - expect(clause.superclass, isNotNull);
|
| - expect(clause.superclass, new isInstanceOf<TypeName>());
|
| + expect(list.leftParenthesis, isNotNull);
|
| + expect(list.leftDelimiter, isNotNull);
|
| + expect(list.parameters, hasLength(1));
|
| + expect(list.rightDelimiter, isNotNull);
|
| + expect(list.rightParenthesis, isNotNull);
|
| }
|
|
|
| - void test_parseFinalConstVarOrType_const_functionType() {
|
| - createParser('const int Function(int) f');
|
| - FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
|
| - expectNotNullIfNoErrors(result);
|
| + void test_parseFormalParameterList_positional_trailing_comma() {
|
| + createParser('(A a, [B b,])');
|
| + FormalParameterList list = parser.parseFormalParameterList();
|
| + expectNotNullIfNoErrors(list);
|
| listener.assertNoErrors();
|
| - Token keyword = result.keyword;
|
| - expect(keyword, isNotNull);
|
| - expect(keyword.type, TokenType.KEYWORD);
|
| - expect(keyword.keyword, Keyword.CONST);
|
| - expect(result.type, isNotNull);
|
| + expect(list.leftParenthesis, isNotNull);
|
| + expect(list.leftDelimiter, isNotNull);
|
| + expect(list.parameters, hasLength(2));
|
| + expect(list.rightDelimiter, isNotNull);
|
| + expect(list.rightParenthesis, isNotNull);
|
| }
|
|
|
| - void test_parseFinalConstVarOrType_const_namedType() {
|
| - createParser('const A a');
|
| - FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
|
| - expectNotNullIfNoErrors(result);
|
| + void test_parseFormalParameterList_prefixedType() {
|
| + createParser('(io.File f)');
|
| + FormalParameterList list = parser.parseFormalParameterList();
|
| + expectNotNullIfNoErrors(list);
|
| listener.assertNoErrors();
|
| - Token keyword = result.keyword;
|
| - expect(keyword, isNotNull);
|
| - expect(keyword.type, TokenType.KEYWORD);
|
| - expect(keyword.keyword, Keyword.CONST);
|
| - expect(result.type, isNotNull);
|
| + expect(list.leftParenthesis, isNotNull);
|
| + expect(list.leftDelimiter, isNull);
|
| + expect(list.parameters, hasLength(1));
|
| + expect(list.parameters[0].toSource(), 'io.File f');
|
| + expect(list.rightDelimiter, isNull);
|
| + expect(list.rightParenthesis, isNotNull);
|
| }
|
|
|
| - void test_parseFinalConstVarOrType_const_noType() {
|
| - createParser('const');
|
| - FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
|
| - expectNotNullIfNoErrors(result);
|
| - listener.assertNoErrors();
|
| - Token keyword = result.keyword;
|
| - expect(keyword, isNotNull);
|
| - expect(keyword.type, TokenType.KEYWORD);
|
| - expect(keyword.keyword, Keyword.CONST);
|
| - expect(result.type, isNull);
|
| + void test_parseFormalParameterList_prefixedType_partial() {
|
| + createParser('(io.)');
|
| + FormalParameterList list = parser.parseFormalParameterList();
|
| + expectNotNullIfNoErrors(list);
|
| + listener.assertErrorsWithCodes([
|
| + ParserErrorCode.MISSING_IDENTIFIER,
|
| + ParserErrorCode.MISSING_IDENTIFIER
|
| + ]);
|
| + expect(list.leftParenthesis, isNotNull);
|
| + expect(list.leftDelimiter, isNull);
|
| + expect(list.parameters, hasLength(1));
|
| + expect(list.parameters[0].toSource(), 'io. ');
|
| + expect(list.rightDelimiter, isNull);
|
| + expect(list.rightParenthesis, isNotNull);
|
| }
|
|
|
| - void test_parseFinalConstVarOrType_final_functionType() {
|
| - createParser('final int Function(int) f');
|
| - FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
|
| - expectNotNullIfNoErrors(result);
|
| - listener.assertNoErrors();
|
| - Token keyword = result.keyword;
|
| - expect(keyword, isNotNull);
|
| - expect(keyword.type, TokenType.KEYWORD);
|
| - expect(keyword.keyword, Keyword.FINAL);
|
| - expect(result.type, isNotNull);
|
| + void test_parseFormalParameterList_prefixedType_partial2() {
|
| + createParser('(io.,a)');
|
| + FormalParameterList list = parser.parseFormalParameterList();
|
| + expectNotNullIfNoErrors(list);
|
| + listener.assertErrorsWithCodes([
|
| + ParserErrorCode.MISSING_IDENTIFIER,
|
| + ParserErrorCode.MISSING_IDENTIFIER
|
| + ]);
|
| + expect(list.leftParenthesis, isNotNull);
|
| + expect(list.leftDelimiter, isNull);
|
| + expect(list.parameters, hasLength(2));
|
| + expect(list.parameters[0].toSource(), 'io. ');
|
| + expect(list.parameters[1].toSource(), 'a');
|
| + expect(list.rightDelimiter, isNull);
|
| + expect(list.rightParenthesis, isNotNull);
|
| }
|
|
|
| - void test_parseFinalConstVarOrType_final_namedType() {
|
| - createParser('final A a');
|
| - FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
|
| - expectNotNullIfNoErrors(result);
|
| + void test_parseForStatement_each_await() {
|
| + createParser('await for (element in list) {}');
|
| + Statement statement = parser.parseForStatement();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - Token keyword = result.keyword;
|
| - expect(keyword, isNotNull);
|
| - expect(keyword.type, TokenType.KEYWORD);
|
| - expect(keyword.keyword, Keyword.FINAL);
|
| - expect(result.type, isNotNull);
|
| + expect(statement, new isInstanceOf<ForEachStatement>());
|
| + ForEachStatement forStatement = statement;
|
| + expect(forStatement.awaitKeyword, isNotNull);
|
| + expect(forStatement.forKeyword, isNotNull);
|
| + expect(forStatement.leftParenthesis, isNotNull);
|
| + expect(forStatement.loopVariable, isNull);
|
| + expect(forStatement.identifier, isNotNull);
|
| + expect(forStatement.inKeyword, isNotNull);
|
| + expect(forStatement.iterable, isNotNull);
|
| + expect(forStatement.rightParenthesis, isNotNull);
|
| + expect(forStatement.body, isNotNull);
|
| }
|
|
|
| - void test_parseFinalConstVarOrType_final_noType() {
|
| - createParser('final');
|
| - FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
|
| - expectNotNullIfNoErrors(result);
|
| + void test_parseForStatement_each_identifier() {
|
| + createParser('for (element in list) {}');
|
| + Statement statement = parser.parseForStatement();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - Token keyword = result.keyword;
|
| - expect(keyword, isNotNull);
|
| - expect(keyword.type, TokenType.KEYWORD);
|
| - expect(keyword.keyword, Keyword.FINAL);
|
| - expect(result.type, isNull);
|
| + expect(statement, new isInstanceOf<ForEachStatement>());
|
| + ForEachStatement forStatement = statement;
|
| + expect(forStatement.awaitKeyword, isNull);
|
| + expect(forStatement.forKeyword, isNotNull);
|
| + expect(forStatement.leftParenthesis, isNotNull);
|
| + expect(forStatement.loopVariable, isNull);
|
| + expect(forStatement.identifier, isNotNull);
|
| + expect(forStatement.inKeyword, isNotNull);
|
| + expect(forStatement.iterable, isNotNull);
|
| + expect(forStatement.rightParenthesis, isNotNull);
|
| + expect(forStatement.body, isNotNull);
|
| }
|
|
|
| - void test_parseFinalConstVarOrType_final_prefixedType() {
|
| - createParser('final p.A a');
|
| - FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
|
| - expectNotNullIfNoErrors(result);
|
| + void test_parseForStatement_each_noType_metadata() {
|
| + createParser('for (@A var element in list) {}');
|
| + Statement statement = parser.parseForStatement();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - Token keyword = result.keyword;
|
| - expect(keyword, isNotNull);
|
| - expect(keyword.type, TokenType.KEYWORD);
|
| - expect(keyword.keyword, Keyword.FINAL);
|
| - expect(result.type, isNotNull);
|
| + expect(statement, new isInstanceOf<ForEachStatement>());
|
| + ForEachStatement forStatement = statement;
|
| + expect(forStatement.awaitKeyword, isNull);
|
| + expect(forStatement.forKeyword, isNotNull);
|
| + expect(forStatement.leftParenthesis, isNotNull);
|
| + expect(forStatement.loopVariable, isNotNull);
|
| + expect(forStatement.loopVariable.metadata, hasLength(1));
|
| + expect(forStatement.identifier, isNull);
|
| + expect(forStatement.inKeyword, isNotNull);
|
| + expect(forStatement.iterable, isNotNull);
|
| + expect(forStatement.rightParenthesis, isNotNull);
|
| + expect(forStatement.body, isNotNull);
|
| }
|
|
|
| - void test_parseFinalConstVarOrType_type_function() {
|
| - createParser('int Function(int) f');
|
| - FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
|
| - expectNotNullIfNoErrors(result);
|
| + void test_parseForStatement_each_type() {
|
| + createParser('for (A element in list) {}');
|
| + Statement statement = parser.parseForStatement();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(result.keyword, isNull);
|
| - expect(result.type, isNotNull);
|
| - }
|
| -
|
| - void test_parseFinalConstVarOrType_type_parameterized() {
|
| - createParser('A<B> a');
|
| - FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
|
| - expectNotNullIfNoErrors(result);
|
| - listener.assertNoErrors();
|
| - expect(result.keyword, isNull);
|
| - expect(result.type, isNotNull);
|
| + expect(statement, new isInstanceOf<ForEachStatement>());
|
| + ForEachStatement forStatement = statement;
|
| + expect(forStatement.awaitKeyword, isNull);
|
| + expect(forStatement.forKeyword, isNotNull);
|
| + expect(forStatement.leftParenthesis, isNotNull);
|
| + expect(forStatement.loopVariable, isNotNull);
|
| + expect(forStatement.identifier, isNull);
|
| + expect(forStatement.inKeyword, isNotNull);
|
| + expect(forStatement.iterable, isNotNull);
|
| + expect(forStatement.rightParenthesis, isNotNull);
|
| + expect(forStatement.body, isNotNull);
|
| }
|
|
|
| - void test_parseFinalConstVarOrType_type_prefixed() {
|
| - createParser('p.A a');
|
| - FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
|
| - expectNotNullIfNoErrors(result);
|
| + void test_parseForStatement_each_var() {
|
| + createParser('for (var element in list) {}');
|
| + Statement statement = parser.parseForStatement();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(result.keyword, isNull);
|
| - expect(result.type, isNotNull);
|
| + expect(statement, new isInstanceOf<ForEachStatement>());
|
| + ForEachStatement forStatement = statement;
|
| + expect(forStatement.awaitKeyword, isNull);
|
| + expect(forStatement.forKeyword, isNotNull);
|
| + expect(forStatement.leftParenthesis, isNotNull);
|
| + expect(forStatement.loopVariable, isNotNull);
|
| + expect(forStatement.identifier, isNull);
|
| + expect(forStatement.inKeyword, isNotNull);
|
| + expect(forStatement.iterable, isNotNull);
|
| + expect(forStatement.rightParenthesis, isNotNull);
|
| + expect(forStatement.body, isNotNull);
|
| }
|
|
|
| - void test_parseFinalConstVarOrType_type_prefixed_noIdentifier() {
|
| - createParser('p.A,');
|
| - FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
|
| - expectNotNullIfNoErrors(result);
|
| + void test_parseForStatement_loop_c() {
|
| + createParser('for (; i < count;) {}');
|
| + Statement statement = parser.parseForStatement();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(result.keyword, isNull);
|
| - expect(result.type, isNotNull);
|
| + expect(statement, new isInstanceOf<ForStatement>());
|
| + ForStatement forStatement = statement;
|
| + expect(forStatement.forKeyword, isNotNull);
|
| + expect(forStatement.leftParenthesis, isNotNull);
|
| + expect(forStatement.variables, isNull);
|
| + expect(forStatement.initialization, isNull);
|
| + expect(forStatement.leftSeparator, isNotNull);
|
| + expect(forStatement.condition, isNotNull);
|
| + expect(forStatement.rightSeparator, isNotNull);
|
| + expect(forStatement.updaters, hasLength(0));
|
| + expect(forStatement.rightParenthesis, isNotNull);
|
| + expect(forStatement.body, isNotNull);
|
| }
|
|
|
| - void test_parseFinalConstVarOrType_type_prefixedAndParameterized() {
|
| - createParser('p.A<B> a');
|
| - FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
|
| - expectNotNullIfNoErrors(result);
|
| + void test_parseForStatement_loop_cu() {
|
| + createParser('for (; i < count; i++) {}');
|
| + Statement statement = parser.parseForStatement();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(result.keyword, isNull);
|
| - expect(result.type, isNotNull);
|
| + expect(statement, new isInstanceOf<ForStatement>());
|
| + ForStatement forStatement = statement;
|
| + expect(forStatement.forKeyword, isNotNull);
|
| + expect(forStatement.leftParenthesis, isNotNull);
|
| + expect(forStatement.variables, isNull);
|
| + expect(forStatement.initialization, isNull);
|
| + expect(forStatement.leftSeparator, isNotNull);
|
| + expect(forStatement.condition, isNotNull);
|
| + expect(forStatement.rightSeparator, isNotNull);
|
| + expect(forStatement.updaters, hasLength(1));
|
| + expect(forStatement.rightParenthesis, isNotNull);
|
| + expect(forStatement.body, isNotNull);
|
| }
|
|
|
| - void test_parseFinalConstVarOrType_type_simple() {
|
| - createParser('A a');
|
| - FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
|
| - expectNotNullIfNoErrors(result);
|
| + void test_parseForStatement_loop_ecu() {
|
| + createParser('for (i--; i < count; i++) {}');
|
| + Statement statement = parser.parseForStatement();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(result.keyword, isNull);
|
| - expect(result.type, isNotNull);
|
| + expect(statement, new isInstanceOf<ForStatement>());
|
| + ForStatement forStatement = statement;
|
| + expect(forStatement.forKeyword, isNotNull);
|
| + expect(forStatement.leftParenthesis, isNotNull);
|
| + expect(forStatement.variables, isNull);
|
| + expect(forStatement.initialization, isNotNull);
|
| + expect(forStatement.leftSeparator, isNotNull);
|
| + expect(forStatement.condition, isNotNull);
|
| + expect(forStatement.rightSeparator, isNotNull);
|
| + expect(forStatement.updaters, hasLength(1));
|
| + expect(forStatement.rightParenthesis, isNotNull);
|
| + expect(forStatement.body, isNotNull);
|
| }
|
|
|
| - void test_parseFinalConstVarOrType_type_simple_noIdentifier_inFunctionType() {
|
| - createParser('A,');
|
| - FinalConstVarOrType result =
|
| - parser.parseFinalConstVarOrType(false, inFunctionType: true);
|
| - expectNotNullIfNoErrors(result);
|
| + void test_parseForStatement_loop_i() {
|
| + createParser('for (var i = 0;;) {}');
|
| + Statement statement = parser.parseForStatement();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(result.keyword, isNull);
|
| - expect(result.type, isNotNull);
|
| + expect(statement, new isInstanceOf<ForStatement>());
|
| + ForStatement forStatement = statement;
|
| + expect(forStatement.forKeyword, isNotNull);
|
| + expect(forStatement.leftParenthesis, isNotNull);
|
| + VariableDeclarationList variables = forStatement.variables;
|
| + expect(variables, isNotNull);
|
| + expect(variables.metadata, hasLength(0));
|
| + expect(variables.variables, hasLength(1));
|
| + expect(forStatement.initialization, isNull);
|
| + expect(forStatement.leftSeparator, isNotNull);
|
| + expect(forStatement.condition, isNull);
|
| + expect(forStatement.rightSeparator, isNotNull);
|
| + expect(forStatement.updaters, hasLength(0));
|
| + expect(forStatement.rightParenthesis, isNotNull);
|
| + expect(forStatement.body, isNotNull);
|
| }
|
|
|
| - void test_parseFinalConstVarOrType_var() {
|
| - createParser('var');
|
| - FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
|
| - expectNotNullIfNoErrors(result);
|
| + void test_parseForStatement_loop_i_withMetadata() {
|
| + createParser('for (@A var i = 0;;) {}');
|
| + Statement statement = parser.parseForStatement();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - Token keyword = result.keyword;
|
| - expect(keyword, isNotNull);
|
| - expect(keyword.type, TokenType.KEYWORD);
|
| - expect(keyword.keyword, Keyword.VAR);
|
| - expect(result.type, isNull);
|
| + expect(statement, new isInstanceOf<ForStatement>());
|
| + ForStatement forStatement = statement;
|
| + expect(forStatement.forKeyword, isNotNull);
|
| + expect(forStatement.leftParenthesis, isNotNull);
|
| + VariableDeclarationList variables = forStatement.variables;
|
| + expect(variables, isNotNull);
|
| + expect(variables.metadata, hasLength(1));
|
| + expect(variables.variables, hasLength(1));
|
| + expect(forStatement.initialization, isNull);
|
| + expect(forStatement.leftSeparator, isNotNull);
|
| + expect(forStatement.condition, isNull);
|
| + expect(forStatement.rightSeparator, isNotNull);
|
| + expect(forStatement.updaters, hasLength(0));
|
| + expect(forStatement.rightParenthesis, isNotNull);
|
| + expect(forStatement.body, isNotNull);
|
| }
|
|
|
| - void test_parseFinalConstVarOrType_void() {
|
| - createParser('void f()');
|
| - FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
|
| - expectNotNullIfNoErrors(result);
|
| + void test_parseForStatement_loop_ic() {
|
| + createParser('for (var i = 0; i < count;) {}');
|
| + Statement statement = parser.parseForStatement();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(result.keyword, isNull);
|
| - expect(result.type, isNotNull);
|
| + expect(statement, new isInstanceOf<ForStatement>());
|
| + ForStatement forStatement = statement;
|
| + expect(forStatement.forKeyword, isNotNull);
|
| + expect(forStatement.leftParenthesis, isNotNull);
|
| + VariableDeclarationList variables = forStatement.variables;
|
| + expect(variables, isNotNull);
|
| + expect(variables.variables, hasLength(1));
|
| + expect(forStatement.initialization, isNull);
|
| + expect(forStatement.leftSeparator, isNotNull);
|
| + expect(forStatement.condition, isNotNull);
|
| + expect(forStatement.rightSeparator, isNotNull);
|
| + expect(forStatement.updaters, hasLength(0));
|
| + expect(forStatement.rightParenthesis, isNotNull);
|
| + expect(forStatement.body, isNotNull);
|
| }
|
|
|
| - void test_parseFinalConstVarOrType_void_noIdentifier() {
|
| - createParser('void,');
|
| - FinalConstVarOrType result = parser.parseFinalConstVarOrType(false);
|
| - expectNotNullIfNoErrors(result);
|
| + void test_parseForStatement_loop_icu() {
|
| + createParser('for (var i = 0; i < count; i++) {}');
|
| + Statement statement = parser.parseForStatement();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(result.keyword, isNull);
|
| - expect(result.type, isNotNull);
|
| + expect(statement, new isInstanceOf<ForStatement>());
|
| + ForStatement forStatement = statement;
|
| + expect(forStatement.forKeyword, isNotNull);
|
| + expect(forStatement.leftParenthesis, isNotNull);
|
| + VariableDeclarationList variables = forStatement.variables;
|
| + expect(variables, isNotNull);
|
| + expect(variables.variables, hasLength(1));
|
| + expect(forStatement.initialization, isNull);
|
| + expect(forStatement.leftSeparator, isNotNull);
|
| + expect(forStatement.condition, isNotNull);
|
| + expect(forStatement.rightSeparator, isNotNull);
|
| + expect(forStatement.updaters, hasLength(1));
|
| + expect(forStatement.rightParenthesis, isNotNull);
|
| + expect(forStatement.body, isNotNull);
|
| }
|
|
|
| - void test_parseFormalParameter_covariant_final_named() {
|
| - ParameterKind kind = ParameterKind.NAMED;
|
| - createParser('covariant final a : null');
|
| - FormalParameter parameter = parser.parseFormalParameter(kind);
|
| - expectNotNullIfNoErrors(parameter);
|
| + void test_parseForStatement_loop_iicuu() {
|
| + createParser('for (int i = 0, j = count; i < j; i++, j--) {}');
|
| + Statement statement = parser.parseForStatement();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(parameter, new isInstanceOf<DefaultFormalParameter>());
|
| - DefaultFormalParameter defaultParameter = parameter;
|
| - SimpleFormalParameter simpleParameter =
|
| - defaultParameter.parameter as SimpleFormalParameter;
|
| - expect(simpleParameter.covariantKeyword, isNotNull);
|
| - expect(simpleParameter.identifier, isNotNull);
|
| - expect(simpleParameter.keyword, isNotNull);
|
| - expect(simpleParameter.type, isNull);
|
| - expect(simpleParameter.kind, kind);
|
| - expect(defaultParameter.separator, isNotNull);
|
| - expect(defaultParameter.defaultValue, isNotNull);
|
| - expect(defaultParameter.kind, kind);
|
| + expect(statement, new isInstanceOf<ForStatement>());
|
| + ForStatement forStatement = statement;
|
| + expect(forStatement.forKeyword, isNotNull);
|
| + expect(forStatement.leftParenthesis, isNotNull);
|
| + VariableDeclarationList variables = forStatement.variables;
|
| + expect(variables, isNotNull);
|
| + expect(variables.variables, hasLength(2));
|
| + expect(forStatement.initialization, isNull);
|
| + expect(forStatement.leftSeparator, isNotNull);
|
| + expect(forStatement.condition, isNotNull);
|
| + expect(forStatement.rightSeparator, isNotNull);
|
| + expect(forStatement.updaters, hasLength(2));
|
| + expect(forStatement.rightParenthesis, isNotNull);
|
| + expect(forStatement.body, isNotNull);
|
| }
|
|
|
| - void test_parseFormalParameter_covariant_final_normal() {
|
| - ParameterKind kind = ParameterKind.REQUIRED;
|
| - createParser('covariant final a');
|
| - FormalParameter parameter = parser.parseFormalParameter(kind);
|
| - expectNotNullIfNoErrors(parameter);
|
| + void test_parseForStatement_loop_iu() {
|
| + createParser('for (var i = 0;; i++) {}');
|
| + Statement statement = parser.parseForStatement();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(parameter, new isInstanceOf<SimpleFormalParameter>());
|
| - SimpleFormalParameter simpleParameter = parameter;
|
| - expect(simpleParameter.covariantKeyword, isNotNull);
|
| - expect(simpleParameter.identifier, isNotNull);
|
| - expect(simpleParameter.keyword, isNotNull);
|
| - expect(simpleParameter.type, isNull);
|
| - expect(simpleParameter.kind, kind);
|
| + expect(statement, new isInstanceOf<ForStatement>());
|
| + ForStatement forStatement = statement;
|
| + expect(forStatement.forKeyword, isNotNull);
|
| + expect(forStatement.leftParenthesis, isNotNull);
|
| + VariableDeclarationList variables = forStatement.variables;
|
| + expect(variables, isNotNull);
|
| + expect(variables.variables, hasLength(1));
|
| + expect(forStatement.initialization, isNull);
|
| + expect(forStatement.leftSeparator, isNotNull);
|
| + expect(forStatement.condition, isNull);
|
| + expect(forStatement.rightSeparator, isNotNull);
|
| + expect(forStatement.updaters, hasLength(1));
|
| + expect(forStatement.rightParenthesis, isNotNull);
|
| + expect(forStatement.body, isNotNull);
|
| }
|
|
|
| - void test_parseFormalParameter_covariant_final_positional() {
|
| - ParameterKind kind = ParameterKind.POSITIONAL;
|
| - createParser('covariant final a = null');
|
| - FormalParameter parameter = parser.parseFormalParameter(kind);
|
| - expectNotNullIfNoErrors(parameter);
|
| + void test_parseForStatement_loop_u() {
|
| + createParser('for (;; i++) {}');
|
| + Statement statement = parser.parseForStatement();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(parameter, new isInstanceOf<DefaultFormalParameter>());
|
| - DefaultFormalParameter defaultParameter = parameter;
|
| - SimpleFormalParameter simpleParameter =
|
| - defaultParameter.parameter as SimpleFormalParameter;
|
| - expect(simpleParameter.covariantKeyword, isNotNull);
|
| - expect(simpleParameter.identifier, isNotNull);
|
| - expect(simpleParameter.keyword, isNotNull);
|
| - expect(simpleParameter.type, isNull);
|
| - expect(simpleParameter.kind, kind);
|
| - expect(defaultParameter.separator, isNotNull);
|
| - expect(defaultParameter.defaultValue, isNotNull);
|
| - expect(defaultParameter.kind, kind);
|
| + expect(statement, new isInstanceOf<ForStatement>());
|
| + ForStatement forStatement = statement;
|
| + expect(forStatement.forKeyword, isNotNull);
|
| + expect(forStatement.leftParenthesis, isNotNull);
|
| + expect(forStatement.variables, isNull);
|
| + expect(forStatement.initialization, isNull);
|
| + expect(forStatement.leftSeparator, isNotNull);
|
| + expect(forStatement.condition, isNull);
|
| + expect(forStatement.rightSeparator, isNotNull);
|
| + expect(forStatement.updaters, hasLength(1));
|
| + expect(forStatement.rightParenthesis, isNotNull);
|
| + expect(forStatement.body, isNotNull);
|
| }
|
|
|
| - void test_parseFormalParameter_covariant_final_type_named() {
|
| - ParameterKind kind = ParameterKind.NAMED;
|
| - createParser('covariant final A a : null');
|
| - FormalParameter parameter = parser.parseFormalParameter(kind);
|
| - expectNotNullIfNoErrors(parameter);
|
| + void test_parseFunctionBody_block() {
|
| + createParser('{}');
|
| + FunctionBody functionBody = parser.parseFunctionBody(false, null, false);
|
| + expectNotNullIfNoErrors(functionBody);
|
| listener.assertNoErrors();
|
| - expect(parameter, new isInstanceOf<DefaultFormalParameter>());
|
| - DefaultFormalParameter defaultParameter = parameter;
|
| - SimpleFormalParameter simpleParameter =
|
| - defaultParameter.parameter as SimpleFormalParameter;
|
| - expect(simpleParameter.covariantKeyword, isNotNull);
|
| - expect(simpleParameter.identifier, isNotNull);
|
| - expect(simpleParameter.keyword, isNotNull);
|
| - expect(simpleParameter.type, isNotNull);
|
| - expect(simpleParameter.kind, kind);
|
| - expect(defaultParameter.separator, isNotNull);
|
| - expect(defaultParameter.defaultValue, isNotNull);
|
| - expect(defaultParameter.kind, kind);
|
| + expect(functionBody, new isInstanceOf<BlockFunctionBody>());
|
| + BlockFunctionBody body = functionBody;
|
| + expect(body.keyword, isNull);
|
| + expect(body.star, isNull);
|
| + expect(body.block, isNotNull);
|
| + expect(body.isAsynchronous, isFalse);
|
| + expect(body.isGenerator, isFalse);
|
| + expect(body.isSynchronous, isTrue);
|
| }
|
|
|
| - void test_parseFormalParameter_covariant_final_type_normal() {
|
| - ParameterKind kind = ParameterKind.REQUIRED;
|
| - createParser('covariant final A a');
|
| - FormalParameter parameter = parser.parseFormalParameter(kind);
|
| - expectNotNullIfNoErrors(parameter);
|
| + void test_parseFunctionBody_block_async() {
|
| + createParser('async {}');
|
| + FunctionBody functionBody = parser.parseFunctionBody(false, null, false);
|
| + expectNotNullIfNoErrors(functionBody);
|
| listener.assertNoErrors();
|
| - expect(parameter, new isInstanceOf<SimpleFormalParameter>());
|
| - SimpleFormalParameter simpleParameter = parameter;
|
| - expect(simpleParameter.covariantKeyword, isNotNull);
|
| - expect(simpleParameter.identifier, isNotNull);
|
| - expect(simpleParameter.keyword, isNotNull);
|
| - expect(simpleParameter.type, isNotNull);
|
| - expect(simpleParameter.kind, kind);
|
| + expect(functionBody, new isInstanceOf<BlockFunctionBody>());
|
| + BlockFunctionBody body = functionBody;
|
| + expect(body.keyword, isNotNull);
|
| + expect(body.keyword.lexeme, Parser.ASYNC);
|
| + expect(body.star, isNull);
|
| + expect(body.block, isNotNull);
|
| + expect(body.isAsynchronous, isTrue);
|
| + expect(body.isGenerator, isFalse);
|
| + expect(body.isSynchronous, isFalse);
|
| }
|
|
|
| - void test_parseFormalParameter_covariant_final_type_positional() {
|
| - ParameterKind kind = ParameterKind.POSITIONAL;
|
| - createParser('covariant final A a = null');
|
| - FormalParameter parameter = parser.parseFormalParameter(kind);
|
| - expectNotNullIfNoErrors(parameter);
|
| + void test_parseFunctionBody_block_asyncGenerator() {
|
| + createParser('async* {}');
|
| + FunctionBody functionBody = parser.parseFunctionBody(false, null, false);
|
| + expectNotNullIfNoErrors(functionBody);
|
| listener.assertNoErrors();
|
| - expect(parameter, new isInstanceOf<DefaultFormalParameter>());
|
| - DefaultFormalParameter defaultParameter = parameter;
|
| - SimpleFormalParameter simpleParameter =
|
| - defaultParameter.parameter as SimpleFormalParameter;
|
| - expect(simpleParameter.covariantKeyword, isNotNull);
|
| - expect(simpleParameter.identifier, isNotNull);
|
| - expect(simpleParameter.keyword, isNotNull);
|
| - expect(simpleParameter.type, isNotNull);
|
| - expect(simpleParameter.kind, kind);
|
| - expect(defaultParameter.separator, isNotNull);
|
| - expect(defaultParameter.defaultValue, isNotNull);
|
| - expect(defaultParameter.kind, kind);
|
| + expect(functionBody, new isInstanceOf<BlockFunctionBody>());
|
| + BlockFunctionBody body = functionBody;
|
| + expect(body.keyword, isNotNull);
|
| + expect(body.keyword.lexeme, Parser.ASYNC);
|
| + expect(body.star, isNotNull);
|
| + expect(body.block, isNotNull);
|
| + expect(body.isAsynchronous, isTrue);
|
| + expect(body.isGenerator, isTrue);
|
| + expect(body.isSynchronous, isFalse);
|
| }
|
|
|
| - @failingTest
|
| - void test_parseFormalParameter_covariant_type_function() {
|
| - ParameterKind kind = ParameterKind.REQUIRED;
|
| - createParser('covariant String Function(int) a');
|
| - FormalParameter parameter = parser.parseFormalParameter(kind);
|
| - expectNotNullIfNoErrors(parameter);
|
| + void test_parseFunctionBody_block_syncGenerator() {
|
| + createParser('sync* {}');
|
| + FunctionBody functionBody = parser.parseFunctionBody(false, null, false);
|
| + expectNotNullIfNoErrors(functionBody);
|
| listener.assertNoErrors();
|
| - expect(parameter, new isInstanceOf<SimpleFormalParameter>());
|
| - SimpleFormalParameter simpleParameter = parameter;
|
| - expect(simpleParameter.covariantKeyword, isNotNull);
|
| - expect(simpleParameter.identifier, isNotNull);
|
| - expect(simpleParameter.keyword, isNull);
|
| - expect(simpleParameter.type, new isInstanceOf<GenericFunctionType>());
|
| - expect(simpleParameter.kind, kind);
|
| + expect(functionBody, new isInstanceOf<BlockFunctionBody>());
|
| + BlockFunctionBody body = functionBody;
|
| + expect(body.keyword, isNotNull);
|
| + expect(body.keyword.lexeme, Parser.SYNC);
|
| + expect(body.star, isNotNull);
|
| + expect(body.block, isNotNull);
|
| + expect(body.isAsynchronous, isFalse);
|
| + expect(body.isGenerator, isTrue);
|
| + expect(body.isSynchronous, isTrue);
|
| }
|
|
|
| - void test_parseFormalParameter_covariant_type_named() {
|
| - ParameterKind kind = ParameterKind.NAMED;
|
| - createParser('covariant A a : null');
|
| - FormalParameter parameter = parser.parseFormalParameter(kind);
|
| - expectNotNullIfNoErrors(parameter);
|
| + void test_parseFunctionBody_empty() {
|
| + createParser(';');
|
| + FunctionBody functionBody = parser.parseFunctionBody(true, null, false);
|
| + expectNotNullIfNoErrors(functionBody);
|
| listener.assertNoErrors();
|
| - expect(parameter, new isInstanceOf<DefaultFormalParameter>());
|
| - DefaultFormalParameter defaultParameter = parameter;
|
| - SimpleFormalParameter simpleParameter =
|
| - defaultParameter.parameter as SimpleFormalParameter;
|
| - expect(simpleParameter.covariantKeyword, isNotNull);
|
| - expect(simpleParameter.identifier, isNotNull);
|
| - expect(simpleParameter.keyword, isNull);
|
| - expect(simpleParameter.type, isNotNull);
|
| - expect(simpleParameter.kind, kind);
|
| - expect(defaultParameter.separator, isNotNull);
|
| - expect(defaultParameter.defaultValue, isNotNull);
|
| - expect(defaultParameter.kind, kind);
|
| + expect(functionBody, new isInstanceOf<EmptyFunctionBody>());
|
| + EmptyFunctionBody body = functionBody;
|
| + expect(body.semicolon, isNotNull);
|
| }
|
|
|
| - void test_parseFormalParameter_covariant_type_normal() {
|
| - ParameterKind kind = ParameterKind.REQUIRED;
|
| - createParser('covariant A<B<C>> a');
|
| - FormalParameter parameter = parser.parseFormalParameter(kind);
|
| - expectNotNullIfNoErrors(parameter);
|
| + void test_parseFunctionBody_expression() {
|
| + createParser('=> y;');
|
| + FunctionBody functionBody = parser.parseFunctionBody(false, null, false);
|
| + expectNotNullIfNoErrors(functionBody);
|
| listener.assertNoErrors();
|
| - expect(parameter, new isInstanceOf<SimpleFormalParameter>());
|
| - SimpleFormalParameter simpleParameter = parameter;
|
| - expect(simpleParameter.covariantKeyword, isNotNull);
|
| - expect(simpleParameter.identifier, isNotNull);
|
| - expect(simpleParameter.keyword, isNull);
|
| - expect(simpleParameter.type, isNotNull);
|
| - expect(simpleParameter.kind, kind);
|
| + expect(functionBody, new isInstanceOf<ExpressionFunctionBody>());
|
| + ExpressionFunctionBody body = functionBody;
|
| + expect(body.keyword, isNull);
|
| + expect(body.functionDefinition, isNotNull);
|
| + expect(body.expression, isNotNull);
|
| + expect(body.semicolon, isNotNull);
|
| + expect(body.isAsynchronous, isFalse);
|
| + expect(body.isGenerator, isFalse);
|
| + expect(body.isSynchronous, isTrue);
|
| }
|
|
|
| - void test_parseFormalParameter_covariant_type_positional() {
|
| - ParameterKind kind = ParameterKind.POSITIONAL;
|
| - createParser('covariant A a = null');
|
| - FormalParameter parameter = parser.parseFormalParameter(kind);
|
| - expectNotNullIfNoErrors(parameter);
|
| + void test_parseFunctionBody_expression_async() {
|
| + createParser('async => y;');
|
| + FunctionBody functionBody = parser.parseFunctionBody(false, null, false);
|
| + expectNotNullIfNoErrors(functionBody);
|
| listener.assertNoErrors();
|
| - expect(parameter, new isInstanceOf<DefaultFormalParameter>());
|
| - DefaultFormalParameter defaultParameter = parameter;
|
| - SimpleFormalParameter simpleParameter =
|
| - defaultParameter.parameter as SimpleFormalParameter;
|
| - expect(simpleParameter.covariantKeyword, isNotNull);
|
| - expect(simpleParameter.identifier, isNotNull);
|
| - expect(simpleParameter.keyword, isNull);
|
| - expect(simpleParameter.type, isNotNull);
|
| - expect(simpleParameter.kind, kind);
|
| - expect(defaultParameter.separator, isNotNull);
|
| - expect(defaultParameter.defaultValue, isNotNull);
|
| - expect(defaultParameter.kind, kind);
|
| + expect(functionBody, new isInstanceOf<ExpressionFunctionBody>());
|
| + ExpressionFunctionBody body = functionBody;
|
| + expect(body.keyword, isNotNull);
|
| + expect(body.keyword.lexeme, Parser.ASYNC);
|
| + expect(body.functionDefinition, isNotNull);
|
| + expect(body.expression, isNotNull);
|
| + expect(body.semicolon, isNotNull);
|
| + expect(body.isAsynchronous, isTrue);
|
| + expect(body.isGenerator, isFalse);
|
| + expect(body.isSynchronous, isFalse);
|
| }
|
|
|
| - void test_parseFormalParameter_covariant_var_named() {
|
| - ParameterKind kind = ParameterKind.NAMED;
|
| - createParser('covariant var a : null');
|
| - FormalParameter parameter = parser.parseFormalParameter(kind);
|
| - expectNotNullIfNoErrors(parameter);
|
| + void test_parseFunctionBody_nativeFunctionBody() {
|
| + createParser('native "str";');
|
| + FunctionBody functionBody = parser.parseFunctionBody(false, null, false);
|
| + expectNotNullIfNoErrors(functionBody);
|
| listener.assertNoErrors();
|
| - expect(parameter, new isInstanceOf<DefaultFormalParameter>());
|
| - DefaultFormalParameter defaultParameter = parameter;
|
| - SimpleFormalParameter simpleParameter =
|
| - defaultParameter.parameter as SimpleFormalParameter;
|
| - expect(simpleParameter.covariantKeyword, isNotNull);
|
| - expect(simpleParameter.identifier, isNotNull);
|
| - expect(simpleParameter.keyword, isNotNull);
|
| - expect(simpleParameter.type, isNull);
|
| - expect(simpleParameter.kind, kind);
|
| - expect(defaultParameter.separator, isNotNull);
|
| - expect(defaultParameter.defaultValue, isNotNull);
|
| - expect(defaultParameter.kind, kind);
|
| + expect(functionBody, new isInstanceOf<NativeFunctionBody>());
|
| + NativeFunctionBody body = functionBody;
|
| + expect(body.nativeKeyword, isNotNull);
|
| + expect(body.stringLiteral, isNotNull);
|
| + expect(body.semicolon, isNotNull);
|
| }
|
|
|
| - void test_parseFormalParameter_covariant_var_normal() {
|
| - ParameterKind kind = ParameterKind.REQUIRED;
|
| - createParser('covariant var a');
|
| - FormalParameter parameter = parser.parseFormalParameter(kind);
|
| - expectNotNullIfNoErrors(parameter);
|
| + void test_parseFunctionBody_skip_block() {
|
| + ParserTestCase.parseFunctionBodies = false;
|
| + createParser('{}');
|
| + FunctionBody functionBody = parser.parseFunctionBody(false, null, false);
|
| + expectNotNullIfNoErrors(functionBody);
|
| listener.assertNoErrors();
|
| - expect(parameter, new isInstanceOf<SimpleFormalParameter>());
|
| - SimpleFormalParameter simpleParameter = parameter;
|
| - expect(simpleParameter.covariantKeyword, isNotNull);
|
| - expect(simpleParameter.identifier, isNotNull);
|
| - expect(simpleParameter.keyword, isNotNull);
|
| - expect(simpleParameter.type, isNull);
|
| - expect(simpleParameter.kind, kind);
|
| + expect(functionBody, new isInstanceOf<EmptyFunctionBody>());
|
| }
|
|
|
| - void test_parseFormalParameter_covariant_var_positional() {
|
| - ParameterKind kind = ParameterKind.POSITIONAL;
|
| - createParser('covariant var a = null');
|
| - FormalParameter parameter = parser.parseFormalParameter(kind);
|
| - expectNotNullIfNoErrors(parameter);
|
| - listener.assertNoErrors();
|
| - expect(parameter, new isInstanceOf<DefaultFormalParameter>());
|
| - DefaultFormalParameter defaultParameter = parameter;
|
| - SimpleFormalParameter simpleParameter =
|
| - defaultParameter.parameter as SimpleFormalParameter;
|
| - expect(simpleParameter.covariantKeyword, isNotNull);
|
| - expect(simpleParameter.identifier, isNotNull);
|
| - expect(simpleParameter.keyword, isNotNull);
|
| - expect(simpleParameter.type, isNull);
|
| - expect(simpleParameter.kind, kind);
|
| - expect(defaultParameter.separator, isNotNull);
|
| - expect(defaultParameter.defaultValue, isNotNull);
|
| - expect(defaultParameter.kind, kind);
|
| + void test_parseFunctionBody_skip_block_invalid() {
|
| + ParserTestCase.parseFunctionBodies = false;
|
| + createParser('{');
|
| + FunctionBody functionBody = parser.parseFunctionBody(false, null, false);
|
| + expectNotNullIfNoErrors(functionBody);
|
| + listener.assertErrorsWithCodes([ParserErrorCode.EXPECTED_TOKEN]);
|
| + expect(functionBody, new isInstanceOf<EmptyFunctionBody>());
|
| }
|
|
|
| - void test_parseFormalParameter_final_named() {
|
| - ParameterKind kind = ParameterKind.NAMED;
|
| - createParser('final a : null');
|
| - FormalParameter parameter = parser.parseFormalParameter(kind);
|
| - expectNotNullIfNoErrors(parameter);
|
| + void test_parseFunctionBody_skip_blocks() {
|
| + ParserTestCase.parseFunctionBodies = false;
|
| + createParser('{ {} }');
|
| + FunctionBody functionBody = parser.parseFunctionBody(false, null, false);
|
| + expectNotNullIfNoErrors(functionBody);
|
| listener.assertNoErrors();
|
| - expect(parameter, new isInstanceOf<DefaultFormalParameter>());
|
| - DefaultFormalParameter defaultParameter = parameter;
|
| - SimpleFormalParameter simpleParameter =
|
| - defaultParameter.parameter as SimpleFormalParameter;
|
| - expect(simpleParameter.covariantKeyword, isNull);
|
| - expect(simpleParameter.identifier, isNotNull);
|
| - expect(simpleParameter.keyword, isNotNull);
|
| - expect(simpleParameter.type, isNull);
|
| - expect(simpleParameter.kind, kind);
|
| - expect(defaultParameter.separator, isNotNull);
|
| - expect(defaultParameter.defaultValue, isNotNull);
|
| - expect(defaultParameter.kind, kind);
|
| + expect(functionBody, new isInstanceOf<EmptyFunctionBody>());
|
| }
|
|
|
| - void test_parseFormalParameter_final_normal() {
|
| - ParameterKind kind = ParameterKind.REQUIRED;
|
| - createParser('final a');
|
| - FormalParameter parameter = parser.parseFormalParameter(kind);
|
| - expectNotNullIfNoErrors(parameter);
|
| + void test_parseFunctionBody_skip_expression() {
|
| + ParserTestCase.parseFunctionBodies = false;
|
| + createParser('=> y;');
|
| + FunctionBody functionBody = parser.parseFunctionBody(false, null, false);
|
| + expectNotNullIfNoErrors(functionBody);
|
| listener.assertNoErrors();
|
| - expect(parameter, new isInstanceOf<SimpleFormalParameter>());
|
| - SimpleFormalParameter simpleParameter = parameter;
|
| - expect(simpleParameter.covariantKeyword, isNull);
|
| - expect(simpleParameter.identifier, isNotNull);
|
| - expect(simpleParameter.keyword, isNotNull);
|
| - expect(simpleParameter.type, isNull);
|
| - expect(simpleParameter.kind, kind);
|
| + expect(functionBody, new isInstanceOf<EmptyFunctionBody>());
|
| }
|
|
|
| - void test_parseFormalParameter_final_positional() {
|
| - ParameterKind kind = ParameterKind.POSITIONAL;
|
| - createParser('final a = null');
|
| - FormalParameter parameter = parser.parseFormalParameter(kind);
|
| - expectNotNullIfNoErrors(parameter);
|
| + void test_parseFunctionDeclarationStatement() {
|
| + createParser('void f(int p) => p * 2;');
|
| + FunctionDeclarationStatement statement =
|
| + parser.parseFunctionDeclarationStatement();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(parameter, new isInstanceOf<DefaultFormalParameter>());
|
| - DefaultFormalParameter defaultParameter = parameter;
|
| - SimpleFormalParameter simpleParameter =
|
| - defaultParameter.parameter as SimpleFormalParameter;
|
| - expect(simpleParameter.covariantKeyword, isNull);
|
| - expect(simpleParameter.identifier, isNotNull);
|
| - expect(simpleParameter.keyword, isNotNull);
|
| - expect(simpleParameter.type, isNull);
|
| - expect(simpleParameter.kind, kind);
|
| - expect(defaultParameter.separator, isNotNull);
|
| - expect(defaultParameter.defaultValue, isNotNull);
|
| - expect(defaultParameter.kind, kind);
|
| + expect(statement.functionDeclaration, isNotNull);
|
| }
|
|
|
| - void test_parseFormalParameter_final_type_named() {
|
| - ParameterKind kind = ParameterKind.NAMED;
|
| - createParser('final A a : null');
|
| - FormalParameter parameter = parser.parseFormalParameter(kind);
|
| - expectNotNullIfNoErrors(parameter);
|
| + void test_parseFunctionDeclarationStatement_typeParameterComments() {
|
| + enableGenericMethodComments = true;
|
| + createParser('/*=E*/ f/*<E>*/(/*=E*/ p) => p * 2;');
|
| + FunctionDeclarationStatement statement =
|
| + parser.parseFunctionDeclarationStatement();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(parameter, new isInstanceOf<DefaultFormalParameter>());
|
| - DefaultFormalParameter defaultParameter = parameter;
|
| - SimpleFormalParameter simpleParameter =
|
| - defaultParameter.parameter as SimpleFormalParameter;
|
| - expect(simpleParameter.covariantKeyword, isNull);
|
| - expect(simpleParameter.identifier, isNotNull);
|
| - expect(simpleParameter.keyword, isNotNull);
|
| - expect(simpleParameter.type, isNotNull);
|
| - expect(simpleParameter.kind, kind);
|
| - expect(defaultParameter.separator, isNotNull);
|
| - expect(defaultParameter.defaultValue, isNotNull);
|
| - expect(defaultParameter.kind, kind);
|
| + FunctionDeclaration f = statement.functionDeclaration;
|
| + expect(f, isNotNull);
|
| + expect(f.functionExpression.typeParameters, isNotNull);
|
| + expect(f.returnType, isNotNull);
|
| + SimpleFormalParameter p = f.functionExpression.parameters.parameters[0];
|
| + expect(p.type, isNotNull);
|
| }
|
|
|
| - void test_parseFormalParameter_final_type_normal() {
|
| - ParameterKind kind = ParameterKind.REQUIRED;
|
| - createParser('final A a');
|
| - FormalParameter parameter = parser.parseFormalParameter(kind);
|
| - expectNotNullIfNoErrors(parameter);
|
| + void test_parseFunctionDeclarationStatement_typeParameters() {
|
| + createParser('E f<E>(E p) => p * 2;');
|
| + FunctionDeclarationStatement statement =
|
| + parser.parseFunctionDeclarationStatement();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(parameter, new isInstanceOf<SimpleFormalParameter>());
|
| - SimpleFormalParameter simpleParameter = parameter;
|
| - expect(simpleParameter.covariantKeyword, isNull);
|
| - expect(simpleParameter.identifier, isNotNull);
|
| - expect(simpleParameter.keyword, isNotNull);
|
| - expect(simpleParameter.type, isNotNull);
|
| - expect(simpleParameter.kind, kind);
|
| + expect(statement.functionDeclaration, isNotNull);
|
| + expect(statement.functionDeclaration.functionExpression.typeParameters,
|
| + isNotNull);
|
| }
|
|
|
| - void test_parseFormalParameter_final_type_positional() {
|
| - ParameterKind kind = ParameterKind.POSITIONAL;
|
| - createParser('final A a = null');
|
| - FormalParameter parameter = parser.parseFormalParameter(kind);
|
| - expectNotNullIfNoErrors(parameter);
|
| + void test_parseFunctionDeclarationStatement_typeParameters_noReturnType() {
|
| + createParser('f<E>(E p) => p * 2;');
|
| + FunctionDeclarationStatement statement =
|
| + parser.parseFunctionDeclarationStatement();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(parameter, new isInstanceOf<DefaultFormalParameter>());
|
| - DefaultFormalParameter defaultParameter = parameter;
|
| - SimpleFormalParameter simpleParameter =
|
| - defaultParameter.parameter as SimpleFormalParameter;
|
| - expect(simpleParameter.covariantKeyword, isNull);
|
| - expect(simpleParameter.identifier, isNotNull);
|
| - expect(simpleParameter.keyword, isNotNull);
|
| - expect(simpleParameter.type, isNotNull);
|
| - expect(simpleParameter.kind, kind);
|
| - expect(defaultParameter.separator, isNotNull);
|
| - expect(defaultParameter.defaultValue, isNotNull);
|
| - expect(defaultParameter.kind, kind);
|
| + expect(statement.functionDeclaration, isNotNull);
|
| + expect(statement.functionDeclaration.functionExpression.typeParameters,
|
| + isNotNull);
|
| }
|
|
|
| - @failingTest
|
| - void test_parseFormalParameter_type_function() {
|
| - ParameterKind kind = ParameterKind.REQUIRED;
|
| - createParser('String Function(int) a');
|
| - FormalParameter parameter = parser.parseFormalParameter(kind);
|
| - expectNotNullIfNoErrors(parameter);
|
| + void test_parseFunctionExpression_body_inExpression() {
|
| + createParser('(int i) => i++');
|
| + FunctionExpression expression = parser.parseFunctionExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(parameter, new isInstanceOf<SimpleFormalParameter>());
|
| - SimpleFormalParameter simpleParameter = parameter;
|
| - expect(simpleParameter.covariantKeyword, isNull);
|
| - expect(simpleParameter.identifier, isNotNull);
|
| - expect(simpleParameter.keyword, isNull);
|
| - expect(simpleParameter.type, new isInstanceOf<GenericFunctionType>());
|
| - expect(simpleParameter.kind, kind);
|
| + expect(expression.body, isNotNull);
|
| + expect(expression.typeParameters, isNull);
|
| + expect(expression.parameters, isNotNull);
|
| + expect((expression.body as ExpressionFunctionBody).semicolon, isNull);
|
| }
|
|
|
| - void test_parseFormalParameter_type_named() {
|
| - ParameterKind kind = ParameterKind.NAMED;
|
| - createParser('A a : null');
|
| - FormalParameter parameter = parser.parseFormalParameter(kind);
|
| - expectNotNullIfNoErrors(parameter);
|
| + void test_parseFunctionExpression_typeParameterComments() {
|
| + enableGenericMethodComments = true;
|
| + createParser('/*<E>*/(/*=E*/ i) => i++');
|
| + FunctionExpression expression = parser.parseFunctionExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(parameter, new isInstanceOf<DefaultFormalParameter>());
|
| - DefaultFormalParameter defaultParameter = parameter;
|
| - SimpleFormalParameter simpleParameter =
|
| - defaultParameter.parameter as SimpleFormalParameter;
|
| - expect(simpleParameter.covariantKeyword, isNull);
|
| - expect(simpleParameter.identifier, isNotNull);
|
| - expect(simpleParameter.keyword, isNull);
|
| - expect(simpleParameter.type, isNotNull);
|
| - expect(simpleParameter.kind, kind);
|
| - expect(defaultParameter.separator, isNotNull);
|
| - expect(defaultParameter.defaultValue, isNotNull);
|
| - expect(defaultParameter.kind, kind);
|
| + expect(expression.body, isNotNull);
|
| + expect(expression.typeParameters, isNotNull);
|
| + expect(expression.parameters, isNotNull);
|
| + expect((expression.body as ExpressionFunctionBody).semicolon, isNull);
|
| + SimpleFormalParameter p = expression.parameters.parameters[0];
|
| + expect(p.type, isNotNull);
|
| }
|
|
|
| - void test_parseFormalParameter_type_normal() {
|
| - ParameterKind kind = ParameterKind.REQUIRED;
|
| - createParser('A a');
|
| - FormalParameter parameter = parser.parseFormalParameter(kind);
|
| - expectNotNullIfNoErrors(parameter);
|
| + void test_parseFunctionExpression_typeParameters() {
|
| + createParser('<E>(E i) => i++');
|
| + FunctionExpression expression = parser.parseFunctionExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(parameter, new isInstanceOf<SimpleFormalParameter>());
|
| - SimpleFormalParameter simpleParameter = parameter;
|
| - expect(simpleParameter.covariantKeyword, isNull);
|
| - expect(simpleParameter.identifier, isNotNull);
|
| - expect(simpleParameter.keyword, isNull);
|
| - expect(simpleParameter.type, isNotNull);
|
| - expect(simpleParameter.kind, kind);
|
| + expect(expression.body, isNotNull);
|
| + expect(expression.typeParameters, isNotNull);
|
| + expect(expression.parameters, isNotNull);
|
| + expect((expression.body as ExpressionFunctionBody).semicolon, isNull);
|
| }
|
|
|
| - void test_parseFormalParameter_type_positional() {
|
| - ParameterKind kind = ParameterKind.POSITIONAL;
|
| - createParser('A a = null');
|
| - FormalParameter parameter = parser.parseFormalParameter(kind);
|
| - expectNotNullIfNoErrors(parameter);
|
| + void test_parseGetter_nonStatic() {
|
| + createParser('/// Doc\nT get a;');
|
| + MethodDeclaration method = parser.parseClassMember('C');
|
| + expectNotNullIfNoErrors(method);
|
| listener.assertNoErrors();
|
| - expect(parameter, new isInstanceOf<DefaultFormalParameter>());
|
| - DefaultFormalParameter defaultParameter = parameter;
|
| - SimpleFormalParameter simpleParameter =
|
| - defaultParameter.parameter as SimpleFormalParameter;
|
| - expect(simpleParameter.covariantKeyword, isNull);
|
| - expect(simpleParameter.identifier, isNotNull);
|
| - expect(simpleParameter.keyword, isNull);
|
| - expect(simpleParameter.type, isNotNull);
|
| - expect(simpleParameter.kind, kind);
|
| - expect(defaultParameter.separator, isNotNull);
|
| - expect(defaultParameter.defaultValue, isNotNull);
|
| - expect(defaultParameter.kind, kind);
|
| + expect(method.body, isNotNull);
|
| + expectCommentText(method.documentationComment, '/// Doc');
|
| + expect(method.externalKeyword, isNull);
|
| + expect(method.modifierKeyword, isNull);
|
| + expect(method.name, isNotNull);
|
| + expect(method.operatorKeyword, isNull);
|
| + expect(method.parameters, isNull);
|
| + expect(method.propertyKeyword, isNotNull);
|
| + expect((method.returnType as TypeName).name.name, 'T');
|
| }
|
|
|
| - void test_parseFormalParameter_var_named() {
|
| - ParameterKind kind = ParameterKind.NAMED;
|
| - createParser('var a : null');
|
| - FormalParameter parameter = parser.parseFormalParameter(kind);
|
| - expectNotNullIfNoErrors(parameter);
|
| + void test_parseGetter_static() {
|
| + createParser('/// Doc\nstatic T get a => 42;');
|
| + MethodDeclaration method = parser.parseClassMember('C');
|
| + expectNotNullIfNoErrors(method);
|
| listener.assertNoErrors();
|
| - expect(parameter, new isInstanceOf<DefaultFormalParameter>());
|
| - DefaultFormalParameter defaultParameter = parameter;
|
| - SimpleFormalParameter simpleParameter =
|
| - defaultParameter.parameter as SimpleFormalParameter;
|
| - expect(simpleParameter.covariantKeyword, isNull);
|
| - expect(simpleParameter.identifier, isNotNull);
|
| - expect(simpleParameter.keyword, isNotNull);
|
| - expect(simpleParameter.type, isNull);
|
| - expect(simpleParameter.kind, kind);
|
| - expect(defaultParameter.separator, isNotNull);
|
| - expect(defaultParameter.defaultValue, isNotNull);
|
| - expect(defaultParameter.kind, kind);
|
| + expect(method.body, isNotNull);
|
| + expectCommentText(method.documentationComment, '/// Doc');
|
| + expect(method.externalKeyword, isNull);
|
| + expect(method.modifierKeyword.lexeme, 'static');
|
| + expect(method.name, isNotNull);
|
| + expect(method.operatorKeyword, isNull);
|
| + expect(method.typeParameters, isNull);
|
| + expect(method.parameters, isNull);
|
| + expect(method.propertyKeyword, isNotNull);
|
| + expect((method.returnType as TypeName).name.name, 'T');
|
| }
|
|
|
| - void test_parseFormalParameter_var_normal() {
|
| - ParameterKind kind = ParameterKind.REQUIRED;
|
| - createParser('var a');
|
| - FormalParameter parameter = parser.parseFormalParameter(kind);
|
| - expectNotNullIfNoErrors(parameter);
|
| + void test_parseIdentifierList_multiple() {
|
| + createParser('a, b, c');
|
| + List<SimpleIdentifier> list = parser.parseIdentifierList();
|
| + expectNotNullIfNoErrors(list);
|
| listener.assertNoErrors();
|
| - expect(parameter, new isInstanceOf<SimpleFormalParameter>());
|
| - SimpleFormalParameter simpleParameter = parameter;
|
| - expect(simpleParameter.covariantKeyword, isNull);
|
| - expect(simpleParameter.identifier, isNotNull);
|
| - expect(simpleParameter.keyword, isNotNull);
|
| - expect(simpleParameter.type, isNull);
|
| - expect(simpleParameter.kind, kind);
|
| + expect(list, hasLength(3));
|
| }
|
|
|
| - void test_parseFormalParameter_var_positional() {
|
| - ParameterKind kind = ParameterKind.POSITIONAL;
|
| - createParser('var a = null');
|
| - FormalParameter parameter = parser.parseFormalParameter(kind);
|
| - expectNotNullIfNoErrors(parameter);
|
| + void test_parseIdentifierList_single() {
|
| + createParser('a');
|
| + List<SimpleIdentifier> list = parser.parseIdentifierList();
|
| + expectNotNullIfNoErrors(list);
|
| listener.assertNoErrors();
|
| - expect(parameter, new isInstanceOf<DefaultFormalParameter>());
|
| - DefaultFormalParameter defaultParameter = parameter;
|
| - SimpleFormalParameter simpleParameter =
|
| - defaultParameter.parameter as SimpleFormalParameter;
|
| - expect(simpleParameter.covariantKeyword, isNull);
|
| - expect(simpleParameter.identifier, isNotNull);
|
| - expect(simpleParameter.keyword, isNotNull);
|
| - expect(simpleParameter.type, isNull);
|
| - expect(simpleParameter.kind, kind);
|
| - expect(defaultParameter.separator, isNotNull);
|
| - expect(defaultParameter.defaultValue, isNotNull);
|
| - expect(defaultParameter.kind, kind);
|
| + expect(list, hasLength(1));
|
| }
|
|
|
| - void test_parseFormalParameterList_empty() {
|
| - createParser('()');
|
| - FormalParameterList list = parser.parseFormalParameterList();
|
| - expectNotNullIfNoErrors(list);
|
| + void test_parseIfStatement_else_block() {
|
| + createParser('if (x) {} else {}');
|
| + IfStatement statement = parser.parseIfStatement();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(list.leftParenthesis, isNotNull);
|
| - expect(list.leftDelimiter, isNull);
|
| - expect(list.parameters, hasLength(0));
|
| - expect(list.rightDelimiter, isNull);
|
| - expect(list.rightParenthesis, isNotNull);
|
| + expect(statement.ifKeyword, isNotNull);
|
| + expect(statement.leftParenthesis, isNotNull);
|
| + expect(statement.condition, isNotNull);
|
| + expect(statement.rightParenthesis, isNotNull);
|
| + expect(statement.thenStatement, isNotNull);
|
| + expect(statement.elseKeyword, isNotNull);
|
| + expect(statement.elseStatement, isNotNull);
|
| }
|
|
|
| - void test_parseFormalParameterList_named_multiple() {
|
| - createParser('({A a : 1, B b, C c : 3})');
|
| - FormalParameterList list = parser.parseFormalParameterList();
|
| - expectNotNullIfNoErrors(list);
|
| + void test_parseIfStatement_else_statement() {
|
| + createParser('if (x) f(x); else f(y);');
|
| + IfStatement statement = parser.parseIfStatement();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(list.leftParenthesis, isNotNull);
|
| - expect(list.leftDelimiter, isNotNull);
|
| - expect(list.parameters, hasLength(3));
|
| - expect(list.rightDelimiter, isNotNull);
|
| - expect(list.rightParenthesis, isNotNull);
|
| + expect(statement.ifKeyword, isNotNull);
|
| + expect(statement.leftParenthesis, isNotNull);
|
| + expect(statement.condition, isNotNull);
|
| + expect(statement.rightParenthesis, isNotNull);
|
| + expect(statement.thenStatement, isNotNull);
|
| + expect(statement.elseKeyword, isNotNull);
|
| + expect(statement.elseStatement, isNotNull);
|
| }
|
|
|
| - void test_parseFormalParameterList_named_single() {
|
| - createParser('({A a})');
|
| - FormalParameterList list = parser.parseFormalParameterList();
|
| - expectNotNullIfNoErrors(list);
|
| + void test_parseIfStatement_noElse_block() {
|
| + createParser('if (x) {}');
|
| + IfStatement statement = parser.parseIfStatement();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(list.leftParenthesis, isNotNull);
|
| - expect(list.leftDelimiter, isNotNull);
|
| - expect(list.parameters, hasLength(1));
|
| - expect(list.rightDelimiter, isNotNull);
|
| - expect(list.rightParenthesis, isNotNull);
|
| + expect(statement.ifKeyword, isNotNull);
|
| + expect(statement.leftParenthesis, isNotNull);
|
| + expect(statement.condition, isNotNull);
|
| + expect(statement.rightParenthesis, isNotNull);
|
| + expect(statement.thenStatement, isNotNull);
|
| + expect(statement.elseKeyword, isNull);
|
| + expect(statement.elseStatement, isNull);
|
| }
|
|
|
| - void test_parseFormalParameterList_named_trailing_comma() {
|
| - createParser('(A a, {B b,})');
|
| - FormalParameterList list = parser.parseFormalParameterList();
|
| - expectNotNullIfNoErrors(list);
|
| + void test_parseIfStatement_noElse_statement() {
|
| + createParser('if (x) f(x);');
|
| + IfStatement statement = parser.parseIfStatement();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(list.leftParenthesis, isNotNull);
|
| - expect(list.leftDelimiter, isNotNull);
|
| - expect(list.parameters, hasLength(2));
|
| - expect(list.rightDelimiter, isNotNull);
|
| - expect(list.rightParenthesis, isNotNull);
|
| + expect(statement.ifKeyword, isNotNull);
|
| + expect(statement.leftParenthesis, isNotNull);
|
| + expect(statement.condition, isNotNull);
|
| + expect(statement.rightParenthesis, isNotNull);
|
| + expect(statement.thenStatement, isNotNull);
|
| + expect(statement.elseKeyword, isNull);
|
| + expect(statement.elseStatement, isNull);
|
| }
|
|
|
| - void test_parseFormalParameterList_normal_multiple() {
|
| - createParser('(A a, B b, C c)');
|
| - FormalParameterList list = parser.parseFormalParameterList();
|
| - expectNotNullIfNoErrors(list);
|
| + void test_parseImplementsClause_multiple() {
|
| + createParser('implements A, B, C');
|
| + ImplementsClause clause = parser.parseImplementsClause();
|
| + expectNotNullIfNoErrors(clause);
|
| listener.assertNoErrors();
|
| - expect(list.leftParenthesis, isNotNull);
|
| - expect(list.leftDelimiter, isNull);
|
| - expect(list.parameters, hasLength(3));
|
| - expect(list.rightDelimiter, isNull);
|
| - expect(list.rightParenthesis, isNotNull);
|
| + expect(clause.interfaces, hasLength(3));
|
| + expect(clause.implementsKeyword, isNotNull);
|
| }
|
|
|
| - void test_parseFormalParameterList_normal_named() {
|
| - createParser('(A a, {B b})');
|
| - FormalParameterList list = parser.parseFormalParameterList();
|
| - expectNotNullIfNoErrors(list);
|
| + void test_parseImplementsClause_single() {
|
| + createParser('implements A');
|
| + ImplementsClause clause = parser.parseImplementsClause();
|
| + expectNotNullIfNoErrors(clause);
|
| listener.assertNoErrors();
|
| - expect(list.leftParenthesis, isNotNull);
|
| - expect(list.leftDelimiter, isNotNull);
|
| - expect(list.parameters, hasLength(2));
|
| - expect(list.rightDelimiter, isNotNull);
|
| - expect(list.rightParenthesis, isNotNull);
|
| + expect(clause.interfaces, hasLength(1));
|
| + expect(clause.implementsKeyword, isNotNull);
|
| }
|
|
|
| - void test_parseFormalParameterList_normal_named_inFunctionType() {
|
| - createParser('(A, {B b})');
|
| - FormalParameterList list =
|
| - parser.parseFormalParameterList(inFunctionType: true);
|
| - expectNotNullIfNoErrors(list);
|
| + void test_parseInitializedIdentifierList_type() {
|
| + createParser("/// Doc\nstatic T a = 1, b, c = 3;");
|
| + FieldDeclaration declaration = parser.parseClassMember('C');
|
| + expectNotNullIfNoErrors(declaration);
|
| listener.assertNoErrors();
|
| - expect(list.leftParenthesis, isNotNull);
|
| - expect(list.leftDelimiter, isNotNull);
|
| - expect(list.rightDelimiter, isNotNull);
|
| - expect(list.rightParenthesis, isNotNull);
|
| - NodeList<FormalParameter> parameters = list.parameters;
|
| - expect(parameters, hasLength(2));
|
| -
|
| - expect(parameters[0], new isInstanceOf<SimpleFormalParameter>());
|
| - SimpleFormalParameter required = parameters[0];
|
| - expect(required.identifier, isNull);
|
| - expect(required.type, new isInstanceOf<TypeName>());
|
| - expect((required.type as TypeName).name.name, 'A');
|
| -
|
| - expect(parameters[1], new isInstanceOf<DefaultFormalParameter>());
|
| - DefaultFormalParameter named = parameters[1];
|
| - expect(named.identifier, isNotNull);
|
| - expect(named.parameter, new isInstanceOf<SimpleFormalParameter>());
|
| - SimpleFormalParameter simple = named.parameter;
|
| - expect(simple.type, new isInstanceOf<TypeName>());
|
| - expect((simple.type as TypeName).name.name, 'B');
|
| + expectCommentText(declaration.documentationComment, '/// Doc');
|
| + VariableDeclarationList fields = declaration.fields;
|
| + expect(fields, isNotNull);
|
| + expect(fields.keyword, isNull);
|
| + expect((fields.type as TypeName).name.name, 'T');
|
| + expect(fields.variables, hasLength(3));
|
| + expect(declaration.staticKeyword.lexeme, 'static');
|
| + expect(declaration.semicolon, isNotNull);
|
| }
|
|
|
| - void test_parseFormalParameterList_normal_positional() {
|
| - createParser('(A a, [B b])');
|
| - FormalParameterList list = parser.parseFormalParameterList();
|
| - expectNotNullIfNoErrors(list);
|
| - listener.assertNoErrors();
|
| - expect(list.leftParenthesis, isNotNull);
|
| - expect(list.leftDelimiter, isNotNull);
|
| - expect(list.parameters, hasLength(2));
|
| - expect(list.rightDelimiter, isNotNull);
|
| - expect(list.rightParenthesis, isNotNull);
|
| + void test_parseInitializedIdentifierList_var() {
|
| + createParser('/// Doc\nstatic var a = 1, b, c = 3;');
|
| + FieldDeclaration declaration = parser.parseClassMember('C');
|
| + expectNotNullIfNoErrors(declaration);
|
| + listener.assertNoErrors();
|
| + expectCommentText(declaration.documentationComment, '/// Doc');
|
| + VariableDeclarationList fields = declaration.fields;
|
| + expect(fields, isNotNull);
|
| + expect(fields.keyword.lexeme, 'var');
|
| + expect(fields.type, isNull);
|
| + expect(fields.variables, hasLength(3));
|
| + expect(declaration.staticKeyword.lexeme, 'static');
|
| + expect(declaration.semicolon, isNotNull);
|
| }
|
|
|
| - void test_parseFormalParameterList_normal_single() {
|
| - createParser('(A a)');
|
| - FormalParameterList list = parser.parseFormalParameterList();
|
| - expectNotNullIfNoErrors(list);
|
| + void test_parseInstanceCreationExpression_qualifiedType() {
|
| + Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
|
| + createParser('A.B()');
|
| + InstanceCreationExpression expression =
|
| + parser.parseInstanceCreationExpression(token);
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(list.leftParenthesis, isNotNull);
|
| - expect(list.leftDelimiter, isNull);
|
| - expect(list.parameters, hasLength(1));
|
| - expect(list.rightDelimiter, isNull);
|
| - expect(list.rightParenthesis, isNotNull);
|
| + expect(expression.keyword, token);
|
| + ConstructorName name = expression.constructorName;
|
| + expect(name, isNotNull);
|
| + TypeName type = name.type;
|
| + expect(type, isNotNull);
|
| + expect(type.typeArguments, isNull);
|
| + expect(name.period, isNull);
|
| + expect(name.name, isNull);
|
| + expect(expression.argumentList, isNotNull);
|
| }
|
|
|
| - void test_parseFormalParameterList_normal_single_Function() {
|
| - createParser('(Function f)');
|
| - FormalParameterList list = parser.parseFormalParameterList();
|
| - expectNotNullIfNoErrors(list);
|
| + void test_parseInstanceCreationExpression_qualifiedType_named() {
|
| + Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
|
| + createParser('A.B.c()');
|
| + InstanceCreationExpression expression =
|
| + parser.parseInstanceCreationExpression(token);
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(list.leftParenthesis, isNotNull);
|
| - expect(list.leftDelimiter, isNull);
|
| - expect(list.parameters, hasLength(1));
|
| - expect(list.rightDelimiter, isNull);
|
| - expect(list.rightParenthesis, isNotNull);
|
| + expect(expression.keyword, token);
|
| + ConstructorName name = expression.constructorName;
|
| + expect(name, isNotNull);
|
| + TypeName type = name.type;
|
| + expect(type, isNotNull);
|
| + expect(type.typeArguments, isNull);
|
| + expect(name.period, isNotNull);
|
| + expect(name.name, isNotNull);
|
| + expect(expression.argumentList, isNotNull);
|
| }
|
|
|
| - void test_parseFormalParameterList_normal_single_trailing_comma() {
|
| - createParser('(A a,)');
|
| - FormalParameterList list = parser.parseFormalParameterList();
|
| - expectNotNullIfNoErrors(list);
|
| + void
|
| + test_parseInstanceCreationExpression_qualifiedType_named_typeParameterComment() {
|
| + enableGenericMethodComments = true;
|
| + Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
|
| + createParser('A.B/*<E>*/.c()');
|
| + InstanceCreationExpression expression =
|
| + parser.parseInstanceCreationExpression(token);
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(list.leftParenthesis, isNotNull);
|
| - expect(list.leftDelimiter, isNull);
|
| - expect(list.parameters, hasLength(1));
|
| - expect(list.rightDelimiter, isNull);
|
| - expect(list.rightParenthesis, isNotNull);
|
| + expect(expression.keyword, token);
|
| + ConstructorName name = expression.constructorName;
|
| + expect(name, isNotNull);
|
| + TypeName type = name.type;
|
| + expect(type, isNotNull);
|
| + expect(type.typeArguments.arguments, hasLength(1));
|
| + expect(name.period, isNotNull);
|
| + expect(name.name, isNotNull);
|
| + expect(expression.argumentList, isNotNull);
|
| }
|
|
|
| - void test_parseFormalParameterList_positional_multiple() {
|
| - createParser('([A a = null, B b, C c = null])');
|
| - FormalParameterList list = parser.parseFormalParameterList();
|
| - expectNotNullIfNoErrors(list);
|
| + void
|
| + test_parseInstanceCreationExpression_qualifiedType_named_typeParameters() {
|
| + Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
|
| + createParser('A.B<E>.c()');
|
| + InstanceCreationExpression expression =
|
| + parser.parseInstanceCreationExpression(token);
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(list.leftParenthesis, isNotNull);
|
| - expect(list.leftDelimiter, isNotNull);
|
| - expect(list.parameters, hasLength(3));
|
| - expect(list.rightDelimiter, isNotNull);
|
| - expect(list.rightParenthesis, isNotNull);
|
| + expect(expression.keyword, token);
|
| + ConstructorName name = expression.constructorName;
|
| + expect(name, isNotNull);
|
| + TypeName type = name.type;
|
| + expect(type, isNotNull);
|
| + expect(type.typeArguments.arguments, hasLength(1));
|
| + expect(name.period, isNotNull);
|
| + expect(name.name, isNotNull);
|
| + expect(expression.argumentList, isNotNull);
|
| }
|
|
|
| - void test_parseFormalParameterList_positional_single() {
|
| - createParser('([A a = null])');
|
| - FormalParameterList list = parser.parseFormalParameterList();
|
| - expectNotNullIfNoErrors(list);
|
| + void
|
| + test_parseInstanceCreationExpression_qualifiedType_typeParameterComment() {
|
| + enableGenericMethodComments = true;
|
| + Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
|
| + createParser('A.B/*<E>*/()');
|
| + InstanceCreationExpression expression =
|
| + parser.parseInstanceCreationExpression(token);
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(list.leftParenthesis, isNotNull);
|
| - expect(list.leftDelimiter, isNotNull);
|
| - expect(list.parameters, hasLength(1));
|
| - expect(list.rightDelimiter, isNotNull);
|
| - expect(list.rightParenthesis, isNotNull);
|
| + expect(expression.keyword, token);
|
| + ConstructorName name = expression.constructorName;
|
| + expect(name, isNotNull);
|
| + TypeName type = name.type;
|
| + expect(type, isNotNull);
|
| + expect(type.typeArguments.arguments, hasLength(1));
|
| + expect(name.period, isNull);
|
| + expect(name.name, isNull);
|
| + expect(expression.argumentList, isNotNull);
|
| }
|
|
|
| - void test_parseFormalParameterList_positional_trailing_comma() {
|
| - createParser('(A a, [B b,])');
|
| - FormalParameterList list = parser.parseFormalParameterList();
|
| - expectNotNullIfNoErrors(list);
|
| + void test_parseInstanceCreationExpression_qualifiedType_typeParameters() {
|
| + Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
|
| + createParser('A.B<E>()');
|
| + InstanceCreationExpression expression =
|
| + parser.parseInstanceCreationExpression(token);
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(list.leftParenthesis, isNotNull);
|
| - expect(list.leftDelimiter, isNotNull);
|
| - expect(list.parameters, hasLength(2));
|
| - expect(list.rightDelimiter, isNotNull);
|
| - expect(list.rightParenthesis, isNotNull);
|
| + expect(expression.keyword, token);
|
| + ConstructorName name = expression.constructorName;
|
| + expect(name, isNotNull);
|
| + TypeName type = name.type;
|
| + expect(type, isNotNull);
|
| + expect(type.typeArguments.arguments, hasLength(1));
|
| + expect(name.period, isNull);
|
| + expect(name.name, isNull);
|
| + expect(expression.argumentList, isNotNull);
|
| }
|
|
|
| - void test_parseFormalParameterList_prefixedType() {
|
| - createParser('(io.File f)');
|
| - FormalParameterList list = parser.parseFormalParameterList();
|
| - expectNotNullIfNoErrors(list);
|
| + void test_parseInstanceCreationExpression_type() {
|
| + Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
|
| + createParser('A()');
|
| + InstanceCreationExpression expression =
|
| + parser.parseInstanceCreationExpression(token);
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(list.leftParenthesis, isNotNull);
|
| - expect(list.leftDelimiter, isNull);
|
| - expect(list.parameters, hasLength(1));
|
| - expect(list.parameters[0].toSource(), 'io.File f');
|
| - expect(list.rightDelimiter, isNull);
|
| - expect(list.rightParenthesis, isNotNull);
|
| + expect(expression.keyword, token);
|
| + ConstructorName name = expression.constructorName;
|
| + expect(name, isNotNull);
|
| + TypeName type = name.type;
|
| + expect(type, isNotNull);
|
| + expect(type.typeArguments, isNull);
|
| + expect(name.period, isNull);
|
| + expect(name.name, isNull);
|
| + expect(expression.argumentList, isNotNull);
|
| }
|
|
|
| - void test_parseFormalParameterList_prefixedType_partial() {
|
| - createParser('(io.)');
|
| - FormalParameterList list = parser.parseFormalParameterList();
|
| - expectNotNullIfNoErrors(list);
|
| - listener.assertErrorsWithCodes([
|
| - ParserErrorCode.MISSING_IDENTIFIER,
|
| - ParserErrorCode.MISSING_IDENTIFIER
|
| - ]);
|
| - expect(list.leftParenthesis, isNotNull);
|
| - expect(list.leftDelimiter, isNull);
|
| - expect(list.parameters, hasLength(1));
|
| - expect(list.parameters[0].toSource(), 'io. ');
|
| - expect(list.rightDelimiter, isNull);
|
| - expect(list.rightParenthesis, isNotNull);
|
| + void test_parseInstanceCreationExpression_type_named() {
|
| + enableGenericMethodComments = true;
|
| + Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
|
| + createParser('A.c()');
|
| + InstanceCreationExpression expression =
|
| + parser.parseInstanceCreationExpression(token);
|
| + expectNotNullIfNoErrors(expression);
|
| + listener.assertNoErrors();
|
| + expect(expression.keyword, token);
|
| + ConstructorName name = expression.constructorName;
|
| + expect(name, isNotNull);
|
| + TypeName type = name.type;
|
| + expect(type, isNotNull);
|
| + expect(type.typeArguments, isNull);
|
| + expect(name.period, isNull);
|
| + expect(name.name, isNull);
|
| + expect(expression.argumentList, isNotNull);
|
| }
|
|
|
| - void test_parseFormalParameterList_prefixedType_partial2() {
|
| - createParser('(io.,a)');
|
| - FormalParameterList list = parser.parseFormalParameterList();
|
| - expectNotNullIfNoErrors(list);
|
| - listener.assertErrorsWithCodes([
|
| - ParserErrorCode.MISSING_IDENTIFIER,
|
| - ParserErrorCode.MISSING_IDENTIFIER
|
| - ]);
|
| - expect(list.leftParenthesis, isNotNull);
|
| - expect(list.leftDelimiter, isNull);
|
| - expect(list.parameters, hasLength(2));
|
| - expect(list.parameters[0].toSource(), 'io. ');
|
| - expect(list.parameters[1].toSource(), 'a');
|
| - expect(list.rightDelimiter, isNull);
|
| - expect(list.rightParenthesis, isNotNull);
|
| + void test_parseInstanceCreationExpression_type_named_typeParameterComment() {
|
| + enableGenericMethodComments = true;
|
| + Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
|
| + createParser('A/*<B>*/.c()');
|
| + InstanceCreationExpression expression =
|
| + parser.parseInstanceCreationExpression(token);
|
| + expectNotNullIfNoErrors(expression);
|
| + listener.assertNoErrors();
|
| + expect(expression.keyword, token);
|
| + ConstructorName name = expression.constructorName;
|
| + expect(name, isNotNull);
|
| + TypeName type = name.type;
|
| + expect(type, isNotNull);
|
| + expect(type.typeArguments.arguments, hasLength(1));
|
| + expect(name.period, isNotNull);
|
| + expect(name.name, isNotNull);
|
| + expect(expression.argumentList, isNotNull);
|
| }
|
|
|
| - void test_parseForStatement_each_await() {
|
| - createParser('await for (element in list) {}');
|
| - Statement statement = parser.parseForStatement();
|
| - expectNotNullIfNoErrors(statement);
|
| + void test_parseInstanceCreationExpression_type_named_typeParameters() {
|
| + Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
|
| + createParser('A<B>.c()');
|
| + InstanceCreationExpression expression =
|
| + parser.parseInstanceCreationExpression(token);
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(statement, new isInstanceOf<ForEachStatement>());
|
| - ForEachStatement forStatement = statement;
|
| - expect(forStatement.awaitKeyword, isNotNull);
|
| - expect(forStatement.forKeyword, isNotNull);
|
| - expect(forStatement.leftParenthesis, isNotNull);
|
| - expect(forStatement.loopVariable, isNull);
|
| - expect(forStatement.identifier, isNotNull);
|
| - expect(forStatement.inKeyword, isNotNull);
|
| - expect(forStatement.iterable, isNotNull);
|
| - expect(forStatement.rightParenthesis, isNotNull);
|
| - expect(forStatement.body, isNotNull);
|
| + expect(expression.keyword, token);
|
| + ConstructorName name = expression.constructorName;
|
| + expect(name, isNotNull);
|
| + TypeName type = name.type;
|
| + expect(type, isNotNull);
|
| + expect(type.typeArguments.arguments, hasLength(1));
|
| + expect(name.period, isNotNull);
|
| + expect(name.name, isNotNull);
|
| + expect(expression.argumentList, isNotNull);
|
| }
|
|
|
| - void test_parseForStatement_each_identifier() {
|
| - createParser('for (element in list) {}');
|
| - Statement statement = parser.parseForStatement();
|
| - expectNotNullIfNoErrors(statement);
|
| + void test_parseInstanceCreationExpression_type_typeParameterComment() {
|
| + enableGenericMethodComments = true;
|
| + Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
|
| + createParser('A/*<B>*/()');
|
| + InstanceCreationExpression expression =
|
| + parser.parseInstanceCreationExpression(token);
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(statement, new isInstanceOf<ForEachStatement>());
|
| - ForEachStatement forStatement = statement;
|
| - expect(forStatement.awaitKeyword, isNull);
|
| - expect(forStatement.forKeyword, isNotNull);
|
| - expect(forStatement.leftParenthesis, isNotNull);
|
| - expect(forStatement.loopVariable, isNull);
|
| - expect(forStatement.identifier, isNotNull);
|
| - expect(forStatement.inKeyword, isNotNull);
|
| - expect(forStatement.iterable, isNotNull);
|
| - expect(forStatement.rightParenthesis, isNotNull);
|
| - expect(forStatement.body, isNotNull);
|
| + expect(expression.keyword, token);
|
| + ConstructorName name = expression.constructorName;
|
| + expect(name, isNotNull);
|
| + TypeName type = name.type;
|
| + expect(type, isNotNull);
|
| + expect(type.typeArguments.arguments, hasLength(1));
|
| + expect(name.period, isNull);
|
| + expect(name.name, isNull);
|
| + expect(expression.argumentList, isNotNull);
|
| }
|
|
|
| - void test_parseForStatement_each_noType_metadata() {
|
| - createParser('for (@A var element in list) {}');
|
| - Statement statement = parser.parseForStatement();
|
| - expectNotNullIfNoErrors(statement);
|
| + void test_parseInstanceCreationExpression_type_typeParameters() {
|
| + Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
|
| + createParser('A<B>()');
|
| + InstanceCreationExpression expression =
|
| + parser.parseInstanceCreationExpression(token);
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(statement, new isInstanceOf<ForEachStatement>());
|
| - ForEachStatement forStatement = statement;
|
| - expect(forStatement.awaitKeyword, isNull);
|
| - expect(forStatement.forKeyword, isNotNull);
|
| - expect(forStatement.leftParenthesis, isNotNull);
|
| - expect(forStatement.loopVariable, isNotNull);
|
| - expect(forStatement.loopVariable.metadata, hasLength(1));
|
| - expect(forStatement.identifier, isNull);
|
| - expect(forStatement.inKeyword, isNotNull);
|
| - expect(forStatement.iterable, isNotNull);
|
| - expect(forStatement.rightParenthesis, isNotNull);
|
| - expect(forStatement.body, isNotNull);
|
| + expect(expression.keyword, token);
|
| + ConstructorName name = expression.constructorName;
|
| + expect(name, isNotNull);
|
| + TypeName type = name.type;
|
| + expect(type, isNotNull);
|
| + expect(type.typeArguments.arguments, hasLength(1));
|
| + expect(name.period, isNull);
|
| + expect(name.name, isNull);
|
| + expect(expression.argumentList, isNotNull);
|
| }
|
|
|
| - void test_parseForStatement_each_type() {
|
| - createParser('for (A element in list) {}');
|
| - Statement statement = parser.parseForStatement();
|
| - expectNotNullIfNoErrors(statement);
|
| + void test_parseInstanceCreationExpression_type_typeParameters_nullable() {
|
| + enableNnbd = true;
|
| + Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
|
| + createParser('A<B?>()');
|
| + InstanceCreationExpression expression =
|
| + parser.parseInstanceCreationExpression(token);
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(statement, new isInstanceOf<ForEachStatement>());
|
| - ForEachStatement forStatement = statement;
|
| - expect(forStatement.awaitKeyword, isNull);
|
| - expect(forStatement.forKeyword, isNotNull);
|
| - expect(forStatement.leftParenthesis, isNotNull);
|
| - expect(forStatement.loopVariable, isNotNull);
|
| - expect(forStatement.identifier, isNull);
|
| - expect(forStatement.inKeyword, isNotNull);
|
| - expect(forStatement.iterable, isNotNull);
|
| - expect(forStatement.rightParenthesis, isNotNull);
|
| - expect(forStatement.body, isNotNull);
|
| + expect(expression.keyword, token);
|
| + ConstructorName name = expression.constructorName;
|
| + expect(name, isNotNull);
|
| + TypeName type = name.type;
|
| + expect(type, isNotNull);
|
| + expect(name.period, isNull);
|
| + expect(name.name, isNull);
|
| + expect(expression.argumentList, isNotNull);
|
| + NodeList<TypeAnnotation> arguments = type.typeArguments.arguments;
|
| + expect(arguments, hasLength(1));
|
| + expect((arguments[0] as TypeName).question, isNotNull);
|
| }
|
|
|
| - void test_parseForStatement_each_var() {
|
| - createParser('for (var element in list) {}');
|
| - Statement statement = parser.parseForStatement();
|
| - expectNotNullIfNoErrors(statement);
|
| + void test_parseLibraryIdentifier_multiple() {
|
| + String name = "a.b.c";
|
| + createParser(name);
|
| + LibraryIdentifier identifier = parser.parseLibraryIdentifier();
|
| + expectNotNullIfNoErrors(identifier);
|
| listener.assertNoErrors();
|
| - expect(statement, new isInstanceOf<ForEachStatement>());
|
| - ForEachStatement forStatement = statement;
|
| - expect(forStatement.awaitKeyword, isNull);
|
| - expect(forStatement.forKeyword, isNotNull);
|
| - expect(forStatement.leftParenthesis, isNotNull);
|
| - expect(forStatement.loopVariable, isNotNull);
|
| - expect(forStatement.identifier, isNull);
|
| - expect(forStatement.inKeyword, isNotNull);
|
| - expect(forStatement.iterable, isNotNull);
|
| - expect(forStatement.rightParenthesis, isNotNull);
|
| - expect(forStatement.body, isNotNull);
|
| + expect(identifier.name, name);
|
| }
|
|
|
| - void test_parseForStatement_loop_c() {
|
| - createParser('for (; i < count;) {}');
|
| - Statement statement = parser.parseForStatement();
|
| - expectNotNullIfNoErrors(statement);
|
| + void test_parseLibraryIdentifier_single() {
|
| + String name = "a";
|
| + createParser(name);
|
| + LibraryIdentifier identifier = parser.parseLibraryIdentifier();
|
| + expectNotNullIfNoErrors(identifier);
|
| listener.assertNoErrors();
|
| - expect(statement, new isInstanceOf<ForStatement>());
|
| - ForStatement forStatement = statement;
|
| - expect(forStatement.forKeyword, isNotNull);
|
| - expect(forStatement.leftParenthesis, isNotNull);
|
| - expect(forStatement.variables, isNull);
|
| - expect(forStatement.initialization, isNull);
|
| - expect(forStatement.leftSeparator, isNotNull);
|
| - expect(forStatement.condition, isNotNull);
|
| - expect(forStatement.rightSeparator, isNotNull);
|
| - expect(forStatement.updaters, hasLength(0));
|
| - expect(forStatement.rightParenthesis, isNotNull);
|
| - expect(forStatement.body, isNotNull);
|
| + expect(identifier.name, name);
|
| }
|
|
|
| - void test_parseForStatement_loop_cu() {
|
| - createParser('for (; i < count; i++) {}');
|
| - Statement statement = parser.parseForStatement();
|
| - expectNotNullIfNoErrors(statement);
|
| + void test_parseListLiteral_empty_oneToken() {
|
| + Token token = TokenFactory.tokenFromKeyword(Keyword.CONST);
|
| + TypeArgumentList typeArguments = null;
|
| + createParser('[]');
|
| + ListLiteral literal = parser.parseListLiteral(token, typeArguments);
|
| + expectNotNullIfNoErrors(literal);
|
| listener.assertNoErrors();
|
| - expect(statement, new isInstanceOf<ForStatement>());
|
| - ForStatement forStatement = statement;
|
| - expect(forStatement.forKeyword, isNotNull);
|
| - expect(forStatement.leftParenthesis, isNotNull);
|
| - expect(forStatement.variables, isNull);
|
| - expect(forStatement.initialization, isNull);
|
| - expect(forStatement.leftSeparator, isNotNull);
|
| - expect(forStatement.condition, isNotNull);
|
| - expect(forStatement.rightSeparator, isNotNull);
|
| - expect(forStatement.updaters, hasLength(1));
|
| - expect(forStatement.rightParenthesis, isNotNull);
|
| - expect(forStatement.body, isNotNull);
|
| + expect(literal.constKeyword, token);
|
| + expect(literal.typeArguments, typeArguments);
|
| + expect(literal.leftBracket, isNotNull);
|
| + expect(literal.elements, hasLength(0));
|
| + expect(literal.rightBracket, isNotNull);
|
| }
|
|
|
| - void test_parseForStatement_loop_ecu() {
|
| - createParser('for (i--; i < count; i++) {}');
|
| - Statement statement = parser.parseForStatement();
|
| - expectNotNullIfNoErrors(statement);
|
| + void test_parseListLiteral_empty_oneToken_withComment() {
|
| + Token token = null;
|
| + TypeArgumentList typeArguments = null;
|
| + createParser('/* 0 */ []');
|
| + ListLiteral literal = parser.parseListLiteral(token, typeArguments);
|
| + expectNotNullIfNoErrors(literal);
|
| listener.assertNoErrors();
|
| - expect(statement, new isInstanceOf<ForStatement>());
|
| - ForStatement forStatement = statement;
|
| - expect(forStatement.forKeyword, isNotNull);
|
| - expect(forStatement.leftParenthesis, isNotNull);
|
| - expect(forStatement.variables, isNull);
|
| - expect(forStatement.initialization, isNotNull);
|
| - expect(forStatement.leftSeparator, isNotNull);
|
| - expect(forStatement.condition, isNotNull);
|
| - expect(forStatement.rightSeparator, isNotNull);
|
| - expect(forStatement.updaters, hasLength(1));
|
| - expect(forStatement.rightParenthesis, isNotNull);
|
| - expect(forStatement.body, isNotNull);
|
| + expect(literal.constKeyword, token);
|
| + expect(literal.typeArguments, typeArguments);
|
| + Token leftBracket = literal.leftBracket;
|
| + expect(leftBracket, isNotNull);
|
| + expect(leftBracket.precedingComments, isNotNull);
|
| + expect(literal.elements, hasLength(0));
|
| + expect(literal.rightBracket, isNotNull);
|
| }
|
|
|
| - void test_parseForStatement_loop_i() {
|
| - createParser('for (var i = 0;;) {}');
|
| - Statement statement = parser.parseForStatement();
|
| - expectNotNullIfNoErrors(statement);
|
| + void test_parseListLiteral_empty_twoTokens() {
|
| + Token token = TokenFactory.tokenFromKeyword(Keyword.CONST);
|
| + TypeArgumentList typeArguments = null;
|
| + createParser('[ ]');
|
| + ListLiteral literal = parser.parseListLiteral(token, typeArguments);
|
| + expectNotNullIfNoErrors(literal);
|
| listener.assertNoErrors();
|
| - expect(statement, new isInstanceOf<ForStatement>());
|
| - ForStatement forStatement = statement;
|
| - expect(forStatement.forKeyword, isNotNull);
|
| - expect(forStatement.leftParenthesis, isNotNull);
|
| - VariableDeclarationList variables = forStatement.variables;
|
| - expect(variables, isNotNull);
|
| - expect(variables.metadata, hasLength(0));
|
| - expect(variables.variables, hasLength(1));
|
| - expect(forStatement.initialization, isNull);
|
| - expect(forStatement.leftSeparator, isNotNull);
|
| - expect(forStatement.condition, isNull);
|
| - expect(forStatement.rightSeparator, isNotNull);
|
| - expect(forStatement.updaters, hasLength(0));
|
| - expect(forStatement.rightParenthesis, isNotNull);
|
| - expect(forStatement.body, isNotNull);
|
| + expect(literal.constKeyword, token);
|
| + expect(literal.typeArguments, typeArguments);
|
| + expect(literal.leftBracket, isNotNull);
|
| + expect(literal.elements, hasLength(0));
|
| + expect(literal.rightBracket, isNotNull);
|
| }
|
|
|
| - void test_parseForStatement_loop_i_withMetadata() {
|
| - createParser('for (@A var i = 0;;) {}');
|
| - Statement statement = parser.parseForStatement();
|
| - expectNotNullIfNoErrors(statement);
|
| - listener.assertNoErrors();
|
| - expect(statement, new isInstanceOf<ForStatement>());
|
| - ForStatement forStatement = statement;
|
| - expect(forStatement.forKeyword, isNotNull);
|
| - expect(forStatement.leftParenthesis, isNotNull);
|
| - VariableDeclarationList variables = forStatement.variables;
|
| - expect(variables, isNotNull);
|
| - expect(variables.metadata, hasLength(1));
|
| - expect(variables.variables, hasLength(1));
|
| - expect(forStatement.initialization, isNull);
|
| - expect(forStatement.leftSeparator, isNotNull);
|
| - expect(forStatement.condition, isNull);
|
| - expect(forStatement.rightSeparator, isNotNull);
|
| - expect(forStatement.updaters, hasLength(0));
|
| - expect(forStatement.rightParenthesis, isNotNull);
|
| - expect(forStatement.body, isNotNull);
|
| + void test_parseListLiteral_multiple() {
|
| + createParser('[1, 2, 3]');
|
| + ListLiteral literal = parser.parseListLiteral(null, null);
|
| + expectNotNullIfNoErrors(literal);
|
| + listener.assertNoErrors();
|
| + expect(literal.constKeyword, isNull);
|
| + expect(literal.typeArguments, isNull);
|
| + expect(literal.leftBracket, isNotNull);
|
| + expect(literal.elements, hasLength(3));
|
| + expect(literal.rightBracket, isNotNull);
|
| }
|
|
|
| - void test_parseForStatement_loop_ic() {
|
| - createParser('for (var i = 0; i < count;) {}');
|
| - Statement statement = parser.parseForStatement();
|
| - expectNotNullIfNoErrors(statement);
|
| + void test_parseListLiteral_single() {
|
| + createParser('[1]');
|
| + ListLiteral literal = parser.parseListLiteral(null, null);
|
| + expectNotNullIfNoErrors(literal);
|
| listener.assertNoErrors();
|
| - expect(statement, new isInstanceOf<ForStatement>());
|
| - ForStatement forStatement = statement;
|
| - expect(forStatement.forKeyword, isNotNull);
|
| - expect(forStatement.leftParenthesis, isNotNull);
|
| - VariableDeclarationList variables = forStatement.variables;
|
| - expect(variables, isNotNull);
|
| - expect(variables.variables, hasLength(1));
|
| - expect(forStatement.initialization, isNull);
|
| - expect(forStatement.leftSeparator, isNotNull);
|
| - expect(forStatement.condition, isNotNull);
|
| - expect(forStatement.rightSeparator, isNotNull);
|
| - expect(forStatement.updaters, hasLength(0));
|
| - expect(forStatement.rightParenthesis, isNotNull);
|
| - expect(forStatement.body, isNotNull);
|
| + expect(literal.constKeyword, isNull);
|
| + expect(literal.typeArguments, isNull);
|
| + expect(literal.leftBracket, isNotNull);
|
| + expect(literal.elements, hasLength(1));
|
| + expect(literal.rightBracket, isNotNull);
|
| }
|
|
|
| - void test_parseForStatement_loop_icu() {
|
| - createParser('for (var i = 0; i < count; i++) {}');
|
| - Statement statement = parser.parseForStatement();
|
| - expectNotNullIfNoErrors(statement);
|
| + void test_parseListOrMapLiteral_list_noType() {
|
| + createParser('[1]');
|
| + TypedLiteral literal = parser.parseListOrMapLiteral(null);
|
| + expectNotNullIfNoErrors(literal);
|
| listener.assertNoErrors();
|
| - expect(statement, new isInstanceOf<ForStatement>());
|
| - ForStatement forStatement = statement;
|
| - expect(forStatement.forKeyword, isNotNull);
|
| - expect(forStatement.leftParenthesis, isNotNull);
|
| - VariableDeclarationList variables = forStatement.variables;
|
| - expect(variables, isNotNull);
|
| - expect(variables.variables, hasLength(1));
|
| - expect(forStatement.initialization, isNull);
|
| - expect(forStatement.leftSeparator, isNotNull);
|
| - expect(forStatement.condition, isNotNull);
|
| - expect(forStatement.rightSeparator, isNotNull);
|
| - expect(forStatement.updaters, hasLength(1));
|
| - expect(forStatement.rightParenthesis, isNotNull);
|
| - expect(forStatement.body, isNotNull);
|
| + expect(literal, new isInstanceOf<ListLiteral>());
|
| + ListLiteral listLiteral = literal;
|
| + expect(listLiteral.constKeyword, isNull);
|
| + expect(listLiteral.typeArguments, isNull);
|
| + expect(listLiteral.leftBracket, isNotNull);
|
| + expect(listLiteral.elements, hasLength(1));
|
| + expect(listLiteral.rightBracket, isNotNull);
|
| }
|
|
|
| - void test_parseForStatement_loop_iicuu() {
|
| - createParser('for (int i = 0, j = count; i < j; i++, j--) {}');
|
| - Statement statement = parser.parseForStatement();
|
| - expectNotNullIfNoErrors(statement);
|
| + void test_parseListOrMapLiteral_list_type() {
|
| + createParser('<int> [1]');
|
| + TypedLiteral literal = parser.parseListOrMapLiteral(null);
|
| + expectNotNullIfNoErrors(literal);
|
| listener.assertNoErrors();
|
| - expect(statement, new isInstanceOf<ForStatement>());
|
| - ForStatement forStatement = statement;
|
| - expect(forStatement.forKeyword, isNotNull);
|
| - expect(forStatement.leftParenthesis, isNotNull);
|
| - VariableDeclarationList variables = forStatement.variables;
|
| - expect(variables, isNotNull);
|
| - expect(variables.variables, hasLength(2));
|
| - expect(forStatement.initialization, isNull);
|
| - expect(forStatement.leftSeparator, isNotNull);
|
| - expect(forStatement.condition, isNotNull);
|
| - expect(forStatement.rightSeparator, isNotNull);
|
| - expect(forStatement.updaters, hasLength(2));
|
| - expect(forStatement.rightParenthesis, isNotNull);
|
| - expect(forStatement.body, isNotNull);
|
| + expect(literal, new isInstanceOf<ListLiteral>());
|
| + ListLiteral listLiteral = literal;
|
| + expect(listLiteral.constKeyword, isNull);
|
| + expect(listLiteral.typeArguments, isNotNull);
|
| + expect(listLiteral.leftBracket, isNotNull);
|
| + expect(listLiteral.elements, hasLength(1));
|
| + expect(listLiteral.rightBracket, isNotNull);
|
| }
|
|
|
| - void test_parseForStatement_loop_iu() {
|
| - createParser('for (var i = 0;; i++) {}');
|
| - Statement statement = parser.parseForStatement();
|
| - expectNotNullIfNoErrors(statement);
|
| + void test_parseListOrMapLiteral_map_noType() {
|
| + createParser("{'1' : 1}");
|
| + TypedLiteral literal = parser.parseListOrMapLiteral(null);
|
| + expectNotNullIfNoErrors(literal);
|
| listener.assertNoErrors();
|
| - expect(statement, new isInstanceOf<ForStatement>());
|
| - ForStatement forStatement = statement;
|
| - expect(forStatement.forKeyword, isNotNull);
|
| - expect(forStatement.leftParenthesis, isNotNull);
|
| - VariableDeclarationList variables = forStatement.variables;
|
| - expect(variables, isNotNull);
|
| - expect(variables.variables, hasLength(1));
|
| - expect(forStatement.initialization, isNull);
|
| - expect(forStatement.leftSeparator, isNotNull);
|
| - expect(forStatement.condition, isNull);
|
| - expect(forStatement.rightSeparator, isNotNull);
|
| - expect(forStatement.updaters, hasLength(1));
|
| - expect(forStatement.rightParenthesis, isNotNull);
|
| - expect(forStatement.body, isNotNull);
|
| + expect(literal, new isInstanceOf<MapLiteral>());
|
| + MapLiteral mapLiteral = literal;
|
| + expect(mapLiteral.constKeyword, isNull);
|
| + expect(mapLiteral.typeArguments, isNull);
|
| + expect(mapLiteral.leftBracket, isNotNull);
|
| + expect(mapLiteral.entries, hasLength(1));
|
| + expect(mapLiteral.rightBracket, isNotNull);
|
| }
|
|
|
| - void test_parseForStatement_loop_u() {
|
| - createParser('for (;; i++) {}');
|
| - Statement statement = parser.parseForStatement();
|
| - expectNotNullIfNoErrors(statement);
|
| + void test_parseListOrMapLiteral_map_type() {
|
| + createParser("<String, int> {'1' : 1}");
|
| + TypedLiteral literal = parser.parseListOrMapLiteral(null);
|
| + expectNotNullIfNoErrors(literal);
|
| listener.assertNoErrors();
|
| - expect(statement, new isInstanceOf<ForStatement>());
|
| - ForStatement forStatement = statement;
|
| - expect(forStatement.forKeyword, isNotNull);
|
| - expect(forStatement.leftParenthesis, isNotNull);
|
| - expect(forStatement.variables, isNull);
|
| - expect(forStatement.initialization, isNull);
|
| - expect(forStatement.leftSeparator, isNotNull);
|
| - expect(forStatement.condition, isNull);
|
| - expect(forStatement.rightSeparator, isNotNull);
|
| - expect(forStatement.updaters, hasLength(1));
|
| - expect(forStatement.rightParenthesis, isNotNull);
|
| - expect(forStatement.body, isNotNull);
|
| + expect(literal, new isInstanceOf<MapLiteral>());
|
| + MapLiteral mapLiteral = literal;
|
| + expect(mapLiteral.constKeyword, isNull);
|
| + expect(mapLiteral.typeArguments, isNotNull);
|
| + expect(mapLiteral.leftBracket, isNotNull);
|
| + expect(mapLiteral.entries, hasLength(1));
|
| + expect(mapLiteral.rightBracket, isNotNull);
|
| }
|
|
|
| - void test_parseFunctionBody_block() {
|
| - createParser('{}');
|
| - FunctionBody functionBody = parser.parseFunctionBody(false, null, false);
|
| - expectNotNullIfNoErrors(functionBody);
|
| + void test_parseLogicalAndExpression() {
|
| + createParser('x && y');
|
| + Expression expression = parser.parseLogicalAndExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(functionBody, new isInstanceOf<BlockFunctionBody>());
|
| - BlockFunctionBody body = functionBody;
|
| - expect(body.keyword, isNull);
|
| - expect(body.star, isNull);
|
| - expect(body.block, isNotNull);
|
| - expect(body.isAsynchronous, isFalse);
|
| - expect(body.isGenerator, isFalse);
|
| - expect(body.isSynchronous, isTrue);
|
| + expect(expression, new isInstanceOf<BinaryExpression>());
|
| + BinaryExpression binaryExpression = expression;
|
| + expect(binaryExpression.leftOperand, isNotNull);
|
| + expect(binaryExpression.operator, isNotNull);
|
| + expect(binaryExpression.operator.type, TokenType.AMPERSAND_AMPERSAND);
|
| + expect(binaryExpression.rightOperand, isNotNull);
|
| }
|
|
|
| - void test_parseFunctionBody_block_async() {
|
| - createParser('async {}');
|
| - FunctionBody functionBody = parser.parseFunctionBody(false, null, false);
|
| - expectNotNullIfNoErrors(functionBody);
|
| + void test_parseLogicalOrExpression() {
|
| + createParser('x || y');
|
| + Expression expression = parser.parseLogicalOrExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(functionBody, new isInstanceOf<BlockFunctionBody>());
|
| - BlockFunctionBody body = functionBody;
|
| - expect(body.keyword, isNotNull);
|
| - expect(body.keyword.lexeme, Parser.ASYNC);
|
| - expect(body.star, isNull);
|
| - expect(body.block, isNotNull);
|
| - expect(body.isAsynchronous, isTrue);
|
| - expect(body.isGenerator, isFalse);
|
| - expect(body.isSynchronous, isFalse);
|
| + expect(expression, new isInstanceOf<BinaryExpression>());
|
| + BinaryExpression binaryExpression = expression;
|
| + expect(binaryExpression.leftOperand, isNotNull);
|
| + expect(binaryExpression.operator, isNotNull);
|
| + expect(binaryExpression.operator.type, TokenType.BAR_BAR);
|
| + expect(binaryExpression.rightOperand, isNotNull);
|
| }
|
|
|
| - void test_parseFunctionBody_block_asyncGenerator() {
|
| - createParser('async* {}');
|
| - FunctionBody functionBody = parser.parseFunctionBody(false, null, false);
|
| - expectNotNullIfNoErrors(functionBody);
|
| + void test_parseMapLiteral_empty() {
|
| + Token token = TokenFactory.tokenFromKeyword(Keyword.CONST);
|
| + TypeArgumentList typeArguments = AstTestFactory.typeArgumentList(
|
| + [AstTestFactory.typeName4("String"), AstTestFactory.typeName4("int")]);
|
| + createParser('{}');
|
| + MapLiteral literal = parser.parseMapLiteral(token, typeArguments);
|
| + expectNotNullIfNoErrors(literal);
|
| listener.assertNoErrors();
|
| - expect(functionBody, new isInstanceOf<BlockFunctionBody>());
|
| - BlockFunctionBody body = functionBody;
|
| - expect(body.keyword, isNotNull);
|
| - expect(body.keyword.lexeme, Parser.ASYNC);
|
| - expect(body.star, isNotNull);
|
| - expect(body.block, isNotNull);
|
| - expect(body.isAsynchronous, isTrue);
|
| - expect(body.isGenerator, isTrue);
|
| - expect(body.isSynchronous, isFalse);
|
| + expect(literal.constKeyword, token);
|
| + expect(literal.typeArguments, typeArguments);
|
| + expect(literal.leftBracket, isNotNull);
|
| + expect(literal.entries, hasLength(0));
|
| + expect(literal.rightBracket, isNotNull);
|
| }
|
|
|
| - void test_parseFunctionBody_block_syncGenerator() {
|
| - createParser('sync* {}');
|
| - FunctionBody functionBody = parser.parseFunctionBody(false, null, false);
|
| - expectNotNullIfNoErrors(functionBody);
|
| + void test_parseMapLiteral_multiple() {
|
| + createParser("{'a' : b, 'x' : y}");
|
| + MapLiteral literal = parser.parseMapLiteral(null, null);
|
| + expectNotNullIfNoErrors(literal);
|
| listener.assertNoErrors();
|
| - expect(functionBody, new isInstanceOf<BlockFunctionBody>());
|
| - BlockFunctionBody body = functionBody;
|
| - expect(body.keyword, isNotNull);
|
| - expect(body.keyword.lexeme, Parser.SYNC);
|
| - expect(body.star, isNotNull);
|
| - expect(body.block, isNotNull);
|
| - expect(body.isAsynchronous, isFalse);
|
| - expect(body.isGenerator, isTrue);
|
| - expect(body.isSynchronous, isTrue);
|
| + expect(literal.leftBracket, isNotNull);
|
| + expect(literal.entries, hasLength(2));
|
| + expect(literal.rightBracket, isNotNull);
|
| }
|
|
|
| - void test_parseFunctionBody_empty() {
|
| - createParser(';');
|
| - FunctionBody functionBody = parser.parseFunctionBody(true, null, false);
|
| - expectNotNullIfNoErrors(functionBody);
|
| + void test_parseMapLiteral_single() {
|
| + createParser("{'x' : y}");
|
| + MapLiteral literal = parser.parseMapLiteral(null, null);
|
| + expectNotNullIfNoErrors(literal);
|
| listener.assertNoErrors();
|
| - expect(functionBody, new isInstanceOf<EmptyFunctionBody>());
|
| - EmptyFunctionBody body = functionBody;
|
| - expect(body.semicolon, isNotNull);
|
| + expect(literal.leftBracket, isNotNull);
|
| + expect(literal.entries, hasLength(1));
|
| + expect(literal.rightBracket, isNotNull);
|
| }
|
|
|
| - void test_parseFunctionBody_expression() {
|
| - createParser('=> y;');
|
| - FunctionBody functionBody = parser.parseFunctionBody(false, null, false);
|
| - expectNotNullIfNoErrors(functionBody);
|
| + void test_parseMapLiteralEntry_complex() {
|
| + createParser('2 + 2 : y');
|
| + MapLiteralEntry entry = parser.parseMapLiteralEntry();
|
| + expectNotNullIfNoErrors(entry);
|
| listener.assertNoErrors();
|
| - expect(functionBody, new isInstanceOf<ExpressionFunctionBody>());
|
| - ExpressionFunctionBody body = functionBody;
|
| - expect(body.keyword, isNull);
|
| - expect(body.functionDefinition, isNotNull);
|
| - expect(body.expression, isNotNull);
|
| - expect(body.semicolon, isNotNull);
|
| - expect(body.isAsynchronous, isFalse);
|
| - expect(body.isGenerator, isFalse);
|
| - expect(body.isSynchronous, isTrue);
|
| + expect(entry.key, isNotNull);
|
| + expect(entry.separator, isNotNull);
|
| + expect(entry.value, isNotNull);
|
| }
|
|
|
| - void test_parseFunctionBody_expression_async() {
|
| - createParser('async => y;');
|
| - FunctionBody functionBody = parser.parseFunctionBody(false, null, false);
|
| - expectNotNullIfNoErrors(functionBody);
|
| + void test_parseMapLiteralEntry_int() {
|
| + createParser('0 : y');
|
| + MapLiteralEntry entry = parser.parseMapLiteralEntry();
|
| + expectNotNullIfNoErrors(entry);
|
| listener.assertNoErrors();
|
| - expect(functionBody, new isInstanceOf<ExpressionFunctionBody>());
|
| - ExpressionFunctionBody body = functionBody;
|
| - expect(body.keyword, isNotNull);
|
| - expect(body.keyword.lexeme, Parser.ASYNC);
|
| - expect(body.functionDefinition, isNotNull);
|
| - expect(body.expression, isNotNull);
|
| - expect(body.semicolon, isNotNull);
|
| - expect(body.isAsynchronous, isTrue);
|
| - expect(body.isGenerator, isFalse);
|
| - expect(body.isSynchronous, isFalse);
|
| + expect(entry.key, isNotNull);
|
| + expect(entry.separator, isNotNull);
|
| + expect(entry.value, isNotNull);
|
| }
|
|
|
| - void test_parseFunctionBody_nativeFunctionBody() {
|
| - createParser('native "str";');
|
| - FunctionBody functionBody = parser.parseFunctionBody(false, null, false);
|
| - expectNotNullIfNoErrors(functionBody);
|
| + void test_parseMapLiteralEntry_string() {
|
| + createParser("'x' : y");
|
| + MapLiteralEntry entry = parser.parseMapLiteralEntry();
|
| + expectNotNullIfNoErrors(entry);
|
| listener.assertNoErrors();
|
| - expect(functionBody, new isInstanceOf<NativeFunctionBody>());
|
| - NativeFunctionBody body = functionBody;
|
| - expect(body.nativeKeyword, isNotNull);
|
| - expect(body.stringLiteral, isNotNull);
|
| - expect(body.semicolon, isNotNull);
|
| + expect(entry.key, isNotNull);
|
| + expect(entry.separator, isNotNull);
|
| + expect(entry.value, isNotNull);
|
| }
|
|
|
| - void test_parseFunctionBody_skip_block() {
|
| - ParserTestCase.parseFunctionBodies = false;
|
| - createParser('{}');
|
| - FunctionBody functionBody = parser.parseFunctionBody(false, null, false);
|
| - expectNotNullIfNoErrors(functionBody);
|
| + void test_parseModifiers_abstract() {
|
| + createParser('abstract A');
|
| + Modifiers modifiers = parser.parseModifiers();
|
| + expectNotNullIfNoErrors(modifiers);
|
| listener.assertNoErrors();
|
| - expect(functionBody, new isInstanceOf<EmptyFunctionBody>());
|
| + expect(modifiers.abstractKeyword, isNotNull);
|
| }
|
|
|
| - void test_parseFunctionBody_skip_block_invalid() {
|
| - ParserTestCase.parseFunctionBodies = false;
|
| - createParser('{');
|
| - FunctionBody functionBody = parser.parseFunctionBody(false, null, false);
|
| - expectNotNullIfNoErrors(functionBody);
|
| - listener.assertErrorsWithCodes([ParserErrorCode.EXPECTED_TOKEN]);
|
| - expect(functionBody, new isInstanceOf<EmptyFunctionBody>());
|
| + void test_parseModifiers_const() {
|
| + createParser('const A');
|
| + Modifiers modifiers = parser.parseModifiers();
|
| + expectNotNullIfNoErrors(modifiers);
|
| + listener.assertNoErrors();
|
| + expect(modifiers.constKeyword, isNotNull);
|
| }
|
|
|
| - void test_parseFunctionBody_skip_blocks() {
|
| - ParserTestCase.parseFunctionBodies = false;
|
| - createParser('{ {} }');
|
| - FunctionBody functionBody = parser.parseFunctionBody(false, null, false);
|
| - expectNotNullIfNoErrors(functionBody);
|
| + void test_parseModifiers_covariant() {
|
| + createParser('covariant A');
|
| + Modifiers modifiers = parser.parseModifiers();
|
| + expectNotNullIfNoErrors(modifiers);
|
| listener.assertNoErrors();
|
| - expect(functionBody, new isInstanceOf<EmptyFunctionBody>());
|
| + expect(modifiers.covariantKeyword, isNotNull);
|
| }
|
|
|
| - void test_parseFunctionBody_skip_expression() {
|
| - ParserTestCase.parseFunctionBodies = false;
|
| - createParser('=> y;');
|
| - FunctionBody functionBody = parser.parseFunctionBody(false, null, false);
|
| - expectNotNullIfNoErrors(functionBody);
|
| + void test_parseModifiers_external() {
|
| + createParser('external A');
|
| + Modifiers modifiers = parser.parseModifiers();
|
| + expectNotNullIfNoErrors(modifiers);
|
| listener.assertNoErrors();
|
| - expect(functionBody, new isInstanceOf<EmptyFunctionBody>());
|
| + expect(modifiers.externalKeyword, isNotNull);
|
| }
|
|
|
| - void test_parseFunctionDeclaration_function() {
|
| - createParser('/// Doc\nT f() {}');
|
| - FunctionDeclaration declaration = parseFullCompilationUnitMember();
|
| - expectNotNullIfNoErrors(declaration);
|
| + void test_parseModifiers_factory() {
|
| + createParser('factory A');
|
| + Modifiers modifiers = parser.parseModifiers();
|
| + expectNotNullIfNoErrors(modifiers);
|
| listener.assertNoErrors();
|
| - _expectCommentText(declaration.documentationComment, '/// Doc');
|
| - expect((declaration.returnType as TypeName).name.name, 'T');
|
| - expect(declaration.name, isNotNull);
|
| - FunctionExpression expression = declaration.functionExpression;
|
| - expect(expression, isNotNull);
|
| - expect(expression.body, isNotNull);
|
| - expect(expression.typeParameters, isNull);
|
| - expect(expression.parameters, isNotNull);
|
| - expect(declaration.propertyKeyword, isNull);
|
| + expect(modifiers.factoryKeyword, isNotNull);
|
| }
|
|
|
| - void test_parseFunctionDeclaration_functionWithTypeParameters() {
|
| - createParser('/// Doc\nT f<E>() {}');
|
| - FunctionDeclaration declaration = parseFullCompilationUnitMember();
|
| - expectNotNullIfNoErrors(declaration);
|
| + void test_parseModifiers_final() {
|
| + createParser('final A');
|
| + Modifiers modifiers = parser.parseModifiers();
|
| + expectNotNullIfNoErrors(modifiers);
|
| listener.assertNoErrors();
|
| - _expectCommentText(declaration.documentationComment, '/// Doc');
|
| - expect((declaration.returnType as TypeName).name.name, 'T');
|
| - expect(declaration.name, isNotNull);
|
| - FunctionExpression expression = declaration.functionExpression;
|
| - expect(expression, isNotNull);
|
| - expect(expression.body, isNotNull);
|
| - expect(expression.typeParameters, isNotNull);
|
| - expect(expression.parameters, isNotNull);
|
| - expect(declaration.propertyKeyword, isNull);
|
| + expect(modifiers.finalKeyword, isNotNull);
|
| }
|
|
|
| - void test_parseFunctionDeclaration_functionWithTypeParameters_comment() {
|
| - enableGenericMethodComments = true;
|
| - createParser('/// Doc\nT f/*<E>*/() {}');
|
| - FunctionDeclaration declaration = parseFullCompilationUnitMember();
|
| - expectNotNullIfNoErrors(declaration);
|
| + void test_parseModifiers_static() {
|
| + createParser('static A');
|
| + Modifiers modifiers = parser.parseModifiers();
|
| + expectNotNullIfNoErrors(modifiers);
|
| listener.assertNoErrors();
|
| - _expectCommentText(declaration.documentationComment, '/// Doc');
|
| - expect((declaration.returnType as TypeName).name.name, 'T');
|
| - expect(declaration.name, isNotNull);
|
| - FunctionExpression expression = declaration.functionExpression;
|
| - expect(expression, isNotNull);
|
| - expect(expression.body, isNotNull);
|
| - expect(expression.typeParameters, isNotNull);
|
| - expect(expression.parameters, isNotNull);
|
| - expect(declaration.propertyKeyword, isNull);
|
| + expect(modifiers.staticKeyword, isNotNull);
|
| }
|
|
|
| - void test_parseFunctionDeclaration_getter() {
|
| - createParser('/// Doc\nT get p => 0;');
|
| - FunctionDeclaration declaration = parseFullCompilationUnitMember();
|
| - expectNotNullIfNoErrors(declaration);
|
| + void test_parseModifiers_var() {
|
| + createParser('var A');
|
| + Modifiers modifiers = parser.parseModifiers();
|
| + expectNotNullIfNoErrors(modifiers);
|
| listener.assertNoErrors();
|
| - _expectCommentText(declaration.documentationComment, '/// Doc');
|
| - expect((declaration.returnType as TypeName).name.name, 'T');
|
| - expect(declaration.name, isNotNull);
|
| - FunctionExpression expression = declaration.functionExpression;
|
| - expect(expression, isNotNull);
|
| - expect(expression.body, isNotNull);
|
| - expect(expression.typeParameters, isNull);
|
| - expect(expression.parameters, isNull);
|
| - expect(declaration.propertyKeyword, isNotNull);
|
| + expect(modifiers.varKeyword, isNotNull);
|
| }
|
|
|
| - void test_parseFunctionDeclaration_setter() {
|
| - createParser('/// Doc\nT set p(v) {}');
|
| - FunctionDeclaration declaration = parseFullCompilationUnitMember();
|
| - expectNotNullIfNoErrors(declaration);
|
| + void test_parseMultiplicativeExpression_normal() {
|
| + createParser('x * y');
|
| + Expression expression = parser.parseMultiplicativeExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - _expectCommentText(declaration.documentationComment, '/// Doc');
|
| - expect((declaration.returnType as TypeName).name.name, 'T');
|
| - expect(declaration.name, isNotNull);
|
| - FunctionExpression expression = declaration.functionExpression;
|
| - expect(expression, isNotNull);
|
| - expect(expression.body, isNotNull);
|
| - expect(expression.typeParameters, isNull);
|
| - expect(expression.parameters, isNotNull);
|
| - expect(declaration.propertyKeyword, isNotNull);
|
| + expect(expression, new isInstanceOf<BinaryExpression>());
|
| + BinaryExpression binaryExpression = expression;
|
| + expect(binaryExpression.leftOperand, isNotNull);
|
| + expect(binaryExpression.operator, isNotNull);
|
| + expect(binaryExpression.operator.type, TokenType.STAR);
|
| + expect(binaryExpression.rightOperand, isNotNull);
|
| }
|
|
|
| - void test_parseFunctionDeclarationStatement() {
|
| - createParser('void f(int p) => p * 2;');
|
| - FunctionDeclarationStatement statement =
|
| - parser.parseFunctionDeclarationStatement();
|
| - expectNotNullIfNoErrors(statement);
|
| + void test_parseMultiplicativeExpression_super() {
|
| + createParser('super * y');
|
| + Expression expression = parser.parseMultiplicativeExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(statement.functionDeclaration, isNotNull);
|
| + expect(expression, new isInstanceOf<BinaryExpression>());
|
| + BinaryExpression binaryExpression = expression;
|
| + expect(binaryExpression.leftOperand, new isInstanceOf<SuperExpression>());
|
| + expect(binaryExpression.operator, isNotNull);
|
| + expect(binaryExpression.operator.type, TokenType.STAR);
|
| + expect(binaryExpression.rightOperand, isNotNull);
|
| }
|
|
|
| - void test_parseFunctionDeclarationStatement_typeParameterComments() {
|
| - enableGenericMethodComments = true;
|
| - createParser('/*=E*/ f/*<E>*/(/*=E*/ p) => p * 2;');
|
| - FunctionDeclarationStatement statement =
|
| - parser.parseFunctionDeclarationStatement();
|
| - expectNotNullIfNoErrors(statement);
|
| + void test_parseNewExpression() {
|
| + createParser('new A()');
|
| + InstanceCreationExpression expression = parser.parseNewExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - FunctionDeclaration f = statement.functionDeclaration;
|
| - expect(f, isNotNull);
|
| - expect(f.functionExpression.typeParameters, isNotNull);
|
| - expect(f.returnType, isNotNull);
|
| - SimpleFormalParameter p = f.functionExpression.parameters.parameters[0];
|
| - expect(p.type, isNotNull);
|
| + expect(expression.keyword, isNotNull);
|
| + ConstructorName name = expression.constructorName;
|
| + expect(name, isNotNull);
|
| + expect(name.type, isNotNull);
|
| + expect(name.period, isNull);
|
| + expect(name.name, isNull);
|
| + expect(expression.argumentList, isNotNull);
|
| }
|
|
|
| - void test_parseFunctionDeclarationStatement_typeParameters() {
|
| - createParser('E f<E>(E p) => p * 2;');
|
| - FunctionDeclarationStatement statement =
|
| - parser.parseFunctionDeclarationStatement();
|
| + void test_parseNonLabeledStatement_const_list_empty() {
|
| + createParser('const [];');
|
| + Statement statement = parser.parseNonLabeledStatement();
|
| expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(statement.functionDeclaration, isNotNull);
|
| - expect(statement.functionDeclaration.functionExpression.typeParameters,
|
| - isNotNull);
|
| + expect(statement, new isInstanceOf<ExpressionStatement>());
|
| + ExpressionStatement expressionStatement = statement;
|
| + expect(expressionStatement.expression, isNotNull);
|
| }
|
|
|
| - void test_parseFunctionDeclarationStatement_typeParameters_noReturnType() {
|
| - createParser('f<E>(E p) => p * 2;');
|
| - FunctionDeclarationStatement statement =
|
| - parser.parseFunctionDeclarationStatement();
|
| + void test_parseNonLabeledStatement_const_list_nonEmpty() {
|
| + createParser('const [1, 2];');
|
| + Statement statement = parser.parseNonLabeledStatement();
|
| expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(statement.functionDeclaration, isNotNull);
|
| - expect(statement.functionDeclaration.functionExpression.typeParameters,
|
| - isNotNull);
|
| + expect(statement, new isInstanceOf<ExpressionStatement>());
|
| + ExpressionStatement expressionStatement = statement;
|
| + expect(expressionStatement.expression, isNotNull);
|
| }
|
|
|
| - void test_parseFunctionExpression_body_inExpression() {
|
| - createParser('(int i) => i++');
|
| - FunctionExpression expression = parser.parseFunctionExpression();
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseNonLabeledStatement_const_map_empty() {
|
| + createParser('const {};');
|
| + Statement statement = parser.parseNonLabeledStatement();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(expression.body, isNotNull);
|
| - expect(expression.typeParameters, isNull);
|
| - expect(expression.parameters, isNotNull);
|
| - expect((expression.body as ExpressionFunctionBody).semicolon, isNull);
|
| + expect(statement, new isInstanceOf<ExpressionStatement>());
|
| + ExpressionStatement expressionStatement = statement;
|
| + expect(expressionStatement.expression, isNotNull);
|
| }
|
|
|
| - void test_parseFunctionExpression_typeParameterComments() {
|
| - enableGenericMethodComments = true;
|
| - createParser('/*<E>*/(/*=E*/ i) => i++');
|
| - FunctionExpression expression = parser.parseFunctionExpression();
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseNonLabeledStatement_const_map_nonEmpty() {
|
| + // TODO(brianwilkerson) Implement more tests for this method.
|
| + createParser("const {'a' : 1};");
|
| + Statement statement = parser.parseNonLabeledStatement();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(expression.body, isNotNull);
|
| - expect(expression.typeParameters, isNotNull);
|
| - expect(expression.parameters, isNotNull);
|
| - expect((expression.body as ExpressionFunctionBody).semicolon, isNull);
|
| - SimpleFormalParameter p = expression.parameters.parameters[0];
|
| - expect(p.type, isNotNull);
|
| + expect(statement, new isInstanceOf<ExpressionStatement>());
|
| + ExpressionStatement expressionStatement = statement;
|
| + expect(expressionStatement.expression, isNotNull);
|
| }
|
|
|
| - void test_parseFunctionExpression_typeParameters() {
|
| - createParser('<E>(E i) => i++');
|
| - FunctionExpression expression = parser.parseFunctionExpression();
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseNonLabeledStatement_const_object() {
|
| + createParser('const A();');
|
| + Statement statement = parser.parseNonLabeledStatement();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(expression.body, isNotNull);
|
| - expect(expression.typeParameters, isNotNull);
|
| - expect(expression.parameters, isNotNull);
|
| - expect((expression.body as ExpressionFunctionBody).semicolon, isNull);
|
| + expect(statement, new isInstanceOf<ExpressionStatement>());
|
| + ExpressionStatement expressionStatement = statement;
|
| + expect(expressionStatement.expression, isNotNull);
|
| }
|
|
|
| - @failingTest
|
| - void test_parseGenericTypeAlias_noTypeParameters() {
|
| - createParser('F = int Function(int);');
|
| - GenericTypeAlias alias = parseFullCompilationUnitMember();
|
| - expectNotNullIfNoErrors(alias);
|
| + void test_parseNonLabeledStatement_const_object_named_typeParameters() {
|
| + createParser('const A<B>.c();');
|
| + Statement statement = parser.parseNonLabeledStatement();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(alias.name, isNotNull);
|
| - expect(alias.name.name, 'F');
|
| - expect(alias.typeParameters, isNull);
|
| - expect(alias.equals, isNotNull);
|
| - expect(alias.functionType, isNotNull);
|
| - expect(alias.semicolon, isNotNull);
|
| + expect(statement, new isInstanceOf<ExpressionStatement>());
|
| + ExpressionStatement expressionStatement = statement;
|
| + expect(expressionStatement.expression, isNotNull);
|
| }
|
|
|
| - @failingTest
|
| - void test_parseGenericTypeAlias_typeParameters() {
|
| - createParser('F<T> = T Function(T);');
|
| - GenericTypeAlias alias = parseFullCompilationUnitMember();
|
| - expectNotNullIfNoErrors(alias);
|
| + void test_parseNonLabeledStatement_constructorInvocation() {
|
| + createParser('new C().m();');
|
| + Statement statement = parser.parseNonLabeledStatement();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(alias.name, isNotNull);
|
| - expect(alias.name.name, 'F');
|
| - expect(alias.typeParameters, isNotNull);
|
| - expect(alias.equals, isNotNull);
|
| - expect(alias.functionType, isNotNull);
|
| - expect(alias.semicolon, isNotNull);
|
| + expect(statement, new isInstanceOf<ExpressionStatement>());
|
| + ExpressionStatement expressionStatement = statement;
|
| + expect(expressionStatement.expression, isNotNull);
|
| }
|
|
|
| - void test_parseGetter_nonStatic() {
|
| - createParser('/// Doc\nT get a;');
|
| - MethodDeclaration method = parser.parseClassMember('C');
|
| - expectNotNullIfNoErrors(method);
|
| + void test_parseNonLabeledStatement_false() {
|
| + createParser('false;');
|
| + Statement statement = parser.parseNonLabeledStatement();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(method.body, isNotNull);
|
| - _expectCommentText(method.documentationComment, '/// Doc');
|
| - expect(method.externalKeyword, isNull);
|
| - expect(method.modifierKeyword, isNull);
|
| - expect(method.name, isNotNull);
|
| - expect(method.operatorKeyword, isNull);
|
| - expect(method.parameters, isNull);
|
| - expect(method.propertyKeyword, isNotNull);
|
| - expect((method.returnType as TypeName).name.name, 'T');
|
| + expect(statement, new isInstanceOf<ExpressionStatement>());
|
| + ExpressionStatement expressionStatement = statement;
|
| + expect(expressionStatement.expression, isNotNull);
|
| }
|
|
|
| - void test_parseGetter_static() {
|
| - createParser('/// Doc\nstatic T get a => 42;');
|
| - MethodDeclaration method = parser.parseClassMember('C');
|
| - expectNotNullIfNoErrors(method);
|
| + void test_parseNonLabeledStatement_functionDeclaration() {
|
| + createParser('f() {};');
|
| + Statement statement = parser.parseNonLabeledStatement();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(method.body, isNotNull);
|
| - _expectCommentText(method.documentationComment, '/// Doc');
|
| - expect(method.externalKeyword, isNull);
|
| - expect(method.modifierKeyword.lexeme, 'static');
|
| - expect(method.name, isNotNull);
|
| - expect(method.operatorKeyword, isNull);
|
| - expect(method.typeParameters, isNull);
|
| - expect(method.parameters, isNull);
|
| - expect(method.propertyKeyword, isNotNull);
|
| - expect((method.returnType as TypeName).name.name, 'T');
|
| }
|
|
|
| - void test_parseIdentifierList_multiple() {
|
| - createParser('a, b, c');
|
| - List<SimpleIdentifier> list = parser.parseIdentifierList();
|
| - expectNotNullIfNoErrors(list);
|
| + void test_parseNonLabeledStatement_functionDeclaration_arguments() {
|
| + createParser('f(void g()) {};');
|
| + Statement statement = parser.parseNonLabeledStatement();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(list, hasLength(3));
|
| }
|
|
|
| - void test_parseIdentifierList_single() {
|
| - createParser('a');
|
| - List<SimpleIdentifier> list = parser.parseIdentifierList();
|
| - expectNotNullIfNoErrors(list);
|
| + void test_parseNonLabeledStatement_functionExpressionIndex() {
|
| + createParser('() {}[0] = null;');
|
| + Statement statement = parser.parseNonLabeledStatement();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(list, hasLength(1));
|
| }
|
|
|
| - void test_parseIfStatement_else_block() {
|
| - createParser('if (x) {} else {}');
|
| - IfStatement statement = parser.parseIfStatement();
|
| + void test_parseNonLabeledStatement_functionInvocation() {
|
| + createParser('f();');
|
| + Statement statement = parser.parseNonLabeledStatement();
|
| expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(statement.ifKeyword, isNotNull);
|
| - expect(statement.leftParenthesis, isNotNull);
|
| - expect(statement.condition, isNotNull);
|
| - expect(statement.rightParenthesis, isNotNull);
|
| - expect(statement.thenStatement, isNotNull);
|
| - expect(statement.elseKeyword, isNotNull);
|
| - expect(statement.elseStatement, isNotNull);
|
| + expect(statement, new isInstanceOf<ExpressionStatement>());
|
| + ExpressionStatement expressionStatement = statement;
|
| + expect(expressionStatement.expression, isNotNull);
|
| }
|
|
|
| - void test_parseIfStatement_else_statement() {
|
| - createParser('if (x) f(x); else f(y);');
|
| - IfStatement statement = parser.parseIfStatement();
|
| + void test_parseNonLabeledStatement_invokeFunctionExpression() {
|
| + createParser('(a) {return a + a;} (3);');
|
| + Statement statement = parser.parseNonLabeledStatement();
|
| expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(statement.ifKeyword, isNotNull);
|
| - expect(statement.leftParenthesis, isNotNull);
|
| - expect(statement.condition, isNotNull);
|
| - expect(statement.rightParenthesis, isNotNull);
|
| - expect(statement.thenStatement, isNotNull);
|
| - expect(statement.elseKeyword, isNotNull);
|
| - expect(statement.elseStatement, isNotNull);
|
| + expect(statement, new isInstanceOf<ExpressionStatement>());
|
| + ExpressionStatement expressionStatement = statement;
|
| + EngineTestCase.assertInstanceOf(
|
| + (obj) => obj is FunctionExpressionInvocation,
|
| + FunctionExpressionInvocation,
|
| + expressionStatement.expression);
|
| + FunctionExpressionInvocation invocation =
|
| + expressionStatement.expression as FunctionExpressionInvocation;
|
| + EngineTestCase.assertInstanceOf((obj) => obj is FunctionExpression,
|
| + FunctionExpression, invocation.function);
|
| + FunctionExpression expression = invocation.function as FunctionExpression;
|
| + expect(expression.parameters, isNotNull);
|
| + expect(expression.body, isNotNull);
|
| + expect(invocation.typeArguments, isNull);
|
| + ArgumentList list = invocation.argumentList;
|
| + expect(list, isNotNull);
|
| + expect(list.arguments, hasLength(1));
|
| }
|
|
|
| - void test_parseIfStatement_noElse_block() {
|
| - createParser('if (x) {}');
|
| - IfStatement statement = parser.parseIfStatement();
|
| + void test_parseNonLabeledStatement_null() {
|
| + createParser('null;');
|
| + Statement statement = parser.parseNonLabeledStatement();
|
| expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(statement.ifKeyword, isNotNull);
|
| - expect(statement.leftParenthesis, isNotNull);
|
| - expect(statement.condition, isNotNull);
|
| - expect(statement.rightParenthesis, isNotNull);
|
| - expect(statement.thenStatement, isNotNull);
|
| - expect(statement.elseKeyword, isNull);
|
| - expect(statement.elseStatement, isNull);
|
| + expect(statement, new isInstanceOf<ExpressionStatement>());
|
| + ExpressionStatement expressionStatement = statement;
|
| + expect(expressionStatement.expression, isNotNull);
|
| }
|
|
|
| - void test_parseIfStatement_noElse_statement() {
|
| - createParser('if (x) f(x);');
|
| - IfStatement statement = parser.parseIfStatement();
|
| + void test_parseNonLabeledStatement_startingWithBuiltInIdentifier() {
|
| + createParser('library.getName();');
|
| + Statement statement = parser.parseNonLabeledStatement();
|
| expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(statement.ifKeyword, isNotNull);
|
| - expect(statement.leftParenthesis, isNotNull);
|
| - expect(statement.condition, isNotNull);
|
| - expect(statement.rightParenthesis, isNotNull);
|
| - expect(statement.thenStatement, isNotNull);
|
| - expect(statement.elseKeyword, isNull);
|
| - expect(statement.elseStatement, isNull);
|
| + expect(statement, new isInstanceOf<ExpressionStatement>());
|
| + ExpressionStatement expressionStatement = statement;
|
| + expect(expressionStatement.expression, isNotNull);
|
| }
|
|
|
| - void test_parseImplementsClause_multiple() {
|
| - createParser('implements A, B, C');
|
| - ImplementsClause clause = parser.parseImplementsClause();
|
| - expectNotNullIfNoErrors(clause);
|
| + void test_parseNonLabeledStatement_true() {
|
| + createParser('true;');
|
| + Statement statement = parser.parseNonLabeledStatement();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(clause.interfaces, hasLength(3));
|
| - expect(clause.implementsKeyword, isNotNull);
|
| + expect(statement, new isInstanceOf<ExpressionStatement>());
|
| + ExpressionStatement expressionStatement = statement;
|
| + expect(expressionStatement.expression, isNotNull);
|
| }
|
|
|
| - void test_parseImplementsClause_single() {
|
| - createParser('implements A');
|
| - ImplementsClause clause = parser.parseImplementsClause();
|
| - expectNotNullIfNoErrors(clause);
|
| + void test_parseNonLabeledStatement_typeCast() {
|
| + createParser('double.NAN as num;');
|
| + Statement statement = parser.parseNonLabeledStatement();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(clause.interfaces, hasLength(1));
|
| - expect(clause.implementsKeyword, isNotNull);
|
| + expect(statement, new isInstanceOf<ExpressionStatement>());
|
| + ExpressionStatement expressionStatement = statement;
|
| + expect(expressionStatement.expression, isNotNull);
|
| }
|
|
|
| - void test_parseImportDirective_configuration_multiple() {
|
| - createParser("import 'lib/lib.dart' if (a) 'b.dart' if (c) 'd.dart';");
|
| - ImportDirective directive = parseFullDirective();
|
| - expectNotNullIfNoErrors(directive);
|
| + void test_parseNormalFormalParameter_field_const_noType() {
|
| + createParser('const this.a)');
|
| + NormalFormalParameter parameter = parser.parseNormalFormalParameter();
|
| + expectNotNullIfNoErrors(parameter);
|
| listener.assertNoErrors();
|
| - expect(directive.keyword, isNotNull);
|
| - expect(directive.uri, isNotNull);
|
| - expect(directive.configurations, hasLength(2));
|
| - _expectDottedName(directive.configurations[0].name, ['a']);
|
| - _expectDottedName(directive.configurations[1].name, ['c']);
|
| - expect(directive.deferredKeyword, isNull);
|
| - expect(directive.asKeyword, isNull);
|
| - expect(directive.prefix, isNull);
|
| - expect(directive.combinators, hasLength(0));
|
| - expect(directive.semicolon, isNotNull);
|
| + expect(parameter, new isInstanceOf<FieldFormalParameter>());
|
| + FieldFormalParameter fieldParameter = parameter;
|
| + expect(fieldParameter.keyword, isNotNull);
|
| + expect(fieldParameter.type, isNull);
|
| + expect(fieldParameter.identifier, isNotNull);
|
| + expect(fieldParameter.parameters, isNull);
|
| }
|
|
|
| - void test_parseImportDirective_configuration_single() {
|
| - createParser("import 'lib/lib.dart' if (a.b == 'c.dart') '';");
|
| - ImportDirective directive = parseFullDirective();
|
| - expectNotNullIfNoErrors(directive);
|
| + void test_parseNormalFormalParameter_field_const_type() {
|
| + createParser('const A this.a)');
|
| + NormalFormalParameter parameter = parser.parseNormalFormalParameter();
|
| + expectNotNullIfNoErrors(parameter);
|
| listener.assertNoErrors();
|
| - expect(directive.keyword, isNotNull);
|
| - expect(directive.uri, isNotNull);
|
| - expect(directive.configurations, hasLength(1));
|
| - _expectDottedName(directive.configurations[0].name, ['a', 'b']);
|
| - expect(directive.deferredKeyword, isNull);
|
| - expect(directive.asKeyword, isNull);
|
| - expect(directive.prefix, isNull);
|
| - expect(directive.combinators, hasLength(0));
|
| - expect(directive.semicolon, isNotNull);
|
| + expect(parameter, new isInstanceOf<FieldFormalParameter>());
|
| + FieldFormalParameter fieldParameter = parameter;
|
| + expect(fieldParameter.keyword, isNotNull);
|
| + expect(fieldParameter.type, isNotNull);
|
| + expect(fieldParameter.identifier, isNotNull);
|
| + expect(fieldParameter.parameters, isNull);
|
| }
|
|
|
| - void test_parseImportDirective_deferred() {
|
| - createParser("import 'lib/lib.dart' deferred as a;");
|
| - ImportDirective directive = parseFullDirective();
|
| - expectNotNullIfNoErrors(directive);
|
| + void test_parseNormalFormalParameter_field_final_noType() {
|
| + createParser('final this.a)');
|
| + NormalFormalParameter parameter = parser.parseNormalFormalParameter();
|
| + expectNotNullIfNoErrors(parameter);
|
| listener.assertNoErrors();
|
| - expect(directive.keyword, isNotNull);
|
| - expect(directive.uri, isNotNull);
|
| - expect(directive.deferredKeyword, isNotNull);
|
| - expect(directive.asKeyword, isNotNull);
|
| - expect(directive.prefix, isNotNull);
|
| - expect(directive.combinators, hasLength(0));
|
| - expect(directive.semicolon, isNotNull);
|
| + expect(parameter, new isInstanceOf<FieldFormalParameter>());
|
| + FieldFormalParameter fieldParameter = parameter;
|
| + expect(fieldParameter.keyword, isNotNull);
|
| + expect(fieldParameter.type, isNull);
|
| + expect(fieldParameter.identifier, isNotNull);
|
| + expect(fieldParameter.parameters, isNull);
|
| }
|
|
|
| - void test_parseImportDirective_hide() {
|
| - createParser("import 'lib/lib.dart' hide A, B;");
|
| - ImportDirective directive = parseFullDirective();
|
| - expectNotNullIfNoErrors(directive);
|
| + void test_parseNormalFormalParameter_field_final_type() {
|
| + createParser('final A this.a)');
|
| + NormalFormalParameter parameter = parser.parseNormalFormalParameter();
|
| + expectNotNullIfNoErrors(parameter);
|
| listener.assertNoErrors();
|
| - expect(directive.keyword, isNotNull);
|
| - expect(directive.uri, isNotNull);
|
| - expect(directive.deferredKeyword, isNull);
|
| - expect(directive.asKeyword, isNull);
|
| - expect(directive.prefix, isNull);
|
| - expect(directive.combinators, hasLength(1));
|
| - expect(directive.semicolon, isNotNull);
|
| + expect(parameter, new isInstanceOf<FieldFormalParameter>());
|
| + FieldFormalParameter fieldParameter = parameter;
|
| + expect(fieldParameter.keyword, isNotNull);
|
| + expect(fieldParameter.type, isNotNull);
|
| + expect(fieldParameter.identifier, isNotNull);
|
| + expect(fieldParameter.parameters, isNull);
|
| }
|
|
|
| - void test_parseImportDirective_noCombinator() {
|
| - createParser("import 'lib/lib.dart';");
|
| - ImportDirective directive = parseFullDirective();
|
| - expectNotNullIfNoErrors(directive);
|
| + void test_parseNormalFormalParameter_field_function_nested() {
|
| + createParser('this.a(B b))');
|
| + NormalFormalParameter parameter = parser.parseNormalFormalParameter();
|
| + expectNotNullIfNoErrors(parameter);
|
| listener.assertNoErrors();
|
| - expect(directive.keyword, isNotNull);
|
| - expect(directive.uri, isNotNull);
|
| - expect(directive.deferredKeyword, isNull);
|
| - expect(directive.asKeyword, isNull);
|
| - expect(directive.prefix, isNull);
|
| - expect(directive.combinators, hasLength(0));
|
| - expect(directive.semicolon, isNotNull);
|
| + expect(parameter, new isInstanceOf<FieldFormalParameter>());
|
| + FieldFormalParameter fieldParameter = parameter;
|
| + expect(fieldParameter.keyword, isNull);
|
| + expect(fieldParameter.type, isNull);
|
| + expect(fieldParameter.identifier, isNotNull);
|
| + FormalParameterList parameterList = fieldParameter.parameters;
|
| + expect(parameterList, isNotNull);
|
| + expect(parameterList.parameters, hasLength(1));
|
| }
|
|
|
| - void test_parseImportDirective_prefix() {
|
| - createParser("import 'lib/lib.dart' as a;");
|
| - ImportDirective directive = parseFullDirective();
|
| - expectNotNullIfNoErrors(directive);
|
| + void test_parseNormalFormalParameter_field_function_noNested() {
|
| + createParser('this.a())');
|
| + NormalFormalParameter parameter = parser.parseNormalFormalParameter();
|
| + expectNotNullIfNoErrors(parameter);
|
| listener.assertNoErrors();
|
| - expect(directive.keyword, isNotNull);
|
| - expect(directive.uri, isNotNull);
|
| - expect(directive.deferredKeyword, isNull);
|
| - expect(directive.asKeyword, isNotNull);
|
| - expect(directive.prefix, isNotNull);
|
| - expect(directive.combinators, hasLength(0));
|
| - expect(directive.semicolon, isNotNull);
|
| + expect(parameter, new isInstanceOf<FieldFormalParameter>());
|
| + FieldFormalParameter fieldParameter = parameter;
|
| + expect(fieldParameter.keyword, isNull);
|
| + expect(fieldParameter.type, isNull);
|
| + expect(fieldParameter.identifier, isNotNull);
|
| + FormalParameterList parameterList = fieldParameter.parameters;
|
| + expect(parameterList, isNotNull);
|
| + expect(parameterList.parameters, hasLength(0));
|
| }
|
|
|
| - void test_parseImportDirective_prefix_hide_show() {
|
| - createParser("import 'lib/lib.dart' as a hide A show B;");
|
| - ImportDirective directive = parseFullDirective();
|
| - expectNotNullIfNoErrors(directive);
|
| + void test_parseNormalFormalParameter_field_noType() {
|
| + createParser('this.a)');
|
| + NormalFormalParameter parameter = parser.parseNormalFormalParameter();
|
| + expectNotNullIfNoErrors(parameter);
|
| listener.assertNoErrors();
|
| - expect(directive.keyword, isNotNull);
|
| - expect(directive.uri, isNotNull);
|
| - expect(directive.deferredKeyword, isNull);
|
| - expect(directive.asKeyword, isNotNull);
|
| - expect(directive.prefix, isNotNull);
|
| - expect(directive.combinators, hasLength(2));
|
| - expect(directive.semicolon, isNotNull);
|
| + expect(parameter, new isInstanceOf<FieldFormalParameter>());
|
| + FieldFormalParameter fieldParameter = parameter;
|
| + expect(fieldParameter.keyword, isNull);
|
| + expect(fieldParameter.type, isNull);
|
| + expect(fieldParameter.identifier, isNotNull);
|
| + expect(fieldParameter.parameters, isNull);
|
| }
|
|
|
| - void test_parseImportDirective_prefix_show_hide() {
|
| - createParser("import 'lib/lib.dart' as a show B hide A;");
|
| - ImportDirective directive = parseFullDirective();
|
| - expectNotNullIfNoErrors(directive);
|
| + void test_parseNormalFormalParameter_field_type() {
|
| + createParser('A this.a)');
|
| + NormalFormalParameter parameter = parser.parseNormalFormalParameter();
|
| + expectNotNullIfNoErrors(parameter);
|
| listener.assertNoErrors();
|
| - expect(directive.keyword, isNotNull);
|
| - expect(directive.uri, isNotNull);
|
| - expect(directive.deferredKeyword, isNull);
|
| - expect(directive.asKeyword, isNotNull);
|
| - expect(directive.prefix, isNotNull);
|
| - expect(directive.combinators, hasLength(2));
|
| - expect(directive.semicolon, isNotNull);
|
| + expect(parameter, new isInstanceOf<FieldFormalParameter>());
|
| + FieldFormalParameter fieldParameter = parameter;
|
| + expect(fieldParameter.keyword, isNull);
|
| + expect(fieldParameter.type, isNotNull);
|
| + expect(fieldParameter.identifier, isNotNull);
|
| + expect(fieldParameter.parameters, isNull);
|
| }
|
|
|
| - void test_parseImportDirective_show() {
|
| - createParser("import 'lib/lib.dart' show A, B;");
|
| - ImportDirective directive = parseFullDirective();
|
| - expectNotNullIfNoErrors(directive);
|
| + void test_parseNormalFormalParameter_field_var() {
|
| + createParser('var this.a)');
|
| + NormalFormalParameter parameter = parser.parseNormalFormalParameter();
|
| + expectNotNullIfNoErrors(parameter);
|
| listener.assertNoErrors();
|
| - expect(directive.keyword, isNotNull);
|
| - expect(directive.uri, isNotNull);
|
| - expect(directive.deferredKeyword, isNull);
|
| - expect(directive.asKeyword, isNull);
|
| - expect(directive.prefix, isNull);
|
| - expect(directive.combinators, hasLength(1));
|
| - expect(directive.semicolon, isNotNull);
|
| + expect(parameter, new isInstanceOf<FieldFormalParameter>());
|
| + FieldFormalParameter fieldParameter = parameter;
|
| + expect(fieldParameter.keyword, isNotNull);
|
| + expect(fieldParameter.type, isNull);
|
| + expect(fieldParameter.identifier, isNotNull);
|
| + expect(fieldParameter.parameters, isNull);
|
| }
|
|
|
| - void test_parseInitializedIdentifierList_type() {
|
| - createParser("/// Doc\nstatic T a = 1, b, c = 3;");
|
| - FieldDeclaration declaration = parser.parseClassMember('C');
|
| - expectNotNullIfNoErrors(declaration);
|
| + void test_parseNormalFormalParameter_function_noType() {
|
| + createParser('a())');
|
| + NormalFormalParameter parameter = parser.parseNormalFormalParameter();
|
| + expectNotNullIfNoErrors(parameter);
|
| listener.assertNoErrors();
|
| - _expectCommentText(declaration.documentationComment, '/// Doc');
|
| - VariableDeclarationList fields = declaration.fields;
|
| - expect(fields, isNotNull);
|
| - expect(fields.keyword, isNull);
|
| - expect((fields.type as TypeName).name.name, 'T');
|
| - expect(fields.variables, hasLength(3));
|
| - expect(declaration.staticKeyword.lexeme, 'static');
|
| - expect(declaration.semicolon, isNotNull);
|
| + expect(parameter, new isInstanceOf<FunctionTypedFormalParameter>());
|
| + FunctionTypedFormalParameter functionParameter = parameter;
|
| + expect(functionParameter.returnType, isNull);
|
| + expect(functionParameter.identifier, isNotNull);
|
| + expect(functionParameter.typeParameters, isNull);
|
| + expect(functionParameter.parameters, isNotNull);
|
| }
|
|
|
| - void test_parseInitializedIdentifierList_var() {
|
| - createParser('/// Doc\nstatic var a = 1, b, c = 3;');
|
| - FieldDeclaration declaration = parser.parseClassMember('C');
|
| - expectNotNullIfNoErrors(declaration);
|
| + void test_parseNormalFormalParameter_function_noType_nullable() {
|
| + enableNnbd = true;
|
| + createParser('a()?)');
|
| + NormalFormalParameter parameter = parser.parseNormalFormalParameter();
|
| + expectNotNullIfNoErrors(parameter);
|
| listener.assertNoErrors();
|
| - _expectCommentText(declaration.documentationComment, '/// Doc');
|
| - VariableDeclarationList fields = declaration.fields;
|
| - expect(fields, isNotNull);
|
| - expect(fields.keyword.lexeme, 'var');
|
| - expect(fields.type, isNull);
|
| - expect(fields.variables, hasLength(3));
|
| - expect(declaration.staticKeyword.lexeme, 'static');
|
| - expect(declaration.semicolon, isNotNull);
|
| + expect(parameter, new isInstanceOf<FunctionTypedFormalParameter>());
|
| + FunctionTypedFormalParameter functionParameter = parameter;
|
| + expect(functionParameter.returnType, isNull);
|
| + expect(functionParameter.identifier, isNotNull);
|
| + expect(functionParameter.typeParameters, isNull);
|
| + expect(functionParameter.parameters, isNotNull);
|
| + expect(functionParameter.question, isNotNull);
|
| }
|
|
|
| - void test_parseInstanceCreationExpression_qualifiedType() {
|
| - Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
|
| - createParser('A.B()');
|
| - InstanceCreationExpression expression =
|
| - parser.parseInstanceCreationExpression(token);
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseNormalFormalParameter_function_noType_typeParameterComments() {
|
| + enableGenericMethodComments = true;
|
| + createParser('a/*<E>*/())');
|
| + NormalFormalParameter parameter = parser.parseNormalFormalParameter();
|
| + expectNotNullIfNoErrors(parameter);
|
| listener.assertNoErrors();
|
| - expect(expression.keyword, token);
|
| - ConstructorName name = expression.constructorName;
|
| - expect(name, isNotNull);
|
| - TypeName type = name.type;
|
| - expect(type, isNotNull);
|
| - expect(type.typeArguments, isNull);
|
| - expect(name.period, isNull);
|
| - expect(name.name, isNull);
|
| - expect(expression.argumentList, isNotNull);
|
| + expect(parameter, new isInstanceOf<FunctionTypedFormalParameter>());
|
| + FunctionTypedFormalParameter functionParameter = parameter;
|
| + expect(functionParameter.returnType, isNull);
|
| + expect(functionParameter.identifier, isNotNull);
|
| + expect(functionParameter.typeParameters, isNotNull);
|
| + expect(functionParameter.parameters, isNotNull);
|
| }
|
|
|
| - void test_parseInstanceCreationExpression_qualifiedType_named() {
|
| - Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
|
| - createParser('A.B.c()');
|
| - InstanceCreationExpression expression =
|
| - parser.parseInstanceCreationExpression(token);
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseNormalFormalParameter_function_noType_typeParameters() {
|
| + createParser('a<E>())');
|
| + NormalFormalParameter parameter = parser.parseNormalFormalParameter();
|
| + expectNotNullIfNoErrors(parameter);
|
| listener.assertNoErrors();
|
| - expect(expression.keyword, token);
|
| - ConstructorName name = expression.constructorName;
|
| - expect(name, isNotNull);
|
| - TypeName type = name.type;
|
| - expect(type, isNotNull);
|
| - expect(type.typeArguments, isNull);
|
| - expect(name.period, isNotNull);
|
| - expect(name.name, isNotNull);
|
| - expect(expression.argumentList, isNotNull);
|
| + expect(parameter, new isInstanceOf<FunctionTypedFormalParameter>());
|
| + FunctionTypedFormalParameter functionParameter = parameter;
|
| + expect(functionParameter.returnType, isNull);
|
| + expect(functionParameter.identifier, isNotNull);
|
| + expect(functionParameter.typeParameters, isNotNull);
|
| + expect(functionParameter.parameters, isNotNull);
|
| + expect(functionParameter.question, isNull);
|
| + expect(functionParameter.question, isNull);
|
| }
|
|
|
| void
|
| - test_parseInstanceCreationExpression_qualifiedType_named_typeParameterComment() {
|
| - enableGenericMethodComments = true;
|
| - Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
|
| - createParser('A.B/*<E>*/.c()');
|
| - InstanceCreationExpression expression =
|
| - parser.parseInstanceCreationExpression(token);
|
| - expectNotNullIfNoErrors(expression);
|
| + test_parseNormalFormalParameter_function_noType_typeParameters_nullable() {
|
| + enableNnbd = true;
|
| + createParser('a<E>()?)');
|
| + NormalFormalParameter parameter = parser.parseNormalFormalParameter();
|
| + expectNotNullIfNoErrors(parameter);
|
| listener.assertNoErrors();
|
| - expect(expression.keyword, token);
|
| - ConstructorName name = expression.constructorName;
|
| - expect(name, isNotNull);
|
| - TypeName type = name.type;
|
| - expect(type, isNotNull);
|
| - expect(type.typeArguments.arguments, hasLength(1));
|
| - expect(name.period, isNotNull);
|
| - expect(name.name, isNotNull);
|
| - expect(expression.argumentList, isNotNull);
|
| + expect(parameter, new isInstanceOf<FunctionTypedFormalParameter>());
|
| + FunctionTypedFormalParameter functionParameter = parameter;
|
| + expect(functionParameter.returnType, isNull);
|
| + expect(functionParameter.identifier, isNotNull);
|
| + expect(functionParameter.typeParameters, isNotNull);
|
| + expect(functionParameter.parameters, isNotNull);
|
| + expect(functionParameter.question, isNotNull);
|
| }
|
|
|
| - void
|
| - test_parseInstanceCreationExpression_qualifiedType_named_typeParameters() {
|
| - Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
|
| - createParser('A.B<E>.c()');
|
| - InstanceCreationExpression expression =
|
| - parser.parseInstanceCreationExpression(token);
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseNormalFormalParameter_function_type() {
|
| + createParser('A a())');
|
| + NormalFormalParameter parameter = parser.parseNormalFormalParameter();
|
| + expectNotNullIfNoErrors(parameter);
|
| listener.assertNoErrors();
|
| - expect(expression.keyword, token);
|
| - ConstructorName name = expression.constructorName;
|
| - expect(name, isNotNull);
|
| - TypeName type = name.type;
|
| - expect(type, isNotNull);
|
| - expect(type.typeArguments.arguments, hasLength(1));
|
| - expect(name.period, isNotNull);
|
| - expect(name.name, isNotNull);
|
| - expect(expression.argumentList, isNotNull);
|
| + expect(parameter, new isInstanceOf<FunctionTypedFormalParameter>());
|
| + FunctionTypedFormalParameter functionParameter = parameter;
|
| + expect(functionParameter.returnType, isNotNull);
|
| + expect(functionParameter.identifier, isNotNull);
|
| + expect(functionParameter.typeParameters, isNull);
|
| + expect(functionParameter.parameters, isNotNull);
|
| + expect(functionParameter.question, isNull);
|
| }
|
|
|
| - void
|
| - test_parseInstanceCreationExpression_qualifiedType_typeParameterComment() {
|
| + void test_parseNormalFormalParameter_function_type_nullable() {
|
| + enableNnbd = true;
|
| + createParser('A a()?)');
|
| + NormalFormalParameter parameter = parser.parseNormalFormalParameter();
|
| + expectNotNullIfNoErrors(parameter);
|
| + listener.assertNoErrors();
|
| + expect(parameter, new isInstanceOf<FunctionTypedFormalParameter>());
|
| + FunctionTypedFormalParameter functionParameter = parameter;
|
| + expect(functionParameter.returnType, isNotNull);
|
| + expect(functionParameter.identifier, isNotNull);
|
| + expect(functionParameter.typeParameters, isNull);
|
| + expect(functionParameter.parameters, isNotNull);
|
| + expect(functionParameter.question, isNotNull);
|
| + }
|
| +
|
| + void test_parseNormalFormalParameter_function_type_typeParameterComments() {
|
| enableGenericMethodComments = true;
|
| - Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
|
| - createParser('A.B/*<E>*/()');
|
| - InstanceCreationExpression expression =
|
| - parser.parseInstanceCreationExpression(token);
|
| - expectNotNullIfNoErrors(expression);
|
| + createParser('A a/*<E>*/())');
|
| + NormalFormalParameter parameter = parser.parseNormalFormalParameter();
|
| + expectNotNullIfNoErrors(parameter);
|
| listener.assertNoErrors();
|
| - expect(expression.keyword, token);
|
| - ConstructorName name = expression.constructorName;
|
| - expect(name, isNotNull);
|
| - TypeName type = name.type;
|
| - expect(type, isNotNull);
|
| - expect(type.typeArguments.arguments, hasLength(1));
|
| - expect(name.period, isNull);
|
| - expect(name.name, isNull);
|
| - expect(expression.argumentList, isNotNull);
|
| + expect(parameter, new isInstanceOf<FunctionTypedFormalParameter>());
|
| + FunctionTypedFormalParameter functionParameter = parameter;
|
| + expect(functionParameter.returnType, isNotNull);
|
| + expect(functionParameter.identifier, isNotNull);
|
| + expect(functionParameter.typeParameters, isNotNull);
|
| + expect(functionParameter.parameters, isNotNull);
|
| + expect(functionParameter.question, isNull);
|
| }
|
|
|
| - void test_parseInstanceCreationExpression_qualifiedType_typeParameters() {
|
| - Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
|
| - createParser('A.B<E>()');
|
| - InstanceCreationExpression expression =
|
| - parser.parseInstanceCreationExpression(token);
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseNormalFormalParameter_function_type_typeParameters() {
|
| + createParser('A a<E>())');
|
| + NormalFormalParameter parameter = parser.parseNormalFormalParameter();
|
| + expectNotNullIfNoErrors(parameter);
|
| listener.assertNoErrors();
|
| - expect(expression.keyword, token);
|
| - ConstructorName name = expression.constructorName;
|
| - expect(name, isNotNull);
|
| - TypeName type = name.type;
|
| - expect(type, isNotNull);
|
| - expect(type.typeArguments.arguments, hasLength(1));
|
| - expect(name.period, isNull);
|
| - expect(name.name, isNull);
|
| - expect(expression.argumentList, isNotNull);
|
| + expect(parameter, new isInstanceOf<FunctionTypedFormalParameter>());
|
| + FunctionTypedFormalParameter functionParameter = parameter;
|
| + expect(functionParameter.returnType, isNotNull);
|
| + expect(functionParameter.identifier, isNotNull);
|
| + expect(functionParameter.typeParameters, isNotNull);
|
| + expect(functionParameter.parameters, isNotNull);
|
| + expect(functionParameter.question, isNull);
|
| }
|
|
|
| - void test_parseInstanceCreationExpression_type() {
|
| - Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
|
| - createParser('A()');
|
| - InstanceCreationExpression expression =
|
| - parser.parseInstanceCreationExpression(token);
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseNormalFormalParameter_function_type_typeParameters_nullable() {
|
| + enableNnbd = true;
|
| + createParser('A a<E>()?)');
|
| + NormalFormalParameter parameter = parser.parseNormalFormalParameter();
|
| + expectNotNullIfNoErrors(parameter);
|
| listener.assertNoErrors();
|
| - expect(expression.keyword, token);
|
| - ConstructorName name = expression.constructorName;
|
| - expect(name, isNotNull);
|
| - TypeName type = name.type;
|
| - expect(type, isNotNull);
|
| - expect(type.typeArguments, isNull);
|
| - expect(name.period, isNull);
|
| - expect(name.name, isNull);
|
| - expect(expression.argumentList, isNotNull);
|
| + expect(parameter, new isInstanceOf<FunctionTypedFormalParameter>());
|
| + FunctionTypedFormalParameter functionParameter = parameter;
|
| + expect(functionParameter.returnType, isNotNull);
|
| + expect(functionParameter.identifier, isNotNull);
|
| + expect(functionParameter.typeParameters, isNotNull);
|
| + expect(functionParameter.parameters, isNotNull);
|
| + expect(functionParameter.question, isNotNull);
|
| }
|
|
|
| - void test_parseInstanceCreationExpression_type_named() {
|
| - enableGenericMethodComments = true;
|
| - Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
|
| - createParser('A.c()');
|
| - InstanceCreationExpression expression =
|
| - parser.parseInstanceCreationExpression(token);
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseNormalFormalParameter_function_void() {
|
| + createParser('void a())');
|
| + NormalFormalParameter parameter = parser.parseNormalFormalParameter();
|
| + expectNotNullIfNoErrors(parameter);
|
| listener.assertNoErrors();
|
| - expect(expression.keyword, token);
|
| - ConstructorName name = expression.constructorName;
|
| - expect(name, isNotNull);
|
| - TypeName type = name.type;
|
| - expect(type, isNotNull);
|
| - expect(type.typeArguments, isNull);
|
| - expect(name.period, isNull);
|
| - expect(name.name, isNull);
|
| - expect(expression.argumentList, isNotNull);
|
| + expect(parameter, new isInstanceOf<FunctionTypedFormalParameter>());
|
| + FunctionTypedFormalParameter functionParameter = parameter;
|
| + expect(functionParameter.returnType, isNotNull);
|
| + expect(functionParameter.identifier, isNotNull);
|
| + expect(functionParameter.typeParameters, isNull);
|
| + expect(functionParameter.parameters, isNotNull);
|
| + expect(functionParameter.question, isNull);
|
| }
|
|
|
| - void test_parseInstanceCreationExpression_type_named_typeParameterComment() {
|
| - enableGenericMethodComments = true;
|
| - Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
|
| - createParser('A/*<B>*/.c()');
|
| - InstanceCreationExpression expression =
|
| - parser.parseInstanceCreationExpression(token);
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseNormalFormalParameter_function_void_nullable() {
|
| + enableNnbd = true;
|
| + createParser('void a()?)');
|
| + NormalFormalParameter parameter = parser.parseNormalFormalParameter();
|
| + expectNotNullIfNoErrors(parameter);
|
| listener.assertNoErrors();
|
| - expect(expression.keyword, token);
|
| - ConstructorName name = expression.constructorName;
|
| - expect(name, isNotNull);
|
| - TypeName type = name.type;
|
| - expect(type, isNotNull);
|
| - expect(type.typeArguments.arguments, hasLength(1));
|
| - expect(name.period, isNotNull);
|
| - expect(name.name, isNotNull);
|
| - expect(expression.argumentList, isNotNull);
|
| + expect(parameter, new isInstanceOf<FunctionTypedFormalParameter>());
|
| + FunctionTypedFormalParameter functionParameter = parameter;
|
| + expect(functionParameter.returnType, isNotNull);
|
| + expect(functionParameter.identifier, isNotNull);
|
| + expect(functionParameter.typeParameters, isNull);
|
| + expect(functionParameter.parameters, isNotNull);
|
| + expect(functionParameter.question, isNotNull);
|
| }
|
|
|
| - void test_parseInstanceCreationExpression_type_named_typeParameters() {
|
| - Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
|
| - createParser('A<B>.c()');
|
| - InstanceCreationExpression expression =
|
| - parser.parseInstanceCreationExpression(token);
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseNormalFormalParameter_function_void_typeParameterComments() {
|
| + enableGenericMethodComments = true;
|
| + createParser('void a/*<E>*/())');
|
| + NormalFormalParameter parameter = parser.parseNormalFormalParameter();
|
| + expectNotNullIfNoErrors(parameter);
|
| listener.assertNoErrors();
|
| - expect(expression.keyword, token);
|
| - ConstructorName name = expression.constructorName;
|
| - expect(name, isNotNull);
|
| - TypeName type = name.type;
|
| - expect(type, isNotNull);
|
| - expect(type.typeArguments.arguments, hasLength(1));
|
| - expect(name.period, isNotNull);
|
| - expect(name.name, isNotNull);
|
| - expect(expression.argumentList, isNotNull);
|
| + expect(parameter, new isInstanceOf<FunctionTypedFormalParameter>());
|
| + FunctionTypedFormalParameter functionParameter = parameter;
|
| + expect(functionParameter.returnType, isNotNull);
|
| + expect(functionParameter.identifier, isNotNull);
|
| + expect(functionParameter.typeParameters, isNotNull);
|
| + expect(functionParameter.parameters, isNotNull);
|
| + expect(functionParameter.question, isNull);
|
| }
|
|
|
| - void test_parseInstanceCreationExpression_type_typeParameterComment() {
|
| - enableGenericMethodComments = true;
|
| - Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
|
| - createParser('A/*<B>*/()');
|
| - InstanceCreationExpression expression =
|
| - parser.parseInstanceCreationExpression(token);
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseNormalFormalParameter_function_void_typeParameters() {
|
| + createParser('void a<E>())');
|
| + NormalFormalParameter parameter = parser.parseNormalFormalParameter();
|
| + expectNotNullIfNoErrors(parameter);
|
| listener.assertNoErrors();
|
| - expect(expression.keyword, token);
|
| - ConstructorName name = expression.constructorName;
|
| - expect(name, isNotNull);
|
| - TypeName type = name.type;
|
| - expect(type, isNotNull);
|
| - expect(type.typeArguments.arguments, hasLength(1));
|
| - expect(name.period, isNull);
|
| - expect(name.name, isNull);
|
| - expect(expression.argumentList, isNotNull);
|
| + expect(parameter, new isInstanceOf<FunctionTypedFormalParameter>());
|
| + FunctionTypedFormalParameter functionParameter = parameter;
|
| + expect(functionParameter.returnType, isNotNull);
|
| + expect(functionParameter.identifier, isNotNull);
|
| + expect(functionParameter.typeParameters, isNotNull);
|
| + expect(functionParameter.parameters, isNotNull);
|
| + expect(functionParameter.question, isNull);
|
| }
|
|
|
| - void test_parseInstanceCreationExpression_type_typeParameters() {
|
| - Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
|
| - createParser('A<B>()');
|
| - InstanceCreationExpression expression =
|
| - parser.parseInstanceCreationExpression(token);
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseNormalFormalParameter_function_void_typeParameters_nullable() {
|
| + enableNnbd = true;
|
| + createParser('void a<E>()?)');
|
| + NormalFormalParameter parameter = parser.parseNormalFormalParameter();
|
| + expectNotNullIfNoErrors(parameter);
|
| listener.assertNoErrors();
|
| - expect(expression.keyword, token);
|
| - ConstructorName name = expression.constructorName;
|
| - expect(name, isNotNull);
|
| - TypeName type = name.type;
|
| - expect(type, isNotNull);
|
| - expect(type.typeArguments.arguments, hasLength(1));
|
| - expect(name.period, isNull);
|
| - expect(name.name, isNull);
|
| - expect(expression.argumentList, isNotNull);
|
| + expect(parameter, new isInstanceOf<FunctionTypedFormalParameter>());
|
| + FunctionTypedFormalParameter functionParameter = parameter;
|
| + expect(functionParameter.returnType, isNotNull);
|
| + expect(functionParameter.identifier, isNotNull);
|
| + expect(functionParameter.typeParameters, isNotNull);
|
| + expect(functionParameter.parameters, isNotNull);
|
| + expect(functionParameter.question, isNotNull);
|
| }
|
|
|
| - void test_parseInstanceCreationExpression_type_typeParameters_nullable() {
|
| - enableNnbd = true;
|
| - Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
|
| - createParser('A<B?>()');
|
| - InstanceCreationExpression expression =
|
| - parser.parseInstanceCreationExpression(token);
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseNormalFormalParameter_simple_const_noType() {
|
| + createParser('const a)');
|
| + NormalFormalParameter parameter = parser.parseNormalFormalParameter();
|
| + expectNotNullIfNoErrors(parameter);
|
| listener.assertNoErrors();
|
| - expect(expression.keyword, token);
|
| - ConstructorName name = expression.constructorName;
|
| - expect(name, isNotNull);
|
| - TypeName type = name.type;
|
| - expect(type, isNotNull);
|
| - expect(name.period, isNull);
|
| - expect(name.name, isNull);
|
| - expect(expression.argumentList, isNotNull);
|
| - NodeList<TypeAnnotation> arguments = type.typeArguments.arguments;
|
| - expect(arguments, hasLength(1));
|
| - expect((arguments[0] as TypeName).question, isNotNull);
|
| + expect(parameter, new isInstanceOf<SimpleFormalParameter>());
|
| + SimpleFormalParameter simpleParameter = parameter;
|
| + expect(simpleParameter.keyword, isNotNull);
|
| + expect(simpleParameter.type, isNull);
|
| + expect(simpleParameter.identifier, isNotNull);
|
| }
|
|
|
| - void test_parseLibraryDirective() {
|
| - createParser('library l;');
|
| - LibraryDirective directive = parseFullDirective();
|
| - expectNotNullIfNoErrors(directive);
|
| + void test_parseNormalFormalParameter_simple_const_type() {
|
| + createParser('const A a)');
|
| + NormalFormalParameter parameter = parser.parseNormalFormalParameter();
|
| + expectNotNullIfNoErrors(parameter);
|
| listener.assertNoErrors();
|
| - expect(directive.libraryKeyword, isNotNull);
|
| - expect(directive.name, isNotNull);
|
| - expect(directive.semicolon, isNotNull);
|
| + expect(parameter, new isInstanceOf<SimpleFormalParameter>());
|
| + SimpleFormalParameter simpleParameter = parameter;
|
| + expect(simpleParameter.keyword, isNotNull);
|
| + expect(simpleParameter.type, isNotNull);
|
| + expect(simpleParameter.identifier, isNotNull);
|
| }
|
|
|
| - void test_parseLibraryIdentifier_multiple() {
|
| - String name = "a.b.c";
|
| - createParser(name);
|
| - LibraryIdentifier identifier = parser.parseLibraryIdentifier();
|
| - expectNotNullIfNoErrors(identifier);
|
| + void test_parseNormalFormalParameter_simple_final_noType() {
|
| + createParser('final a)');
|
| + NormalFormalParameter parameter = parser.parseNormalFormalParameter();
|
| + expectNotNullIfNoErrors(parameter);
|
| listener.assertNoErrors();
|
| - expect(identifier.name, name);
|
| + expect(parameter, new isInstanceOf<SimpleFormalParameter>());
|
| + SimpleFormalParameter simpleParameter = parameter;
|
| + expect(simpleParameter.keyword, isNotNull);
|
| + expect(simpleParameter.type, isNull);
|
| + expect(simpleParameter.identifier, isNotNull);
|
| }
|
|
|
| - void test_parseLibraryIdentifier_single() {
|
| - String name = "a";
|
| - createParser(name);
|
| - LibraryIdentifier identifier = parser.parseLibraryIdentifier();
|
| - expectNotNullIfNoErrors(identifier);
|
| + void test_parseNormalFormalParameter_simple_final_type() {
|
| + createParser('final A a)');
|
| + NormalFormalParameter parameter = parser.parseNormalFormalParameter();
|
| + expectNotNullIfNoErrors(parameter);
|
| listener.assertNoErrors();
|
| - expect(identifier.name, name);
|
| + expect(parameter, new isInstanceOf<SimpleFormalParameter>());
|
| + SimpleFormalParameter simpleParameter = parameter;
|
| + expect(simpleParameter.keyword, isNotNull);
|
| + expect(simpleParameter.type, isNotNull);
|
| + expect(simpleParameter.identifier, isNotNull);
|
| }
|
|
|
| - void test_parseListLiteral_empty_oneToken() {
|
| - Token token = TokenFactory.tokenFromKeyword(Keyword.CONST);
|
| - TypeArgumentList typeArguments = null;
|
| - createParser('[]');
|
| - ListLiteral literal = parser.parseListLiteral(token, typeArguments);
|
| - expectNotNullIfNoErrors(literal);
|
| + void test_parseNormalFormalParameter_simple_noName() {
|
| + createParser('a)');
|
| + NormalFormalParameter parameter =
|
| + parser.parseNormalFormalParameter(inFunctionType: true);
|
| + expectNotNullIfNoErrors(parameter);
|
| listener.assertNoErrors();
|
| - expect(literal.constKeyword, token);
|
| - expect(literal.typeArguments, typeArguments);
|
| - expect(literal.leftBracket, isNotNull);
|
| - expect(literal.elements, hasLength(0));
|
| - expect(literal.rightBracket, isNotNull);
|
| + expect(parameter, new isInstanceOf<SimpleFormalParameter>());
|
| + SimpleFormalParameter simpleParameter = parameter;
|
| + expect(simpleParameter.keyword, isNull);
|
| + expect(simpleParameter.type, isNotNull);
|
| + expect(simpleParameter.identifier, isNull);
|
| }
|
|
|
| - void test_parseListLiteral_empty_oneToken_withComment() {
|
| - Token token = null;
|
| - TypeArgumentList typeArguments = null;
|
| - createParser('/* 0 */ []');
|
| - ListLiteral literal = parser.parseListLiteral(token, typeArguments);
|
| - expectNotNullIfNoErrors(literal);
|
| + void test_parseNormalFormalParameter_simple_noType() {
|
| + createParser('a)');
|
| + NormalFormalParameter parameter = parser.parseNormalFormalParameter();
|
| + expectNotNullIfNoErrors(parameter);
|
| listener.assertNoErrors();
|
| - expect(literal.constKeyword, token);
|
| - expect(literal.typeArguments, typeArguments);
|
| - Token leftBracket = literal.leftBracket;
|
| - expect(leftBracket, isNotNull);
|
| - expect(leftBracket.precedingComments, isNotNull);
|
| - expect(literal.elements, hasLength(0));
|
| - expect(literal.rightBracket, isNotNull);
|
| + expect(parameter, new isInstanceOf<SimpleFormalParameter>());
|
| + SimpleFormalParameter simpleParameter = parameter;
|
| + expect(simpleParameter.keyword, isNull);
|
| + expect(simpleParameter.type, isNull);
|
| + expect(simpleParameter.identifier, isNotNull);
|
| }
|
|
|
| - void test_parseListLiteral_empty_twoTokens() {
|
| - Token token = TokenFactory.tokenFromKeyword(Keyword.CONST);
|
| - TypeArgumentList typeArguments = null;
|
| - createParser('[ ]');
|
| - ListLiteral literal = parser.parseListLiteral(token, typeArguments);
|
| - expectNotNullIfNoErrors(literal);
|
| + void test_parseNormalFormalParameter_simple_noType_namedCovariant() {
|
| + createParser('covariant)');
|
| + NormalFormalParameter parameter = parser.parseNormalFormalParameter();
|
| + expectNotNullIfNoErrors(parameter);
|
| listener.assertNoErrors();
|
| - expect(literal.constKeyword, token);
|
| - expect(literal.typeArguments, typeArguments);
|
| - expect(literal.leftBracket, isNotNull);
|
| - expect(literal.elements, hasLength(0));
|
| - expect(literal.rightBracket, isNotNull);
|
| + expect(parameter, new isInstanceOf<SimpleFormalParameter>());
|
| + SimpleFormalParameter simpleParameter = parameter;
|
| + expect(simpleParameter.covariantKeyword, isNull);
|
| + expect(simpleParameter.keyword, isNull);
|
| + expect(simpleParameter.type, isNull);
|
| + expect(simpleParameter.identifier, isNotNull);
|
| }
|
|
|
| - void test_parseListLiteral_multiple() {
|
| - createParser('[1, 2, 3]');
|
| - ListLiteral literal = parser.parseListLiteral(null, null);
|
| - expectNotNullIfNoErrors(literal);
|
| + void test_parseNormalFormalParameter_simple_type() {
|
| + createParser('A a)');
|
| + NormalFormalParameter parameter = parser.parseNormalFormalParameter();
|
| + expectNotNullIfNoErrors(parameter);
|
| listener.assertNoErrors();
|
| - expect(literal.constKeyword, isNull);
|
| - expect(literal.typeArguments, isNull);
|
| - expect(literal.leftBracket, isNotNull);
|
| - expect(literal.elements, hasLength(3));
|
| - expect(literal.rightBracket, isNotNull);
|
| + expect(parameter, new isInstanceOf<SimpleFormalParameter>());
|
| + SimpleFormalParameter simpleParameter = parameter;
|
| + expect(simpleParameter.keyword, isNull);
|
| + expect(simpleParameter.type, isNotNull);
|
| + expect(simpleParameter.identifier, isNotNull);
|
| }
|
|
|
| - void test_parseListLiteral_single() {
|
| - createParser('[1]');
|
| - ListLiteral literal = parser.parseListLiteral(null, null);
|
| - expectNotNullIfNoErrors(literal);
|
| + void test_parseOperator() {
|
| + createParser('/// Doc\nT operator +(A a);');
|
| + MethodDeclaration method = parser.parseClassMember('C');
|
| + expectNotNullIfNoErrors(method);
|
| listener.assertNoErrors();
|
| - expect(literal.constKeyword, isNull);
|
| - expect(literal.typeArguments, isNull);
|
| - expect(literal.leftBracket, isNotNull);
|
| - expect(literal.elements, hasLength(1));
|
| - expect(literal.rightBracket, isNotNull);
|
| + expect(method.body, isNotNull);
|
| + expectCommentText(method.documentationComment, '/// Doc');
|
| + expect(method.externalKeyword, isNull);
|
| + expect(method.modifierKeyword, isNull);
|
| + expect(method.name, isNotNull);
|
| + expect(method.operatorKeyword, isNotNull);
|
| + expect(method.typeParameters, isNull);
|
| + expect(method.parameters, isNotNull);
|
| + expect(method.propertyKeyword, isNull);
|
| + expect((method.returnType as TypeName).name.name, 'T');
|
| }
|
|
|
| - void test_parseListOrMapLiteral_list_noType() {
|
| - createParser('[1]');
|
| - TypedLiteral literal = parser.parseListOrMapLiteral(null);
|
| - expectNotNullIfNoErrors(literal);
|
| - listener.assertNoErrors();
|
| - expect(literal, new isInstanceOf<ListLiteral>());
|
| - ListLiteral listLiteral = literal;
|
| - expect(listLiteral.constKeyword, isNull);
|
| - expect(listLiteral.typeArguments, isNull);
|
| - expect(listLiteral.leftBracket, isNotNull);
|
| - expect(listLiteral.elements, hasLength(1));
|
| - expect(listLiteral.rightBracket, isNotNull);
|
| + void test_parseOptionalReturnType() {
|
| + // TODO(brianwilkerson) Implement tests for this method.
|
| }
|
|
|
| - void test_parseListOrMapLiteral_list_type() {
|
| - createParser('<int> [1]');
|
| - TypedLiteral literal = parser.parseListOrMapLiteral(null);
|
| - expectNotNullIfNoErrors(literal);
|
| + void test_parsePostfixExpression_decrement() {
|
| + createParser('i--');
|
| + Expression expression = parser.parsePostfixExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(literal, new isInstanceOf<ListLiteral>());
|
| - ListLiteral listLiteral = literal;
|
| - expect(listLiteral.constKeyword, isNull);
|
| - expect(listLiteral.typeArguments, isNotNull);
|
| - expect(listLiteral.leftBracket, isNotNull);
|
| - expect(listLiteral.elements, hasLength(1));
|
| - expect(listLiteral.rightBracket, isNotNull);
|
| + expect(expression, new isInstanceOf<PostfixExpression>());
|
| + PostfixExpression postfixExpression = expression;
|
| + expect(postfixExpression.operand, isNotNull);
|
| + expect(postfixExpression.operator, isNotNull);
|
| + expect(postfixExpression.operator.type, TokenType.MINUS_MINUS);
|
| }
|
|
|
| - void test_parseListOrMapLiteral_map_noType() {
|
| - createParser("{'1' : 1}");
|
| - TypedLiteral literal = parser.parseListOrMapLiteral(null);
|
| - expectNotNullIfNoErrors(literal);
|
| + void test_parsePostfixExpression_increment() {
|
| + createParser('i++');
|
| + Expression expression = parser.parsePostfixExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(literal, new isInstanceOf<MapLiteral>());
|
| - MapLiteral mapLiteral = literal;
|
| - expect(mapLiteral.constKeyword, isNull);
|
| - expect(mapLiteral.typeArguments, isNull);
|
| - expect(mapLiteral.leftBracket, isNotNull);
|
| - expect(mapLiteral.entries, hasLength(1));
|
| - expect(mapLiteral.rightBracket, isNotNull);
|
| + expect(expression, new isInstanceOf<PostfixExpression>());
|
| + PostfixExpression postfixExpression = expression;
|
| + expect(postfixExpression.operand, isNotNull);
|
| + expect(postfixExpression.operator, isNotNull);
|
| + expect(postfixExpression.operator.type, TokenType.PLUS_PLUS);
|
| }
|
|
|
| - void test_parseListOrMapLiteral_map_type() {
|
| - createParser("<String, int> {'1' : 1}");
|
| - TypedLiteral literal = parser.parseListOrMapLiteral(null);
|
| - expectNotNullIfNoErrors(literal);
|
| + void test_parsePostfixExpression_none_indexExpression() {
|
| + createParser('a[0]');
|
| + Expression expression = parser.parsePostfixExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(literal, new isInstanceOf<MapLiteral>());
|
| - MapLiteral mapLiteral = literal;
|
| - expect(mapLiteral.constKeyword, isNull);
|
| - expect(mapLiteral.typeArguments, isNotNull);
|
| - expect(mapLiteral.leftBracket, isNotNull);
|
| - expect(mapLiteral.entries, hasLength(1));
|
| - expect(mapLiteral.rightBracket, isNotNull);
|
| + expect(expression, new isInstanceOf<IndexExpression>());
|
| + IndexExpression indexExpression = expression;
|
| + expect(indexExpression.target, isNotNull);
|
| + expect(indexExpression.index, isNotNull);
|
| }
|
|
|
| - void test_parseLogicalAndExpression() {
|
| - createParser('x && y');
|
| - Expression expression = parser.parseLogicalAndExpression();
|
| + void test_parsePostfixExpression_none_methodInvocation() {
|
| + createParser('a.m()');
|
| + Expression expression = parser.parsePostfixExpression();
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<BinaryExpression>());
|
| - BinaryExpression binaryExpression = expression;
|
| - expect(binaryExpression.leftOperand, isNotNull);
|
| - expect(binaryExpression.operator, isNotNull);
|
| - expect(binaryExpression.operator.type, TokenType.AMPERSAND_AMPERSAND);
|
| - expect(binaryExpression.rightOperand, isNotNull);
|
| + expect(expression, new isInstanceOf<MethodInvocation>());
|
| + MethodInvocation methodInvocation = expression;
|
| + expect(methodInvocation.target, isNotNull);
|
| + expect(methodInvocation.operator.type, TokenType.PERIOD);
|
| + expect(methodInvocation.methodName, isNotNull);
|
| + expect(methodInvocation.typeArguments, isNull);
|
| + expect(methodInvocation.argumentList, isNotNull);
|
| }
|
|
|
| - void test_parseLogicalOrExpression() {
|
| - createParser('x || y');
|
| - Expression expression = parser.parseLogicalOrExpression();
|
| + void test_parsePostfixExpression_none_methodInvocation_question_dot() {
|
| + createParser('a?.m()');
|
| + Expression expression = parser.parsePostfixExpression();
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<BinaryExpression>());
|
| - BinaryExpression binaryExpression = expression;
|
| - expect(binaryExpression.leftOperand, isNotNull);
|
| - expect(binaryExpression.operator, isNotNull);
|
| - expect(binaryExpression.operator.type, TokenType.BAR_BAR);
|
| - expect(binaryExpression.rightOperand, isNotNull);
|
| + expect(expression, new isInstanceOf<MethodInvocation>());
|
| + MethodInvocation methodInvocation = expression;
|
| + expect(methodInvocation.target, isNotNull);
|
| + expect(methodInvocation.operator.type, TokenType.QUESTION_PERIOD);
|
| + expect(methodInvocation.methodName, isNotNull);
|
| + expect(methodInvocation.typeArguments, isNull);
|
| + expect(methodInvocation.argumentList, isNotNull);
|
| }
|
|
|
| - void test_parseMapLiteral_empty() {
|
| - Token token = TokenFactory.tokenFromKeyword(Keyword.CONST);
|
| - TypeArgumentList typeArguments = AstTestFactory.typeArgumentList(
|
| - [AstTestFactory.typeName4("String"), AstTestFactory.typeName4("int")]);
|
| - createParser('{}');
|
| - MapLiteral literal = parser.parseMapLiteral(token, typeArguments);
|
| - expectNotNullIfNoErrors(literal);
|
| + void
|
| + test_parsePostfixExpression_none_methodInvocation_question_dot_typeArgumentComments() {
|
| + enableGenericMethodComments = true;
|
| + createParser('a?.m/*<E>*/()');
|
| + Expression expression = parser.parsePostfixExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(literal.constKeyword, token);
|
| - expect(literal.typeArguments, typeArguments);
|
| - expect(literal.leftBracket, isNotNull);
|
| - expect(literal.entries, hasLength(0));
|
| - expect(literal.rightBracket, isNotNull);
|
| + expect(expression, new isInstanceOf<MethodInvocation>());
|
| + MethodInvocation methodInvocation = expression;
|
| + expect(methodInvocation.target, isNotNull);
|
| + expect(methodInvocation.operator.type, TokenType.QUESTION_PERIOD);
|
| + expect(methodInvocation.methodName, isNotNull);
|
| + expect(methodInvocation.typeArguments, isNotNull);
|
| + expect(methodInvocation.argumentList, isNotNull);
|
| }
|
|
|
| - void test_parseMapLiteral_multiple() {
|
| - createParser("{'a' : b, 'x' : y}");
|
| - MapLiteral literal = parser.parseMapLiteral(null, null);
|
| - expectNotNullIfNoErrors(literal);
|
| + void
|
| + test_parsePostfixExpression_none_methodInvocation_question_dot_typeArguments() {
|
| + createParser('a?.m<E>()');
|
| + Expression expression = parser.parsePostfixExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(literal.leftBracket, isNotNull);
|
| - expect(literal.entries, hasLength(2));
|
| - expect(literal.rightBracket, isNotNull);
|
| + expect(expression, new isInstanceOf<MethodInvocation>());
|
| + MethodInvocation methodInvocation = expression;
|
| + expect(methodInvocation.target, isNotNull);
|
| + expect(methodInvocation.operator.type, TokenType.QUESTION_PERIOD);
|
| + expect(methodInvocation.methodName, isNotNull);
|
| + expect(methodInvocation.typeArguments, isNotNull);
|
| + expect(methodInvocation.argumentList, isNotNull);
|
| }
|
|
|
| - void test_parseMapLiteral_single() {
|
| - createParser("{'x' : y}");
|
| - MapLiteral literal = parser.parseMapLiteral(null, null);
|
| - expectNotNullIfNoErrors(literal);
|
| + void
|
| + test_parsePostfixExpression_none_methodInvocation_typeArgumentComments() {
|
| + enableGenericMethodComments = true;
|
| + createParser('a.m/*<E>*/()');
|
| + Expression expression = parser.parsePostfixExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(literal.leftBracket, isNotNull);
|
| - expect(literal.entries, hasLength(1));
|
| - expect(literal.rightBracket, isNotNull);
|
| + expect(expression, new isInstanceOf<MethodInvocation>());
|
| + MethodInvocation methodInvocation = expression;
|
| + expect(methodInvocation.target, isNotNull);
|
| + expect(methodInvocation.operator.type, TokenType.PERIOD);
|
| + expect(methodInvocation.methodName, isNotNull);
|
| + expect(methodInvocation.typeArguments, isNotNull);
|
| + expect(methodInvocation.argumentList, isNotNull);
|
| }
|
|
|
| - void test_parseMapLiteralEntry_complex() {
|
| - createParser('2 + 2 : y');
|
| - MapLiteralEntry entry = parser.parseMapLiteralEntry();
|
| - expectNotNullIfNoErrors(entry);
|
| + void test_parsePostfixExpression_none_methodInvocation_typeArguments() {
|
| + createParser('a.m<E>()');
|
| + Expression expression = parser.parsePostfixExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(entry.key, isNotNull);
|
| - expect(entry.separator, isNotNull);
|
| - expect(entry.value, isNotNull);
|
| + expect(expression, new isInstanceOf<MethodInvocation>());
|
| + MethodInvocation methodInvocation = expression;
|
| + expect(methodInvocation.target, isNotNull);
|
| + expect(methodInvocation.operator.type, TokenType.PERIOD);
|
| + expect(methodInvocation.methodName, isNotNull);
|
| + expect(methodInvocation.typeArguments, isNotNull);
|
| + expect(methodInvocation.argumentList, isNotNull);
|
| }
|
|
|
| - void test_parseMapLiteralEntry_int() {
|
| - createParser('0 : y');
|
| - MapLiteralEntry entry = parser.parseMapLiteralEntry();
|
| - expectNotNullIfNoErrors(entry);
|
| + void test_parsePostfixExpression_none_propertyAccess() {
|
| + createParser('a.b');
|
| + Expression expression = parser.parsePostfixExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(entry.key, isNotNull);
|
| - expect(entry.separator, isNotNull);
|
| - expect(entry.value, isNotNull);
|
| + expect(expression, new isInstanceOf<PrefixedIdentifier>());
|
| + PrefixedIdentifier identifier = expression;
|
| + expect(identifier.prefix, isNotNull);
|
| + expect(identifier.identifier, isNotNull);
|
| }
|
|
|
| - void test_parseMapLiteralEntry_string() {
|
| - createParser("'x' : y");
|
| - MapLiteralEntry entry = parser.parseMapLiteralEntry();
|
| - expectNotNullIfNoErrors(entry);
|
| + void test_parsePrefixedIdentifier_noPrefix() {
|
| + String lexeme = "bar";
|
| + createParser(lexeme);
|
| + Identifier identifier = parser.parsePrefixedIdentifier();
|
| + expectNotNullIfNoErrors(identifier);
|
| listener.assertNoErrors();
|
| - expect(entry.key, isNotNull);
|
| - expect(entry.separator, isNotNull);
|
| - expect(entry.value, isNotNull);
|
| + expect(identifier, new isInstanceOf<SimpleIdentifier>());
|
| + SimpleIdentifier simpleIdentifier = identifier;
|
| + expect(simpleIdentifier.token, isNotNull);
|
| + expect(simpleIdentifier.name, lexeme);
|
| }
|
|
|
| - void test_parseModifiers_abstract() {
|
| - createParser('abstract A');
|
| - Modifiers modifiers = parser.parseModifiers();
|
| - expectNotNullIfNoErrors(modifiers);
|
| + void test_parsePrefixedIdentifier_prefix() {
|
| + String lexeme = "foo.bar";
|
| + createParser(lexeme);
|
| + Identifier identifier = parser.parsePrefixedIdentifier();
|
| + expectNotNullIfNoErrors(identifier);
|
| listener.assertNoErrors();
|
| - expect(modifiers.abstractKeyword, isNotNull);
|
| + expect(identifier, new isInstanceOf<PrefixedIdentifier>());
|
| + PrefixedIdentifier prefixedIdentifier = identifier;
|
| + expect(prefixedIdentifier.prefix.name, "foo");
|
| + expect(prefixedIdentifier.period, isNotNull);
|
| + expect(prefixedIdentifier.identifier.name, "bar");
|
| }
|
|
|
| - void test_parseModifiers_const() {
|
| - createParser('const A');
|
| - Modifiers modifiers = parser.parseModifiers();
|
| - expectNotNullIfNoErrors(modifiers);
|
| + void test_parsePrimaryExpression_const() {
|
| + createParser('const A()');
|
| + Expression expression = parser.parsePrimaryExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(modifiers.constKeyword, isNotNull);
|
| + expect(expression, isNotNull);
|
| }
|
|
|
| - void test_parseModifiers_covariant() {
|
| - createParser('covariant A');
|
| - Modifiers modifiers = parser.parseModifiers();
|
| - expectNotNullIfNoErrors(modifiers);
|
| + void test_parsePrimaryExpression_double() {
|
| + String doubleLiteral = "3.2e4";
|
| + createParser(doubleLiteral);
|
| + Expression expression = parser.parsePrimaryExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(modifiers.covariantKeyword, isNotNull);
|
| + expect(expression, new isInstanceOf<DoubleLiteral>());
|
| + DoubleLiteral literal = expression;
|
| + expect(literal.literal, isNotNull);
|
| + expect(literal.value, double.parse(doubleLiteral));
|
| }
|
|
|
| - void test_parseModifiers_external() {
|
| - createParser('external A');
|
| - Modifiers modifiers = parser.parseModifiers();
|
| - expectNotNullIfNoErrors(modifiers);
|
| + void test_parsePrimaryExpression_false() {
|
| + createParser('false');
|
| + Expression expression = parser.parsePrimaryExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(modifiers.externalKeyword, isNotNull);
|
| + expect(expression, new isInstanceOf<BooleanLiteral>());
|
| + BooleanLiteral literal = expression;
|
| + expect(literal.literal, isNotNull);
|
| + expect(literal.value, isFalse);
|
| }
|
|
|
| - void test_parseModifiers_factory() {
|
| - createParser('factory A');
|
| - Modifiers modifiers = parser.parseModifiers();
|
| - expectNotNullIfNoErrors(modifiers);
|
| + void test_parsePrimaryExpression_function_arguments() {
|
| + createParser('(int i) => i + 1');
|
| + Expression expression = parser.parsePrimaryExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(modifiers.factoryKeyword, isNotNull);
|
| + expect(expression, new isInstanceOf<FunctionExpression>());
|
| + FunctionExpression functionExpression = expression;
|
| + expect(functionExpression.parameters, isNotNull);
|
| + expect(functionExpression.body, isNotNull);
|
| }
|
|
|
| - void test_parseModifiers_final() {
|
| - createParser('final A');
|
| - Modifiers modifiers = parser.parseModifiers();
|
| - expectNotNullIfNoErrors(modifiers);
|
| + void test_parsePrimaryExpression_function_noArguments() {
|
| + createParser('() => 42');
|
| + Expression expression = parser.parsePrimaryExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(modifiers.finalKeyword, isNotNull);
|
| + expect(expression, new isInstanceOf<FunctionExpression>());
|
| + FunctionExpression functionExpression = expression;
|
| + expect(functionExpression.parameters, isNotNull);
|
| + expect(functionExpression.body, isNotNull);
|
| }
|
|
|
| - void test_parseModifiers_static() {
|
| - createParser('static A');
|
| - Modifiers modifiers = parser.parseModifiers();
|
| - expectNotNullIfNoErrors(modifiers);
|
| + void test_parsePrimaryExpression_genericFunctionExpression() {
|
| + createParser('<X, Y>(Map<X, Y> m, X x) => m[x]');
|
| + Expression expression = parser.parsePrimaryExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(modifiers.staticKeyword, isNotNull);
|
| + expect(expression, new isInstanceOf<FunctionExpression>());
|
| + FunctionExpression function = expression;
|
| + expect(function.typeParameters, isNotNull);
|
| }
|
|
|
| - void test_parseModifiers_var() {
|
| - createParser('var A');
|
| - Modifiers modifiers = parser.parseModifiers();
|
| - expectNotNullIfNoErrors(modifiers);
|
| + void test_parsePrimaryExpression_hex() {
|
| + String hexLiteral = "3F";
|
| + createParser('0x$hexLiteral');
|
| + Expression expression = parser.parsePrimaryExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(modifiers.varKeyword, isNotNull);
|
| + expect(expression, new isInstanceOf<IntegerLiteral>());
|
| + IntegerLiteral literal = expression;
|
| + expect(literal.literal, isNotNull);
|
| + expect(literal.value, int.parse(hexLiteral, radix: 16));
|
| }
|
|
|
| - void test_parseMultiplicativeExpression_normal() {
|
| - createParser('x * y');
|
| - Expression expression = parser.parseMultiplicativeExpression();
|
| + void test_parsePrimaryExpression_identifier() {
|
| + createParser('a');
|
| + Expression expression = parser.parsePrimaryExpression();
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<BinaryExpression>());
|
| - BinaryExpression binaryExpression = expression;
|
| - expect(binaryExpression.leftOperand, isNotNull);
|
| - expect(binaryExpression.operator, isNotNull);
|
| - expect(binaryExpression.operator.type, TokenType.STAR);
|
| - expect(binaryExpression.rightOperand, isNotNull);
|
| + expect(expression, new isInstanceOf<SimpleIdentifier>());
|
| + SimpleIdentifier identifier = expression;
|
| + expect(identifier, isNotNull);
|
| }
|
|
|
| - void test_parseMultiplicativeExpression_super() {
|
| - createParser('super * y');
|
| - Expression expression = parser.parseMultiplicativeExpression();
|
| + void test_parsePrimaryExpression_int() {
|
| + String intLiteral = "472";
|
| + createParser(intLiteral);
|
| + Expression expression = parser.parsePrimaryExpression();
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<BinaryExpression>());
|
| - BinaryExpression binaryExpression = expression;
|
| - expect(binaryExpression.leftOperand, new isInstanceOf<SuperExpression>());
|
| - expect(binaryExpression.operator, isNotNull);
|
| - expect(binaryExpression.operator.type, TokenType.STAR);
|
| - expect(binaryExpression.rightOperand, isNotNull);
|
| + expect(expression, new isInstanceOf<IntegerLiteral>());
|
| + IntegerLiteral literal = expression;
|
| + expect(literal.literal, isNotNull);
|
| + expect(literal.value, int.parse(intLiteral));
|
| }
|
|
|
| - void test_parseNewExpression() {
|
| - createParser('new A()');
|
| - InstanceCreationExpression expression = parser.parseNewExpression();
|
| + void test_parsePrimaryExpression_listLiteral() {
|
| + createParser('[ ]');
|
| + Expression expression = parser.parsePrimaryExpression();
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(expression.keyword, isNotNull);
|
| - ConstructorName name = expression.constructorName;
|
| - expect(name, isNotNull);
|
| - expect(name.type, isNotNull);
|
| - expect(name.period, isNull);
|
| - expect(name.name, isNull);
|
| - expect(expression.argumentList, isNotNull);
|
| + expect(expression, new isInstanceOf<ListLiteral>());
|
| + ListLiteral literal = expression;
|
| + expect(literal, isNotNull);
|
| }
|
|
|
| - void test_parseNonLabeledStatement_const_list_empty() {
|
| - createParser('const [];');
|
| - Statement statement = parser.parseNonLabeledStatement();
|
| - expectNotNullIfNoErrors(statement);
|
| + void test_parsePrimaryExpression_listLiteral_index() {
|
| + createParser('[]');
|
| + Expression expression = parser.parsePrimaryExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(statement, new isInstanceOf<ExpressionStatement>());
|
| - ExpressionStatement expressionStatement = statement;
|
| - expect(expressionStatement.expression, isNotNull);
|
| + expect(expression, new isInstanceOf<ListLiteral>());
|
| + ListLiteral literal = expression;
|
| + expect(literal, isNotNull);
|
| }
|
|
|
| - void test_parseNonLabeledStatement_const_list_nonEmpty() {
|
| - createParser('const [1, 2];');
|
| - Statement statement = parser.parseNonLabeledStatement();
|
| - expectNotNullIfNoErrors(statement);
|
| + void test_parsePrimaryExpression_listLiteral_typed() {
|
| + createParser('<A>[ ]');
|
| + Expression expression = parser.parsePrimaryExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(statement, new isInstanceOf<ExpressionStatement>());
|
| - ExpressionStatement expressionStatement = statement;
|
| - expect(expressionStatement.expression, isNotNull);
|
| + expect(expression, new isInstanceOf<ListLiteral>());
|
| + ListLiteral literal = expression;
|
| + expect(literal.typeArguments, isNotNull);
|
| + expect(literal.typeArguments.arguments, hasLength(1));
|
| }
|
|
|
| - void test_parseNonLabeledStatement_const_map_empty() {
|
| - createParser('const {};');
|
| - Statement statement = parser.parseNonLabeledStatement();
|
| - expectNotNullIfNoErrors(statement);
|
| + void test_parsePrimaryExpression_listLiteral_typed_genericComment() {
|
| + enableGenericMethodComments = true;
|
| + createParser('/*<A>*/[ ]');
|
| + Expression expression = parser.parsePrimaryExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(statement, new isInstanceOf<ExpressionStatement>());
|
| - ExpressionStatement expressionStatement = statement;
|
| - expect(expressionStatement.expression, isNotNull);
|
| + expect(expression, new isInstanceOf<ListLiteral>());
|
| + ListLiteral literal = expression;
|
| + expect(literal.typeArguments, isNotNull);
|
| + expect(literal.typeArguments.arguments, hasLength(1));
|
| }
|
|
|
| - void test_parseNonLabeledStatement_const_map_nonEmpty() {
|
| - // TODO(brianwilkerson) Implement more tests for this method.
|
| - createParser("const {'a' : 1};");
|
| - Statement statement = parser.parseNonLabeledStatement();
|
| - expectNotNullIfNoErrors(statement);
|
| + void test_parsePrimaryExpression_mapLiteral() {
|
| + createParser('{}');
|
| + Expression expression = parser.parsePrimaryExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(statement, new isInstanceOf<ExpressionStatement>());
|
| - ExpressionStatement expressionStatement = statement;
|
| - expect(expressionStatement.expression, isNotNull);
|
| + expect(expression, new isInstanceOf<MapLiteral>());
|
| + MapLiteral literal = expression;
|
| + expect(literal.typeArguments, isNull);
|
| + expect(literal, isNotNull);
|
| }
|
|
|
| - void test_parseNonLabeledStatement_const_object() {
|
| - createParser('const A();');
|
| - Statement statement = parser.parseNonLabeledStatement();
|
| - expectNotNullIfNoErrors(statement);
|
| + void test_parsePrimaryExpression_mapLiteral_typed() {
|
| + createParser('<A, B>{}');
|
| + Expression expression = parser.parsePrimaryExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(statement, new isInstanceOf<ExpressionStatement>());
|
| - ExpressionStatement expressionStatement = statement;
|
| - expect(expressionStatement.expression, isNotNull);
|
| + expect(expression, new isInstanceOf<MapLiteral>());
|
| + MapLiteral literal = expression;
|
| + expect(literal.typeArguments, isNotNull);
|
| + expect(literal.typeArguments.arguments, hasLength(2));
|
| }
|
|
|
| - void test_parseNonLabeledStatement_const_object_named_typeParameters() {
|
| - createParser('const A<B>.c();');
|
| - Statement statement = parser.parseNonLabeledStatement();
|
| - expectNotNullIfNoErrors(statement);
|
| + void test_parsePrimaryExpression_mapLiteral_typed_genericComment() {
|
| + enableGenericMethodComments = true;
|
| + createParser('/*<A, B>*/{}');
|
| + Expression expression = parser.parsePrimaryExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(statement, new isInstanceOf<ExpressionStatement>());
|
| - ExpressionStatement expressionStatement = statement;
|
| - expect(expressionStatement.expression, isNotNull);
|
| + expect(expression, new isInstanceOf<MapLiteral>());
|
| + MapLiteral literal = expression;
|
| + expect(literal.typeArguments, isNotNull);
|
| + expect(literal.typeArguments.arguments, hasLength(2));
|
| }
|
|
|
| - void test_parseNonLabeledStatement_constructorInvocation() {
|
| - createParser('new C().m();');
|
| - Statement statement = parser.parseNonLabeledStatement();
|
| - expectNotNullIfNoErrors(statement);
|
| + void test_parsePrimaryExpression_new() {
|
| + createParser('new A()');
|
| + Expression expression = parser.parsePrimaryExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(statement, new isInstanceOf<ExpressionStatement>());
|
| - ExpressionStatement expressionStatement = statement;
|
| - expect(expressionStatement.expression, isNotNull);
|
| + expect(expression, new isInstanceOf<InstanceCreationExpression>());
|
| + InstanceCreationExpression creation = expression;
|
| + expect(creation, isNotNull);
|
| }
|
|
|
| - void test_parseNonLabeledStatement_false() {
|
| - createParser('false;');
|
| - Statement statement = parser.parseNonLabeledStatement();
|
| - expectNotNullIfNoErrors(statement);
|
| + void test_parsePrimaryExpression_null() {
|
| + createParser('null');
|
| + Expression expression = parser.parsePrimaryExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(statement, new isInstanceOf<ExpressionStatement>());
|
| - ExpressionStatement expressionStatement = statement;
|
| - expect(expressionStatement.expression, isNotNull);
|
| + expect(expression, new isInstanceOf<NullLiteral>());
|
| + NullLiteral literal = expression;
|
| + expect(literal.literal, isNotNull);
|
| }
|
|
|
| - void test_parseNonLabeledStatement_functionDeclaration() {
|
| - createParser('f() {};');
|
| - Statement statement = parser.parseNonLabeledStatement();
|
| - expectNotNullIfNoErrors(statement);
|
| + void test_parsePrimaryExpression_parenthesized() {
|
| + createParser('(x)');
|
| + Expression expression = parser.parsePrimaryExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| + expect(expression, new isInstanceOf<ParenthesizedExpression>());
|
| + ParenthesizedExpression parens = expression;
|
| + expect(parens, isNotNull);
|
| }
|
|
|
| - void test_parseNonLabeledStatement_functionDeclaration_arguments() {
|
| - createParser('f(void g()) {};');
|
| - Statement statement = parser.parseNonLabeledStatement();
|
| - expectNotNullIfNoErrors(statement);
|
| + void test_parsePrimaryExpression_string() {
|
| + createParser('"string"');
|
| + Expression expression = parser.parsePrimaryExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| + expect(expression, new isInstanceOf<SimpleStringLiteral>());
|
| + SimpleStringLiteral literal = expression;
|
| + expect(literal.isMultiline, isFalse);
|
| + expect(literal.isRaw, isFalse);
|
| + expect(literal.value, "string");
|
| }
|
|
|
| - void test_parseNonLabeledStatement_functionExpressionIndex() {
|
| - createParser('() {}[0] = null;');
|
| - Statement statement = parser.parseNonLabeledStatement();
|
| - expectNotNullIfNoErrors(statement);
|
| + void test_parsePrimaryExpression_string_multiline() {
|
| + createParser("'''string'''");
|
| + Expression expression = parser.parsePrimaryExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| + expect(expression, new isInstanceOf<SimpleStringLiteral>());
|
| + SimpleStringLiteral literal = expression;
|
| + expect(literal.isMultiline, isTrue);
|
| + expect(literal.isRaw, isFalse);
|
| + expect(literal.value, "string");
|
| }
|
|
|
| - void test_parseNonLabeledStatement_functionInvocation() {
|
| - createParser('f();');
|
| - Statement statement = parser.parseNonLabeledStatement();
|
| - expectNotNullIfNoErrors(statement);
|
| + void test_parsePrimaryExpression_string_raw() {
|
| + createParser("r'string'");
|
| + Expression expression = parser.parsePrimaryExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(statement, new isInstanceOf<ExpressionStatement>());
|
| - ExpressionStatement expressionStatement = statement;
|
| - expect(expressionStatement.expression, isNotNull);
|
| + expect(expression, new isInstanceOf<SimpleStringLiteral>());
|
| + SimpleStringLiteral literal = expression;
|
| + expect(literal.isMultiline, isFalse);
|
| + expect(literal.isRaw, isTrue);
|
| + expect(literal.value, "string");
|
| }
|
|
|
| - void test_parseNonLabeledStatement_invokeFunctionExpression() {
|
| - createParser('(a) {return a + a;} (3);');
|
| - Statement statement = parser.parseNonLabeledStatement();
|
| - expectNotNullIfNoErrors(statement);
|
| + void test_parsePrimaryExpression_super() {
|
| + createParser('super.x');
|
| + Expression expression = parser.parsePrimaryExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(statement, new isInstanceOf<ExpressionStatement>());
|
| - ExpressionStatement expressionStatement = statement;
|
| - EngineTestCase.assertInstanceOf(
|
| - (obj) => obj is FunctionExpressionInvocation,
|
| - FunctionExpressionInvocation,
|
| - expressionStatement.expression);
|
| - FunctionExpressionInvocation invocation =
|
| - expressionStatement.expression as FunctionExpressionInvocation;
|
| - EngineTestCase.assertInstanceOf((obj) => obj is FunctionExpression,
|
| - FunctionExpression, invocation.function);
|
| - FunctionExpression expression = invocation.function as FunctionExpression;
|
| - expect(expression.parameters, isNotNull);
|
| - expect(expression.body, isNotNull);
|
| - expect(invocation.typeArguments, isNull);
|
| - ArgumentList list = invocation.argumentList;
|
| - expect(list, isNotNull);
|
| - expect(list.arguments, hasLength(1));
|
| + expect(expression, new isInstanceOf<PropertyAccess>());
|
| + PropertyAccess propertyAccess = expression;
|
| + expect(propertyAccess.target is SuperExpression, isTrue);
|
| + expect(propertyAccess.operator, isNotNull);
|
| + expect(propertyAccess.operator.type, TokenType.PERIOD);
|
| + expect(propertyAccess.propertyName, isNotNull);
|
| }
|
|
|
| - void test_parseNonLabeledStatement_null() {
|
| - createParser('null;');
|
| - Statement statement = parser.parseNonLabeledStatement();
|
| - expectNotNullIfNoErrors(statement);
|
| + void test_parsePrimaryExpression_this() {
|
| + createParser('this');
|
| + Expression expression = parser.parsePrimaryExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(statement, new isInstanceOf<ExpressionStatement>());
|
| - ExpressionStatement expressionStatement = statement;
|
| - expect(expressionStatement.expression, isNotNull);
|
| + expect(expression, new isInstanceOf<ThisExpression>());
|
| + ThisExpression thisExpression = expression;
|
| + expect(thisExpression.thisKeyword, isNotNull);
|
| }
|
|
|
| - void test_parseNonLabeledStatement_startingWithBuiltInIdentifier() {
|
| - createParser('library.getName();');
|
| - Statement statement = parser.parseNonLabeledStatement();
|
| - expectNotNullIfNoErrors(statement);
|
| + void test_parsePrimaryExpression_true() {
|
| + createParser('true');
|
| + Expression expression = parser.parsePrimaryExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(statement, new isInstanceOf<ExpressionStatement>());
|
| - ExpressionStatement expressionStatement = statement;
|
| - expect(expressionStatement.expression, isNotNull);
|
| + expect(expression, new isInstanceOf<BooleanLiteral>());
|
| + BooleanLiteral literal = expression;
|
| + expect(literal.literal, isNotNull);
|
| + expect(literal.value, isTrue);
|
| }
|
|
|
| - void test_parseNonLabeledStatement_true() {
|
| - createParser('true;');
|
| - Statement statement = parser.parseNonLabeledStatement();
|
| - expectNotNullIfNoErrors(statement);
|
| - listener.assertNoErrors();
|
| - expect(statement, new isInstanceOf<ExpressionStatement>());
|
| - ExpressionStatement expressionStatement = statement;
|
| - expect(expressionStatement.expression, isNotNull);
|
| + void test_Parser() {
|
| + expect(new Parser(null, null), isNotNull);
|
| }
|
|
|
| - void test_parseNonLabeledStatement_typeCast() {
|
| - createParser('double.NAN as num;');
|
| - Statement statement = parser.parseNonLabeledStatement();
|
| - expectNotNullIfNoErrors(statement);
|
| + void test_parseRedirectingConstructorInvocation_named() {
|
| + createParser('this.a()');
|
| + RedirectingConstructorInvocation invocation =
|
| + parser.parseRedirectingConstructorInvocation(true);
|
| + expectNotNullIfNoErrors(invocation);
|
| listener.assertNoErrors();
|
| - expect(statement, new isInstanceOf<ExpressionStatement>());
|
| - ExpressionStatement expressionStatement = statement;
|
| - expect(expressionStatement.expression, isNotNull);
|
| + expect(invocation.argumentList, isNotNull);
|
| + expect(invocation.constructorName, isNotNull);
|
| + expect(invocation.thisKeyword, isNotNull);
|
| + expect(invocation.period, isNotNull);
|
| }
|
|
|
| - void test_parseNormalFormalParameter_field_const_noType() {
|
| - createParser('const this.a)');
|
| - NormalFormalParameter parameter = parser.parseNormalFormalParameter();
|
| - expectNotNullIfNoErrors(parameter);
|
| + void test_parseRedirectingConstructorInvocation_unnamed() {
|
| + createParser('this()');
|
| + RedirectingConstructorInvocation invocation =
|
| + parser.parseRedirectingConstructorInvocation(false);
|
| + expectNotNullIfNoErrors(invocation);
|
| listener.assertNoErrors();
|
| - expect(parameter, new isInstanceOf<FieldFormalParameter>());
|
| - FieldFormalParameter fieldParameter = parameter;
|
| - expect(fieldParameter.keyword, isNotNull);
|
| - expect(fieldParameter.type, isNull);
|
| - expect(fieldParameter.identifier, isNotNull);
|
| - expect(fieldParameter.parameters, isNull);
|
| + expect(invocation.argumentList, isNotNull);
|
| + expect(invocation.constructorName, isNull);
|
| + expect(invocation.thisKeyword, isNotNull);
|
| + expect(invocation.period, isNull);
|
| }
|
|
|
| - void test_parseNormalFormalParameter_field_const_type() {
|
| - createParser('const A this.a)');
|
| - NormalFormalParameter parameter = parser.parseNormalFormalParameter();
|
| - expectNotNullIfNoErrors(parameter);
|
| + @failingTest
|
| + void test_parseRelationalExpression_as_functionType_noReturnType() {
|
| + createParser('x as Function(int)');
|
| + Expression expression = parser.parseRelationalExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(parameter, new isInstanceOf<FieldFormalParameter>());
|
| - FieldFormalParameter fieldParameter = parameter;
|
| - expect(fieldParameter.keyword, isNotNull);
|
| - expect(fieldParameter.type, isNotNull);
|
| - expect(fieldParameter.identifier, isNotNull);
|
| - expect(fieldParameter.parameters, isNull);
|
| + expect(expression, new isInstanceOf<AsExpression>());
|
| + AsExpression asExpression = expression;
|
| + expect(asExpression.expression, isNotNull);
|
| + expect(asExpression.asOperator, isNotNull);
|
| + expect(asExpression.type, new isInstanceOf<GenericFunctionType>());
|
| }
|
|
|
| - void test_parseNormalFormalParameter_field_final_noType() {
|
| - createParser('final this.a)');
|
| - NormalFormalParameter parameter = parser.parseNormalFormalParameter();
|
| - expectNotNullIfNoErrors(parameter);
|
| + @failingTest
|
| + void test_parseRelationalExpression_as_functionType_returnType() {
|
| + createParser('x as String Function(int)');
|
| + Expression expression = parser.parseRelationalExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(parameter, new isInstanceOf<FieldFormalParameter>());
|
| - FieldFormalParameter fieldParameter = parameter;
|
| - expect(fieldParameter.keyword, isNotNull);
|
| - expect(fieldParameter.type, isNull);
|
| - expect(fieldParameter.identifier, isNotNull);
|
| - expect(fieldParameter.parameters, isNull);
|
| + expect(expression, new isInstanceOf<AsExpression>());
|
| + AsExpression asExpression = expression;
|
| + expect(asExpression.expression, isNotNull);
|
| + expect(asExpression.asOperator, isNotNull);
|
| + expect(asExpression.type, new isInstanceOf<GenericFunctionType>());
|
| }
|
|
|
| - void test_parseNormalFormalParameter_field_final_type() {
|
| - createParser('final A this.a)');
|
| - NormalFormalParameter parameter = parser.parseNormalFormalParameter();
|
| - expectNotNullIfNoErrors(parameter);
|
| + void test_parseRelationalExpression_as_generic() {
|
| + createParser('x as C<D>');
|
| + Expression expression = parser.parseRelationalExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(parameter, new isInstanceOf<FieldFormalParameter>());
|
| - FieldFormalParameter fieldParameter = parameter;
|
| - expect(fieldParameter.keyword, isNotNull);
|
| - expect(fieldParameter.type, isNotNull);
|
| - expect(fieldParameter.identifier, isNotNull);
|
| - expect(fieldParameter.parameters, isNull);
|
| + expect(expression, new isInstanceOf<AsExpression>());
|
| + AsExpression asExpression = expression;
|
| + expect(asExpression.expression, isNotNull);
|
| + expect(asExpression.asOperator, isNotNull);
|
| + expect(asExpression.type, new isInstanceOf<TypeName>());
|
| }
|
|
|
| - void test_parseNormalFormalParameter_field_function_nested() {
|
| - createParser('this.a(B b))');
|
| - NormalFormalParameter parameter = parser.parseNormalFormalParameter();
|
| - expectNotNullIfNoErrors(parameter);
|
| + void test_parseRelationalExpression_as_nullable() {
|
| + enableNnbd = true;
|
| + createParser('x as Y?)');
|
| + Expression expression = parser.parseRelationalExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(parameter, new isInstanceOf<FieldFormalParameter>());
|
| - FieldFormalParameter fieldParameter = parameter;
|
| - expect(fieldParameter.keyword, isNull);
|
| - expect(fieldParameter.type, isNull);
|
| - expect(fieldParameter.identifier, isNotNull);
|
| - FormalParameterList parameterList = fieldParameter.parameters;
|
| - expect(parameterList, isNotNull);
|
| - expect(parameterList.parameters, hasLength(1));
|
| + expect(expression, new isInstanceOf<AsExpression>());
|
| + AsExpression asExpression = expression;
|
| + expect(asExpression.expression, isNotNull);
|
| + expect(asExpression.asOperator, isNotNull);
|
| + expect(asExpression.type, new isInstanceOf<TypeName>());
|
| }
|
|
|
| - void test_parseNormalFormalParameter_field_function_noNested() {
|
| - createParser('this.a())');
|
| - NormalFormalParameter parameter = parser.parseNormalFormalParameter();
|
| - expectNotNullIfNoErrors(parameter);
|
| + void test_parseRelationalExpression_as_simple() {
|
| + createParser('x as Y');
|
| + Expression expression = parser.parseRelationalExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(parameter, new isInstanceOf<FieldFormalParameter>());
|
| - FieldFormalParameter fieldParameter = parameter;
|
| - expect(fieldParameter.keyword, isNull);
|
| - expect(fieldParameter.type, isNull);
|
| - expect(fieldParameter.identifier, isNotNull);
|
| - FormalParameterList parameterList = fieldParameter.parameters;
|
| - expect(parameterList, isNotNull);
|
| - expect(parameterList.parameters, hasLength(0));
|
| + expect(expression, new isInstanceOf<AsExpression>());
|
| + AsExpression asExpression = expression;
|
| + expect(asExpression.expression, isNotNull);
|
| + expect(asExpression.asOperator, isNotNull);
|
| + expect(asExpression.type, new isInstanceOf<TypeName>());
|
| }
|
|
|
| - void test_parseNormalFormalParameter_field_noType() {
|
| - createParser('this.a)');
|
| - NormalFormalParameter parameter = parser.parseNormalFormalParameter();
|
| - expectNotNullIfNoErrors(parameter);
|
| + void test_parseRelationalExpression_as_simple_function() {
|
| + createParser('x as Function');
|
| + Expression expression = parser.parseRelationalExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(parameter, new isInstanceOf<FieldFormalParameter>());
|
| - FieldFormalParameter fieldParameter = parameter;
|
| - expect(fieldParameter.keyword, isNull);
|
| - expect(fieldParameter.type, isNull);
|
| - expect(fieldParameter.identifier, isNotNull);
|
| - expect(fieldParameter.parameters, isNull);
|
| + expect(expression, new isInstanceOf<AsExpression>());
|
| + AsExpression asExpression = expression;
|
| + expect(asExpression.expression, isNotNull);
|
| + expect(asExpression.asOperator, isNotNull);
|
| + expect(asExpression.type, new isInstanceOf<TypeName>());
|
| }
|
|
|
| - void test_parseNormalFormalParameter_field_type() {
|
| - createParser('A this.a)');
|
| - NormalFormalParameter parameter = parser.parseNormalFormalParameter();
|
| - expectNotNullIfNoErrors(parameter);
|
| + void test_parseRelationalExpression_is() {
|
| + createParser('x is y');
|
| + Expression expression = parser.parseRelationalExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(parameter, new isInstanceOf<FieldFormalParameter>());
|
| - FieldFormalParameter fieldParameter = parameter;
|
| - expect(fieldParameter.keyword, isNull);
|
| - expect(fieldParameter.type, isNotNull);
|
| - expect(fieldParameter.identifier, isNotNull);
|
| - expect(fieldParameter.parameters, isNull);
|
| + expect(expression, new isInstanceOf<IsExpression>());
|
| + IsExpression isExpression = expression;
|
| + expect(isExpression.expression, isNotNull);
|
| + expect(isExpression.isOperator, isNotNull);
|
| + expect(isExpression.notOperator, isNull);
|
| + expect(isExpression.type, isNotNull);
|
| }
|
|
|
| - void test_parseNormalFormalParameter_field_var() {
|
| - createParser('var this.a)');
|
| - NormalFormalParameter parameter = parser.parseNormalFormalParameter();
|
| - expectNotNullIfNoErrors(parameter);
|
| + void test_parseRelationalExpression_is_nullable() {
|
| + enableNnbd = true;
|
| + createParser('x is y?)');
|
| + Expression expression = parser.parseRelationalExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(parameter, new isInstanceOf<FieldFormalParameter>());
|
| - FieldFormalParameter fieldParameter = parameter;
|
| - expect(fieldParameter.keyword, isNotNull);
|
| - expect(fieldParameter.type, isNull);
|
| - expect(fieldParameter.identifier, isNotNull);
|
| - expect(fieldParameter.parameters, isNull);
|
| + expect(expression, new isInstanceOf<IsExpression>());
|
| + IsExpression isExpression = expression;
|
| + expect(isExpression.expression, isNotNull);
|
| + expect(isExpression.isOperator, isNotNull);
|
| + expect(isExpression.notOperator, isNull);
|
| + expect(isExpression.type, isNotNull);
|
| }
|
|
|
| - void test_parseNormalFormalParameter_function_noType() {
|
| - createParser('a())');
|
| - NormalFormalParameter parameter = parser.parseNormalFormalParameter();
|
| - expectNotNullIfNoErrors(parameter);
|
| + void test_parseRelationalExpression_isNot() {
|
| + createParser('x is! y');
|
| + Expression expression = parser.parseRelationalExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(parameter, new isInstanceOf<FunctionTypedFormalParameter>());
|
| - FunctionTypedFormalParameter functionParameter = parameter;
|
| - expect(functionParameter.returnType, isNull);
|
| - expect(functionParameter.identifier, isNotNull);
|
| - expect(functionParameter.typeParameters, isNull);
|
| - expect(functionParameter.parameters, isNotNull);
|
| + expect(expression, new isInstanceOf<IsExpression>());
|
| + IsExpression isExpression = expression;
|
| + expect(isExpression.expression, isNotNull);
|
| + expect(isExpression.isOperator, isNotNull);
|
| + expect(isExpression.notOperator, isNotNull);
|
| + expect(isExpression.type, isNotNull);
|
| }
|
|
|
| - void test_parseNormalFormalParameter_function_noType_nullable() {
|
| - enableNnbd = true;
|
| - createParser('a()?)');
|
| - NormalFormalParameter parameter = parser.parseNormalFormalParameter();
|
| - expectNotNullIfNoErrors(parameter);
|
| + void test_parseRelationalExpression_normal() {
|
| + createParser('x < y');
|
| + Expression expression = parser.parseRelationalExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(parameter, new isInstanceOf<FunctionTypedFormalParameter>());
|
| - FunctionTypedFormalParameter functionParameter = parameter;
|
| - expect(functionParameter.returnType, isNull);
|
| - expect(functionParameter.identifier, isNotNull);
|
| - expect(functionParameter.typeParameters, isNull);
|
| - expect(functionParameter.parameters, isNotNull);
|
| - expect(functionParameter.question, isNotNull);
|
| + expect(expression, new isInstanceOf<BinaryExpression>());
|
| + BinaryExpression binaryExpression = expression;
|
| + expect(binaryExpression.leftOperand, isNotNull);
|
| + expect(binaryExpression.operator, isNotNull);
|
| + expect(binaryExpression.operator.type, TokenType.LT);
|
| + expect(binaryExpression.rightOperand, isNotNull);
|
| }
|
|
|
| - void test_parseNormalFormalParameter_function_noType_typeParameterComments() {
|
| - enableGenericMethodComments = true;
|
| - createParser('a/*<E>*/())');
|
| - NormalFormalParameter parameter = parser.parseNormalFormalParameter();
|
| - expectNotNullIfNoErrors(parameter);
|
| + void test_parseRelationalExpression_super() {
|
| + createParser('super < y');
|
| + Expression expression = parser.parseRelationalExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(parameter, new isInstanceOf<FunctionTypedFormalParameter>());
|
| - FunctionTypedFormalParameter functionParameter = parameter;
|
| - expect(functionParameter.returnType, isNull);
|
| - expect(functionParameter.identifier, isNotNull);
|
| - expect(functionParameter.typeParameters, isNotNull);
|
| - expect(functionParameter.parameters, isNotNull);
|
| + expect(expression, new isInstanceOf<BinaryExpression>());
|
| + BinaryExpression binaryExpression = expression;
|
| + expect(binaryExpression.leftOperand, isNotNull);
|
| + expect(binaryExpression.operator, isNotNull);
|
| + expect(binaryExpression.operator.type, TokenType.LT);
|
| + expect(binaryExpression.rightOperand, isNotNull);
|
| }
|
|
|
| - void test_parseNormalFormalParameter_function_noType_typeParameters() {
|
| - createParser('a<E>())');
|
| - NormalFormalParameter parameter = parser.parseNormalFormalParameter();
|
| - expectNotNullIfNoErrors(parameter);
|
| + void test_parseRethrowExpression() {
|
| + createParser('rethrow;');
|
| + RethrowExpression expression = parser.parseRethrowExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(parameter, new isInstanceOf<FunctionTypedFormalParameter>());
|
| - FunctionTypedFormalParameter functionParameter = parameter;
|
| - expect(functionParameter.returnType, isNull);
|
| - expect(functionParameter.identifier, isNotNull);
|
| - expect(functionParameter.typeParameters, isNotNull);
|
| - expect(functionParameter.parameters, isNotNull);
|
| - expect(functionParameter.question, isNull);
|
| - expect(functionParameter.question, isNull);
|
| + expect(expression.rethrowKeyword, isNotNull);
|
| }
|
|
|
| - void
|
| - test_parseNormalFormalParameter_function_noType_typeParameters_nullable() {
|
| - enableNnbd = true;
|
| - createParser('a<E>()?)');
|
| - NormalFormalParameter parameter = parser.parseNormalFormalParameter();
|
| - expectNotNullIfNoErrors(parameter);
|
| + void test_parseReturnStatement_noValue() {
|
| + createParser('return;');
|
| + ReturnStatement statement = parser.parseReturnStatement();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(parameter, new isInstanceOf<FunctionTypedFormalParameter>());
|
| - FunctionTypedFormalParameter functionParameter = parameter;
|
| - expect(functionParameter.returnType, isNull);
|
| - expect(functionParameter.identifier, isNotNull);
|
| - expect(functionParameter.typeParameters, isNotNull);
|
| - expect(functionParameter.parameters, isNotNull);
|
| - expect(functionParameter.question, isNotNull);
|
| + expect(statement.returnKeyword, isNotNull);
|
| + expect(statement.expression, isNull);
|
| + expect(statement.semicolon, isNotNull);
|
| }
|
|
|
| - void test_parseNormalFormalParameter_function_type() {
|
| - createParser('A a())');
|
| - NormalFormalParameter parameter = parser.parseNormalFormalParameter();
|
| - expectNotNullIfNoErrors(parameter);
|
| + void test_parseReturnStatement_value() {
|
| + createParser('return x;');
|
| + ReturnStatement statement = parser.parseReturnStatement();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(parameter, new isInstanceOf<FunctionTypedFormalParameter>());
|
| - FunctionTypedFormalParameter functionParameter = parameter;
|
| - expect(functionParameter.returnType, isNotNull);
|
| - expect(functionParameter.identifier, isNotNull);
|
| - expect(functionParameter.typeParameters, isNull);
|
| - expect(functionParameter.parameters, isNotNull);
|
| - expect(functionParameter.question, isNull);
|
| + expect(statement.returnKeyword, isNotNull);
|
| + expect(statement.expression, isNotNull);
|
| + expect(statement.semicolon, isNotNull);
|
| }
|
|
|
| - void test_parseNormalFormalParameter_function_type_nullable() {
|
| - enableNnbd = true;
|
| - createParser('A a()?)');
|
| - NormalFormalParameter parameter = parser.parseNormalFormalParameter();
|
| - expectNotNullIfNoErrors(parameter);
|
| + @failingTest
|
| + void test_parseReturnType_function() {
|
| + createParser('A<B> Function<B>(B)');
|
| + GenericFunctionType type = parser.parseReturnType(false);
|
| + expectNotNullIfNoErrors(type);
|
| listener.assertNoErrors();
|
| - expect(parameter, new isInstanceOf<FunctionTypedFormalParameter>());
|
| - FunctionTypedFormalParameter functionParameter = parameter;
|
| - expect(functionParameter.returnType, isNotNull);
|
| - expect(functionParameter.identifier, isNotNull);
|
| - expect(functionParameter.typeParameters, isNull);
|
| - expect(functionParameter.parameters, isNotNull);
|
| - expect(functionParameter.question, isNotNull);
|
| + expect(type.returnType, isNotNull);
|
| + expect(type.typeParameters, isNotNull);
|
| + expect(type.parameters, isNotNull);
|
| }
|
|
|
| - void test_parseNormalFormalParameter_function_type_typeParameterComments() {
|
| - enableGenericMethodComments = true;
|
| - createParser('A a/*<E>*/())');
|
| - NormalFormalParameter parameter = parser.parseNormalFormalParameter();
|
| - expectNotNullIfNoErrors(parameter);
|
| + void test_parseReturnType_named() {
|
| + createParser('A<B>');
|
| + TypeName typeName = parser.parseReturnType(false);
|
| + expectNotNullIfNoErrors(typeName);
|
| listener.assertNoErrors();
|
| - expect(parameter, new isInstanceOf<FunctionTypedFormalParameter>());
|
| - FunctionTypedFormalParameter functionParameter = parameter;
|
| - expect(functionParameter.returnType, isNotNull);
|
| - expect(functionParameter.identifier, isNotNull);
|
| - expect(functionParameter.typeParameters, isNotNull);
|
| - expect(functionParameter.parameters, isNotNull);
|
| - expect(functionParameter.question, isNull);
|
| + expect(typeName.name, isNotNull);
|
| + expect(typeName.typeArguments, isNotNull);
|
| }
|
|
|
| - void test_parseNormalFormalParameter_function_type_typeParameters() {
|
| - createParser('A a<E>())');
|
| - NormalFormalParameter parameter = parser.parseNormalFormalParameter();
|
| - expectNotNullIfNoErrors(parameter);
|
| + void test_parseReturnType_void() {
|
| + createParser('void');
|
| + TypeName typeName = parser.parseReturnType(false);
|
| + expectNotNullIfNoErrors(typeName);
|
| listener.assertNoErrors();
|
| - expect(parameter, new isInstanceOf<FunctionTypedFormalParameter>());
|
| - FunctionTypedFormalParameter functionParameter = parameter;
|
| - expect(functionParameter.returnType, isNotNull);
|
| - expect(functionParameter.identifier, isNotNull);
|
| - expect(functionParameter.typeParameters, isNotNull);
|
| - expect(functionParameter.parameters, isNotNull);
|
| - expect(functionParameter.question, isNull);
|
| + expect(typeName.name, isNotNull);
|
| + expect(typeName.typeArguments, isNull);
|
| }
|
|
|
| - void test_parseNormalFormalParameter_function_type_typeParameters_nullable() {
|
| - enableNnbd = true;
|
| - createParser('A a<E>()?)');
|
| - NormalFormalParameter parameter = parser.parseNormalFormalParameter();
|
| - expectNotNullIfNoErrors(parameter);
|
| + void test_parseSetter_nonStatic() {
|
| + createParser('/// Doc\nT set a(var x);');
|
| + MethodDeclaration method = parser.parseClassMember('C');
|
| + expectNotNullIfNoErrors(method);
|
| listener.assertNoErrors();
|
| - expect(parameter, new isInstanceOf<FunctionTypedFormalParameter>());
|
| - FunctionTypedFormalParameter functionParameter = parameter;
|
| - expect(functionParameter.returnType, isNotNull);
|
| - expect(functionParameter.identifier, isNotNull);
|
| - expect(functionParameter.typeParameters, isNotNull);
|
| - expect(functionParameter.parameters, isNotNull);
|
| - expect(functionParameter.question, isNotNull);
|
| + expect(method.body, isNotNull);
|
| + expectCommentText(method.documentationComment, '/// Doc');
|
| + expect(method.externalKeyword, isNull);
|
| + expect(method.modifierKeyword, isNull);
|
| + expect(method.name, isNotNull);
|
| + expect(method.operatorKeyword, isNull);
|
| + expect(method.typeParameters, isNull);
|
| + expect(method.parameters, isNotNull);
|
| + expect(method.propertyKeyword, isNotNull);
|
| + expect((method.returnType as TypeName).name.name, 'T');
|
| }
|
|
|
| - void test_parseNormalFormalParameter_function_void() {
|
| - createParser('void a())');
|
| - NormalFormalParameter parameter = parser.parseNormalFormalParameter();
|
| - expectNotNullIfNoErrors(parameter);
|
| + void test_parseSetter_static() {
|
| + createParser('/// Doc\nstatic T set a(var x) {}');
|
| + MethodDeclaration method = parser.parseClassMember('C');
|
| + expectNotNullIfNoErrors(method);
|
| listener.assertNoErrors();
|
| - expect(parameter, new isInstanceOf<FunctionTypedFormalParameter>());
|
| - FunctionTypedFormalParameter functionParameter = parameter;
|
| - expect(functionParameter.returnType, isNotNull);
|
| - expect(functionParameter.identifier, isNotNull);
|
| - expect(functionParameter.typeParameters, isNull);
|
| - expect(functionParameter.parameters, isNotNull);
|
| - expect(functionParameter.question, isNull);
|
| - }
|
| -
|
| - void test_parseNormalFormalParameter_function_void_nullable() {
|
| - enableNnbd = true;
|
| - createParser('void a()?)');
|
| - NormalFormalParameter parameter = parser.parseNormalFormalParameter();
|
| - expectNotNullIfNoErrors(parameter);
|
| - listener.assertNoErrors();
|
| - expect(parameter, new isInstanceOf<FunctionTypedFormalParameter>());
|
| - FunctionTypedFormalParameter functionParameter = parameter;
|
| - expect(functionParameter.returnType, isNotNull);
|
| - expect(functionParameter.identifier, isNotNull);
|
| - expect(functionParameter.typeParameters, isNull);
|
| - expect(functionParameter.parameters, isNotNull);
|
| - expect(functionParameter.question, isNotNull);
|
| + expect(method.body, isNotNull);
|
| + expectCommentText(method.documentationComment, '/// Doc');
|
| + expect(method.externalKeyword, isNull);
|
| + expect(method.modifierKeyword.lexeme, 'static');
|
| + expect(method.name, isNotNull);
|
| + expect(method.operatorKeyword, isNull);
|
| + expect(method.typeParameters, isNull);
|
| + expect(method.parameters, isNotNull);
|
| + expect(method.propertyKeyword, isNotNull);
|
| + expect((method.returnType as TypeName).name.name, 'T');
|
| }
|
|
|
| - void test_parseNormalFormalParameter_function_void_typeParameterComments() {
|
| - enableGenericMethodComments = true;
|
| - createParser('void a/*<E>*/())');
|
| - NormalFormalParameter parameter = parser.parseNormalFormalParameter();
|
| - expectNotNullIfNoErrors(parameter);
|
| + void test_parseShiftExpression_normal() {
|
| + createParser('x << y');
|
| + BinaryExpression expression = parser.parseShiftExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(parameter, new isInstanceOf<FunctionTypedFormalParameter>());
|
| - FunctionTypedFormalParameter functionParameter = parameter;
|
| - expect(functionParameter.returnType, isNotNull);
|
| - expect(functionParameter.identifier, isNotNull);
|
| - expect(functionParameter.typeParameters, isNotNull);
|
| - expect(functionParameter.parameters, isNotNull);
|
| - expect(functionParameter.question, isNull);
|
| + expect(expression.leftOperand, isNotNull);
|
| + expect(expression.operator, isNotNull);
|
| + expect(expression.operator.type, TokenType.LT_LT);
|
| + expect(expression.rightOperand, isNotNull);
|
| }
|
|
|
| - void test_parseNormalFormalParameter_function_void_typeParameters() {
|
| - createParser('void a<E>())');
|
| - NormalFormalParameter parameter = parser.parseNormalFormalParameter();
|
| - expectNotNullIfNoErrors(parameter);
|
| + void test_parseShiftExpression_super() {
|
| + createParser('super << y');
|
| + BinaryExpression expression = parser.parseShiftExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(parameter, new isInstanceOf<FunctionTypedFormalParameter>());
|
| - FunctionTypedFormalParameter functionParameter = parameter;
|
| - expect(functionParameter.returnType, isNotNull);
|
| - expect(functionParameter.identifier, isNotNull);
|
| - expect(functionParameter.typeParameters, isNotNull);
|
| - expect(functionParameter.parameters, isNotNull);
|
| - expect(functionParameter.question, isNull);
|
| + expect(expression.leftOperand, isNotNull);
|
| + expect(expression.operator, isNotNull);
|
| + expect(expression.operator.type, TokenType.LT_LT);
|
| + expect(expression.rightOperand, isNotNull);
|
| }
|
|
|
| - void test_parseNormalFormalParameter_function_void_typeParameters_nullable() {
|
| - enableNnbd = true;
|
| - createParser('void a<E>()?)');
|
| - NormalFormalParameter parameter = parser.parseNormalFormalParameter();
|
| - expectNotNullIfNoErrors(parameter);
|
| - listener.assertNoErrors();
|
| - expect(parameter, new isInstanceOf<FunctionTypedFormalParameter>());
|
| - FunctionTypedFormalParameter functionParameter = parameter;
|
| - expect(functionParameter.returnType, isNotNull);
|
| - expect(functionParameter.identifier, isNotNull);
|
| - expect(functionParameter.typeParameters, isNotNull);
|
| - expect(functionParameter.parameters, isNotNull);
|
| - expect(functionParameter.question, isNotNull);
|
| + void test_parseSimpleIdentifier1_normalIdentifier() {
|
| + // TODO(brianwilkerson) Implement tests for this method.
|
| }
|
|
|
| - void test_parseNormalFormalParameter_simple_const_noType() {
|
| - createParser('const a)');
|
| - NormalFormalParameter parameter = parser.parseNormalFormalParameter();
|
| - expectNotNullIfNoErrors(parameter);
|
| + void test_parseSimpleIdentifier_builtInIdentifier() {
|
| + String lexeme = "as";
|
| + createParser(lexeme);
|
| + SimpleIdentifier identifier = parser.parseSimpleIdentifier();
|
| + expectNotNullIfNoErrors(identifier);
|
| listener.assertNoErrors();
|
| - expect(parameter, new isInstanceOf<SimpleFormalParameter>());
|
| - SimpleFormalParameter simpleParameter = parameter;
|
| - expect(simpleParameter.keyword, isNotNull);
|
| - expect(simpleParameter.type, isNull);
|
| - expect(simpleParameter.identifier, isNotNull);
|
| + expect(identifier.token, isNotNull);
|
| + expect(identifier.name, lexeme);
|
| }
|
|
|
| - void test_parseNormalFormalParameter_simple_const_type() {
|
| - createParser('const A a)');
|
| - NormalFormalParameter parameter = parser.parseNormalFormalParameter();
|
| - expectNotNullIfNoErrors(parameter);
|
| + void test_parseSimpleIdentifier_normalIdentifier() {
|
| + String lexeme = "foo";
|
| + createParser(lexeme);
|
| + SimpleIdentifier identifier = parser.parseSimpleIdentifier();
|
| + expectNotNullIfNoErrors(identifier);
|
| listener.assertNoErrors();
|
| - expect(parameter, new isInstanceOf<SimpleFormalParameter>());
|
| - SimpleFormalParameter simpleParameter = parameter;
|
| - expect(simpleParameter.keyword, isNotNull);
|
| - expect(simpleParameter.type, isNotNull);
|
| - expect(simpleParameter.identifier, isNotNull);
|
| + expect(identifier.token, isNotNull);
|
| + expect(identifier.name, lexeme);
|
| }
|
|
|
| - void test_parseNormalFormalParameter_simple_final_noType() {
|
| - createParser('final a)');
|
| - NormalFormalParameter parameter = parser.parseNormalFormalParameter();
|
| - expectNotNullIfNoErrors(parameter);
|
| - listener.assertNoErrors();
|
| - expect(parameter, new isInstanceOf<SimpleFormalParameter>());
|
| - SimpleFormalParameter simpleParameter = parameter;
|
| - expect(simpleParameter.keyword, isNotNull);
|
| - expect(simpleParameter.type, isNull);
|
| - expect(simpleParameter.identifier, isNotNull);
|
| + void test_parseStatement_emptyTypeArgumentList() {
|
| + createParser('C<> c;');
|
| + Statement statement = parser.parseStatement2();
|
| + expectNotNullIfNoErrors(statement);
|
| + listener.assertErrorsWithCodes([ParserErrorCode.EXPECTED_TYPE_NAME]);
|
| + expect(statement, new isInstanceOf<VariableDeclarationStatement>());
|
| + VariableDeclarationStatement declaration = statement;
|
| + VariableDeclarationList variables = declaration.variables;
|
| + TypeName type = variables.type;
|
| + TypeArgumentList argumentList = type.typeArguments;
|
| + expect(argumentList.leftBracket, isNotNull);
|
| + expect(argumentList.arguments, hasLength(1));
|
| + expect(argumentList.arguments[0].isSynthetic, isTrue);
|
| + expect(argumentList.rightBracket, isNotNull);
|
| }
|
|
|
| - void test_parseNormalFormalParameter_simple_final_type() {
|
| - createParser('final A a)');
|
| - NormalFormalParameter parameter = parser.parseNormalFormalParameter();
|
| - expectNotNullIfNoErrors(parameter);
|
| + void test_parseStatement_functionDeclaration_noReturnType() {
|
| + createParser('f(a, b) {};');
|
| + Statement statement = parser.parseStatement2();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(parameter, new isInstanceOf<SimpleFormalParameter>());
|
| - SimpleFormalParameter simpleParameter = parameter;
|
| - expect(simpleParameter.keyword, isNotNull);
|
| - expect(simpleParameter.type, isNotNull);
|
| - expect(simpleParameter.identifier, isNotNull);
|
| + expect(statement, new isInstanceOf<FunctionDeclarationStatement>());
|
| + FunctionDeclarationStatement declaration = statement;
|
| + expect(declaration.functionDeclaration, isNotNull);
|
| }
|
|
|
| - void test_parseNormalFormalParameter_simple_noName() {
|
| - createParser('a)');
|
| - NormalFormalParameter parameter =
|
| - parser.parseNormalFormalParameter(inFunctionType: true);
|
| - expectNotNullIfNoErrors(parameter);
|
| + void
|
| + test_parseStatement_functionDeclaration_noReturnType_typeParameterComments() {
|
| + enableGenericMethodComments = true;
|
| + createParser('f/*<E>*/(a, b) {};');
|
| + Statement statement = parser.parseStatement2();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(parameter, new isInstanceOf<SimpleFormalParameter>());
|
| - SimpleFormalParameter simpleParameter = parameter;
|
| - expect(simpleParameter.keyword, isNull);
|
| - expect(simpleParameter.type, isNotNull);
|
| - expect(simpleParameter.identifier, isNull);
|
| + expect(statement, new isInstanceOf<FunctionDeclarationStatement>());
|
| + FunctionDeclarationStatement declaration = statement;
|
| + expect(declaration.functionDeclaration, isNotNull);
|
| + expect(declaration.functionDeclaration.functionExpression.typeParameters,
|
| + isNotNull);
|
| }
|
|
|
| - void test_parseNormalFormalParameter_simple_noType() {
|
| - createParser('a)');
|
| - NormalFormalParameter parameter = parser.parseNormalFormalParameter();
|
| - expectNotNullIfNoErrors(parameter);
|
| + void test_parseStatement_functionDeclaration_noReturnType_typeParameters() {
|
| + createParser('f<E>(a, b) {};');
|
| + Statement statement = parser.parseStatement2();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(parameter, new isInstanceOf<SimpleFormalParameter>());
|
| - SimpleFormalParameter simpleParameter = parameter;
|
| - expect(simpleParameter.keyword, isNull);
|
| - expect(simpleParameter.type, isNull);
|
| - expect(simpleParameter.identifier, isNotNull);
|
| + expect(statement, new isInstanceOf<FunctionDeclarationStatement>());
|
| + FunctionDeclarationStatement declaration = statement;
|
| + expect(declaration.functionDeclaration, isNotNull);
|
| }
|
|
|
| - void test_parseNormalFormalParameter_simple_noType_namedCovariant() {
|
| - createParser('covariant)');
|
| - NormalFormalParameter parameter = parser.parseNormalFormalParameter();
|
| - expectNotNullIfNoErrors(parameter);
|
| + void test_parseStatement_functionDeclaration_returnType() {
|
| + // TODO(brianwilkerson) Implement more tests for this method.
|
| + createParser('int f(a, b) {};');
|
| + Statement statement = parser.parseStatement2();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(parameter, new isInstanceOf<SimpleFormalParameter>());
|
| - SimpleFormalParameter simpleParameter = parameter;
|
| - expect(simpleParameter.covariantKeyword, isNull);
|
| - expect(simpleParameter.keyword, isNull);
|
| - expect(simpleParameter.type, isNull);
|
| - expect(simpleParameter.identifier, isNotNull);
|
| + expect(statement, new isInstanceOf<FunctionDeclarationStatement>());
|
| + FunctionDeclarationStatement declaration = statement;
|
| + expect(declaration.functionDeclaration, isNotNull);
|
| }
|
|
|
| - void test_parseNormalFormalParameter_simple_type() {
|
| - createParser('A a)');
|
| - NormalFormalParameter parameter = parser.parseNormalFormalParameter();
|
| - expectNotNullIfNoErrors(parameter);
|
| + void test_parseStatement_functionDeclaration_returnType_typeParameters() {
|
| + createParser('int f<E>(a, b) {};');
|
| + Statement statement = parser.parseStatement2();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(parameter, new isInstanceOf<SimpleFormalParameter>());
|
| - SimpleFormalParameter simpleParameter = parameter;
|
| - expect(simpleParameter.keyword, isNull);
|
| - expect(simpleParameter.type, isNotNull);
|
| - expect(simpleParameter.identifier, isNotNull);
|
| + expect(statement, new isInstanceOf<FunctionDeclarationStatement>());
|
| + FunctionDeclarationStatement declaration = statement;
|
| + expect(declaration.functionDeclaration, isNotNull);
|
| }
|
|
|
| - void test_parseOperator() {
|
| - createParser('/// Doc\nT operator +(A a);');
|
| - MethodDeclaration method = parser.parseClassMember('C');
|
| - expectNotNullIfNoErrors(method);
|
| + void test_parseStatement_mulipleLabels() {
|
| + createParser('l: m: return x;');
|
| + Statement statement = parser.parseStatement2();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(method.body, isNotNull);
|
| - _expectCommentText(method.documentationComment, '/// Doc');
|
| - expect(method.externalKeyword, isNull);
|
| - expect(method.modifierKeyword, isNull);
|
| - expect(method.name, isNotNull);
|
| - expect(method.operatorKeyword, isNotNull);
|
| - expect(method.typeParameters, isNull);
|
| - expect(method.parameters, isNotNull);
|
| - expect(method.propertyKeyword, isNull);
|
| - expect((method.returnType as TypeName).name.name, 'T');
|
| - }
|
| -
|
| - void test_parseOptionalReturnType() {
|
| - // TODO(brianwilkerson) Implement tests for this method.
|
| + expect(statement, new isInstanceOf<LabeledStatement>());
|
| + LabeledStatement labeledStatement = statement;
|
| + expect(labeledStatement.labels, hasLength(2));
|
| + expect(labeledStatement.statement, isNotNull);
|
| }
|
|
|
| - void test_parsePartDirective() {
|
| - createParser("part 'lib/lib.dart';");
|
| - PartDirective directive = parseFullDirective();
|
| - expectNotNullIfNoErrors(directive);
|
| + void test_parseStatement_noLabels() {
|
| + createParser('return x;');
|
| + Statement statement = parser.parseStatement2();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(directive.partKeyword, isNotNull);
|
| - expect(directive.uri, isNotNull);
|
| - expect(directive.semicolon, isNotNull);
|
| }
|
|
|
| - void test_parsePartOfDirective_name() {
|
| - enableUriInPartOf = true;
|
| - createParser("part of l;");
|
| - PartOfDirective directive = parseFullDirective();
|
| - expect(directive.partKeyword, isNotNull);
|
| - expect(directive.ofKeyword, isNotNull);
|
| - expect(directive.libraryName, isNotNull);
|
| - expect(directive.uri, isNull);
|
| - expect(directive.semicolon, isNotNull);
|
| + void test_parseStatement_singleLabel() {
|
| + createParser('l: return x;');
|
| + Statement statement = parser.parseStatement2();
|
| + expectNotNullIfNoErrors(statement);
|
| + listener.assertNoErrors();
|
| + expect(statement, new isInstanceOf<LabeledStatement>());
|
| + LabeledStatement labeledStatement = statement;
|
| + expect(labeledStatement.labels, hasLength(1));
|
| + expect(labeledStatement.labels[0].label.inDeclarationContext(), isTrue);
|
| + expect(labeledStatement.statement, isNotNull);
|
| }
|
|
|
| - void test_parsePartOfDirective_uri() {
|
| - enableUriInPartOf = true;
|
| - createParser("part of 'lib.dart';");
|
| - PartOfDirective directive = parseFullDirective();
|
| - expect(directive.partKeyword, isNotNull);
|
| - expect(directive.ofKeyword, isNotNull);
|
| - expect(directive.libraryName, isNull);
|
| - expect(directive.uri, isNotNull);
|
| - expect(directive.semicolon, isNotNull);
|
| + void test_parseStatements_multiple() {
|
| + List<Statement> statements = parseStatements("return; return;", 2);
|
| + expect(statements, hasLength(2));
|
| }
|
|
|
| - void test_parsePostfixExpression_decrement() {
|
| - createParser('i--');
|
| - Expression expression = parser.parsePostfixExpression();
|
| - expectNotNullIfNoErrors(expression);
|
| - listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<PostfixExpression>());
|
| - PostfixExpression postfixExpression = expression;
|
| - expect(postfixExpression.operand, isNotNull);
|
| - expect(postfixExpression.operator, isNotNull);
|
| - expect(postfixExpression.operator.type, TokenType.MINUS_MINUS);
|
| + void test_parseStatements_single() {
|
| + List<Statement> statements = parseStatements("return;", 1);
|
| + expect(statements, hasLength(1));
|
| }
|
|
|
| - void test_parsePostfixExpression_increment() {
|
| - createParser('i++');
|
| - Expression expression = parser.parsePostfixExpression();
|
| + void test_parseStringLiteral_adjacent() {
|
| + createParser("'a' 'b'");
|
| + Expression expression = parser.parseStringLiteral();
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<PostfixExpression>());
|
| - PostfixExpression postfixExpression = expression;
|
| - expect(postfixExpression.operand, isNotNull);
|
| - expect(postfixExpression.operator, isNotNull);
|
| - expect(postfixExpression.operator.type, TokenType.PLUS_PLUS);
|
| + expect(expression, new isInstanceOf<AdjacentStrings>());
|
| + AdjacentStrings literal = expression;
|
| + NodeList<StringLiteral> strings = literal.strings;
|
| + expect(strings, hasLength(2));
|
| + StringLiteral firstString = strings[0];
|
| + StringLiteral secondString = strings[1];
|
| + expect((firstString as SimpleStringLiteral).value, "a");
|
| + expect((secondString as SimpleStringLiteral).value, "b");
|
| }
|
|
|
| - void test_parsePostfixExpression_none_indexExpression() {
|
| - createParser('a[0]');
|
| - Expression expression = parser.parsePostfixExpression();
|
| + void test_parseStringLiteral_endsWithInterpolation() {
|
| + createParser(r"'x$y'");
|
| + Expression expression = parser.parseStringLiteral();
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<IndexExpression>());
|
| - IndexExpression indexExpression = expression;
|
| - expect(indexExpression.target, isNotNull);
|
| - expect(indexExpression.index, isNotNull);
|
| + expect(expression, new isInstanceOf<StringInterpolation>());
|
| + StringInterpolation interpolation = expression;
|
| + expect(interpolation.elements, hasLength(3));
|
| + expect(interpolation.elements[0], new isInstanceOf<InterpolationString>());
|
| + InterpolationString element0 = interpolation.elements[0];
|
| + expect(element0.value, 'x');
|
| + expect(
|
| + interpolation.elements[1], new isInstanceOf<InterpolationExpression>());
|
| + InterpolationExpression element1 = interpolation.elements[1];
|
| + expect(element1.expression, new isInstanceOf<SimpleIdentifier>());
|
| + expect(interpolation.elements[2], new isInstanceOf<InterpolationString>());
|
| + InterpolationString element2 = interpolation.elements[2];
|
| + expect(element2.value, '');
|
| }
|
|
|
| - void test_parsePostfixExpression_none_methodInvocation() {
|
| - createParser('a.m()');
|
| - Expression expression = parser.parsePostfixExpression();
|
| + void test_parseStringLiteral_interpolated() {
|
| + createParser("'a \${b} c \$this d'");
|
| + Expression expression = parser.parseStringLiteral();
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<MethodInvocation>());
|
| - MethodInvocation methodInvocation = expression;
|
| - expect(methodInvocation.target, isNotNull);
|
| - expect(methodInvocation.operator.type, TokenType.PERIOD);
|
| - expect(methodInvocation.methodName, isNotNull);
|
| - expect(methodInvocation.typeArguments, isNull);
|
| - expect(methodInvocation.argumentList, isNotNull);
|
| + expect(expression, new isInstanceOf<StringInterpolation>());
|
| + StringInterpolation literal = expression;
|
| + NodeList<InterpolationElement> elements = literal.elements;
|
| + expect(elements, hasLength(5));
|
| + expect(elements[0] is InterpolationString, isTrue);
|
| + expect(elements[1] is InterpolationExpression, isTrue);
|
| + expect(elements[2] is InterpolationString, isTrue);
|
| + expect(elements[3] is InterpolationExpression, isTrue);
|
| + expect(elements[4] is InterpolationString, isTrue);
|
| }
|
|
|
| - void test_parsePostfixExpression_none_methodInvocation_question_dot() {
|
| - createParser('a?.m()');
|
| - Expression expression = parser.parsePostfixExpression();
|
| + void test_parseStringLiteral_multiline_encodedSpace() {
|
| + createParser("'''\\x20\na'''");
|
| + Expression expression = parser.parseStringLiteral();
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<MethodInvocation>());
|
| - MethodInvocation methodInvocation = expression;
|
| - expect(methodInvocation.target, isNotNull);
|
| - expect(methodInvocation.operator.type, TokenType.QUESTION_PERIOD);
|
| - expect(methodInvocation.methodName, isNotNull);
|
| - expect(methodInvocation.typeArguments, isNull);
|
| - expect(methodInvocation.argumentList, isNotNull);
|
| + expect(expression, new isInstanceOf<SimpleStringLiteral>());
|
| + SimpleStringLiteral literal = expression;
|
| + expect(literal.literal, isNotNull);
|
| + expect(literal.value, " \na");
|
| }
|
|
|
| - void
|
| - test_parsePostfixExpression_none_methodInvocation_question_dot_typeArgumentComments() {
|
| - enableGenericMethodComments = true;
|
| - createParser('a?.m/*<E>*/()');
|
| - Expression expression = parser.parsePostfixExpression();
|
| + void test_parseStringLiteral_multiline_endsWithInterpolation() {
|
| + createParser(r"'''x$y'''");
|
| + Expression expression = parser.parseStringLiteral();
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<MethodInvocation>());
|
| - MethodInvocation methodInvocation = expression;
|
| - expect(methodInvocation.target, isNotNull);
|
| - expect(methodInvocation.operator.type, TokenType.QUESTION_PERIOD);
|
| - expect(methodInvocation.methodName, isNotNull);
|
| - expect(methodInvocation.typeArguments, isNotNull);
|
| - expect(methodInvocation.argumentList, isNotNull);
|
| + expect(expression, new isInstanceOf<StringInterpolation>());
|
| + StringInterpolation interpolation = expression;
|
| + expect(interpolation.elements, hasLength(3));
|
| + expect(interpolation.elements[0], new isInstanceOf<InterpolationString>());
|
| + InterpolationString element0 = interpolation.elements[0];
|
| + expect(element0.value, 'x');
|
| + expect(
|
| + interpolation.elements[1], new isInstanceOf<InterpolationExpression>());
|
| + InterpolationExpression element1 = interpolation.elements[1];
|
| + expect(element1.expression, new isInstanceOf<SimpleIdentifier>());
|
| + expect(interpolation.elements[2], new isInstanceOf<InterpolationString>());
|
| + InterpolationString element2 = interpolation.elements[2];
|
| + expect(element2.value, '');
|
| }
|
|
|
| - void
|
| - test_parsePostfixExpression_none_methodInvocation_question_dot_typeArguments() {
|
| - createParser('a?.m<E>()');
|
| - Expression expression = parser.parsePostfixExpression();
|
| + void test_parseStringLiteral_multiline_escapedBackslash() {
|
| + createParser("'''\\\\\na'''");
|
| + Expression expression = parser.parseStringLiteral();
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<MethodInvocation>());
|
| - MethodInvocation methodInvocation = expression;
|
| - expect(methodInvocation.target, isNotNull);
|
| - expect(methodInvocation.operator.type, TokenType.QUESTION_PERIOD);
|
| - expect(methodInvocation.methodName, isNotNull);
|
| - expect(methodInvocation.typeArguments, isNotNull);
|
| - expect(methodInvocation.argumentList, isNotNull);
|
| + expect(expression, new isInstanceOf<SimpleStringLiteral>());
|
| + SimpleStringLiteral literal = expression;
|
| + expect(literal.literal, isNotNull);
|
| + expect(literal.value, "\\\na");
|
| }
|
|
|
| - void
|
| - test_parsePostfixExpression_none_methodInvocation_typeArgumentComments() {
|
| - enableGenericMethodComments = true;
|
| - createParser('a.m/*<E>*/()');
|
| - Expression expression = parser.parsePostfixExpression();
|
| + void test_parseStringLiteral_multiline_escapedBackslash_raw() {
|
| + createParser("r'''\\\\\na'''");
|
| + Expression expression = parser.parseStringLiteral();
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<MethodInvocation>());
|
| - MethodInvocation methodInvocation = expression;
|
| - expect(methodInvocation.target, isNotNull);
|
| - expect(methodInvocation.operator.type, TokenType.PERIOD);
|
| - expect(methodInvocation.methodName, isNotNull);
|
| - expect(methodInvocation.typeArguments, isNotNull);
|
| - expect(methodInvocation.argumentList, isNotNull);
|
| + expect(expression, new isInstanceOf<SimpleStringLiteral>());
|
| + SimpleStringLiteral literal = expression;
|
| + expect(literal.literal, isNotNull);
|
| + expect(literal.value, "\\\\\na");
|
| }
|
|
|
| - void test_parsePostfixExpression_none_methodInvocation_typeArguments() {
|
| - createParser('a.m<E>()');
|
| - Expression expression = parser.parsePostfixExpression();
|
| + void test_parseStringLiteral_multiline_escapedEolMarker() {
|
| + createParser("'''\\\na'''");
|
| + Expression expression = parser.parseStringLiteral();
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<MethodInvocation>());
|
| - MethodInvocation methodInvocation = expression;
|
| - expect(methodInvocation.target, isNotNull);
|
| - expect(methodInvocation.operator.type, TokenType.PERIOD);
|
| - expect(methodInvocation.methodName, isNotNull);
|
| - expect(methodInvocation.typeArguments, isNotNull);
|
| - expect(methodInvocation.argumentList, isNotNull);
|
| + expect(expression, new isInstanceOf<SimpleStringLiteral>());
|
| + SimpleStringLiteral literal = expression;
|
| + expect(literal.literal, isNotNull);
|
| + expect(literal.value, "a");
|
| }
|
|
|
| - void test_parsePostfixExpression_none_propertyAccess() {
|
| - createParser('a.b');
|
| - Expression expression = parser.parsePostfixExpression();
|
| + void test_parseStringLiteral_multiline_escapedEolMarker_raw() {
|
| + createParser("r'''\\\na'''");
|
| + Expression expression = parser.parseStringLiteral();
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<PrefixedIdentifier>());
|
| - PrefixedIdentifier identifier = expression;
|
| - expect(identifier.prefix, isNotNull);
|
| - expect(identifier.identifier, isNotNull);
|
| + expect(expression, new isInstanceOf<SimpleStringLiteral>());
|
| + SimpleStringLiteral literal = expression;
|
| + expect(literal.literal, isNotNull);
|
| + expect(literal.value, "a");
|
| }
|
|
|
| - void test_parsePrefixedIdentifier_noPrefix() {
|
| - String lexeme = "bar";
|
| - createParser(lexeme);
|
| - Identifier identifier = parser.parsePrefixedIdentifier();
|
| - expectNotNullIfNoErrors(identifier);
|
| + void test_parseStringLiteral_multiline_escapedSpaceAndEolMarker() {
|
| + createParser("'''\\ \\\na'''");
|
| + Expression expression = parser.parseStringLiteral();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(identifier, new isInstanceOf<SimpleIdentifier>());
|
| - SimpleIdentifier simpleIdentifier = identifier;
|
| - expect(simpleIdentifier.token, isNotNull);
|
| - expect(simpleIdentifier.name, lexeme);
|
| + expect(expression, new isInstanceOf<SimpleStringLiteral>());
|
| + SimpleStringLiteral literal = expression;
|
| + expect(literal.literal, isNotNull);
|
| + expect(literal.value, "a");
|
| }
|
|
|
| - void test_parsePrefixedIdentifier_prefix() {
|
| - String lexeme = "foo.bar";
|
| - createParser(lexeme);
|
| - Identifier identifier = parser.parsePrefixedIdentifier();
|
| - expectNotNullIfNoErrors(identifier);
|
| + void test_parseStringLiteral_multiline_escapedSpaceAndEolMarker_raw() {
|
| + createParser("r'''\\ \\\na'''");
|
| + Expression expression = parser.parseStringLiteral();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(identifier, new isInstanceOf<PrefixedIdentifier>());
|
| - PrefixedIdentifier prefixedIdentifier = identifier;
|
| - expect(prefixedIdentifier.prefix.name, "foo");
|
| - expect(prefixedIdentifier.period, isNotNull);
|
| - expect(prefixedIdentifier.identifier.name, "bar");
|
| + expect(expression, new isInstanceOf<SimpleStringLiteral>());
|
| + SimpleStringLiteral literal = expression;
|
| + expect(literal.literal, isNotNull);
|
| + expect(literal.value, "a");
|
| }
|
|
|
| - void test_parsePrimaryExpression_const() {
|
| - createParser('const A()');
|
| - Expression expression = parser.parsePrimaryExpression();
|
| - expectNotNullIfNoErrors(expression);
|
| - listener.assertNoErrors();
|
| - expect(expression, isNotNull);
|
| - }
|
| -
|
| - void test_parsePrimaryExpression_double() {
|
| - String doubleLiteral = "3.2e4";
|
| - createParser(doubleLiteral);
|
| - Expression expression = parser.parsePrimaryExpression();
|
| + void test_parseStringLiteral_multiline_escapedTab() {
|
| + createParser("'''\\t\na'''");
|
| + Expression expression = parser.parseStringLiteral();
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<DoubleLiteral>());
|
| - DoubleLiteral literal = expression;
|
| + expect(expression, new isInstanceOf<SimpleStringLiteral>());
|
| + SimpleStringLiteral literal = expression;
|
| expect(literal.literal, isNotNull);
|
| - expect(literal.value, double.parse(doubleLiteral));
|
| + expect(literal.value, "\t\na");
|
| }
|
|
|
| - void test_parsePrimaryExpression_false() {
|
| - createParser('false');
|
| - Expression expression = parser.parsePrimaryExpression();
|
| + void test_parseStringLiteral_multiline_escapedTab_raw() {
|
| + createParser("r'''\\t\na'''");
|
| + Expression expression = parser.parseStringLiteral();
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<BooleanLiteral>());
|
| - BooleanLiteral literal = expression;
|
| + expect(expression, new isInstanceOf<SimpleStringLiteral>());
|
| + SimpleStringLiteral literal = expression;
|
| expect(literal.literal, isNotNull);
|
| - expect(literal.value, isFalse);
|
| + expect(literal.value, "\\t\na");
|
| }
|
|
|
| - void test_parsePrimaryExpression_function_arguments() {
|
| - createParser('(int i) => i + 1');
|
| - Expression expression = parser.parsePrimaryExpression();
|
| + void test_parseStringLiteral_multiline_quoteAfterInterpolation() {
|
| + createParser(r"""'''$x'y'''""");
|
| + Expression expression = parser.parseStringLiteral();
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<FunctionExpression>());
|
| - FunctionExpression functionExpression = expression;
|
| - expect(functionExpression.parameters, isNotNull);
|
| - expect(functionExpression.body, isNotNull);
|
| + expect(expression, new isInstanceOf<StringInterpolation>());
|
| + StringInterpolation interpolation = expression;
|
| + expect(interpolation.elements, hasLength(3));
|
| + expect(interpolation.elements[0], new isInstanceOf<InterpolationString>());
|
| + InterpolationString element0 = interpolation.elements[0];
|
| + expect(element0.value, '');
|
| + expect(
|
| + interpolation.elements[1], new isInstanceOf<InterpolationExpression>());
|
| + InterpolationExpression element1 = interpolation.elements[1];
|
| + expect(element1.expression, new isInstanceOf<SimpleIdentifier>());
|
| + expect(interpolation.elements[2], new isInstanceOf<InterpolationString>());
|
| + InterpolationString element2 = interpolation.elements[2];
|
| + expect(element2.value, "'y");
|
| }
|
|
|
| - void test_parsePrimaryExpression_function_noArguments() {
|
| - createParser('() => 42');
|
| - Expression expression = parser.parsePrimaryExpression();
|
| + void test_parseStringLiteral_multiline_startsWithInterpolation() {
|
| + createParser(r"'''${x}y'''");
|
| + Expression expression = parser.parseStringLiteral();
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<FunctionExpression>());
|
| - FunctionExpression functionExpression = expression;
|
| - expect(functionExpression.parameters, isNotNull);
|
| - expect(functionExpression.body, isNotNull);
|
| + expect(expression, new isInstanceOf<StringInterpolation>());
|
| + StringInterpolation interpolation = expression;
|
| + expect(interpolation.elements, hasLength(3));
|
| + expect(interpolation.elements[0], new isInstanceOf<InterpolationString>());
|
| + InterpolationString element0 = interpolation.elements[0];
|
| + expect(element0.value, '');
|
| + expect(
|
| + interpolation.elements[1], new isInstanceOf<InterpolationExpression>());
|
| + InterpolationExpression element1 = interpolation.elements[1];
|
| + expect(element1.expression, new isInstanceOf<SimpleIdentifier>());
|
| + expect(interpolation.elements[2], new isInstanceOf<InterpolationString>());
|
| + InterpolationString element2 = interpolation.elements[2];
|
| + expect(element2.value, 'y');
|
| }
|
|
|
| - void test_parsePrimaryExpression_genericFunctionExpression() {
|
| - createParser('<X, Y>(Map<X, Y> m, X x) => m[x]');
|
| - Expression expression = parser.parsePrimaryExpression();
|
| + void test_parseStringLiteral_multiline_twoSpaces() {
|
| + createParser("''' \na'''");
|
| + Expression expression = parser.parseStringLiteral();
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<FunctionExpression>());
|
| - FunctionExpression function = expression;
|
| - expect(function.typeParameters, isNotNull);
|
| + expect(expression, new isInstanceOf<SimpleStringLiteral>());
|
| + SimpleStringLiteral literal = expression;
|
| + expect(literal.literal, isNotNull);
|
| + expect(literal.value, "a");
|
| }
|
|
|
| - void test_parsePrimaryExpression_hex() {
|
| - String hexLiteral = "3F";
|
| - createParser('0x$hexLiteral');
|
| - Expression expression = parser.parsePrimaryExpression();
|
| + void test_parseStringLiteral_multiline_twoSpaces_raw() {
|
| + createParser("r''' \na'''");
|
| + Expression expression = parser.parseStringLiteral();
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<IntegerLiteral>());
|
| - IntegerLiteral literal = expression;
|
| + expect(expression, new isInstanceOf<SimpleStringLiteral>());
|
| + SimpleStringLiteral literal = expression;
|
| expect(literal.literal, isNotNull);
|
| - expect(literal.value, int.parse(hexLiteral, radix: 16));
|
| + expect(literal.value, "a");
|
| }
|
|
|
| - void test_parsePrimaryExpression_identifier() {
|
| - createParser('a');
|
| - Expression expression = parser.parsePrimaryExpression();
|
| + void test_parseStringLiteral_multiline_untrimmed() {
|
| + createParser("''' a\nb'''");
|
| + Expression expression = parser.parseStringLiteral();
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<SimpleIdentifier>());
|
| - SimpleIdentifier identifier = expression;
|
| - expect(identifier, isNotNull);
|
| + expect(expression, new isInstanceOf<SimpleStringLiteral>());
|
| + SimpleStringLiteral literal = expression;
|
| + expect(literal.literal, isNotNull);
|
| + expect(literal.value, " a\nb");
|
| }
|
|
|
| - void test_parsePrimaryExpression_int() {
|
| - String intLiteral = "472";
|
| - createParser(intLiteral);
|
| - Expression expression = parser.parsePrimaryExpression();
|
| + void test_parseStringLiteral_quoteAfterInterpolation() {
|
| + createParser(r"""'$x"'""");
|
| + Expression expression = parser.parseStringLiteral();
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<IntegerLiteral>());
|
| - IntegerLiteral literal = expression;
|
| - expect(literal.literal, isNotNull);
|
| - expect(literal.value, int.parse(intLiteral));
|
| + expect(expression, new isInstanceOf<StringInterpolation>());
|
| + StringInterpolation interpolation = expression;
|
| + expect(interpolation.elements, hasLength(3));
|
| + expect(interpolation.elements[0], new isInstanceOf<InterpolationString>());
|
| + InterpolationString element0 = interpolation.elements[0];
|
| + expect(element0.value, '');
|
| + expect(
|
| + interpolation.elements[1], new isInstanceOf<InterpolationExpression>());
|
| + InterpolationExpression element1 = interpolation.elements[1];
|
| + expect(element1.expression, new isInstanceOf<SimpleIdentifier>());
|
| + expect(interpolation.elements[2], new isInstanceOf<InterpolationString>());
|
| + InterpolationString element2 = interpolation.elements[2];
|
| + expect(element2.value, '"');
|
| }
|
|
|
| - void test_parsePrimaryExpression_listLiteral() {
|
| - createParser('[ ]');
|
| - Expression expression = parser.parsePrimaryExpression();
|
| + void test_parseStringLiteral_single() {
|
| + createParser("'a'");
|
| + Expression expression = parser.parseStringLiteral();
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<ListLiteral>());
|
| - ListLiteral literal = expression;
|
| - expect(literal, isNotNull);
|
| + expect(expression, new isInstanceOf<SimpleStringLiteral>());
|
| + SimpleStringLiteral literal = expression;
|
| + expect(literal.literal, isNotNull);
|
| + expect(literal.value, "a");
|
| }
|
|
|
| - void test_parsePrimaryExpression_listLiteral_index() {
|
| - createParser('[]');
|
| - Expression expression = parser.parsePrimaryExpression();
|
| + void test_parseStringLiteral_startsWithInterpolation() {
|
| + createParser(r"'${x}y'");
|
| + Expression expression = parser.parseStringLiteral();
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<ListLiteral>());
|
| - ListLiteral literal = expression;
|
| - expect(literal, isNotNull);
|
| + expect(expression, new isInstanceOf<StringInterpolation>());
|
| + StringInterpolation interpolation = expression;
|
| + expect(interpolation.elements, hasLength(3));
|
| + expect(interpolation.elements[0], new isInstanceOf<InterpolationString>());
|
| + InterpolationString element0 = interpolation.elements[0];
|
| + expect(element0.value, '');
|
| + expect(
|
| + interpolation.elements[1], new isInstanceOf<InterpolationExpression>());
|
| + InterpolationExpression element1 = interpolation.elements[1];
|
| + expect(element1.expression, new isInstanceOf<SimpleIdentifier>());
|
| + expect(interpolation.elements[2], new isInstanceOf<InterpolationString>());
|
| + InterpolationString element2 = interpolation.elements[2];
|
| + expect(element2.value, 'y');
|
| }
|
|
|
| - void test_parsePrimaryExpression_listLiteral_typed() {
|
| - createParser('<A>[ ]');
|
| - Expression expression = parser.parsePrimaryExpression();
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseSuperConstructorInvocation_named() {
|
| + createParser('super.a()');
|
| + SuperConstructorInvocation invocation =
|
| + parser.parseSuperConstructorInvocation();
|
| + expectNotNullIfNoErrors(invocation);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<ListLiteral>());
|
| - ListLiteral literal = expression;
|
| - expect(literal.typeArguments, isNotNull);
|
| - expect(literal.typeArguments.arguments, hasLength(1));
|
| + expect(invocation.argumentList, isNotNull);
|
| + expect(invocation.constructorName, isNotNull);
|
| + expect(invocation.superKeyword, isNotNull);
|
| + expect(invocation.period, isNotNull);
|
| }
|
|
|
| - void test_parsePrimaryExpression_listLiteral_typed_genericComment() {
|
| - enableGenericMethodComments = true;
|
| - createParser('/*<A>*/[ ]');
|
| - Expression expression = parser.parsePrimaryExpression();
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseSuperConstructorInvocation_unnamed() {
|
| + createParser('super()');
|
| + SuperConstructorInvocation invocation =
|
| + parser.parseSuperConstructorInvocation();
|
| + expectNotNullIfNoErrors(invocation);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<ListLiteral>());
|
| - ListLiteral literal = expression;
|
| - expect(literal.typeArguments, isNotNull);
|
| - expect(literal.typeArguments.arguments, hasLength(1));
|
| + expect(invocation.argumentList, isNotNull);
|
| + expect(invocation.constructorName, isNull);
|
| + expect(invocation.superKeyword, isNotNull);
|
| + expect(invocation.period, isNull);
|
| }
|
|
|
| - void test_parsePrimaryExpression_mapLiteral() {
|
| - createParser('{}');
|
| - Expression expression = parser.parsePrimaryExpression();
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseSwitchStatement_case() {
|
| + createParser('switch (a) {case 1: return "I";}');
|
| + SwitchStatement statement = parser.parseSwitchStatement();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<MapLiteral>());
|
| - MapLiteral literal = expression;
|
| - expect(literal.typeArguments, isNull);
|
| - expect(literal, isNotNull);
|
| + expect(statement.switchKeyword, isNotNull);
|
| + expect(statement.leftParenthesis, isNotNull);
|
| + expect(statement.expression, isNotNull);
|
| + expect(statement.rightParenthesis, isNotNull);
|
| + expect(statement.leftBracket, isNotNull);
|
| + expect(statement.members, hasLength(1));
|
| + expect(statement.rightBracket, isNotNull);
|
| }
|
|
|
| - void test_parsePrimaryExpression_mapLiteral_typed() {
|
| - createParser('<A, B>{}');
|
| - Expression expression = parser.parsePrimaryExpression();
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseSwitchStatement_empty() {
|
| + createParser('switch (a) {}');
|
| + SwitchStatement statement = parser.parseSwitchStatement();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<MapLiteral>());
|
| - MapLiteral literal = expression;
|
| - expect(literal.typeArguments, isNotNull);
|
| - expect(literal.typeArguments.arguments, hasLength(2));
|
| + expect(statement.switchKeyword, isNotNull);
|
| + expect(statement.leftParenthesis, isNotNull);
|
| + expect(statement.expression, isNotNull);
|
| + expect(statement.rightParenthesis, isNotNull);
|
| + expect(statement.leftBracket, isNotNull);
|
| + expect(statement.members, hasLength(0));
|
| + expect(statement.rightBracket, isNotNull);
|
| }
|
|
|
| - void test_parsePrimaryExpression_mapLiteral_typed_genericComment() {
|
| - enableGenericMethodComments = true;
|
| - createParser('/*<A, B>*/{}');
|
| - Expression expression = parser.parsePrimaryExpression();
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseSwitchStatement_labeledCase() {
|
| + createParser('switch (a) {l1: l2: l3: case(1):}');
|
| + SwitchStatement statement = parser.parseSwitchStatement();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<MapLiteral>());
|
| - MapLiteral literal = expression;
|
| - expect(literal.typeArguments, isNotNull);
|
| - expect(literal.typeArguments.arguments, hasLength(2));
|
| + expect(statement.switchKeyword, isNotNull);
|
| + expect(statement.leftParenthesis, isNotNull);
|
| + expect(statement.expression, isNotNull);
|
| + expect(statement.rightParenthesis, isNotNull);
|
| + expect(statement.leftBracket, isNotNull);
|
| + expect(statement.members, hasLength(1));
|
| + {
|
| + List<Label> labels = statement.members[0].labels;
|
| + expect(labels, hasLength(3));
|
| + expect(labels[0].label.inDeclarationContext(), isTrue);
|
| + expect(labels[1].label.inDeclarationContext(), isTrue);
|
| + expect(labels[2].label.inDeclarationContext(), isTrue);
|
| + }
|
| + expect(statement.rightBracket, isNotNull);
|
| }
|
|
|
| - void test_parsePrimaryExpression_new() {
|
| - createParser('new A()');
|
| - Expression expression = parser.parsePrimaryExpression();
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseSwitchStatement_labeledDefault() {
|
| + createParser('switch (a) {l1: l2: l3: default:}');
|
| + SwitchStatement statement = parser.parseSwitchStatement();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<InstanceCreationExpression>());
|
| - InstanceCreationExpression creation = expression;
|
| - expect(creation, isNotNull);
|
| + expect(statement.switchKeyword, isNotNull);
|
| + expect(statement.leftParenthesis, isNotNull);
|
| + expect(statement.expression, isNotNull);
|
| + expect(statement.rightParenthesis, isNotNull);
|
| + expect(statement.leftBracket, isNotNull);
|
| + expect(statement.members, hasLength(1));
|
| + {
|
| + List<Label> labels = statement.members[0].labels;
|
| + expect(labels, hasLength(3));
|
| + expect(labels[0].label.inDeclarationContext(), isTrue);
|
| + expect(labels[1].label.inDeclarationContext(), isTrue);
|
| + expect(labels[2].label.inDeclarationContext(), isTrue);
|
| + }
|
| + expect(statement.rightBracket, isNotNull);
|
| }
|
|
|
| - void test_parsePrimaryExpression_null() {
|
| - createParser('null');
|
| - Expression expression = parser.parsePrimaryExpression();
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseSwitchStatement_labeledStatementInCase() {
|
| + createParser('switch (a) {case 0: f(); l1: g(); break;}');
|
| + SwitchStatement statement = parser.parseSwitchStatement();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<NullLiteral>());
|
| - NullLiteral literal = expression;
|
| - expect(literal.literal, isNotNull);
|
| + expect(statement.switchKeyword, isNotNull);
|
| + expect(statement.leftParenthesis, isNotNull);
|
| + expect(statement.expression, isNotNull);
|
| + expect(statement.rightParenthesis, isNotNull);
|
| + expect(statement.leftBracket, isNotNull);
|
| + expect(statement.members, hasLength(1));
|
| + expect(statement.members[0].statements, hasLength(3));
|
| + expect(statement.rightBracket, isNotNull);
|
| }
|
|
|
| - void test_parsePrimaryExpression_parenthesized() {
|
| - createParser('(x)');
|
| - Expression expression = parser.parsePrimaryExpression();
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseSymbolLiteral_builtInIdentifier() {
|
| + createParser('#dynamic.static.abstract');
|
| + SymbolLiteral literal = parser.parseSymbolLiteral();
|
| + expectNotNullIfNoErrors(literal);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<ParenthesizedExpression>());
|
| - ParenthesizedExpression parens = expression;
|
| - expect(parens, isNotNull);
|
| + expect(literal.poundSign, isNotNull);
|
| + List<Token> components = literal.components;
|
| + expect(components, hasLength(3));
|
| + expect(components[0].lexeme, "dynamic");
|
| + expect(components[1].lexeme, "static");
|
| + expect(components[2].lexeme, "abstract");
|
| }
|
|
|
| - void test_parsePrimaryExpression_string() {
|
| - createParser('"string"');
|
| - Expression expression = parser.parsePrimaryExpression();
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseSymbolLiteral_multiple() {
|
| + createParser('#a.b.c');
|
| + SymbolLiteral literal = parser.parseSymbolLiteral();
|
| + expectNotNullIfNoErrors(literal);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<SimpleStringLiteral>());
|
| - SimpleStringLiteral literal = expression;
|
| - expect(literal.isMultiline, isFalse);
|
| - expect(literal.isRaw, isFalse);
|
| - expect(literal.value, "string");
|
| + expect(literal.poundSign, isNotNull);
|
| + List<Token> components = literal.components;
|
| + expect(components, hasLength(3));
|
| + expect(components[0].lexeme, "a");
|
| + expect(components[1].lexeme, "b");
|
| + expect(components[2].lexeme, "c");
|
| }
|
|
|
| - void test_parsePrimaryExpression_string_multiline() {
|
| - createParser("'''string'''");
|
| - Expression expression = parser.parsePrimaryExpression();
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseSymbolLiteral_operator() {
|
| + createParser('#==');
|
| + SymbolLiteral literal = parser.parseSymbolLiteral();
|
| + expectNotNullIfNoErrors(literal);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<SimpleStringLiteral>());
|
| - SimpleStringLiteral literal = expression;
|
| - expect(literal.isMultiline, isTrue);
|
| - expect(literal.isRaw, isFalse);
|
| - expect(literal.value, "string");
|
| + expect(literal.poundSign, isNotNull);
|
| + List<Token> components = literal.components;
|
| + expect(components, hasLength(1));
|
| + expect(components[0].lexeme, "==");
|
| }
|
|
|
| - void test_parsePrimaryExpression_string_raw() {
|
| - createParser("r'string'");
|
| - Expression expression = parser.parsePrimaryExpression();
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseSymbolLiteral_single() {
|
| + createParser('#a');
|
| + SymbolLiteral literal = parser.parseSymbolLiteral();
|
| + expectNotNullIfNoErrors(literal);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<SimpleStringLiteral>());
|
| - SimpleStringLiteral literal = expression;
|
| - expect(literal.isMultiline, isFalse);
|
| - expect(literal.isRaw, isTrue);
|
| - expect(literal.value, "string");
|
| + expect(literal.poundSign, isNotNull);
|
| + List<Token> components = literal.components;
|
| + expect(components, hasLength(1));
|
| + expect(components[0].lexeme, "a");
|
| }
|
|
|
| - void test_parsePrimaryExpression_super() {
|
| - createParser('super.x');
|
| - Expression expression = parser.parsePrimaryExpression();
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseSymbolLiteral_void() {
|
| + createParser('#void');
|
| + SymbolLiteral literal = parser.parseSymbolLiteral();
|
| + expectNotNullIfNoErrors(literal);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<PropertyAccess>());
|
| - PropertyAccess propertyAccess = expression;
|
| - expect(propertyAccess.target is SuperExpression, isTrue);
|
| - expect(propertyAccess.operator, isNotNull);
|
| - expect(propertyAccess.operator.type, TokenType.PERIOD);
|
| - expect(propertyAccess.propertyName, isNotNull);
|
| + expect(literal.poundSign, isNotNull);
|
| + List<Token> components = literal.components;
|
| + expect(components, hasLength(1));
|
| + expect(components[0].lexeme, "void");
|
| }
|
|
|
| - void test_parsePrimaryExpression_this() {
|
| - createParser('this');
|
| - Expression expression = parser.parsePrimaryExpression();
|
| + void test_parseThrowExpression() {
|
| + createParser('throw x;');
|
| + Expression expression = parser.parseThrowExpression();
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<ThisExpression>());
|
| - ThisExpression thisExpression = expression;
|
| - expect(thisExpression.thisKeyword, isNotNull);
|
| + expect(expression, new isInstanceOf<ThrowExpression>());
|
| + ThrowExpression throwExpression = expression;
|
| + expect(throwExpression.throwKeyword, isNotNull);
|
| + expect(throwExpression.expression, isNotNull);
|
| }
|
|
|
| - void test_parsePrimaryExpression_true() {
|
| - createParser('true');
|
| - Expression expression = parser.parsePrimaryExpression();
|
| + void test_parseThrowExpressionWithoutCascade() {
|
| + createParser('throw x;');
|
| + Expression expression = parser.parseThrowExpressionWithoutCascade();
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<BooleanLiteral>());
|
| - BooleanLiteral literal = expression;
|
| - expect(literal.literal, isNotNull);
|
| - expect(literal.value, isTrue);
|
| - }
|
| -
|
| - void test_Parser() {
|
| - expect(new Parser(null, null), isNotNull);
|
| + expect(expression, new isInstanceOf<ThrowExpression>());
|
| + ThrowExpression throwExpression = expression;
|
| + expect(throwExpression.throwKeyword, isNotNull);
|
| + expect(throwExpression.expression, isNotNull);
|
| }
|
|
|
| - void test_parseRedirectingConstructorInvocation_named() {
|
| - createParser('this.a()');
|
| - RedirectingConstructorInvocation invocation =
|
| - parser.parseRedirectingConstructorInvocation(true);
|
| - expectNotNullIfNoErrors(invocation);
|
| + void test_parseTryStatement_catch() {
|
| + createParser('try {} catch (e) {}');
|
| + TryStatement statement = parser.parseTryStatement();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(invocation.argumentList, isNotNull);
|
| - expect(invocation.constructorName, isNotNull);
|
| - expect(invocation.thisKeyword, isNotNull);
|
| - expect(invocation.period, isNotNull);
|
| + expect(statement.tryKeyword, isNotNull);
|
| + expect(statement.body, isNotNull);
|
| + NodeList<CatchClause> catchClauses = statement.catchClauses;
|
| + expect(catchClauses, hasLength(1));
|
| + CatchClause clause = catchClauses[0];
|
| + expect(clause.onKeyword, isNull);
|
| + expect(clause.exceptionType, isNull);
|
| + expect(clause.catchKeyword, isNotNull);
|
| + expect(clause.exceptionParameter, isNotNull);
|
| + expect(clause.comma, isNull);
|
| + expect(clause.stackTraceParameter, isNull);
|
| + expect(clause.body, isNotNull);
|
| + expect(statement.finallyKeyword, isNull);
|
| + expect(statement.finallyBlock, isNull);
|
| }
|
|
|
| - void test_parseRedirectingConstructorInvocation_unnamed() {
|
| - createParser('this()');
|
| - RedirectingConstructorInvocation invocation =
|
| - parser.parseRedirectingConstructorInvocation(false);
|
| - expectNotNullIfNoErrors(invocation);
|
| + void test_parseTryStatement_catch_finally() {
|
| + createParser('try {} catch (e, s) {} finally {}');
|
| + TryStatement statement = parser.parseTryStatement();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(invocation.argumentList, isNotNull);
|
| - expect(invocation.constructorName, isNull);
|
| - expect(invocation.thisKeyword, isNotNull);
|
| - expect(invocation.period, isNull);
|
| + expect(statement.tryKeyword, isNotNull);
|
| + expect(statement.body, isNotNull);
|
| + NodeList<CatchClause> catchClauses = statement.catchClauses;
|
| + expect(catchClauses, hasLength(1));
|
| + CatchClause clause = catchClauses[0];
|
| + expect(clause.onKeyword, isNull);
|
| + expect(clause.exceptionType, isNull);
|
| + expect(clause.catchKeyword, isNotNull);
|
| + expect(clause.exceptionParameter, isNotNull);
|
| + expect(clause.comma, isNotNull);
|
| + expect(clause.stackTraceParameter, isNotNull);
|
| + expect(clause.body, isNotNull);
|
| + expect(statement.finallyKeyword, isNotNull);
|
| + expect(statement.finallyBlock, isNotNull);
|
| }
|
|
|
| - @failingTest
|
| - void test_parseRelationalExpression_as_functionType_noReturnType() {
|
| - createParser('x as Function(int)');
|
| - Expression expression = parser.parseRelationalExpression();
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseTryStatement_finally() {
|
| + createParser('try {} finally {}');
|
| + TryStatement statement = parser.parseTryStatement();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<AsExpression>());
|
| - AsExpression asExpression = expression;
|
| - expect(asExpression.expression, isNotNull);
|
| - expect(asExpression.asOperator, isNotNull);
|
| - expect(asExpression.type, new isInstanceOf<GenericFunctionType>());
|
| + expect(statement.tryKeyword, isNotNull);
|
| + expect(statement.body, isNotNull);
|
| + expect(statement.catchClauses, hasLength(0));
|
| + expect(statement.finallyKeyword, isNotNull);
|
| + expect(statement.finallyBlock, isNotNull);
|
| }
|
|
|
| - @failingTest
|
| - void test_parseRelationalExpression_as_functionType_returnType() {
|
| - createParser('x as String Function(int)');
|
| - Expression expression = parser.parseRelationalExpression();
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseTryStatement_multiple() {
|
| + createParser('try {} on NPE catch (e) {} on Error {} catch (e) {}');
|
| + TryStatement statement = parser.parseTryStatement();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<AsExpression>());
|
| - AsExpression asExpression = expression;
|
| - expect(asExpression.expression, isNotNull);
|
| - expect(asExpression.asOperator, isNotNull);
|
| - expect(asExpression.type, new isInstanceOf<GenericFunctionType>());
|
| + expect(statement.tryKeyword, isNotNull);
|
| + expect(statement.body, isNotNull);
|
| + expect(statement.catchClauses, hasLength(3));
|
| + expect(statement.finallyKeyword, isNull);
|
| + expect(statement.finallyBlock, isNull);
|
| }
|
|
|
| - void test_parseRelationalExpression_as_generic() {
|
| - createParser('x as C<D>');
|
| - Expression expression = parser.parseRelationalExpression();
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseTryStatement_on() {
|
| + createParser('try {} on Error {}');
|
| + TryStatement statement = parser.parseTryStatement();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<AsExpression>());
|
| - AsExpression asExpression = expression;
|
| - expect(asExpression.expression, isNotNull);
|
| - expect(asExpression.asOperator, isNotNull);
|
| - expect(asExpression.type, new isInstanceOf<TypeName>());
|
| + expect(statement.tryKeyword, isNotNull);
|
| + expect(statement.body, isNotNull);
|
| + NodeList<CatchClause> catchClauses = statement.catchClauses;
|
| + expect(catchClauses, hasLength(1));
|
| + CatchClause clause = catchClauses[0];
|
| + expect(clause.onKeyword, isNotNull);
|
| + expect(clause.exceptionType, isNotNull);
|
| + expect(clause.catchKeyword, isNull);
|
| + expect(clause.exceptionParameter, isNull);
|
| + expect(clause.comma, isNull);
|
| + expect(clause.stackTraceParameter, isNull);
|
| + expect(clause.body, isNotNull);
|
| + expect(statement.finallyKeyword, isNull);
|
| + expect(statement.finallyBlock, isNull);
|
| }
|
|
|
| - void test_parseRelationalExpression_as_nullable() {
|
| - enableNnbd = true;
|
| - createParser('x as Y?)');
|
| - Expression expression = parser.parseRelationalExpression();
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseTryStatement_on_catch() {
|
| + createParser('try {} on Error catch (e, s) {}');
|
| + TryStatement statement = parser.parseTryStatement();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<AsExpression>());
|
| - AsExpression asExpression = expression;
|
| - expect(asExpression.expression, isNotNull);
|
| - expect(asExpression.asOperator, isNotNull);
|
| - expect(asExpression.type, new isInstanceOf<TypeName>());
|
| + expect(statement.tryKeyword, isNotNull);
|
| + expect(statement.body, isNotNull);
|
| + NodeList<CatchClause> catchClauses = statement.catchClauses;
|
| + expect(catchClauses, hasLength(1));
|
| + CatchClause clause = catchClauses[0];
|
| + expect(clause.onKeyword, isNotNull);
|
| + expect(clause.exceptionType, isNotNull);
|
| + expect(clause.catchKeyword, isNotNull);
|
| + expect(clause.exceptionParameter, isNotNull);
|
| + expect(clause.comma, isNotNull);
|
| + expect(clause.stackTraceParameter, isNotNull);
|
| + expect(clause.body, isNotNull);
|
| + expect(statement.finallyKeyword, isNull);
|
| + expect(statement.finallyBlock, isNull);
|
| }
|
|
|
| - void test_parseRelationalExpression_as_simple() {
|
| - createParser('x as Y');
|
| - Expression expression = parser.parseRelationalExpression();
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseTryStatement_on_catch_finally() {
|
| + createParser('try {} on Error catch (e, s) {} finally {}');
|
| + TryStatement statement = parser.parseTryStatement();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<AsExpression>());
|
| - AsExpression asExpression = expression;
|
| - expect(asExpression.expression, isNotNull);
|
| - expect(asExpression.asOperator, isNotNull);
|
| - expect(asExpression.type, new isInstanceOf<TypeName>());
|
| + expect(statement.tryKeyword, isNotNull);
|
| + expect(statement.body, isNotNull);
|
| + NodeList<CatchClause> catchClauses = statement.catchClauses;
|
| + expect(catchClauses, hasLength(1));
|
| + CatchClause clause = catchClauses[0];
|
| + expect(clause.onKeyword, isNotNull);
|
| + expect(clause.exceptionType, isNotNull);
|
| + expect(clause.catchKeyword, isNotNull);
|
| + expect(clause.exceptionParameter, isNotNull);
|
| + expect(clause.comma, isNotNull);
|
| + expect(clause.stackTraceParameter, isNotNull);
|
| + expect(clause.body, isNotNull);
|
| + expect(statement.finallyKeyword, isNotNull);
|
| + expect(statement.finallyBlock, isNotNull);
|
| }
|
|
|
| - void test_parseRelationalExpression_as_simple_function() {
|
| - createParser('x as Function');
|
| - Expression expression = parser.parseRelationalExpression();
|
| - expectNotNullIfNoErrors(expression);
|
| + @failingTest
|
| + void test_parseTypeAnnotation_function_noReturnType_noParameters() {
|
| + createParser('Function() v');
|
| + GenericFunctionType functionType = parser.parseTypeAnnotation(false);
|
| + expectNotNullIfNoErrors(functionType);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<AsExpression>());
|
| - AsExpression asExpression = expression;
|
| - expect(asExpression.expression, isNotNull);
|
| - expect(asExpression.asOperator, isNotNull);
|
| - expect(asExpression.type, new isInstanceOf<TypeName>());
|
| + expect(functionType.returnType, isNull);
|
| + expect(functionType.functionKeyword, isNotNull);
|
| + expect(functionType.typeParameters, isNull);
|
| + FormalParameterList parameterList = functionType.parameters;
|
| + expect(parameterList, isNotNull);
|
| + expect(parameterList.parameters, hasLength(0));
|
| }
|
|
|
| - void test_parseRelationalExpression_is() {
|
| - createParser('x is y');
|
| - Expression expression = parser.parseRelationalExpression();
|
| - expectNotNullIfNoErrors(expression);
|
| + @failingTest
|
| + void test_parseTypeAnnotation_function_noReturnType_parameters() {
|
| + createParser('Function(int, int) v');
|
| + GenericFunctionType functionType = parser.parseTypeAnnotation(false);
|
| + expectNotNullIfNoErrors(functionType);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<IsExpression>());
|
| - IsExpression isExpression = expression;
|
| - expect(isExpression.expression, isNotNull);
|
| - expect(isExpression.isOperator, isNotNull);
|
| - expect(isExpression.notOperator, isNull);
|
| - expect(isExpression.type, isNotNull);
|
| - }
|
| + expect(functionType.returnType, isNull);
|
| + expect(functionType.functionKeyword, isNotNull);
|
| + expect(functionType.typeParameters, isNull);
|
| + FormalParameterList parameterList = functionType.parameters;
|
| + expect(parameterList, isNotNull);
|
| + NodeList<FormalParameter> parameters = parameterList.parameters;
|
| + expect(parameters, hasLength(2));
|
|
|
| - void test_parseRelationalExpression_is_nullable() {
|
| - enableNnbd = true;
|
| - createParser('x is y?)');
|
| - Expression expression = parser.parseRelationalExpression();
|
| - expectNotNullIfNoErrors(expression);
|
| - listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<IsExpression>());
|
| - IsExpression isExpression = expression;
|
| - expect(isExpression.expression, isNotNull);
|
| - expect(isExpression.isOperator, isNotNull);
|
| - expect(isExpression.notOperator, isNull);
|
| - expect(isExpression.type, isNotNull);
|
| + expect(parameters[0], new isInstanceOf<SimpleFormalParameter>());
|
| + SimpleFormalParameter parameter = parameters[0];
|
| + expect(parameter.identifier, isNull);
|
| + expect(parameter.type, new isInstanceOf<TypeName>());
|
| + expect((parameter.type as TypeName).name.name, 'int');
|
| +
|
| + expect(parameters[1], new isInstanceOf<SimpleFormalParameter>());
|
| + parameter = parameters[1];
|
| + expect(parameter.identifier, isNull);
|
| + expect(parameter.type, new isInstanceOf<TypeName>());
|
| + expect((parameter.type as TypeName).name.name, 'int');
|
| }
|
|
|
| - void test_parseRelationalExpression_isNot() {
|
| - createParser('x is! y');
|
| - Expression expression = parser.parseRelationalExpression();
|
| - expectNotNullIfNoErrors(expression);
|
| + @failingTest
|
| + void test_parseTypeAnnotation_function_noReturnType_typeParameters() {
|
| + createParser('Function<S, T>()');
|
| + GenericFunctionType functionType = parser.parseTypeAnnotation(false);
|
| + expectNotNullIfNoErrors(functionType);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<IsExpression>());
|
| - IsExpression isExpression = expression;
|
| - expect(isExpression.expression, isNotNull);
|
| - expect(isExpression.isOperator, isNotNull);
|
| - expect(isExpression.notOperator, isNotNull);
|
| - expect(isExpression.type, isNotNull);
|
| + expect(functionType.returnType, isNull);
|
| + expect(functionType.functionKeyword, isNotNull);
|
| + TypeParameterList typeParameters = functionType.typeParameters;
|
| + expect(typeParameters, isNotNull);
|
| + expect(typeParameters.typeParameters, hasLength(2));
|
| + FormalParameterList parameterList = functionType.parameters;
|
| + expect(parameterList, isNotNull);
|
| + expect(parameterList.parameters, hasLength(0));
|
| }
|
|
|
| - void test_parseRelationalExpression_normal() {
|
| - createParser('x < y');
|
| - Expression expression = parser.parseRelationalExpression();
|
| - expectNotNullIfNoErrors(expression);
|
| + @failingTest
|
| + void
|
| + test_parseTypeAnnotation_function_noReturnType_typeParameters_parameters() {
|
| + createParser('Function<T>(String, {T t})');
|
| + GenericFunctionType functionType = parser.parseTypeAnnotation(false);
|
| + expectNotNullIfNoErrors(functionType);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<BinaryExpression>());
|
| - BinaryExpression binaryExpression = expression;
|
| - expect(binaryExpression.leftOperand, isNotNull);
|
| - expect(binaryExpression.operator, isNotNull);
|
| - expect(binaryExpression.operator.type, TokenType.LT);
|
| - expect(binaryExpression.rightOperand, isNotNull);
|
| + expect(functionType.returnType, isNull);
|
| + expect(functionType.functionKeyword, isNotNull);
|
| + TypeParameterList typeParameters = functionType.typeParameters;
|
| + expect(typeParameters, isNotNull);
|
| + expect(typeParameters.typeParameters, hasLength(1));
|
| + FormalParameterList parameterList = functionType.parameters;
|
| + expect(parameterList, isNotNull);
|
| + expect(parameterList.parameters, hasLength(2));
|
| }
|
|
|
| - void test_parseRelationalExpression_super() {
|
| - createParser('super < y');
|
| - Expression expression = parser.parseRelationalExpression();
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseTypeAnnotation_function_returnType_classFunction() {
|
| + createParser('Function v');
|
| + TypeName functionType = parser.parseTypeAnnotation(false);
|
| + expectNotNullIfNoErrors(functionType);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<BinaryExpression>());
|
| - BinaryExpression binaryExpression = expression;
|
| - expect(binaryExpression.leftOperand, isNotNull);
|
| - expect(binaryExpression.operator, isNotNull);
|
| - expect(binaryExpression.operator.type, TokenType.LT);
|
| - expect(binaryExpression.rightOperand, isNotNull);
|
| }
|
|
|
| - void test_parseRethrowExpression() {
|
| - createParser('rethrow;');
|
| - RethrowExpression expression = parser.parseRethrowExpression();
|
| - expectNotNullIfNoErrors(expression);
|
| + @failingTest
|
| + void test_parseTypeAnnotation_function_returnType_function() {
|
| + createParser('A Function(B, C) Function(D) v');
|
| + // TODO(scheglov) improve the test to verify also the node properties
|
| + var functionType = parser.parseTypeAnnotation(false) as GenericFunctionType;
|
| + expectNotNullIfNoErrors(functionType);
|
| listener.assertNoErrors();
|
| - expect(expression.rethrowKeyword, isNotNull);
|
| }
|
|
|
| - void test_parseReturnStatement_noValue() {
|
| - createParser('return;');
|
| - ReturnStatement statement = parser.parseReturnStatement();
|
| - expectNotNullIfNoErrors(statement);
|
| + @failingTest
|
| + void test_parseTypeAnnotation_function_returnType_noParameters() {
|
| + createParser('List<int> Function()');
|
| + GenericFunctionType functionType = parser.parseTypeAnnotation(false);
|
| + expectNotNullIfNoErrors(functionType);
|
| listener.assertNoErrors();
|
| - expect(statement.returnKeyword, isNotNull);
|
| - expect(statement.expression, isNull);
|
| - expect(statement.semicolon, isNotNull);
|
| + expect(functionType.returnType, isNotNull);
|
| + expect(functionType.functionKeyword, isNotNull);
|
| + expect(functionType.typeParameters, isNull);
|
| + FormalParameterList parameterList = functionType.parameters;
|
| + expect(parameterList, isNotNull);
|
| + expect(parameterList.parameters, hasLength(0));
|
| }
|
|
|
| - void test_parseReturnStatement_value() {
|
| - createParser('return x;');
|
| - ReturnStatement statement = parser.parseReturnStatement();
|
| - expectNotNullIfNoErrors(statement);
|
| + @failingTest
|
| + void test_parseTypeAnnotation_function_returnType_parameters() {
|
| + createParser('List<int> Function(String s, int i)');
|
| + GenericFunctionType functionType = parser.parseTypeAnnotation(false);
|
| + expectNotNullIfNoErrors(functionType);
|
| listener.assertNoErrors();
|
| - expect(statement.returnKeyword, isNotNull);
|
| - expect(statement.expression, isNotNull);
|
| - expect(statement.semicolon, isNotNull);
|
| + expect(functionType.returnType, isNotNull);
|
| + expect(functionType.functionKeyword, isNotNull);
|
| + expect(functionType.typeParameters, isNull);
|
| + FormalParameterList parameterList = functionType.parameters;
|
| + expect(parameterList, isNotNull);
|
| + NodeList<FormalParameter> parameters = parameterList.parameters;
|
| + expect(parameters, hasLength(2));
|
| +
|
| + expect(parameters[0], new isInstanceOf<SimpleFormalParameter>());
|
| + SimpleFormalParameter parameter = parameters[0];
|
| + expect(parameter.identifier, isNotNull);
|
| + expect(parameter.identifier.name, 's');
|
| + expect(parameter.type, new isInstanceOf<TypeName>());
|
| + expect((parameter.type as TypeName).name.name, 'String');
|
| +
|
| + expect(parameters[1], new isInstanceOf<SimpleFormalParameter>());
|
| + parameter = parameters[1];
|
| + expect(parameter.identifier, isNotNull);
|
| + expect(parameter.identifier.name, 'i');
|
| + expect(parameter.type, new isInstanceOf<TypeName>());
|
| + expect((parameter.type as TypeName).name.name, 'int');
|
| }
|
|
|
| @failingTest
|
| - void test_parseReturnType_function() {
|
| - createParser('A<B> Function<B>(B)');
|
| - GenericFunctionType type = parser.parseReturnType(false);
|
| - expectNotNullIfNoErrors(type);
|
| + void test_parseTypeAnnotation_function_returnType_simple() {
|
| + createParser('A Function(B, C) v');
|
| + // TODO(scheglov) improve the test to verify also the node properties
|
| + var functionType = parser.parseTypeAnnotation(false) as GenericFunctionType;
|
| + expectNotNullIfNoErrors(functionType);
|
| listener.assertNoErrors();
|
| - expect(type.returnType, isNotNull);
|
| - expect(type.typeParameters, isNotNull);
|
| - expect(type.parameters, isNotNull);
|
| }
|
|
|
| - void test_parseReturnType_named() {
|
| - createParser('A<B>');
|
| - TypeName typeName = parser.parseReturnType(false);
|
| - expectNotNullIfNoErrors(typeName);
|
| + @failingTest
|
| + void test_parseTypeAnnotation_function_returnType_typeParameters() {
|
| + createParser('List<T> Function<T>()');
|
| + GenericFunctionType functionType = parser.parseTypeAnnotation(false);
|
| + expectNotNullIfNoErrors(functionType);
|
| listener.assertNoErrors();
|
| - expect(typeName.name, isNotNull);
|
| - expect(typeName.typeArguments, isNotNull);
|
| + expect(functionType.returnType, isNotNull);
|
| + expect(functionType.functionKeyword, isNotNull);
|
| + TypeParameterList typeParameters = functionType.typeParameters;
|
| + expect(typeParameters, isNotNull);
|
| + expect(typeParameters.typeParameters, hasLength(1));
|
| + FormalParameterList parameterList = functionType.parameters;
|
| + expect(parameterList, isNotNull);
|
| + expect(parameterList.parameters, hasLength(0));
|
| }
|
|
|
| - void test_parseReturnType_void() {
|
| - createParser('void');
|
| - TypeName typeName = parser.parseReturnType(false);
|
| - expectNotNullIfNoErrors(typeName);
|
| + @failingTest
|
| + void
|
| + test_parseTypeAnnotation_function_returnType_typeParameters_parameters() {
|
| + createParser('List<T> Function<T>(String s, [T])');
|
| + GenericFunctionType functionType = parser.parseTypeAnnotation(false);
|
| + expectNotNullIfNoErrors(functionType);
|
| listener.assertNoErrors();
|
| - expect(typeName.name, isNotNull);
|
| - expect(typeName.typeArguments, isNull);
|
| + expect(functionType.returnType, isNotNull);
|
| + expect(functionType.functionKeyword, isNotNull);
|
| + TypeParameterList typeParameters = functionType.typeParameters;
|
| + expect(typeParameters, isNotNull);
|
| + expect(typeParameters.typeParameters, hasLength(1));
|
| + FormalParameterList parameterList = functionType.parameters;
|
| + expect(parameterList, isNotNull);
|
| + expect(parameterList.parameters, hasLength(2));
|
| }
|
|
|
| - void test_parseSetter_nonStatic() {
|
| - createParser('/// Doc\nT set a(var x);');
|
| - MethodDeclaration method = parser.parseClassMember('C');
|
| - expectNotNullIfNoErrors(method);
|
| + @failingTest
|
| + void test_parseTypeAnnotation_function_returnType_withArguments() {
|
| + createParser('A<B> Function(C) v');
|
| + // TODO(scheglov) improve this test to verify also the node properties
|
| + var functionType = parser.parseTypeAnnotation(false) as GenericFunctionType;
|
| + expectNotNullIfNoErrors(functionType);
|
| listener.assertNoErrors();
|
| - expect(method.body, isNotNull);
|
| - _expectCommentText(method.documentationComment, '/// Doc');
|
| - expect(method.externalKeyword, isNull);
|
| - expect(method.modifierKeyword, isNull);
|
| - expect(method.name, isNotNull);
|
| - expect(method.operatorKeyword, isNull);
|
| - expect(method.typeParameters, isNull);
|
| - expect(method.parameters, isNotNull);
|
| - expect(method.propertyKeyword, isNotNull);
|
| - expect((method.returnType as TypeName).name.name, 'T');
|
| }
|
|
|
| - void test_parseSetter_static() {
|
| - createParser('/// Doc\nstatic T set a(var x) {}');
|
| - MethodDeclaration method = parser.parseClassMember('C');
|
| - expectNotNullIfNoErrors(method);
|
| + void test_parseTypeAnnotation_named() {
|
| + createParser('A<B> v');
|
| + TypeName typeName = parser.parseTypeAnnotation(false);
|
| + expectNotNullIfNoErrors(typeName);
|
| listener.assertNoErrors();
|
| - expect(method.body, isNotNull);
|
| - _expectCommentText(method.documentationComment, '/// Doc');
|
| - expect(method.externalKeyword, isNull);
|
| - expect(method.modifierKeyword.lexeme, 'static');
|
| - expect(method.name, isNotNull);
|
| - expect(method.operatorKeyword, isNull);
|
| - expect(method.typeParameters, isNull);
|
| - expect(method.parameters, isNotNull);
|
| - expect(method.propertyKeyword, isNotNull);
|
| - expect((method.returnType as TypeName).name.name, 'T');
|
| }
|
|
|
| - void test_parseShiftExpression_normal() {
|
| - createParser('x << y');
|
| - BinaryExpression expression = parser.parseShiftExpression();
|
| - expectNotNullIfNoErrors(expression);
|
| - listener.assertNoErrors();
|
| - expect(expression.leftOperand, isNotNull);
|
| - expect(expression.operator, isNotNull);
|
| - expect(expression.operator.type, TokenType.LT_LT);
|
| - expect(expression.rightOperand, isNotNull);
|
| + void test_parseTypeArgumentList_empty() {
|
| + createParser('<>');
|
| + TypeArgumentList argumentList = parser.parseTypeArgumentList();
|
| + expectNotNullIfNoErrors(argumentList);
|
| + listener.assertErrorsWithCodes([ParserErrorCode.EXPECTED_TYPE_NAME]);
|
| + expect(argumentList.leftBracket, isNotNull);
|
| + expect(argumentList.arguments, hasLength(1));
|
| + expect(argumentList.rightBracket, isNotNull);
|
| }
|
|
|
| - void test_parseShiftExpression_super() {
|
| - createParser('super << y');
|
| - BinaryExpression expression = parser.parseShiftExpression();
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseTypeArgumentList_multiple() {
|
| + createParser('<int, int, int>');
|
| + TypeArgumentList argumentList = parser.parseTypeArgumentList();
|
| + expectNotNullIfNoErrors(argumentList);
|
| listener.assertNoErrors();
|
| - expect(expression.leftOperand, isNotNull);
|
| - expect(expression.operator, isNotNull);
|
| - expect(expression.operator.type, TokenType.LT_LT);
|
| - expect(expression.rightOperand, isNotNull);
|
| + expect(argumentList.leftBracket, isNotNull);
|
| + expect(argumentList.arguments, hasLength(3));
|
| + expect(argumentList.rightBracket, isNotNull);
|
| }
|
|
|
| - void test_parseSimpleIdentifier1_normalIdentifier() {
|
| - // TODO(brianwilkerson) Implement tests for this method.
|
| + void test_parseTypeArgumentList_nested() {
|
| + createParser('<A<B>>');
|
| + TypeArgumentList argumentList = parser.parseTypeArgumentList();
|
| + expectNotNullIfNoErrors(argumentList);
|
| + listener.assertNoErrors();
|
| + expect(argumentList.leftBracket, isNotNull);
|
| + expect(argumentList.arguments, hasLength(1));
|
| + TypeName argument = argumentList.arguments[0];
|
| + expect(argument, isNotNull);
|
| + TypeArgumentList innerList = argument.typeArguments;
|
| + expect(innerList, isNotNull);
|
| + expect(innerList.arguments, hasLength(1));
|
| + expect(argumentList.rightBracket, isNotNull);
|
| }
|
|
|
| - void test_parseSimpleIdentifier_builtInIdentifier() {
|
| - String lexeme = "as";
|
| - createParser(lexeme);
|
| - SimpleIdentifier identifier = parser.parseSimpleIdentifier();
|
| - expectNotNullIfNoErrors(identifier);
|
| + void test_parseTypeArgumentList_nested_withComment_double() {
|
| + createParser('<A<B /* 0 */ >>');
|
| + TypeArgumentList argumentList = parser.parseTypeArgumentList();
|
| + expectNotNullIfNoErrors(argumentList);
|
| listener.assertNoErrors();
|
| - expect(identifier.token, isNotNull);
|
| - expect(identifier.name, lexeme);
|
| + expect(argumentList.leftBracket, isNotNull);
|
| + expect(argumentList.rightBracket, isNotNull);
|
| + expect(argumentList.arguments, hasLength(1));
|
| +
|
| + TypeName argument = argumentList.arguments[0];
|
| + expect(argument, isNotNull);
|
| +
|
| + TypeArgumentList innerList = argument.typeArguments;
|
| + expect(innerList, isNotNull);
|
| + expect(innerList.leftBracket, isNotNull);
|
| + expect(innerList.arguments, hasLength(1));
|
| + expect(innerList.rightBracket, isNotNull);
|
| + expect(innerList.rightBracket.precedingComments, isNotNull);
|
| }
|
|
|
| - void test_parseSimpleIdentifier_normalIdentifier() {
|
| - String lexeme = "foo";
|
| - createParser(lexeme);
|
| - SimpleIdentifier identifier = parser.parseSimpleIdentifier();
|
| - expectNotNullIfNoErrors(identifier);
|
| + void test_parseTypeArgumentList_nested_withComment_tripple() {
|
| + createParser('<A<B<C /* 0 */ >>>');
|
| + TypeArgumentList argumentList = parser.parseTypeArgumentList();
|
| + expectNotNullIfNoErrors(argumentList);
|
| listener.assertNoErrors();
|
| - expect(identifier.token, isNotNull);
|
| - expect(identifier.name, lexeme);
|
| + expect(argumentList.leftBracket, isNotNull);
|
| + expect(argumentList.rightBracket, isNotNull);
|
| + expect(argumentList.arguments, hasLength(1));
|
| +
|
| + TypeName argument = argumentList.arguments[0];
|
| + expect(argument, isNotNull);
|
| +
|
| + TypeArgumentList innerList = argument.typeArguments;
|
| + expect(innerList, isNotNull);
|
| + expect(innerList.leftBracket, isNotNull);
|
| + expect(innerList.arguments, hasLength(1));
|
| + expect(innerList.rightBracket, isNotNull);
|
| +
|
| + TypeName innerArgument = innerList.arguments[0];
|
| + expect(innerArgument, isNotNull);
|
| +
|
| + TypeArgumentList innerInnerList = innerArgument.typeArguments;
|
| + expect(innerInnerList, isNotNull);
|
| + expect(innerInnerList.leftBracket, isNotNull);
|
| + expect(innerInnerList.arguments, hasLength(1));
|
| + expect(innerInnerList.rightBracket, isNotNull);
|
| + expect(innerInnerList.rightBracket.precedingComments, isNotNull);
|
| }
|
|
|
| - void test_parseStatement_emptyTypeArgumentList() {
|
| - createParser('C<> c;');
|
| - Statement statement = parser.parseStatement2();
|
| - expectNotNullIfNoErrors(statement);
|
| - listener.assertErrorsWithCodes([ParserErrorCode.EXPECTED_TYPE_NAME]);
|
| - expect(statement, new isInstanceOf<VariableDeclarationStatement>());
|
| - VariableDeclarationStatement declaration = statement;
|
| - VariableDeclarationList variables = declaration.variables;
|
| - TypeName type = variables.type;
|
| - TypeArgumentList argumentList = type.typeArguments;
|
| + void test_parseTypeArgumentList_single() {
|
| + createParser('<int>');
|
| + TypeArgumentList argumentList = parser.parseTypeArgumentList();
|
| + expectNotNullIfNoErrors(argumentList);
|
| + listener.assertNoErrors();
|
| expect(argumentList.leftBracket, isNotNull);
|
| expect(argumentList.arguments, hasLength(1));
|
| - expect(argumentList.arguments[0].isSynthetic, isTrue);
|
| expect(argumentList.rightBracket, isNotNull);
|
| }
|
|
|
| - void test_parseStatement_functionDeclaration_noReturnType() {
|
| - createParser('f(a, b) {};');
|
| - Statement statement = parser.parseStatement2();
|
| - expectNotNullIfNoErrors(statement);
|
| + void test_parseTypeName_parameterized() {
|
| + createParser('List<int>');
|
| + TypeName typeName = parser.parseTypeName(false);
|
| + expectNotNullIfNoErrors(typeName);
|
| listener.assertNoErrors();
|
| - expect(statement, new isInstanceOf<FunctionDeclarationStatement>());
|
| - FunctionDeclarationStatement declaration = statement;
|
| - expect(declaration.functionDeclaration, isNotNull);
|
| + expect(typeName.name, isNotNull);
|
| + expect(typeName.typeArguments, isNotNull);
|
| + expect(typeName.question, isNull);
|
| }
|
|
|
| - void
|
| - test_parseStatement_functionDeclaration_noReturnType_typeParameterComments() {
|
| - enableGenericMethodComments = true;
|
| - createParser('f/*<E>*/(a, b) {};');
|
| - Statement statement = parser.parseStatement2();
|
| - expectNotNullIfNoErrors(statement);
|
| + void test_parseTypeName_parameterized_nullable() {
|
| + enableNnbd = true;
|
| + createParser('List<int>?');
|
| + TypeName typeName = parser.parseTypeName(false);
|
| + expectNotNullIfNoErrors(typeName);
|
| listener.assertNoErrors();
|
| - expect(statement, new isInstanceOf<FunctionDeclarationStatement>());
|
| - FunctionDeclarationStatement declaration = statement;
|
| - expect(declaration.functionDeclaration, isNotNull);
|
| - expect(declaration.functionDeclaration.functionExpression.typeParameters,
|
| - isNotNull);
|
| + expect(typeName.name, isNotNull);
|
| + expect(typeName.typeArguments, isNotNull);
|
| + expect(typeName.question, isNotNull);
|
| }
|
|
|
| - void test_parseStatement_functionDeclaration_noReturnType_typeParameters() {
|
| - createParser('f<E>(a, b) {};');
|
| - Statement statement = parser.parseStatement2();
|
| - expectNotNullIfNoErrors(statement);
|
| + void test_parseTypeName_simple() {
|
| + createParser('int');
|
| + TypeName typeName = parser.parseTypeName(false);
|
| + expectNotNullIfNoErrors(typeName);
|
| listener.assertNoErrors();
|
| - expect(statement, new isInstanceOf<FunctionDeclarationStatement>());
|
| - FunctionDeclarationStatement declaration = statement;
|
| - expect(declaration.functionDeclaration, isNotNull);
|
| + expect(typeName.name, isNotNull);
|
| + expect(typeName.typeArguments, isNull);
|
| + expect(typeName.question, isNull);
|
| }
|
|
|
| - void test_parseStatement_functionDeclaration_returnType() {
|
| - // TODO(brianwilkerson) Implement more tests for this method.
|
| - createParser('int f(a, b) {};');
|
| - Statement statement = parser.parseStatement2();
|
| - expectNotNullIfNoErrors(statement);
|
| + void test_parseTypeName_simple_nullable() {
|
| + enableNnbd = true;
|
| + createParser('String?');
|
| + TypeName typeName = parser.parseTypeName(false);
|
| + expectNotNullIfNoErrors(typeName);
|
| listener.assertNoErrors();
|
| - expect(statement, new isInstanceOf<FunctionDeclarationStatement>());
|
| - FunctionDeclarationStatement declaration = statement;
|
| - expect(declaration.functionDeclaration, isNotNull);
|
| + expect(typeName.name, isNotNull);
|
| + expect(typeName.typeArguments, isNull);
|
| + expect(typeName.question, isNotNull);
|
| }
|
|
|
| - void test_parseStatement_functionDeclaration_returnType_typeParameters() {
|
| - createParser('int f<E>(a, b) {};');
|
| - Statement statement = parser.parseStatement2();
|
| - expectNotNullIfNoErrors(statement);
|
| + @failingTest
|
| + void test_parseTypeParameter_bounded_functionType_noReturn() {
|
| + createParser('A extends Function(int)');
|
| + TypeParameter parameter = parser.parseTypeParameter();
|
| + expectNotNullIfNoErrors(parameter);
|
| listener.assertNoErrors();
|
| - expect(statement, new isInstanceOf<FunctionDeclarationStatement>());
|
| - FunctionDeclarationStatement declaration = statement;
|
| - expect(declaration.functionDeclaration, isNotNull);
|
| + expect(parameter.bound, new isInstanceOf<GenericFunctionType>());
|
| + expect(parameter.extendsKeyword, isNotNull);
|
| + expect(parameter.name, isNotNull);
|
| }
|
|
|
| - void test_parseStatement_mulipleLabels() {
|
| - createParser('l: m: return x;');
|
| - Statement statement = parser.parseStatement2();
|
| - expectNotNullIfNoErrors(statement);
|
| + @failingTest
|
| + void test_parseTypeParameter_bounded_functionType_return() {
|
| + createParser('A extends String Function(int)');
|
| + TypeParameter parameter = parser.parseTypeParameter();
|
| + expectNotNullIfNoErrors(parameter);
|
| listener.assertNoErrors();
|
| - expect(statement, new isInstanceOf<LabeledStatement>());
|
| - LabeledStatement labeledStatement = statement;
|
| - expect(labeledStatement.labels, hasLength(2));
|
| - expect(labeledStatement.statement, isNotNull);
|
| + expect(parameter.bound, new isInstanceOf<GenericFunctionType>());
|
| + expect(parameter.extendsKeyword, isNotNull);
|
| + expect(parameter.name, isNotNull);
|
| }
|
|
|
| - void test_parseStatement_noLabels() {
|
| - createParser('return x;');
|
| - Statement statement = parser.parseStatement2();
|
| - expectNotNullIfNoErrors(statement);
|
| + void test_parseTypeParameter_bounded_generic() {
|
| + createParser('A extends B<C>');
|
| + TypeParameter parameter = parser.parseTypeParameter();
|
| + expectNotNullIfNoErrors(parameter);
|
| listener.assertNoErrors();
|
| + expect(parameter.bound, new isInstanceOf<TypeName>());
|
| + expect(parameter.extendsKeyword, isNotNull);
|
| + expect(parameter.name, isNotNull);
|
| }
|
|
|
| - void test_parseStatement_singleLabel() {
|
| - createParser('l: return x;');
|
| - Statement statement = parser.parseStatement2();
|
| - expectNotNullIfNoErrors(statement);
|
| + void test_parseTypeParameter_bounded_nullable() {
|
| + enableNnbd = true;
|
| + createParser('A extends B?');
|
| + TypeParameter parameter = parser.parseTypeParameter();
|
| + expectNotNullIfNoErrors(parameter);
|
| listener.assertNoErrors();
|
| - expect(statement, new isInstanceOf<LabeledStatement>());
|
| - LabeledStatement labeledStatement = statement;
|
| - expect(labeledStatement.labels, hasLength(1));
|
| - expect(labeledStatement.labels[0].label.inDeclarationContext(), isTrue);
|
| - expect(labeledStatement.statement, isNotNull);
|
| + expect(parameter.bound, new isInstanceOf<TypeName>());
|
| + expect(parameter.extendsKeyword, isNotNull);
|
| + expect(parameter.name, isNotNull);
|
| + TypeName bound = parameter.bound;
|
| + expect(bound, isNotNull);
|
| + expect(bound.question, isNotNull);
|
| }
|
|
|
| - void test_parseStatements_multiple() {
|
| - List<Statement> statements = parseStatements("return; return;", 2);
|
| - expect(statements, hasLength(2));
|
| + void test_parseTypeParameter_bounded_simple() {
|
| + createParser('A extends B');
|
| + TypeParameter parameter = parser.parseTypeParameter();
|
| + expectNotNullIfNoErrors(parameter);
|
| + listener.assertNoErrors();
|
| + expect(parameter.bound, new isInstanceOf<TypeName>());
|
| + expect(parameter.extendsKeyword, isNotNull);
|
| + expect(parameter.name, isNotNull);
|
| }
|
|
|
| - void test_parseStatements_single() {
|
| - List<Statement> statements = parseStatements("return;", 1);
|
| - expect(statements, hasLength(1));
|
| + void test_parseTypeParameter_simple() {
|
| + createParser('A');
|
| + TypeParameter parameter = parser.parseTypeParameter();
|
| + expectNotNullIfNoErrors(parameter);
|
| + listener.assertNoErrors();
|
| + expect(parameter.bound, isNull);
|
| + expect(parameter.extendsKeyword, isNull);
|
| + expect(parameter.name, isNotNull);
|
| }
|
|
|
| - void test_parseStringLiteral_adjacent() {
|
| - createParser("'a' 'b'");
|
| - Expression expression = parser.parseStringLiteral();
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseTypeParameterList_multiple() {
|
| + createParser('<A, B extends C, D>');
|
| + TypeParameterList parameterList = parser.parseTypeParameterList();
|
| + expectNotNullIfNoErrors(parameterList);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<AdjacentStrings>());
|
| - AdjacentStrings literal = expression;
|
| - NodeList<StringLiteral> strings = literal.strings;
|
| - expect(strings, hasLength(2));
|
| - StringLiteral firstString = strings[0];
|
| - StringLiteral secondString = strings[1];
|
| - expect((firstString as SimpleStringLiteral).value, "a");
|
| - expect((secondString as SimpleStringLiteral).value, "b");
|
| + expect(parameterList.leftBracket, isNotNull);
|
| + expect(parameterList.rightBracket, isNotNull);
|
| + expect(parameterList.typeParameters, hasLength(3));
|
| }
|
|
|
| - void test_parseStringLiteral_endsWithInterpolation() {
|
| - createParser(r"'x$y'");
|
| - Expression expression = parser.parseStringLiteral();
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseTypeParameterList_parameterizedWithTrailingEquals() {
|
| + createParser('<A extends B<E>>=');
|
| + TypeParameterList parameterList = parser.parseTypeParameterList();
|
| + expectNotNullIfNoErrors(parameterList);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<StringInterpolation>());
|
| - StringInterpolation interpolation = expression;
|
| - expect(interpolation.elements, hasLength(3));
|
| - expect(interpolation.elements[0], new isInstanceOf<InterpolationString>());
|
| - InterpolationString element0 = interpolation.elements[0];
|
| - expect(element0.value, 'x');
|
| - expect(
|
| - interpolation.elements[1], new isInstanceOf<InterpolationExpression>());
|
| - InterpolationExpression element1 = interpolation.elements[1];
|
| - expect(element1.expression, new isInstanceOf<SimpleIdentifier>());
|
| - expect(interpolation.elements[2], new isInstanceOf<InterpolationString>());
|
| - InterpolationString element2 = interpolation.elements[2];
|
| - expect(element2.value, '');
|
| + expect(parameterList.leftBracket, isNotNull);
|
| + expect(parameterList.rightBracket, isNotNull);
|
| + expect(parameterList.typeParameters, hasLength(1));
|
| }
|
|
|
| - void test_parseStringLiteral_interpolated() {
|
| - createParser("'a \${b} c \$this d'");
|
| - Expression expression = parser.parseStringLiteral();
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseTypeParameterList_single() {
|
| + createParser('<<A>');
|
| + TypeParameterList parameterList = parser.parseTypeParameterList();
|
| + expectNotNullIfNoErrors(parameterList);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<StringInterpolation>());
|
| - StringInterpolation literal = expression;
|
| - NodeList<InterpolationElement> elements = literal.elements;
|
| - expect(elements, hasLength(5));
|
| - expect(elements[0] is InterpolationString, isTrue);
|
| - expect(elements[1] is InterpolationExpression, isTrue);
|
| - expect(elements[2] is InterpolationString, isTrue);
|
| - expect(elements[3] is InterpolationExpression, isTrue);
|
| - expect(elements[4] is InterpolationString, isTrue);
|
| + expect(parameterList.leftBracket, isNotNull);
|
| + expect(parameterList.rightBracket, isNotNull);
|
| + expect(parameterList.typeParameters, hasLength(1));
|
| }
|
|
|
| - void test_parseStringLiteral_multiline_encodedSpace() {
|
| - createParser("'''\\x20\na'''");
|
| - Expression expression = parser.parseStringLiteral();
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseTypeParameterList_withTrailingEquals() {
|
| + createParser('<A>=');
|
| + TypeParameterList parameterList = parser.parseTypeParameterList();
|
| + expectNotNullIfNoErrors(parameterList);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<SimpleStringLiteral>());
|
| - SimpleStringLiteral literal = expression;
|
| - expect(literal.literal, isNotNull);
|
| - expect(literal.value, " \na");
|
| + expect(parameterList.leftBracket, isNotNull);
|
| + expect(parameterList.rightBracket, isNotNull);
|
| + expect(parameterList.typeParameters, hasLength(1));
|
| }
|
|
|
| - void test_parseStringLiteral_multiline_endsWithInterpolation() {
|
| - createParser(r"'''x$y'''");
|
| - Expression expression = parser.parseStringLiteral();
|
| + void test_parseUnaryExpression_decrement_normal() {
|
| + createParser('--x');
|
| + PrefixExpression expression = parser.parseUnaryExpression();
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<StringInterpolation>());
|
| - StringInterpolation interpolation = expression;
|
| - expect(interpolation.elements, hasLength(3));
|
| - expect(interpolation.elements[0], new isInstanceOf<InterpolationString>());
|
| - InterpolationString element0 = interpolation.elements[0];
|
| - expect(element0.value, 'x');
|
| - expect(
|
| - interpolation.elements[1], new isInstanceOf<InterpolationExpression>());
|
| - InterpolationExpression element1 = interpolation.elements[1];
|
| - expect(element1.expression, new isInstanceOf<SimpleIdentifier>());
|
| - expect(interpolation.elements[2], new isInstanceOf<InterpolationString>());
|
| - InterpolationString element2 = interpolation.elements[2];
|
| - expect(element2.value, '');
|
| + expect(expression.operator, isNotNull);
|
| + expect(expression.operator.type, TokenType.MINUS_MINUS);
|
| + expect(expression.operand, isNotNull);
|
| }
|
|
|
| - void test_parseStringLiteral_multiline_escapedBackslash() {
|
| - createParser("'''\\\\\na'''");
|
| - Expression expression = parser.parseStringLiteral();
|
| + void test_parseUnaryExpression_decrement_super() {
|
| + createParser('--super');
|
| + PrefixExpression expression = parser.parseUnaryExpression();
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<SimpleStringLiteral>());
|
| - SimpleStringLiteral literal = expression;
|
| - expect(literal.literal, isNotNull);
|
| - expect(literal.value, "\\\na");
|
| + expect(expression.operator, isNotNull);
|
| + expect(expression.operator.type, TokenType.MINUS);
|
| + Expression innerExpression = expression.operand;
|
| + expect(innerExpression, isNotNull);
|
| + expect(innerExpression is PrefixExpression, isTrue);
|
| + PrefixExpression operand = innerExpression as PrefixExpression;
|
| + expect(operand.operator, isNotNull);
|
| + expect(operand.operator.type, TokenType.MINUS);
|
| + expect(operand.operand, isNotNull);
|
| }
|
|
|
| - void test_parseStringLiteral_multiline_escapedBackslash_raw() {
|
| - createParser("r'''\\\\\na'''");
|
| - Expression expression = parser.parseStringLiteral();
|
| + void test_parseUnaryExpression_decrement_super_propertyAccess() {
|
| + createParser('--super.x');
|
| + PrefixExpression expression = parser.parseUnaryExpression();
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<SimpleStringLiteral>());
|
| - SimpleStringLiteral literal = expression;
|
| - expect(literal.literal, isNotNull);
|
| - expect(literal.value, "\\\\\na");
|
| + expect(expression.operator, isNotNull);
|
| + expect(expression.operator.type, TokenType.MINUS_MINUS);
|
| + expect(expression.operand, isNotNull);
|
| + PropertyAccess operand = expression.operand as PropertyAccess;
|
| + expect(operand.target is SuperExpression, isTrue);
|
| + expect(operand.propertyName.name, "x");
|
| }
|
|
|
| - void test_parseStringLiteral_multiline_escapedEolMarker() {
|
| - createParser("'''\\\na'''");
|
| - Expression expression = parser.parseStringLiteral();
|
| + void test_parseUnaryExpression_decrement_super_withComment() {
|
| + createParser('/* 0 */ --super');
|
| + PrefixExpression expression = parser.parseUnaryExpression();
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<SimpleStringLiteral>());
|
| - SimpleStringLiteral literal = expression;
|
| - expect(literal.literal, isNotNull);
|
| - expect(literal.value, "a");
|
| + expect(expression.operator, isNotNull);
|
| + expect(expression.operator.type, TokenType.MINUS);
|
| + expect(expression.operator.precedingComments, isNotNull);
|
| + Expression innerExpression = expression.operand;
|
| + expect(innerExpression, isNotNull);
|
| + expect(innerExpression is PrefixExpression, isTrue);
|
| + PrefixExpression operand = innerExpression as PrefixExpression;
|
| + expect(operand.operator, isNotNull);
|
| + expect(operand.operator.type, TokenType.MINUS);
|
| + expect(operand.operand, isNotNull);
|
| }
|
|
|
| - void test_parseStringLiteral_multiline_escapedEolMarker_raw() {
|
| - createParser("r'''\\\na'''");
|
| - Expression expression = parser.parseStringLiteral();
|
| + void test_parseUnaryExpression_increment_normal() {
|
| + createParser('++x');
|
| + PrefixExpression expression = parser.parseUnaryExpression();
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<SimpleStringLiteral>());
|
| - SimpleStringLiteral literal = expression;
|
| - expect(literal.literal, isNotNull);
|
| - expect(literal.value, "a");
|
| + expect(expression.operator, isNotNull);
|
| + expect(expression.operator.type, TokenType.PLUS_PLUS);
|
| + expect(expression.operand, isNotNull);
|
| }
|
|
|
| - void test_parseStringLiteral_multiline_escapedSpaceAndEolMarker() {
|
| - createParser("'''\\ \\\na'''");
|
| - Expression expression = parser.parseStringLiteral();
|
| + void test_parseUnaryExpression_increment_super_index() {
|
| + createParser('++super[0]');
|
| + PrefixExpression expression = parser.parseUnaryExpression();
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<SimpleStringLiteral>());
|
| - SimpleStringLiteral literal = expression;
|
| - expect(literal.literal, isNotNull);
|
| - expect(literal.value, "a");
|
| + expect(expression.operator, isNotNull);
|
| + expect(expression.operator.type, TokenType.PLUS_PLUS);
|
| + expect(expression.operand, isNotNull);
|
| + IndexExpression operand = expression.operand as IndexExpression;
|
| + expect(operand.realTarget is SuperExpression, isTrue);
|
| + expect(operand.index is IntegerLiteral, isTrue);
|
| }
|
|
|
| - void test_parseStringLiteral_multiline_escapedSpaceAndEolMarker_raw() {
|
| - createParser("r'''\\ \\\na'''");
|
| - Expression expression = parser.parseStringLiteral();
|
| + void test_parseUnaryExpression_increment_super_propertyAccess() {
|
| + createParser('++super.x');
|
| + PrefixExpression expression = parser.parseUnaryExpression();
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<SimpleStringLiteral>());
|
| - SimpleStringLiteral literal = expression;
|
| - expect(literal.literal, isNotNull);
|
| - expect(literal.value, "a");
|
| + expect(expression.operator, isNotNull);
|
| + expect(expression.operator.type, TokenType.PLUS_PLUS);
|
| + expect(expression.operand, isNotNull);
|
| + PropertyAccess operand = expression.operand as PropertyAccess;
|
| + expect(operand.target is SuperExpression, isTrue);
|
| + expect(operand.propertyName.name, "x");
|
| }
|
|
|
| - void test_parseStringLiteral_multiline_escapedTab() {
|
| - createParser("'''\\t\na'''");
|
| - Expression expression = parser.parseStringLiteral();
|
| + void test_parseUnaryExpression_minus_normal() {
|
| + createParser('-x');
|
| + PrefixExpression expression = parser.parseUnaryExpression();
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<SimpleStringLiteral>());
|
| - SimpleStringLiteral literal = expression;
|
| - expect(literal.literal, isNotNull);
|
| - expect(literal.value, "\t\na");
|
| + expect(expression.operator, isNotNull);
|
| + expect(expression.operator.type, TokenType.MINUS);
|
| + expect(expression.operand, isNotNull);
|
| }
|
|
|
| - void test_parseStringLiteral_multiline_escapedTab_raw() {
|
| - createParser("r'''\\t\na'''");
|
| - Expression expression = parser.parseStringLiteral();
|
| + void test_parseUnaryExpression_minus_super() {
|
| + createParser('-super');
|
| + PrefixExpression expression = parser.parseUnaryExpression();
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<SimpleStringLiteral>());
|
| - SimpleStringLiteral literal = expression;
|
| - expect(literal.literal, isNotNull);
|
| - expect(literal.value, "\\t\na");
|
| + expect(expression.operator, isNotNull);
|
| + expect(expression.operator.type, TokenType.MINUS);
|
| + expect(expression.operand, isNotNull);
|
| }
|
|
|
| - void test_parseStringLiteral_multiline_quoteAfterInterpolation() {
|
| - createParser(r"""'''$x'y'''""");
|
| - Expression expression = parser.parseStringLiteral();
|
| + void test_parseUnaryExpression_not_normal() {
|
| + createParser('!x');
|
| + PrefixExpression expression = parser.parseUnaryExpression();
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<StringInterpolation>());
|
| - StringInterpolation interpolation = expression;
|
| - expect(interpolation.elements, hasLength(3));
|
| - expect(interpolation.elements[0], new isInstanceOf<InterpolationString>());
|
| - InterpolationString element0 = interpolation.elements[0];
|
| - expect(element0.value, '');
|
| - expect(
|
| - interpolation.elements[1], new isInstanceOf<InterpolationExpression>());
|
| - InterpolationExpression element1 = interpolation.elements[1];
|
| - expect(element1.expression, new isInstanceOf<SimpleIdentifier>());
|
| - expect(interpolation.elements[2], new isInstanceOf<InterpolationString>());
|
| - InterpolationString element2 = interpolation.elements[2];
|
| - expect(element2.value, "'y");
|
| + expect(expression.operator, isNotNull);
|
| + expect(expression.operator.type, TokenType.BANG);
|
| + expect(expression.operand, isNotNull);
|
| }
|
|
|
| - void test_parseStringLiteral_multiline_startsWithInterpolation() {
|
| - createParser(r"'''${x}y'''");
|
| - Expression expression = parser.parseStringLiteral();
|
| + void test_parseUnaryExpression_not_super() {
|
| + createParser('!super');
|
| + PrefixExpression expression = parser.parseUnaryExpression();
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<StringInterpolation>());
|
| - StringInterpolation interpolation = expression;
|
| - expect(interpolation.elements, hasLength(3));
|
| - expect(interpolation.elements[0], new isInstanceOf<InterpolationString>());
|
| - InterpolationString element0 = interpolation.elements[0];
|
| - expect(element0.value, '');
|
| - expect(
|
| - interpolation.elements[1], new isInstanceOf<InterpolationExpression>());
|
| - InterpolationExpression element1 = interpolation.elements[1];
|
| - expect(element1.expression, new isInstanceOf<SimpleIdentifier>());
|
| - expect(interpolation.elements[2], new isInstanceOf<InterpolationString>());
|
| - InterpolationString element2 = interpolation.elements[2];
|
| - expect(element2.value, 'y');
|
| + expect(expression.operator, isNotNull);
|
| + expect(expression.operator.type, TokenType.BANG);
|
| + expect(expression.operand, isNotNull);
|
| }
|
|
|
| - void test_parseStringLiteral_multiline_twoSpaces() {
|
| - createParser("''' \na'''");
|
| - Expression expression = parser.parseStringLiteral();
|
| + void test_parseUnaryExpression_tilda_normal() {
|
| + createParser('~x');
|
| + PrefixExpression expression = parser.parseUnaryExpression();
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<SimpleStringLiteral>());
|
| - SimpleStringLiteral literal = expression;
|
| - expect(literal.literal, isNotNull);
|
| - expect(literal.value, "a");
|
| + expect(expression.operator, isNotNull);
|
| + expect(expression.operator.type, TokenType.TILDE);
|
| + expect(expression.operand, isNotNull);
|
| }
|
|
|
| - void test_parseStringLiteral_multiline_twoSpaces_raw() {
|
| - createParser("r''' \na'''");
|
| - Expression expression = parser.parseStringLiteral();
|
| + void test_parseUnaryExpression_tilda_super() {
|
| + createParser('~super');
|
| + PrefixExpression expression = parser.parseUnaryExpression();
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<SimpleStringLiteral>());
|
| - SimpleStringLiteral literal = expression;
|
| - expect(literal.literal, isNotNull);
|
| - expect(literal.value, "a");
|
| + expect(expression.operator, isNotNull);
|
| + expect(expression.operator.type, TokenType.TILDE);
|
| + expect(expression.operand, isNotNull);
|
| }
|
|
|
| - void test_parseStringLiteral_multiline_untrimmed() {
|
| - createParser("''' a\nb'''");
|
| - Expression expression = parser.parseStringLiteral();
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseVariableDeclaration_equals() {
|
| + createParser('a = b');
|
| + VariableDeclaration declaration = parser.parseVariableDeclaration();
|
| + expectNotNullIfNoErrors(declaration);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<SimpleStringLiteral>());
|
| - SimpleStringLiteral literal = expression;
|
| - expect(literal.literal, isNotNull);
|
| - expect(literal.value, " a\nb");
|
| + expect(declaration.name, isNotNull);
|
| + expect(declaration.equals, isNotNull);
|
| + expect(declaration.initializer, isNotNull);
|
| }
|
|
|
| - void test_parseStringLiteral_quoteAfterInterpolation() {
|
| - createParser(r"""'$x"'""");
|
| - Expression expression = parser.parseStringLiteral();
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseVariableDeclaration_noEquals() {
|
| + createParser('a');
|
| + VariableDeclaration declaration = parser.parseVariableDeclaration();
|
| + expectNotNullIfNoErrors(declaration);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<StringInterpolation>());
|
| - StringInterpolation interpolation = expression;
|
| - expect(interpolation.elements, hasLength(3));
|
| - expect(interpolation.elements[0], new isInstanceOf<InterpolationString>());
|
| - InterpolationString element0 = interpolation.elements[0];
|
| - expect(element0.value, '');
|
| - expect(
|
| - interpolation.elements[1], new isInstanceOf<InterpolationExpression>());
|
| - InterpolationExpression element1 = interpolation.elements[1];
|
| - expect(element1.expression, new isInstanceOf<SimpleIdentifier>());
|
| - expect(interpolation.elements[2], new isInstanceOf<InterpolationString>());
|
| - InterpolationString element2 = interpolation.elements[2];
|
| - expect(element2.value, '"');
|
| + expect(declaration.name, isNotNull);
|
| + expect(declaration.equals, isNull);
|
| + expect(declaration.initializer, isNull);
|
| }
|
|
|
| - void test_parseStringLiteral_single() {
|
| - createParser("'a'");
|
| - Expression expression = parser.parseStringLiteral();
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseVariableDeclarationListAfterMetadata_const_noType() {
|
| + createParser('const a');
|
| + VariableDeclarationList declarationList =
|
| + parseFullVariableDeclarationList();
|
| + expectNotNullIfNoErrors(declarationList);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<SimpleStringLiteral>());
|
| - SimpleStringLiteral literal = expression;
|
| - expect(literal.literal, isNotNull);
|
| - expect(literal.value, "a");
|
| + expect(declarationList.keyword, isNotNull);
|
| + expect(declarationList.type, isNull);
|
| + expect(declarationList.variables, hasLength(1));
|
| }
|
|
|
| - void test_parseStringLiteral_startsWithInterpolation() {
|
| - createParser(r"'${x}y'");
|
| - Expression expression = parser.parseStringLiteral();
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseVariableDeclarationListAfterMetadata_const_type() {
|
| + createParser('const A a');
|
| + VariableDeclarationList declarationList =
|
| + parseFullVariableDeclarationList();
|
| + expectNotNullIfNoErrors(declarationList);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<StringInterpolation>());
|
| - StringInterpolation interpolation = expression;
|
| - expect(interpolation.elements, hasLength(3));
|
| - expect(interpolation.elements[0], new isInstanceOf<InterpolationString>());
|
| - InterpolationString element0 = interpolation.elements[0];
|
| - expect(element0.value, '');
|
| - expect(
|
| - interpolation.elements[1], new isInstanceOf<InterpolationExpression>());
|
| - InterpolationExpression element1 = interpolation.elements[1];
|
| - expect(element1.expression, new isInstanceOf<SimpleIdentifier>());
|
| - expect(interpolation.elements[2], new isInstanceOf<InterpolationString>());
|
| - InterpolationString element2 = interpolation.elements[2];
|
| - expect(element2.value, 'y');
|
| + expect(declarationList.keyword, isNotNull);
|
| + expect(declarationList.type, isNotNull);
|
| + expect(declarationList.variables, hasLength(1));
|
| }
|
|
|
| - void test_parseSuperConstructorInvocation_named() {
|
| - createParser('super.a()');
|
| - SuperConstructorInvocation invocation =
|
| - parser.parseSuperConstructorInvocation();
|
| - expectNotNullIfNoErrors(invocation);
|
| - listener.assertNoErrors();
|
| - expect(invocation.argumentList, isNotNull);
|
| - expect(invocation.constructorName, isNotNull);
|
| - expect(invocation.superKeyword, isNotNull);
|
| - expect(invocation.period, isNotNull);
|
| + void test_parseVariableDeclarationListAfterMetadata_final_noType() {
|
| + createParser('final a');
|
| + VariableDeclarationList declarationList =
|
| + parseFullVariableDeclarationList();
|
| + expectNotNullIfNoErrors(declarationList);
|
| + listener.assertNoErrors();
|
| + expect(declarationList.keyword, isNotNull);
|
| + expect(declarationList.type, isNull);
|
| + expect(declarationList.variables, hasLength(1));
|
| }
|
|
|
| - void test_parseSuperConstructorInvocation_unnamed() {
|
| - createParser('super()');
|
| - SuperConstructorInvocation invocation =
|
| - parser.parseSuperConstructorInvocation();
|
| - expectNotNullIfNoErrors(invocation);
|
| + void test_parseVariableDeclarationListAfterMetadata_final_type() {
|
| + createParser('final A a');
|
| + VariableDeclarationList declarationList =
|
| + parseFullVariableDeclarationList();
|
| + expectNotNullIfNoErrors(declarationList);
|
| listener.assertNoErrors();
|
| - expect(invocation.argumentList, isNotNull);
|
| - expect(invocation.constructorName, isNull);
|
| - expect(invocation.superKeyword, isNotNull);
|
| - expect(invocation.period, isNull);
|
| + expect(declarationList.keyword, isNotNull);
|
| + expect(declarationList.type, isNotNull);
|
| + expect(declarationList.variables, hasLength(1));
|
| }
|
|
|
| - void test_parseSwitchStatement_case() {
|
| - createParser('switch (a) {case 1: return "I";}');
|
| - SwitchStatement statement = parser.parseSwitchStatement();
|
| - expectNotNullIfNoErrors(statement);
|
| + void test_parseVariableDeclarationListAfterMetadata_final_typeComment() {
|
| + enableGenericMethodComments = true;
|
| + createParser('final/*=T*/ x');
|
| + VariableDeclarationList declarationList =
|
| + parseFullVariableDeclarationList();
|
| + expectNotNullIfNoErrors(declarationList);
|
| listener.assertNoErrors();
|
| - expect(statement.switchKeyword, isNotNull);
|
| - expect(statement.leftParenthesis, isNotNull);
|
| - expect(statement.expression, isNotNull);
|
| - expect(statement.rightParenthesis, isNotNull);
|
| - expect(statement.leftBracket, isNotNull);
|
| - expect(statement.members, hasLength(1));
|
| - expect(statement.rightBracket, isNotNull);
|
| + expect((declarationList.type as TypeName).name.name, 'T');
|
| + expect(declarationList.isFinal, true);
|
| }
|
|
|
| - void test_parseSwitchStatement_empty() {
|
| - createParser('switch (a) {}');
|
| - SwitchStatement statement = parser.parseSwitchStatement();
|
| - expectNotNullIfNoErrors(statement);
|
| + void test_parseVariableDeclarationListAfterMetadata_type_multiple() {
|
| + createParser('A a, b, c');
|
| + VariableDeclarationList declarationList =
|
| + parseFullVariableDeclarationList();
|
| + expectNotNullIfNoErrors(declarationList);
|
| listener.assertNoErrors();
|
| - expect(statement.switchKeyword, isNotNull);
|
| - expect(statement.leftParenthesis, isNotNull);
|
| - expect(statement.expression, isNotNull);
|
| - expect(statement.rightParenthesis, isNotNull);
|
| - expect(statement.leftBracket, isNotNull);
|
| - expect(statement.members, hasLength(0));
|
| - expect(statement.rightBracket, isNotNull);
|
| + expect(declarationList.keyword, isNull);
|
| + expect(declarationList.type, isNotNull);
|
| + expect(declarationList.variables, hasLength(3));
|
| }
|
|
|
| - void test_parseSwitchStatement_labeledCase() {
|
| - createParser('switch (a) {l1: l2: l3: case(1):}');
|
| - SwitchStatement statement = parser.parseSwitchStatement();
|
| - expectNotNullIfNoErrors(statement);
|
| + void test_parseVariableDeclarationListAfterMetadata_type_single() {
|
| + createParser('A a');
|
| + VariableDeclarationList declarationList =
|
| + parseFullVariableDeclarationList();
|
| + expectNotNullIfNoErrors(declarationList);
|
| listener.assertNoErrors();
|
| - expect(statement.switchKeyword, isNotNull);
|
| - expect(statement.leftParenthesis, isNotNull);
|
| - expect(statement.expression, isNotNull);
|
| - expect(statement.rightParenthesis, isNotNull);
|
| - expect(statement.leftBracket, isNotNull);
|
| - expect(statement.members, hasLength(1));
|
| - {
|
| - List<Label> labels = statement.members[0].labels;
|
| - expect(labels, hasLength(3));
|
| - expect(labels[0].label.inDeclarationContext(), isTrue);
|
| - expect(labels[1].label.inDeclarationContext(), isTrue);
|
| - expect(labels[2].label.inDeclarationContext(), isTrue);
|
| - }
|
| - expect(statement.rightBracket, isNotNull);
|
| + expect(declarationList.keyword, isNull);
|
| + expect(declarationList.type, isNotNull);
|
| + expect(declarationList.variables, hasLength(1));
|
| }
|
|
|
| - void test_parseSwitchStatement_labeledDefault() {
|
| - createParser('switch (a) {l1: l2: l3: default:}');
|
| - SwitchStatement statement = parser.parseSwitchStatement();
|
| - expectNotNullIfNoErrors(statement);
|
| + void test_parseVariableDeclarationListAfterMetadata_var_multiple() {
|
| + createParser('var a, b, c');
|
| + VariableDeclarationList declarationList =
|
| + parseFullVariableDeclarationList();
|
| + expectNotNullIfNoErrors(declarationList);
|
| listener.assertNoErrors();
|
| - expect(statement.switchKeyword, isNotNull);
|
| - expect(statement.leftParenthesis, isNotNull);
|
| - expect(statement.expression, isNotNull);
|
| - expect(statement.rightParenthesis, isNotNull);
|
| - expect(statement.leftBracket, isNotNull);
|
| - expect(statement.members, hasLength(1));
|
| - {
|
| - List<Label> labels = statement.members[0].labels;
|
| - expect(labels, hasLength(3));
|
| - expect(labels[0].label.inDeclarationContext(), isTrue);
|
| - expect(labels[1].label.inDeclarationContext(), isTrue);
|
| - expect(labels[2].label.inDeclarationContext(), isTrue);
|
| - }
|
| - expect(statement.rightBracket, isNotNull);
|
| + expect(declarationList.keyword, isNotNull);
|
| + expect(declarationList.type, isNull);
|
| + expect(declarationList.variables, hasLength(3));
|
| }
|
|
|
| - void test_parseSwitchStatement_labeledStatementInCase() {
|
| - createParser('switch (a) {case 0: f(); l1: g(); break;}');
|
| - SwitchStatement statement = parser.parseSwitchStatement();
|
| - expectNotNullIfNoErrors(statement);
|
| + void test_parseVariableDeclarationListAfterMetadata_var_single() {
|
| + createParser('var a');
|
| + VariableDeclarationList declarationList =
|
| + parseFullVariableDeclarationList();
|
| + expectNotNullIfNoErrors(declarationList);
|
| listener.assertNoErrors();
|
| - expect(statement.switchKeyword, isNotNull);
|
| - expect(statement.leftParenthesis, isNotNull);
|
| - expect(statement.expression, isNotNull);
|
| - expect(statement.rightParenthesis, isNotNull);
|
| - expect(statement.leftBracket, isNotNull);
|
| - expect(statement.members, hasLength(1));
|
| - expect(statement.members[0].statements, hasLength(3));
|
| - expect(statement.rightBracket, isNotNull);
|
| + expect(declarationList.keyword, isNotNull);
|
| + expect(declarationList.type, isNull);
|
| + expect(declarationList.variables, hasLength(1));
|
| }
|
|
|
| - void test_parseSymbolLiteral_builtInIdentifier() {
|
| - createParser('#dynamic.static.abstract');
|
| - SymbolLiteral literal = parser.parseSymbolLiteral();
|
| - expectNotNullIfNoErrors(literal);
|
| + void test_parseVariableDeclarationListAfterMetadata_var_typeComment() {
|
| + enableGenericMethodComments = true;
|
| + createParser('var/*=T*/ x');
|
| + VariableDeclarationList declarationList =
|
| + parseFullVariableDeclarationList();
|
| + expectNotNullIfNoErrors(declarationList);
|
| listener.assertNoErrors();
|
| - expect(literal.poundSign, isNotNull);
|
| - List<Token> components = literal.components;
|
| - expect(components, hasLength(3));
|
| - expect(components[0].lexeme, "dynamic");
|
| - expect(components[1].lexeme, "static");
|
| - expect(components[2].lexeme, "abstract");
|
| + expect((declarationList.type as TypeName).name.name, 'T');
|
| + expect(declarationList.keyword, isNull);
|
| }
|
|
|
| - void test_parseSymbolLiteral_multiple() {
|
| - createParser('#a.b.c');
|
| - SymbolLiteral literal = parser.parseSymbolLiteral();
|
| - expectNotNullIfNoErrors(literal);
|
| + void test_parseVariableDeclarationListAfterType_type() {
|
| + createParser('T a');
|
| + VariableDeclarationList declarationList =
|
| + parseFullVariableDeclarationList();
|
| + expectNotNullIfNoErrors(declarationList);
|
| listener.assertNoErrors();
|
| - expect(literal.poundSign, isNotNull);
|
| - List<Token> components = literal.components;
|
| - expect(components, hasLength(3));
|
| - expect(components[0].lexeme, "a");
|
| - expect(components[1].lexeme, "b");
|
| - expect(components[2].lexeme, "c");
|
| + expect(declarationList.keyword, isNull);
|
| + expect((declarationList.type as TypeName).name.name, 'T');
|
| + expect(declarationList.variables, hasLength(1));
|
| }
|
|
|
| - void test_parseSymbolLiteral_operator() {
|
| - createParser('#==');
|
| - SymbolLiteral literal = parser.parseSymbolLiteral();
|
| - expectNotNullIfNoErrors(literal);
|
| + void test_parseVariableDeclarationListAfterType_var() {
|
| + createParser('var a, b, c');
|
| + VariableDeclarationList declarationList =
|
| + parseFullVariableDeclarationList();
|
| + expectNotNullIfNoErrors(declarationList);
|
| listener.assertNoErrors();
|
| - expect(literal.poundSign, isNotNull);
|
| - List<Token> components = literal.components;
|
| - expect(components, hasLength(1));
|
| - expect(components[0].lexeme, "==");
|
| + expect(declarationList.keyword.lexeme, 'var');
|
| + expect(declarationList.type, isNull);
|
| + expect(declarationList.variables, hasLength(3));
|
| }
|
|
|
| - void test_parseSymbolLiteral_single() {
|
| - createParser('#a');
|
| - SymbolLiteral literal = parser.parseSymbolLiteral();
|
| - expectNotNullIfNoErrors(literal);
|
| + void test_parseVariableDeclarationStatementAfterMetadata_multiple() {
|
| + createParser('var x, y, z;');
|
| + VariableDeclarationStatement statement = parser.parseStatement2();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(literal.poundSign, isNotNull);
|
| - List<Token> components = literal.components;
|
| - expect(components, hasLength(1));
|
| - expect(components[0].lexeme, "a");
|
| + expect(statement.semicolon, isNotNull);
|
| + VariableDeclarationList variableList = statement.variables;
|
| + expect(variableList, isNotNull);
|
| + expect(variableList.variables, hasLength(3));
|
| }
|
|
|
| - void test_parseSymbolLiteral_void() {
|
| - createParser('#void');
|
| - SymbolLiteral literal = parser.parseSymbolLiteral();
|
| - expectNotNullIfNoErrors(literal);
|
| + void test_parseVariableDeclarationStatementAfterMetadata_single() {
|
| + createParser('var x;');
|
| + VariableDeclarationStatement statement = parser.parseStatement2();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(literal.poundSign, isNotNull);
|
| - List<Token> components = literal.components;
|
| - expect(components, hasLength(1));
|
| - expect(components[0].lexeme, "void");
|
| + expect(statement.semicolon, isNotNull);
|
| + VariableDeclarationList variableList = statement.variables;
|
| + expect(variableList, isNotNull);
|
| + expect(variableList.variables, hasLength(1));
|
| }
|
|
|
| - void test_parseThrowExpression() {
|
| - createParser('throw x;');
|
| - Expression expression = parser.parseThrowExpression();
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseWhileStatement() {
|
| + createParser('while (x) {}');
|
| + WhileStatement statement = parser.parseWhileStatement();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<ThrowExpression>());
|
| - ThrowExpression throwExpression = expression;
|
| - expect(throwExpression.throwKeyword, isNotNull);
|
| - expect(throwExpression.expression, isNotNull);
|
| + expect(statement.whileKeyword, isNotNull);
|
| + expect(statement.leftParenthesis, isNotNull);
|
| + expect(statement.condition, isNotNull);
|
| + expect(statement.rightParenthesis, isNotNull);
|
| + expect(statement.body, isNotNull);
|
| }
|
|
|
| - void test_parseThrowExpressionWithoutCascade() {
|
| - createParser('throw x;');
|
| - Expression expression = parser.parseThrowExpressionWithoutCascade();
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseWithClause_multiple() {
|
| + createParser('with A, B, C');
|
| + WithClause clause = parser.parseWithClause();
|
| + expectNotNullIfNoErrors(clause);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<ThrowExpression>());
|
| - ThrowExpression throwExpression = expression;
|
| - expect(throwExpression.throwKeyword, isNotNull);
|
| - expect(throwExpression.expression, isNotNull);
|
| + expect(clause.withKeyword, isNotNull);
|
| + expect(clause.mixinTypes, hasLength(3));
|
| }
|
|
|
| - void test_parseTryStatement_catch() {
|
| - createParser('try {} catch (e) {}');
|
| - TryStatement statement = parser.parseTryStatement();
|
| - expectNotNullIfNoErrors(statement);
|
| + void test_parseWithClause_single() {
|
| + createParser('with M');
|
| + WithClause clause = parser.parseWithClause();
|
| + expectNotNullIfNoErrors(clause);
|
| listener.assertNoErrors();
|
| - expect(statement.tryKeyword, isNotNull);
|
| - expect(statement.body, isNotNull);
|
| - NodeList<CatchClause> catchClauses = statement.catchClauses;
|
| - expect(catchClauses, hasLength(1));
|
| - CatchClause clause = catchClauses[0];
|
| - expect(clause.onKeyword, isNull);
|
| - expect(clause.exceptionType, isNull);
|
| - expect(clause.catchKeyword, isNotNull);
|
| - expect(clause.exceptionParameter, isNotNull);
|
| - expect(clause.comma, isNull);
|
| - expect(clause.stackTraceParameter, isNull);
|
| - expect(clause.body, isNotNull);
|
| - expect(statement.finallyKeyword, isNull);
|
| - expect(statement.finallyBlock, isNull);
|
| + expect(clause.withKeyword, isNotNull);
|
| + expect(clause.mixinTypes, hasLength(1));
|
| }
|
|
|
| - void test_parseTryStatement_catch_finally() {
|
| - createParser('try {} catch (e, s) {} finally {}');
|
| - TryStatement statement = parser.parseTryStatement();
|
| + void test_parseYieldStatement_each() {
|
| + createParser('yield* x;');
|
| + YieldStatement statement = parser.parseYieldStatement();
|
| expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(statement.tryKeyword, isNotNull);
|
| - expect(statement.body, isNotNull);
|
| - NodeList<CatchClause> catchClauses = statement.catchClauses;
|
| - expect(catchClauses, hasLength(1));
|
| - CatchClause clause = catchClauses[0];
|
| - expect(clause.onKeyword, isNull);
|
| - expect(clause.exceptionType, isNull);
|
| - expect(clause.catchKeyword, isNotNull);
|
| - expect(clause.exceptionParameter, isNotNull);
|
| - expect(clause.comma, isNotNull);
|
| - expect(clause.stackTraceParameter, isNotNull);
|
| - expect(clause.body, isNotNull);
|
| - expect(statement.finallyKeyword, isNotNull);
|
| - expect(statement.finallyBlock, isNotNull);
|
| + expect(statement.yieldKeyword, isNotNull);
|
| + expect(statement.star, isNotNull);
|
| + expect(statement.expression, isNotNull);
|
| + expect(statement.semicolon, isNotNull);
|
| }
|
|
|
| - void test_parseTryStatement_finally() {
|
| - createParser('try {} finally {}');
|
| - TryStatement statement = parser.parseTryStatement();
|
| + void test_parseYieldStatement_normal() {
|
| + createParser('yield x;');
|
| + YieldStatement statement = parser.parseYieldStatement();
|
| expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(statement.tryKeyword, isNotNull);
|
| - expect(statement.body, isNotNull);
|
| - expect(statement.catchClauses, hasLength(0));
|
| - expect(statement.finallyKeyword, isNotNull);
|
| - expect(statement.finallyBlock, isNotNull);
|
| + expect(statement.yieldKeyword, isNotNull);
|
| + expect(statement.star, isNull);
|
| + expect(statement.expression, isNotNull);
|
| + expect(statement.semicolon, isNotNull);
|
| }
|
|
|
| - void test_parseTryStatement_multiple() {
|
| - createParser('try {} on NPE catch (e) {} on Error {} catch (e) {}');
|
| - TryStatement statement = parser.parseTryStatement();
|
| - expectNotNullIfNoErrors(statement);
|
| - listener.assertNoErrors();
|
| - expect(statement.tryKeyword, isNotNull);
|
| - expect(statement.body, isNotNull);
|
| - expect(statement.catchClauses, hasLength(3));
|
| - expect(statement.finallyKeyword, isNull);
|
| - expect(statement.finallyBlock, isNull);
|
| + void test_skipPrefixedIdentifier_invalid() {
|
| + createParser('+');
|
| + Token following = parser.skipPrefixedIdentifier(parser.currentToken);
|
| + expect(following, isNull);
|
| }
|
|
|
| - void test_parseTryStatement_on() {
|
| - createParser('try {} on Error {}');
|
| - TryStatement statement = parser.parseTryStatement();
|
| - expectNotNullIfNoErrors(statement);
|
| - listener.assertNoErrors();
|
| - expect(statement.tryKeyword, isNotNull);
|
| - expect(statement.body, isNotNull);
|
| - NodeList<CatchClause> catchClauses = statement.catchClauses;
|
| - expect(catchClauses, hasLength(1));
|
| - CatchClause clause = catchClauses[0];
|
| - expect(clause.onKeyword, isNotNull);
|
| - expect(clause.exceptionType, isNotNull);
|
| - expect(clause.catchKeyword, isNull);
|
| - expect(clause.exceptionParameter, isNull);
|
| - expect(clause.comma, isNull);
|
| - expect(clause.stackTraceParameter, isNull);
|
| - expect(clause.body, isNotNull);
|
| - expect(statement.finallyKeyword, isNull);
|
| - expect(statement.finallyBlock, isNull);
|
| + void test_skipPrefixedIdentifier_notPrefixed() {
|
| + createParser('a +');
|
| + Token following = parser.skipPrefixedIdentifier(parser.currentToken);
|
| + expect(following, isNotNull);
|
| + expect(following.type, TokenType.PLUS);
|
| }
|
|
|
| - void test_parseTryStatement_on_catch() {
|
| - createParser('try {} on Error catch (e, s) {}');
|
| - TryStatement statement = parser.parseTryStatement();
|
| - expectNotNullIfNoErrors(statement);
|
| - listener.assertNoErrors();
|
| - expect(statement.tryKeyword, isNotNull);
|
| - expect(statement.body, isNotNull);
|
| - NodeList<CatchClause> catchClauses = statement.catchClauses;
|
| - expect(catchClauses, hasLength(1));
|
| - CatchClause clause = catchClauses[0];
|
| - expect(clause.onKeyword, isNotNull);
|
| - expect(clause.exceptionType, isNotNull);
|
| - expect(clause.catchKeyword, isNotNull);
|
| - expect(clause.exceptionParameter, isNotNull);
|
| - expect(clause.comma, isNotNull);
|
| - expect(clause.stackTraceParameter, isNotNull);
|
| - expect(clause.body, isNotNull);
|
| - expect(statement.finallyKeyword, isNull);
|
| - expect(statement.finallyBlock, isNull);
|
| + void test_skipPrefixedIdentifier_prefixed() {
|
| + createParser('a.b +');
|
| + Token following = parser.skipPrefixedIdentifier(parser.currentToken);
|
| + expect(following, isNotNull);
|
| + expect(following.type, TokenType.PLUS);
|
| }
|
|
|
| - void test_parseTryStatement_on_catch_finally() {
|
| - createParser('try {} on Error catch (e, s) {} finally {}');
|
| - TryStatement statement = parser.parseTryStatement();
|
| - expectNotNullIfNoErrors(statement);
|
| - listener.assertNoErrors();
|
| - expect(statement.tryKeyword, isNotNull);
|
| - expect(statement.body, isNotNull);
|
| - NodeList<CatchClause> catchClauses = statement.catchClauses;
|
| - expect(catchClauses, hasLength(1));
|
| - CatchClause clause = catchClauses[0];
|
| - expect(clause.onKeyword, isNotNull);
|
| - expect(clause.exceptionType, isNotNull);
|
| - expect(clause.catchKeyword, isNotNull);
|
| - expect(clause.exceptionParameter, isNotNull);
|
| - expect(clause.comma, isNotNull);
|
| - expect(clause.stackTraceParameter, isNotNull);
|
| - expect(clause.body, isNotNull);
|
| - expect(statement.finallyKeyword, isNotNull);
|
| - expect(statement.finallyBlock, isNotNull);
|
| + void test_skipReturnType_invalid() {
|
| + createParser('+');
|
| + Token following = parser.skipReturnType(parser.currentToken);
|
| + expect(following, isNull);
|
| }
|
|
|
| - void test_parseTypeAlias_function_noParameters() {
|
| - createParser('typedef bool F();');
|
| - FunctionTypeAlias typeAlias = parseFullCompilationUnitMember();
|
| - expectNotNullIfNoErrors(typeAlias);
|
| - listener.assertNoErrors();
|
| - expect(typeAlias.typedefKeyword, isNotNull);
|
| - expect(typeAlias.name, isNotNull);
|
| - expect(typeAlias.parameters, isNotNull);
|
| - expect(typeAlias.returnType, isNotNull);
|
| - expect(typeAlias.semicolon, isNotNull);
|
| - expect(typeAlias.typeParameters, isNull);
|
| + void test_skipReturnType_type() {
|
| + createParser('C +');
|
| + Token following = parser.skipReturnType(parser.currentToken);
|
| + expect(following, isNotNull);
|
| + expect(following.type, TokenType.PLUS);
|
| }
|
|
|
| - void test_parseTypeAlias_function_noReturnType() {
|
| - createParser('typedef F();');
|
| - FunctionTypeAlias typeAlias = parseFullCompilationUnitMember();
|
| - expectNotNullIfNoErrors(typeAlias);
|
| - listener.assertNoErrors();
|
| - expect(typeAlias.typedefKeyword, isNotNull);
|
| - expect(typeAlias.name, isNotNull);
|
| - expect(typeAlias.parameters, isNotNull);
|
| - expect(typeAlias.returnType, isNull);
|
| - expect(typeAlias.semicolon, isNotNull);
|
| - expect(typeAlias.typeParameters, isNull);
|
| + void test_skipReturnType_void() {
|
| + createParser('void +');
|
| + Token following = parser.skipReturnType(parser.currentToken);
|
| + expect(following, isNotNull);
|
| + expect(following.type, TokenType.PLUS);
|
| }
|
|
|
| - void test_parseTypeAlias_function_parameterizedReturnType() {
|
| - createParser('typedef A<B> F();');
|
| - FunctionTypeAlias typeAlias = parseFullCompilationUnitMember();
|
| - expectNotNullIfNoErrors(typeAlias);
|
| - listener.assertNoErrors();
|
| - expect(typeAlias.typedefKeyword, isNotNull);
|
| - expect(typeAlias.name, isNotNull);
|
| - expect(typeAlias.parameters, isNotNull);
|
| - expect(typeAlias.returnType, isNotNull);
|
| - expect(typeAlias.semicolon, isNotNull);
|
| - expect(typeAlias.typeParameters, isNull);
|
| + void test_skipSimpleIdentifier_identifier() {
|
| + createParser('i +');
|
| + Token following = parser.skipSimpleIdentifier(parser.currentToken);
|
| + expect(following, isNotNull);
|
| + expect(following.type, TokenType.PLUS);
|
| }
|
|
|
| - void test_parseTypeAlias_function_parameters() {
|
| - createParser('typedef bool F(Object value);');
|
| - FunctionTypeAlias typeAlias = parseFullCompilationUnitMember();
|
| - expectNotNullIfNoErrors(typeAlias);
|
| - listener.assertNoErrors();
|
| - expect(typeAlias.typedefKeyword, isNotNull);
|
| - expect(typeAlias.name, isNotNull);
|
| - expect(typeAlias.parameters, isNotNull);
|
| - expect(typeAlias.returnType, isNotNull);
|
| - expect(typeAlias.semicolon, isNotNull);
|
| - expect(typeAlias.typeParameters, isNull);
|
| + void test_skipSimpleIdentifier_invalid() {
|
| + createParser('9 +');
|
| + Token following = parser.skipSimpleIdentifier(parser.currentToken);
|
| + expect(following, isNull);
|
| }
|
|
|
| - void test_parseTypeAlias_function_typeParameters() {
|
| - createParser('typedef bool F<E>();');
|
| - FunctionTypeAlias typeAlias = parseFullCompilationUnitMember();
|
| - expectNotNullIfNoErrors(typeAlias);
|
| - listener.assertNoErrors();
|
| - expect(typeAlias.typedefKeyword, isNotNull);
|
| - expect(typeAlias.name, isNotNull);
|
| - expect(typeAlias.parameters, isNotNull);
|
| - expect(typeAlias.returnType, isNotNull);
|
| - expect(typeAlias.semicolon, isNotNull);
|
| - expect(typeAlias.typeParameters, isNotNull);
|
| + void test_skipSimpleIdentifier_pseudoKeyword() {
|
| + createParser('as +');
|
| + Token following = parser.skipSimpleIdentifier(parser.currentToken);
|
| + expect(following, isNotNull);
|
| + expect(following.type, TokenType.PLUS);
|
| }
|
|
|
| - void test_parseTypeAlias_function_voidReturnType() {
|
| - createParser('typedef void F();');
|
| - FunctionTypeAlias typeAlias = parseFullCompilationUnitMember();
|
| - expectNotNullIfNoErrors(typeAlias);
|
| - listener.assertNoErrors();
|
| - expect(typeAlias.typedefKeyword, isNotNull);
|
| - expect(typeAlias.name, isNotNull);
|
| - expect(typeAlias.parameters, isNotNull);
|
| - expect(typeAlias.returnType, isNotNull);
|
| - expect(typeAlias.semicolon, isNotNull);
|
| - expect(typeAlias.typeParameters, isNull);
|
| + void test_skipStringLiteral_adjacent() {
|
| + createParser("'a' 'b' +");
|
| + Token following = parser.skipStringLiteral(parser.currentToken);
|
| + expect(following, isNotNull);
|
| + expect(following.type, TokenType.PLUS);
|
| }
|
|
|
| - @failingTest
|
| - void test_parseTypeAlias_genericFunction_noParameters() {
|
| - createParser('typedef F = bool Function();');
|
| - GenericTypeAlias typeAlias = parseFullCompilationUnitMember();
|
| - expectNotNullIfNoErrors(typeAlias);
|
| - listener.assertNoErrors();
|
| - expect(typeAlias.typedefKeyword, isNotNull);
|
| - expect(typeAlias.name, isNotNull);
|
| - expect(typeAlias.typeParameters, isNull);
|
| - expect(typeAlias.semicolon, isNotNull);
|
| - GenericFunctionType functionType = typeAlias.functionType;
|
| - expect(functionType, isNotNull);
|
| - expect(functionType.parameters, isNotNull);
|
| - expect(functionType.returnType, isNotNull);
|
| - expect(functionType.typeParameters, isNull);
|
| + void test_skipStringLiteral_interpolated() {
|
| + createParser("'a\${b}c' +");
|
| + Token following = parser.skipStringLiteral(parser.currentToken);
|
| + expect(following, isNotNull);
|
| + expect(following.type, TokenType.PLUS);
|
| }
|
|
|
| - @failingTest
|
| - void test_parseTypeAlias_genericFunction_noReturnType() {
|
| - createParser('typedef F = Function();');
|
| - GenericTypeAlias typeAlias = parseFullCompilationUnitMember();
|
| - expectNotNullIfNoErrors(typeAlias);
|
| - listener.assertNoErrors();
|
| - expect(typeAlias.typedefKeyword, isNotNull);
|
| - expect(typeAlias.name, isNotNull);
|
| - expect(typeAlias.typeParameters, isNull);
|
| - expect(typeAlias.semicolon, isNotNull);
|
| - GenericFunctionType functionType = typeAlias.functionType;
|
| - expect(functionType, isNotNull);
|
| - expect(functionType.parameters, isNotNull);
|
| - expect(functionType.returnType, isNull);
|
| - expect(functionType.typeParameters, isNull);
|
| + void test_skipStringLiteral_invalid() {
|
| + createParser('a');
|
| + Token following = parser.skipStringLiteral(parser.currentToken);
|
| + expect(following, isNull);
|
| }
|
|
|
| - @failingTest
|
| - void test_parseTypeAlias_genericFunction_parameterizedReturnType() {
|
| - createParser('typedef F = A<B> Function();');
|
| - GenericTypeAlias typeAlias = parseFullCompilationUnitMember();
|
| - expectNotNullIfNoErrors(typeAlias);
|
| - listener.assertNoErrors();
|
| - expect(typeAlias.typedefKeyword, isNotNull);
|
| - expect(typeAlias.name, isNotNull);
|
| - expect(typeAlias.typeParameters, isNull);
|
| - expect(typeAlias.semicolon, isNotNull);
|
| - GenericFunctionType functionType = typeAlias.functionType;
|
| - expect(functionType, isNotNull);
|
| - expect(functionType.parameters, isNotNull);
|
| - expect(functionType.returnType, isNotNull);
|
| - expect(functionType.typeParameters, isNull);
|
| + void test_skipStringLiteral_single() {
|
| + createParser("'a' +");
|
| + Token following = parser.skipStringLiteral(parser.currentToken);
|
| + expect(following, isNotNull);
|
| + expect(following.type, TokenType.PLUS);
|
| }
|
|
|
| - @failingTest
|
| - void test_parseTypeAlias_genericFunction_parameters() {
|
| - createParser('typedef F = bool Function(Object value);');
|
| - GenericTypeAlias typeAlias = parseFullCompilationUnitMember();
|
| - expectNotNullIfNoErrors(typeAlias);
|
| - listener.assertNoErrors();
|
| - expect(typeAlias.typedefKeyword, isNotNull);
|
| - expect(typeAlias.name, isNotNull);
|
| - expect(typeAlias.typeParameters, isNull);
|
| - expect(typeAlias.semicolon, isNotNull);
|
| - GenericFunctionType functionType = typeAlias.functionType;
|
| - expect(functionType, isNotNull);
|
| - expect(functionType.parameters, isNotNull);
|
| - expect(functionType.returnType, isNotNull);
|
| - expect(functionType.typeParameters, isNull);
|
| + void test_skipTypeArgumentList_invalid() {
|
| + createParser('+');
|
| + Token following = parser.skipTypeArgumentList(parser.currentToken);
|
| + expect(following, isNull);
|
| }
|
|
|
| - @failingTest
|
| - void test_parseTypeAlias_genericFunction_typeParameters() {
|
| - createParser('typedef F = bool Function<E>();');
|
| - GenericTypeAlias typeAlias = parseFullCompilationUnitMember();
|
| - expectNotNullIfNoErrors(typeAlias);
|
| - listener.assertNoErrors();
|
| - expect(typeAlias.typedefKeyword, isNotNull);
|
| - expect(typeAlias.name, isNotNull);
|
| - expect(typeAlias.typeParameters, isNull);
|
| - expect(typeAlias.semicolon, isNotNull);
|
| - GenericFunctionType functionType = typeAlias.functionType;
|
| - expect(functionType, isNotNull);
|
| - expect(functionType.parameters, isNotNull);
|
| - expect(functionType.returnType, isNotNull);
|
| - expect(functionType.typeParameters, isNotNull);
|
| + void test_skipTypeArgumentList_multiple() {
|
| + createParser('<E, F, G> +');
|
| + Token following = parser.skipTypeArgumentList(parser.currentToken);
|
| + expect(following, isNotNull);
|
| + expect(following.type, TokenType.PLUS);
|
| }
|
|
|
| - @failingTest
|
| - void test_parseTypeAlias_genericFunction_typeParameters_noParameters() {
|
| - createParser('typedef F<T> = bool Function();');
|
| - GenericTypeAlias typeAlias = parseFullCompilationUnitMember();
|
| - expectNotNullIfNoErrors(typeAlias);
|
| - listener.assertNoErrors();
|
| - expect(typeAlias.typedefKeyword, isNotNull);
|
| - expect(typeAlias.name, isNotNull);
|
| - expect(typeAlias.typeParameters, isNotNull);
|
| - expect(typeAlias.semicolon, isNotNull);
|
| - GenericFunctionType functionType = typeAlias.functionType;
|
| - expect(functionType, isNotNull);
|
| - expect(functionType.parameters, isNotNull);
|
| - expect(functionType.returnType, isNotNull);
|
| - expect(functionType.typeParameters, isNull);
|
| + void test_skipTypeArgumentList_single() {
|
| + createParser('<E> +');
|
| + Token following = parser.skipTypeArgumentList(parser.currentToken);
|
| + expect(following, isNotNull);
|
| + expect(following.type, TokenType.PLUS);
|
| }
|
|
|
| - @failingTest
|
| - void test_parseTypeAlias_genericFunction_typeParameters_noReturnType() {
|
| - createParser('typedef F<T> = Function();');
|
| - GenericTypeAlias typeAlias = parseFullCompilationUnitMember();
|
| - expectNotNullIfNoErrors(typeAlias);
|
| - listener.assertNoErrors();
|
| - expect(typeAlias.typedefKeyword, isNotNull);
|
| - expect(typeAlias.name, isNotNull);
|
| - expect(typeAlias.typeParameters, isNotNull);
|
| - expect(typeAlias.semicolon, isNotNull);
|
| - GenericFunctionType functionType = typeAlias.functionType;
|
| - expect(functionType, isNotNull);
|
| - expect(functionType.parameters, isNotNull);
|
| - expect(functionType.returnType, isNull);
|
| - expect(functionType.typeParameters, isNull);
|
| + void test_skipTypeName_invalid() {
|
| + createParser('+');
|
| + Token following = parser.skipTypeName(parser.currentToken);
|
| + expect(following, isNull);
|
| }
|
|
|
| - @failingTest
|
| - void
|
| - test_parseTypeAlias_genericFunction_typeParameters_parameterizedReturnType() {
|
| - createParser('typedef F<T> = A<B> Function();');
|
| - GenericTypeAlias typeAlias = parseFullCompilationUnitMember();
|
| - expectNotNullIfNoErrors(typeAlias);
|
| - listener.assertNoErrors();
|
| - expect(typeAlias.typedefKeyword, isNotNull);
|
| - expect(typeAlias.name, isNotNull);
|
| - expect(typeAlias.typeParameters, isNotNull);
|
| - expect(typeAlias.semicolon, isNotNull);
|
| - GenericFunctionType functionType = typeAlias.functionType;
|
| - expect(functionType, isNotNull);
|
| - expect(functionType.parameters, isNotNull);
|
| - expect(functionType.returnType, isNotNull);
|
| - expect(functionType.typeParameters, isNull);
|
| + void test_skipTypeName_parameterized() {
|
| + createParser('C<E<F<G>>> +');
|
| + Token following = parser.skipTypeName(parser.currentToken);
|
| + expect(following, isNotNull);
|
| + expect(following.type, TokenType.PLUS);
|
| }
|
|
|
| - @failingTest
|
| - void test_parseTypeAlias_genericFunction_typeParameters_parameters() {
|
| - createParser('typedef F<T> = bool Function(Object value);');
|
| - GenericTypeAlias typeAlias = parseFullCompilationUnitMember();
|
| - expectNotNullIfNoErrors(typeAlias);
|
| - listener.assertNoErrors();
|
| - expect(typeAlias.typedefKeyword, isNotNull);
|
| - expect(typeAlias.name, isNotNull);
|
| - expect(typeAlias.typeParameters, isNotNull);
|
| - expect(typeAlias.semicolon, isNotNull);
|
| - GenericFunctionType functionType = typeAlias.functionType;
|
| - expect(functionType, isNotNull);
|
| - expect(functionType.parameters, isNotNull);
|
| - expect(functionType.returnType, isNotNull);
|
| - expect(functionType.typeParameters, isNull);
|
| + void test_skipTypeName_simple() {
|
| + createParser('C +');
|
| + Token following = parser.skipTypeName(parser.currentToken);
|
| + expect(following, isNotNull);
|
| + expect(following.type, TokenType.PLUS);
|
| }
|
|
|
| - @failingTest
|
| - void test_parseTypeAlias_genericFunction_typeParameters_typeParameters() {
|
| - createParser('typedef F<T> = bool Function<E>();');
|
| - GenericTypeAlias typeAlias = parseFullCompilationUnitMember();
|
| - expectNotNullIfNoErrors(typeAlias);
|
| + /**
|
| + * Invoke the method [Parser.computeStringValue] with the given argument.
|
| + *
|
| + * @param lexeme the argument to the method
|
| + * @param first `true` if this is the first token in a string literal
|
| + * @param last `true` if this is the last token in a string literal
|
| + * @return the result of invoking the method
|
| + * @throws Exception if the method could not be invoked or throws an exception
|
| + */
|
| + String _computeStringValue(String lexeme, bool first, bool last) {
|
| + createParser('');
|
| + String value = parser.computeStringValue(lexeme, first, last);
|
| listener.assertNoErrors();
|
| - expect(typeAlias.typedefKeyword, isNotNull);
|
| - expect(typeAlias.name, isNotNull);
|
| - expect(typeAlias.typeParameters, isNotNull);
|
| - expect(typeAlias.semicolon, isNotNull);
|
| - GenericFunctionType functionType = typeAlias.functionType;
|
| - expect(functionType, isNotNull);
|
| - expect(functionType.parameters, isNotNull);
|
| - expect(functionType.returnType, isNotNull);
|
| - expect(functionType.typeParameters, isNotNull);
|
| + return value;
|
| }
|
|
|
| - @failingTest
|
| - void test_parseTypeAlias_genericFunction_typeParameters_voidReturnType() {
|
| - createParser('typedef F<T> = void Function();');
|
| - GenericTypeAlias typeAlias = parseFullCompilationUnitMember();
|
| - expectNotNullIfNoErrors(typeAlias);
|
| - listener.assertNoErrors();
|
| - expect(typeAlias.typedefKeyword, isNotNull);
|
| - expect(typeAlias.name, isNotNull);
|
| - expect(typeAlias.typeParameters, isNotNull);
|
| - expect(typeAlias.semicolon, isNotNull);
|
| - GenericFunctionType functionType = typeAlias.functionType;
|
| - expect(functionType, isNotNull);
|
| - expect(functionType.parameters, isNotNull);
|
| - expect(functionType.returnType, isNotNull);
|
| - expect(functionType.typeParameters, isNull);
|
| + /**
|
| + * Invoke the method [Parser.isFunctionDeclaration] with the parser set to the token
|
| + * stream produced by scanning the given source.
|
| + *
|
| + * @param source the source to be scanned to produce the token stream being tested
|
| + * @return the result of invoking the method
|
| + * @throws Exception if the method could not be invoked or throws an exception
|
| + */
|
| + bool _isFunctionDeclaration(String source) {
|
| + createParser(source);
|
| + bool result = parser.isFunctionDeclaration();
|
| + expectNotNullIfNoErrors(result);
|
| + return result;
|
| }
|
|
|
| - @failingTest
|
| - void test_parseTypeAlias_genericFunction_voidReturnType() {
|
| - createParser('typedef F = void Function();');
|
| - GenericTypeAlias typeAlias = parseFullCompilationUnitMember();
|
| - expectNotNullIfNoErrors(typeAlias);
|
| - listener.assertNoErrors();
|
| - expect(typeAlias.typedefKeyword, isNotNull);
|
| - expect(typeAlias.name, isNotNull);
|
| - expect(typeAlias.typeParameters, isNull);
|
| - expect(typeAlias.semicolon, isNotNull);
|
| - GenericFunctionType functionType = typeAlias.functionType;
|
| - expect(functionType, isNotNull);
|
| - expect(functionType.parameters, isNotNull);
|
| - expect(functionType.returnType, isNotNull);
|
| - expect(functionType.typeParameters, isNull);
|
| + /**
|
| + * Invoke the method [Parser.isFunctionExpression] with the parser set to the token stream
|
| + * produced by scanning the given source.
|
| + *
|
| + * @param source the source to be scanned to produce the token stream being tested
|
| + * @return the result of invoking the method
|
| + * @throws Exception if the method could not be invoked or throws an exception
|
| + */
|
| + bool _isFunctionExpression(String source) {
|
| + createParser(source);
|
| + return parser.isFunctionExpression(parser.currentToken);
|
| }
|
|
|
| - @failingTest
|
| - void test_parseTypeAnnotation_function_noReturnType_noParameters() {
|
| - createParser('Function() v');
|
| - GenericFunctionType functionType = parser.parseTypeAnnotation(false);
|
| - expectNotNullIfNoErrors(functionType);
|
| - listener.assertNoErrors();
|
| - expect(functionType.returnType, isNull);
|
| - expect(functionType.functionKeyword, isNotNull);
|
| - expect(functionType.typeParameters, isNull);
|
| - FormalParameterList parameterList = functionType.parameters;
|
| - expect(parameterList, isNotNull);
|
| - expect(parameterList.parameters, hasLength(0));
|
| + /**
|
| + * Invoke the method [Parser.isInitializedVariableDeclaration] with the parser set to the
|
| + * token stream produced by scanning the given source.
|
| + *
|
| + * @param source the source to be scanned to produce the token stream being tested
|
| + * @return the result of invoking the method
|
| + * @throws Exception if the method could not be invoked or throws an exception
|
| + */
|
| + bool _isInitializedVariableDeclaration(String source) {
|
| + createParser(source);
|
| + bool result = parser.isInitializedVariableDeclaration();
|
| + expectNotNullIfNoErrors(result);
|
| + return result;
|
| }
|
|
|
| - @failingTest
|
| - void test_parseTypeAnnotation_function_noReturnType_parameters() {
|
| - createParser('Function(int, int) v');
|
| - GenericFunctionType functionType = parser.parseTypeAnnotation(false);
|
| - expectNotNullIfNoErrors(functionType);
|
| - listener.assertNoErrors();
|
| - expect(functionType.returnType, isNull);
|
| - expect(functionType.functionKeyword, isNotNull);
|
| - expect(functionType.typeParameters, isNull);
|
| - FormalParameterList parameterList = functionType.parameters;
|
| - expect(parameterList, isNotNull);
|
| - NodeList<FormalParameter> parameters = parameterList.parameters;
|
| - expect(parameters, hasLength(2));
|
| -
|
| - expect(parameters[0], new isInstanceOf<SimpleFormalParameter>());
|
| - SimpleFormalParameter parameter = parameters[0];
|
| - expect(parameter.identifier, isNull);
|
| - expect(parameter.type, new isInstanceOf<TypeName>());
|
| - expect((parameter.type as TypeName).name.name, 'int');
|
| -
|
| - expect(parameters[1], new isInstanceOf<SimpleFormalParameter>());
|
| - parameter = parameters[1];
|
| - expect(parameter.identifier, isNull);
|
| - expect(parameter.type, new isInstanceOf<TypeName>());
|
| - expect((parameter.type as TypeName).name.name, 'int');
|
| + /**
|
| + * Invoke the method [Parser.isSwitchMember] with the parser set to the token stream
|
| + * produced by scanning the given source.
|
| + *
|
| + * @param source the source to be scanned to produce the token stream being tested
|
| + * @return the result of invoking the method
|
| + * @throws Exception if the method could not be invoked or throws an exception
|
| + */
|
| + bool _isSwitchMember(String source) {
|
| + createParser(source);
|
| + bool result = parser.isSwitchMember();
|
| + expectNotNullIfNoErrors(result);
|
| + return result;
|
| }
|
| +}
|
|
|
| - @failingTest
|
| - void test_parseTypeAnnotation_function_noReturnType_typeParameters() {
|
| - createParser('Function<S, T>()');
|
| - GenericFunctionType functionType = parser.parseTypeAnnotation(false);
|
| - expectNotNullIfNoErrors(functionType);
|
| - listener.assertNoErrors();
|
| - expect(functionType.returnType, isNull);
|
| - expect(functionType.functionKeyword, isNotNull);
|
| - TypeParameterList typeParameters = functionType.typeParameters;
|
| - expect(typeParameters, isNotNull);
|
| - expect(typeParameters.typeParameters, hasLength(2));
|
| - FormalParameterList parameterList = functionType.parameters;
|
| - expect(parameterList, isNotNull);
|
| - expect(parameterList.parameters, hasLength(0));
|
| +/**
|
| + * Tests which exercise the parser using a complete compilation unit or
|
| + * compilation unit member.
|
| + */
|
| +@reflectiveTest
|
| +class TopLevelParserTest extends ParserTestCase {
|
| + void test_function_literal_allowed_at_toplevel() {
|
| + parseCompilationUnit("var x = () {};");
|
| }
|
|
|
| - @failingTest
|
| void
|
| - test_parseTypeAnnotation_function_noReturnType_typeParameters_parameters() {
|
| - createParser('Function<T>(String, {T t})');
|
| - GenericFunctionType functionType = parser.parseTypeAnnotation(false);
|
| - expectNotNullIfNoErrors(functionType);
|
| - listener.assertNoErrors();
|
| - expect(functionType.returnType, isNull);
|
| - expect(functionType.functionKeyword, isNotNull);
|
| - TypeParameterList typeParameters = functionType.typeParameters;
|
| - expect(typeParameters, isNotNull);
|
| - expect(typeParameters.typeParameters, hasLength(1));
|
| - FormalParameterList parameterList = functionType.parameters;
|
| - expect(parameterList, isNotNull);
|
| - expect(parameterList.parameters, hasLength(2));
|
| + test_function_literal_allowed_in_ArgumentList_in_ConstructorFieldInitializer() {
|
| + parseCompilationUnit("class C { C() : a = f(() {}); }");
|
| }
|
|
|
| - void test_parseTypeAnnotation_function_returnType_classFunction() {
|
| - createParser('Function v');
|
| - TypeName functionType = parser.parseTypeAnnotation(false);
|
| - expectNotNullIfNoErrors(functionType);
|
| - listener.assertNoErrors();
|
| + void
|
| + test_function_literal_allowed_in_IndexExpression_in_ConstructorFieldInitializer() {
|
| + parseCompilationUnit("class C { C() : a = x[() {}]; }");
|
| }
|
|
|
| - @failingTest
|
| - void test_parseTypeAnnotation_function_returnType_function() {
|
| - createParser('A Function(B, C) Function(D) v');
|
| - // TODO(scheglov) improve the test to verify also the node properties
|
| - var functionType = parser.parseTypeAnnotation(false) as GenericFunctionType;
|
| - expectNotNullIfNoErrors(functionType);
|
| - listener.assertNoErrors();
|
| + void
|
| + test_function_literal_allowed_in_ListLiteral_in_ConstructorFieldInitializer() {
|
| + parseCompilationUnit("class C { C() : a = [() {}]; }");
|
| }
|
|
|
| - @failingTest
|
| - void test_parseTypeAnnotation_function_returnType_noParameters() {
|
| - createParser('List<int> Function()');
|
| - GenericFunctionType functionType = parser.parseTypeAnnotation(false);
|
| - expectNotNullIfNoErrors(functionType);
|
| - listener.assertNoErrors();
|
| - expect(functionType.returnType, isNotNull);
|
| - expect(functionType.functionKeyword, isNotNull);
|
| - expect(functionType.typeParameters, isNull);
|
| - FormalParameterList parameterList = functionType.parameters;
|
| - expect(parameterList, isNotNull);
|
| - expect(parameterList.parameters, hasLength(0));
|
| + void
|
| + test_function_literal_allowed_in_MapLiteral_in_ConstructorFieldInitializer() {
|
| + parseCompilationUnit("class C { C() : a = {'key': () {}}; }");
|
| }
|
|
|
| - @failingTest
|
| - void test_parseTypeAnnotation_function_returnType_parameters() {
|
| - createParser('List<int> Function(String s, int i)');
|
| - GenericFunctionType functionType = parser.parseTypeAnnotation(false);
|
| - expectNotNullIfNoErrors(functionType);
|
| - listener.assertNoErrors();
|
| - expect(functionType.returnType, isNotNull);
|
| - expect(functionType.functionKeyword, isNotNull);
|
| - expect(functionType.typeParameters, isNull);
|
| - FormalParameterList parameterList = functionType.parameters;
|
| - expect(parameterList, isNotNull);
|
| - NodeList<FormalParameter> parameters = parameterList.parameters;
|
| - expect(parameters, hasLength(2));
|
| -
|
| - expect(parameters[0], new isInstanceOf<SimpleFormalParameter>());
|
| - SimpleFormalParameter parameter = parameters[0];
|
| - expect(parameter.identifier, isNotNull);
|
| - expect(parameter.identifier.name, 's');
|
| - expect(parameter.type, new isInstanceOf<TypeName>());
|
| - expect((parameter.type as TypeName).name.name, 'String');
|
| + void
|
| + test_function_literal_allowed_in_ParenthesizedExpression_in_ConstructorFieldInitializer() {
|
| + parseCompilationUnit("class C { C() : a = (() {}); }");
|
| + }
|
|
|
| - expect(parameters[1], new isInstanceOf<SimpleFormalParameter>());
|
| - parameter = parameters[1];
|
| - expect(parameter.identifier, isNotNull);
|
| - expect(parameter.identifier.name, 'i');
|
| - expect(parameter.type, new isInstanceOf<TypeName>());
|
| - expect((parameter.type as TypeName).name.name, 'int');
|
| + void
|
| + test_function_literal_allowed_in_StringInterpolation_in_ConstructorFieldInitializer() {
|
| + parseCompilationUnit("class C { C() : a = \"\${(){}}\"; }");
|
| }
|
|
|
| - @failingTest
|
| - void test_parseTypeAnnotation_function_returnType_simple() {
|
| - createParser('A Function(B, C) v');
|
| - // TODO(scheglov) improve the test to verify also the node properties
|
| - var functionType = parser.parseTypeAnnotation(false) as GenericFunctionType;
|
| - expectNotNullIfNoErrors(functionType);
|
| - listener.assertNoErrors();
|
| + void test_import_as_show() {
|
| + parseCompilationUnit("import 'dart:math' as M show E;");
|
| }
|
|
|
| - @failingTest
|
| - void test_parseTypeAnnotation_function_returnType_typeParameters() {
|
| - createParser('List<T> Function<T>()');
|
| - GenericFunctionType functionType = parser.parseTypeAnnotation(false);
|
| - expectNotNullIfNoErrors(functionType);
|
| - listener.assertNoErrors();
|
| - expect(functionType.returnType, isNotNull);
|
| - expect(functionType.functionKeyword, isNotNull);
|
| - TypeParameterList typeParameters = functionType.typeParameters;
|
| - expect(typeParameters, isNotNull);
|
| - expect(typeParameters.typeParameters, hasLength(1));
|
| - FormalParameterList parameterList = functionType.parameters;
|
| - expect(parameterList, isNotNull);
|
| - expect(parameterList.parameters, hasLength(0));
|
| + void test_import_show_hide() {
|
| + parseCompilationUnit(
|
| + "import 'import1_lib.dart' show hide, show hide ugly;");
|
| }
|
|
|
| - @failingTest
|
| - void
|
| - test_parseTypeAnnotation_function_returnType_typeParameters_parameters() {
|
| - createParser('List<T> Function<T>(String s, [T])');
|
| - GenericFunctionType functionType = parser.parseTypeAnnotation(false);
|
| - expectNotNullIfNoErrors(functionType);
|
| + void test_parseClassDeclaration_abstract() {
|
| + createParser('abstract class A {}');
|
| + CompilationUnitMember member = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(member);
|
| listener.assertNoErrors();
|
| - expect(functionType.returnType, isNotNull);
|
| - expect(functionType.functionKeyword, isNotNull);
|
| - TypeParameterList typeParameters = functionType.typeParameters;
|
| - expect(typeParameters, isNotNull);
|
| - expect(typeParameters.typeParameters, hasLength(1));
|
| - FormalParameterList parameterList = functionType.parameters;
|
| - expect(parameterList, isNotNull);
|
| - expect(parameterList.parameters, hasLength(2));
|
| + expect(member, new isInstanceOf<ClassDeclaration>());
|
| + ClassDeclaration declaration = member;
|
| + expect(declaration.documentationComment, isNull);
|
| + expect(declaration.abstractKeyword, isNotNull);
|
| + expect(declaration.extendsClause, isNull);
|
| + expect(declaration.implementsClause, isNull);
|
| + expect(declaration.classKeyword, isNotNull);
|
| + expect(declaration.leftBracket, isNotNull);
|
| + expect(declaration.name, isNotNull);
|
| + expect(declaration.members, hasLength(0));
|
| + expect(declaration.rightBracket, isNotNull);
|
| + expect(declaration.typeParameters, isNull);
|
| }
|
|
|
| - @failingTest
|
| - void test_parseTypeAnnotation_function_returnType_withArguments() {
|
| - createParser('A<B> Function(C) v');
|
| - // TODO(scheglov) improve this test to verify also the node properties
|
| - var functionType = parser.parseTypeAnnotation(false) as GenericFunctionType;
|
| - expectNotNullIfNoErrors(functionType);
|
| + void test_parseClassDeclaration_empty() {
|
| + createParser('class A {}');
|
| + CompilationUnitMember member = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(member);
|
| listener.assertNoErrors();
|
| + expect(member, new isInstanceOf<ClassDeclaration>());
|
| + ClassDeclaration declaration = member;
|
| + expect(declaration.documentationComment, isNull);
|
| + expect(declaration.abstractKeyword, isNull);
|
| + expect(declaration.extendsClause, isNull);
|
| + expect(declaration.implementsClause, isNull);
|
| + expect(declaration.classKeyword, isNotNull);
|
| + expect(declaration.leftBracket, isNotNull);
|
| + expect(declaration.name, isNotNull);
|
| + expect(declaration.members, hasLength(0));
|
| + expect(declaration.rightBracket, isNotNull);
|
| + expect(declaration.typeParameters, isNull);
|
| }
|
|
|
| - void test_parseTypeAnnotation_named() {
|
| - createParser('A<B> v');
|
| - TypeName typeName = parser.parseTypeAnnotation(false);
|
| - expectNotNullIfNoErrors(typeName);
|
| + void test_parseClassDeclaration_extends() {
|
| + createParser('class A extends B {}');
|
| + CompilationUnitMember member = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(member);
|
| listener.assertNoErrors();
|
| + expect(member, new isInstanceOf<ClassDeclaration>());
|
| + ClassDeclaration declaration = member;
|
| + expect(declaration.documentationComment, isNull);
|
| + expect(declaration.abstractKeyword, isNull);
|
| + expect(declaration.extendsClause, isNotNull);
|
| + expect(declaration.implementsClause, isNull);
|
| + expect(declaration.classKeyword, isNotNull);
|
| + expect(declaration.leftBracket, isNotNull);
|
| + expect(declaration.name, isNotNull);
|
| + expect(declaration.members, hasLength(0));
|
| + expect(declaration.rightBracket, isNotNull);
|
| + expect(declaration.typeParameters, isNull);
|
| }
|
|
|
| - void test_parseTypeArgumentList_empty() {
|
| - createParser('<>');
|
| - TypeArgumentList argumentList = parser.parseTypeArgumentList();
|
| - expectNotNullIfNoErrors(argumentList);
|
| - listener.assertErrorsWithCodes([ParserErrorCode.EXPECTED_TYPE_NAME]);
|
| - expect(argumentList.leftBracket, isNotNull);
|
| - expect(argumentList.arguments, hasLength(1));
|
| - expect(argumentList.rightBracket, isNotNull);
|
| + void test_parseClassDeclaration_extendsAndImplements() {
|
| + createParser('class A extends B implements C {}');
|
| + CompilationUnitMember member = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(member);
|
| + listener.assertNoErrors();
|
| + expect(member, new isInstanceOf<ClassDeclaration>());
|
| + ClassDeclaration declaration = member;
|
| + expect(declaration.documentationComment, isNull);
|
| + expect(declaration.abstractKeyword, isNull);
|
| + expect(declaration.extendsClause, isNotNull);
|
| + expect(declaration.implementsClause, isNotNull);
|
| + expect(declaration.classKeyword, isNotNull);
|
| + expect(declaration.leftBracket, isNotNull);
|
| + expect(declaration.name, isNotNull);
|
| + expect(declaration.members, hasLength(0));
|
| + expect(declaration.rightBracket, isNotNull);
|
| + expect(declaration.typeParameters, isNull);
|
| }
|
|
|
| - void test_parseTypeArgumentList_multiple() {
|
| - createParser('<int, int, int>');
|
| - TypeArgumentList argumentList = parser.parseTypeArgumentList();
|
| - expectNotNullIfNoErrors(argumentList);
|
| + void test_parseClassDeclaration_extendsAndWith() {
|
| + createParser('class A extends B with C {}');
|
| + CompilationUnitMember member = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(member);
|
| listener.assertNoErrors();
|
| - expect(argumentList.leftBracket, isNotNull);
|
| - expect(argumentList.arguments, hasLength(3));
|
| - expect(argumentList.rightBracket, isNotNull);
|
| + expect(member, new isInstanceOf<ClassDeclaration>());
|
| + ClassDeclaration declaration = member;
|
| + expect(declaration.documentationComment, isNull);
|
| + expect(declaration.abstractKeyword, isNull);
|
| + expect(declaration.classKeyword, isNotNull);
|
| + expect(declaration.name, isNotNull);
|
| + expect(declaration.typeParameters, isNull);
|
| + expect(declaration.extendsClause, isNotNull);
|
| + expect(declaration.withClause, isNotNull);
|
| + expect(declaration.implementsClause, isNull);
|
| + expect(declaration.leftBracket, isNotNull);
|
| + expect(declaration.members, hasLength(0));
|
| + expect(declaration.rightBracket, isNotNull);
|
| }
|
|
|
| - void test_parseTypeArgumentList_nested() {
|
| - createParser('<A<B>>');
|
| - TypeArgumentList argumentList = parser.parseTypeArgumentList();
|
| - expectNotNullIfNoErrors(argumentList);
|
| + void test_parseClassDeclaration_extendsAndWithAndImplements() {
|
| + createParser('class A extends B with C implements D {}');
|
| + CompilationUnitMember member = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(member);
|
| listener.assertNoErrors();
|
| - expect(argumentList.leftBracket, isNotNull);
|
| - expect(argumentList.arguments, hasLength(1));
|
| - TypeName argument = argumentList.arguments[0];
|
| - expect(argument, isNotNull);
|
| - TypeArgumentList innerList = argument.typeArguments;
|
| - expect(innerList, isNotNull);
|
| - expect(innerList.arguments, hasLength(1));
|
| - expect(argumentList.rightBracket, isNotNull);
|
| + expect(member, new isInstanceOf<ClassDeclaration>());
|
| + ClassDeclaration declaration = member;
|
| + expect(declaration.documentationComment, isNull);
|
| + expect(declaration.abstractKeyword, isNull);
|
| + expect(declaration.classKeyword, isNotNull);
|
| + expect(declaration.name, isNotNull);
|
| + expect(declaration.typeParameters, isNull);
|
| + expect(declaration.extendsClause, isNotNull);
|
| + expect(declaration.withClause, isNotNull);
|
| + expect(declaration.implementsClause, isNotNull);
|
| + expect(declaration.leftBracket, isNotNull);
|
| + expect(declaration.members, hasLength(0));
|
| + expect(declaration.rightBracket, isNotNull);
|
| }
|
|
|
| - void test_parseTypeArgumentList_nested_withComment_double() {
|
| - createParser('<A<B /* 0 */ >>');
|
| - TypeArgumentList argumentList = parser.parseTypeArgumentList();
|
| - expectNotNullIfNoErrors(argumentList);
|
| + void test_parseClassDeclaration_implements() {
|
| + createParser('class A implements C {}');
|
| + CompilationUnitMember member = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(member);
|
| listener.assertNoErrors();
|
| - expect(argumentList.leftBracket, isNotNull);
|
| - expect(argumentList.rightBracket, isNotNull);
|
| - expect(argumentList.arguments, hasLength(1));
|
| -
|
| - TypeName argument = argumentList.arguments[0];
|
| - expect(argument, isNotNull);
|
| -
|
| - TypeArgumentList innerList = argument.typeArguments;
|
| - expect(innerList, isNotNull);
|
| - expect(innerList.leftBracket, isNotNull);
|
| - expect(innerList.arguments, hasLength(1));
|
| - expect(innerList.rightBracket, isNotNull);
|
| - expect(innerList.rightBracket.precedingComments, isNotNull);
|
| + expect(member, new isInstanceOf<ClassDeclaration>());
|
| + ClassDeclaration declaration = member;
|
| + expect(declaration.documentationComment, isNull);
|
| + expect(declaration.abstractKeyword, isNull);
|
| + expect(declaration.extendsClause, isNull);
|
| + expect(declaration.implementsClause, isNotNull);
|
| + expect(declaration.classKeyword, isNotNull);
|
| + expect(declaration.leftBracket, isNotNull);
|
| + expect(declaration.name, isNotNull);
|
| + expect(declaration.members, hasLength(0));
|
| + expect(declaration.rightBracket, isNotNull);
|
| + expect(declaration.typeParameters, isNull);
|
| }
|
|
|
| - void test_parseTypeArgumentList_nested_withComment_tripple() {
|
| - createParser('<A<B<C /* 0 */ >>>');
|
| - TypeArgumentList argumentList = parser.parseTypeArgumentList();
|
| - expectNotNullIfNoErrors(argumentList);
|
| + void test_parseClassDeclaration_native() {
|
| + createParser('class A native "nativeValue" {}');
|
| + CompilationUnitMember member = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(member);
|
| listener.assertNoErrors();
|
| - expect(argumentList.leftBracket, isNotNull);
|
| - expect(argumentList.rightBracket, isNotNull);
|
| - expect(argumentList.arguments, hasLength(1));
|
| -
|
| - TypeName argument = argumentList.arguments[0];
|
| - expect(argument, isNotNull);
|
| -
|
| - TypeArgumentList innerList = argument.typeArguments;
|
| - expect(innerList, isNotNull);
|
| - expect(innerList.leftBracket, isNotNull);
|
| - expect(innerList.arguments, hasLength(1));
|
| - expect(innerList.rightBracket, isNotNull);
|
| -
|
| - TypeName innerArgument = innerList.arguments[0];
|
| - expect(innerArgument, isNotNull);
|
| -
|
| - TypeArgumentList innerInnerList = innerArgument.typeArguments;
|
| - expect(innerInnerList, isNotNull);
|
| - expect(innerInnerList.leftBracket, isNotNull);
|
| - expect(innerInnerList.arguments, hasLength(1));
|
| - expect(innerInnerList.rightBracket, isNotNull);
|
| - expect(innerInnerList.rightBracket.precedingComments, isNotNull);
|
| + expect(member, new isInstanceOf<ClassDeclaration>());
|
| + ClassDeclaration declaration = member;
|
| + NativeClause nativeClause = declaration.nativeClause;
|
| + expect(nativeClause, isNotNull);
|
| + expect(nativeClause.nativeKeyword, isNotNull);
|
| + expect(nativeClause.name.stringValue, "nativeValue");
|
| + expect(nativeClause.beginToken, same(nativeClause.nativeKeyword));
|
| + expect(nativeClause.endToken, same(nativeClause.name.endToken));
|
| }
|
|
|
| - void test_parseTypeArgumentList_single() {
|
| - createParser('<int>');
|
| - TypeArgumentList argumentList = parser.parseTypeArgumentList();
|
| - expectNotNullIfNoErrors(argumentList);
|
| + void test_parseClassDeclaration_nonEmpty() {
|
| + createParser('class A {var f;}');
|
| + CompilationUnitMember member = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(member);
|
| listener.assertNoErrors();
|
| - expect(argumentList.leftBracket, isNotNull);
|
| - expect(argumentList.arguments, hasLength(1));
|
| - expect(argumentList.rightBracket, isNotNull);
|
| + expect(member, new isInstanceOf<ClassDeclaration>());
|
| + ClassDeclaration declaration = member;
|
| + expect(declaration.documentationComment, isNull);
|
| + expect(declaration.abstractKeyword, isNull);
|
| + expect(declaration.extendsClause, isNull);
|
| + expect(declaration.implementsClause, isNull);
|
| + expect(declaration.classKeyword, isNotNull);
|
| + expect(declaration.leftBracket, isNotNull);
|
| + expect(declaration.name, isNotNull);
|
| + expect(declaration.members, hasLength(1));
|
| + expect(declaration.rightBracket, isNotNull);
|
| + expect(declaration.typeParameters, isNull);
|
| }
|
|
|
| - void test_parseTypeName_parameterized() {
|
| - createParser('List<int>');
|
| - TypeName typeName = parser.parseTypeName(false);
|
| - expectNotNullIfNoErrors(typeName);
|
| + void test_parseClassDeclaration_typeAlias_implementsC() {
|
| + createParser('class A = Object with B implements C;');
|
| + CompilationUnitMember member = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(member);
|
| listener.assertNoErrors();
|
| - expect(typeName.name, isNotNull);
|
| - expect(typeName.typeArguments, isNotNull);
|
| - expect(typeName.question, isNull);
|
| + expect(member, new isInstanceOf<ClassTypeAlias>());
|
| + ClassTypeAlias typeAlias = member;
|
| + expect(typeAlias.typedefKeyword, isNotNull);
|
| + expect(typeAlias.name, isNotNull);
|
| + expect(typeAlias.typeParameters, isNull);
|
| + expect(typeAlias.withClause, isNotNull);
|
| + expect(typeAlias.implementsClause, isNotNull);
|
| + expect(typeAlias.implementsClause.implementsKeyword, isNotNull);
|
| + expect(typeAlias.implementsClause.interfaces.length, 1);
|
| + expect(typeAlias.semicolon, isNotNull);
|
| }
|
|
|
| - void test_parseTypeName_parameterized_nullable() {
|
| - enableNnbd = true;
|
| - createParser('List<int>?');
|
| - TypeName typeName = parser.parseTypeName(false);
|
| - expectNotNullIfNoErrors(typeName);
|
| + void test_parseClassDeclaration_typeAlias_withB() {
|
| + createParser('class A = Object with B;');
|
| + CompilationUnitMember member = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(member);
|
| listener.assertNoErrors();
|
| - expect(typeName.name, isNotNull);
|
| - expect(typeName.typeArguments, isNotNull);
|
| - expect(typeName.question, isNotNull);
|
| + expect(member, new isInstanceOf<ClassTypeAlias>());
|
| + ClassTypeAlias typeAlias = member;
|
| + expect(typeAlias.typedefKeyword, isNotNull);
|
| + expect(typeAlias.name, isNotNull);
|
| + expect(typeAlias.typeParameters, isNull);
|
| + expect(typeAlias.withClause, isNotNull);
|
| + expect(typeAlias.withClause.withKeyword, isNotNull);
|
| + expect(typeAlias.withClause.mixinTypes.length, 1);
|
| + expect(typeAlias.implementsClause, isNull);
|
| + expect(typeAlias.semicolon, isNotNull);
|
| }
|
|
|
| - void test_parseTypeName_simple() {
|
| - createParser('int');
|
| - TypeName typeName = parser.parseTypeName(false);
|
| - expectNotNullIfNoErrors(typeName);
|
| + void test_parseClassDeclaration_typeParameters() {
|
| + createParser('class A<B> {}');
|
| + CompilationUnitMember member = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(member);
|
| listener.assertNoErrors();
|
| - expect(typeName.name, isNotNull);
|
| - expect(typeName.typeArguments, isNull);
|
| - expect(typeName.question, isNull);
|
| + expect(member, new isInstanceOf<ClassDeclaration>());
|
| + ClassDeclaration declaration = member;
|
| + expect(declaration.documentationComment, isNull);
|
| + expect(declaration.abstractKeyword, isNull);
|
| + expect(declaration.extendsClause, isNull);
|
| + expect(declaration.implementsClause, isNull);
|
| + expect(declaration.classKeyword, isNotNull);
|
| + expect(declaration.leftBracket, isNotNull);
|
| + expect(declaration.name, isNotNull);
|
| + expect(declaration.members, hasLength(0));
|
| + expect(declaration.rightBracket, isNotNull);
|
| + expect(declaration.typeParameters, isNotNull);
|
| + expect(declaration.typeParameters.typeParameters, hasLength(1));
|
| }
|
|
|
| - void test_parseTypeName_simple_nullable() {
|
| - enableNnbd = true;
|
| - createParser('String?');
|
| - TypeName typeName = parser.parseTypeName(false);
|
| - expectNotNullIfNoErrors(typeName);
|
| + void test_parseCompilationUnit_abstractAsPrefix_parameterized() {
|
| + createParser('abstract<dynamic> _abstract = new abstract.A();');
|
| + CompilationUnit unit = parser.parseCompilationUnit2();
|
| + expectNotNullIfNoErrors(unit);
|
| listener.assertNoErrors();
|
| - expect(typeName.name, isNotNull);
|
| - expect(typeName.typeArguments, isNull);
|
| - expect(typeName.question, isNotNull);
|
| + expect(unit.scriptTag, isNull);
|
| + expect(unit.directives, hasLength(0));
|
| + expect(unit.declarations, hasLength(1));
|
| }
|
|
|
| - @failingTest
|
| - void test_parseTypeParameter_bounded_functionType_noReturn() {
|
| - createParser('A extends Function(int)');
|
| - TypeParameter parameter = parser.parseTypeParameter();
|
| - expectNotNullIfNoErrors(parameter);
|
| - listener.assertNoErrors();
|
| - expect(parameter.bound, new isInstanceOf<GenericFunctionType>());
|
| - expect(parameter.extendsKeyword, isNotNull);
|
| - expect(parameter.name, isNotNull);
|
| + void test_parseCompilationUnit_builtIn_asFunctionName() {
|
| + parseCompilationUnit('abstract(x) => 0;');
|
| + parseCompilationUnit('as(x) => 0;');
|
| + parseCompilationUnit('dynamic(x) => 0;');
|
| + parseCompilationUnit('export(x) => 0;');
|
| + parseCompilationUnit('external(x) => 0;');
|
| + parseCompilationUnit('factory(x) => 0;');
|
| + parseCompilationUnit('get(x) => 0;');
|
| + parseCompilationUnit('implements(x) => 0;');
|
| + parseCompilationUnit('import(x) => 0;');
|
| + parseCompilationUnit('library(x) => 0;');
|
| + parseCompilationUnit('operator(x) => 0;');
|
| + parseCompilationUnit('part(x) => 0;');
|
| + parseCompilationUnit('set(x) => 0;');
|
| + parseCompilationUnit('static(x) => 0;');
|
| + parseCompilationUnit('typedef(x) => 0;');
|
| }
|
|
|
| - @failingTest
|
| - void test_parseTypeParameter_bounded_functionType_return() {
|
| - createParser('A extends String Function(int)');
|
| - TypeParameter parameter = parser.parseTypeParameter();
|
| - expectNotNullIfNoErrors(parameter);
|
| + void test_parseCompilationUnit_directives_multiple() {
|
| + createParser("library l;\npart 'a.dart';");
|
| + CompilationUnit unit = parser.parseCompilationUnit2();
|
| + expectNotNullIfNoErrors(unit);
|
| listener.assertNoErrors();
|
| - expect(parameter.bound, new isInstanceOf<GenericFunctionType>());
|
| - expect(parameter.extendsKeyword, isNotNull);
|
| - expect(parameter.name, isNotNull);
|
| + expect(unit.scriptTag, isNull);
|
| + expect(unit.directives, hasLength(2));
|
| + expect(unit.declarations, hasLength(0));
|
| }
|
|
|
| - void test_parseTypeParameter_bounded_generic() {
|
| - createParser('A extends B<C>');
|
| - TypeParameter parameter = parser.parseTypeParameter();
|
| - expectNotNullIfNoErrors(parameter);
|
| + void test_parseCompilationUnit_directives_single() {
|
| + createParser('library l;');
|
| + CompilationUnit unit = parser.parseCompilationUnit2();
|
| + expectNotNullIfNoErrors(unit);
|
| listener.assertNoErrors();
|
| - expect(parameter.bound, new isInstanceOf<TypeName>());
|
| - expect(parameter.extendsKeyword, isNotNull);
|
| - expect(parameter.name, isNotNull);
|
| + expect(unit.scriptTag, isNull);
|
| + expect(unit.directives, hasLength(1));
|
| + expect(unit.declarations, hasLength(0));
|
| }
|
|
|
| - void test_parseTypeParameter_bounded_nullable() {
|
| - enableNnbd = true;
|
| - createParser('A extends B?');
|
| - TypeParameter parameter = parser.parseTypeParameter();
|
| - expectNotNullIfNoErrors(parameter);
|
| + void test_parseCompilationUnit_empty() {
|
| + createParser('');
|
| + CompilationUnit unit = parser.parseCompilationUnit2();
|
| + expectNotNullIfNoErrors(unit);
|
| listener.assertNoErrors();
|
| - expect(parameter.bound, new isInstanceOf<TypeName>());
|
| - expect(parameter.extendsKeyword, isNotNull);
|
| - expect(parameter.name, isNotNull);
|
| - TypeName bound = parameter.bound;
|
| - expect(bound, isNotNull);
|
| - expect(bound.question, isNotNull);
|
| + expect(unit.scriptTag, isNull);
|
| + expect(unit.directives, hasLength(0));
|
| + expect(unit.declarations, hasLength(0));
|
| }
|
|
|
| - void test_parseTypeParameter_bounded_simple() {
|
| - createParser('A extends B');
|
| - TypeParameter parameter = parser.parseTypeParameter();
|
| - expectNotNullIfNoErrors(parameter);
|
| + void test_parseCompilationUnit_exportAsPrefix() {
|
| + createParser('export.A _export = new export.A();');
|
| + CompilationUnit unit = parser.parseCompilationUnit2();
|
| + expectNotNullIfNoErrors(unit);
|
| listener.assertNoErrors();
|
| - expect(parameter.bound, new isInstanceOf<TypeName>());
|
| - expect(parameter.extendsKeyword, isNotNull);
|
| - expect(parameter.name, isNotNull);
|
| + expect(unit.scriptTag, isNull);
|
| + expect(unit.directives, hasLength(0));
|
| + expect(unit.declarations, hasLength(1));
|
| }
|
|
|
| - void test_parseTypeParameter_simple() {
|
| - createParser('A');
|
| - TypeParameter parameter = parser.parseTypeParameter();
|
| - expectNotNullIfNoErrors(parameter);
|
| + void test_parseCompilationUnit_exportAsPrefix_parameterized() {
|
| + createParser('export<dynamic> _export = new export.A();');
|
| + CompilationUnit unit = parser.parseCompilationUnit2();
|
| + expectNotNullIfNoErrors(unit);
|
| listener.assertNoErrors();
|
| - expect(parameter.bound, isNull);
|
| - expect(parameter.extendsKeyword, isNull);
|
| - expect(parameter.name, isNotNull);
|
| + expect(unit.scriptTag, isNull);
|
| + expect(unit.directives, hasLength(0));
|
| + expect(unit.declarations, hasLength(1));
|
| }
|
|
|
| - void test_parseTypeParameterList_multiple() {
|
| - createParser('<A, B extends C, D>');
|
| - TypeParameterList parameterList = parser.parseTypeParameterList();
|
| - expectNotNullIfNoErrors(parameterList);
|
| + void test_parseCompilationUnit_operatorAsPrefix_parameterized() {
|
| + createParser('operator<dynamic> _operator = new operator.A();');
|
| + CompilationUnit unit = parser.parseCompilationUnit2();
|
| + expectNotNullIfNoErrors(unit);
|
| listener.assertNoErrors();
|
| - expect(parameterList.leftBracket, isNotNull);
|
| - expect(parameterList.rightBracket, isNotNull);
|
| - expect(parameterList.typeParameters, hasLength(3));
|
| + expect(unit.scriptTag, isNull);
|
| + expect(unit.directives, hasLength(0));
|
| + expect(unit.declarations, hasLength(1));
|
| }
|
|
|
| - void test_parseTypeParameterList_parameterizedWithTrailingEquals() {
|
| - createParser('<A extends B<E>>=');
|
| - TypeParameterList parameterList = parser.parseTypeParameterList();
|
| - expectNotNullIfNoErrors(parameterList);
|
| + void test_parseCompilationUnit_script() {
|
| + createParser('#! /bin/dart');
|
| + CompilationUnit unit = parser.parseCompilationUnit2();
|
| + expectNotNullIfNoErrors(unit);
|
| listener.assertNoErrors();
|
| - expect(parameterList.leftBracket, isNotNull);
|
| - expect(parameterList.rightBracket, isNotNull);
|
| - expect(parameterList.typeParameters, hasLength(1));
|
| + expect(unit.scriptTag, isNotNull);
|
| + expect(unit.directives, hasLength(0));
|
| + expect(unit.declarations, hasLength(0));
|
| }
|
|
|
| - void test_parseTypeParameterList_single() {
|
| - createParser('<<A>');
|
| - TypeParameterList parameterList = parser.parseTypeParameterList();
|
| - expectNotNullIfNoErrors(parameterList);
|
| + void test_parseCompilationUnit_skipFunctionBody_withInterpolation() {
|
| + ParserTestCase.parseFunctionBodies = false;
|
| + createParser('f() { "\${n}"; }');
|
| + CompilationUnit unit = parser.parseCompilationUnit2();
|
| + expectNotNullIfNoErrors(unit);
|
| listener.assertNoErrors();
|
| - expect(parameterList.leftBracket, isNotNull);
|
| - expect(parameterList.rightBracket, isNotNull);
|
| - expect(parameterList.typeParameters, hasLength(1));
|
| + expect(unit.scriptTag, isNull);
|
| + expect(unit.declarations, hasLength(1));
|
| }
|
|
|
| - void test_parseTypeParameterList_withTrailingEquals() {
|
| - createParser('<A>=');
|
| - TypeParameterList parameterList = parser.parseTypeParameterList();
|
| - expectNotNullIfNoErrors(parameterList);
|
| + void test_parseCompilationUnit_topLevelDeclaration() {
|
| + createParser('class A {}');
|
| + CompilationUnit unit = parser.parseCompilationUnit2();
|
| + expectNotNullIfNoErrors(unit);
|
| listener.assertNoErrors();
|
| - expect(parameterList.leftBracket, isNotNull);
|
| - expect(parameterList.rightBracket, isNotNull);
|
| - expect(parameterList.typeParameters, hasLength(1));
|
| + expect(unit.scriptTag, isNull);
|
| + expect(unit.directives, hasLength(0));
|
| + expect(unit.declarations, hasLength(1));
|
| }
|
|
|
| - void test_parseUnaryExpression_decrement_normal() {
|
| - createParser('--x');
|
| - PrefixExpression expression = parser.parseUnaryExpression();
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseCompilationUnit_typedefAsPrefix() {
|
| + createParser('typedef.A _typedef = new typedef.A();');
|
| + CompilationUnit unit = parser.parseCompilationUnit2();
|
| + expectNotNullIfNoErrors(unit);
|
| listener.assertNoErrors();
|
| - expect(expression.operator, isNotNull);
|
| - expect(expression.operator.type, TokenType.MINUS_MINUS);
|
| - expect(expression.operand, isNotNull);
|
| + expect(unit.scriptTag, isNull);
|
| + expect(unit.directives, hasLength(0));
|
| + expect(unit.declarations, hasLength(1));
|
| }
|
|
|
| - void test_parseUnaryExpression_decrement_super() {
|
| - createParser('--super');
|
| - PrefixExpression expression = parser.parseUnaryExpression();
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseCompilationUnitMember_abstractAsPrefix() {
|
| + createParser('abstract.A _abstract = new abstract.A();');
|
| + CompilationUnitMember member = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(member);
|
| listener.assertNoErrors();
|
| - expect(expression.operator, isNotNull);
|
| - expect(expression.operator.type, TokenType.MINUS);
|
| - Expression innerExpression = expression.operand;
|
| - expect(innerExpression, isNotNull);
|
| - expect(innerExpression is PrefixExpression, isTrue);
|
| - PrefixExpression operand = innerExpression as PrefixExpression;
|
| - expect(operand.operator, isNotNull);
|
| - expect(operand.operator.type, TokenType.MINUS);
|
| - expect(operand.operand, isNotNull);
|
| + expect(member, new isInstanceOf<TopLevelVariableDeclaration>());
|
| + TopLevelVariableDeclaration declaration = member;
|
| + expect(declaration.semicolon, isNotNull);
|
| + expect(declaration.variables, isNotNull);
|
| }
|
|
|
| - void test_parseUnaryExpression_decrement_super_propertyAccess() {
|
| - createParser('--super.x');
|
| - PrefixExpression expression = parser.parseUnaryExpression();
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseCompilationUnitMember_class() {
|
| + createParser('class A {}');
|
| + CompilationUnitMember member = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(member);
|
| listener.assertNoErrors();
|
| - expect(expression.operator, isNotNull);
|
| - expect(expression.operator.type, TokenType.MINUS_MINUS);
|
| - expect(expression.operand, isNotNull);
|
| - PropertyAccess operand = expression.operand as PropertyAccess;
|
| - expect(operand.target is SuperExpression, isTrue);
|
| - expect(operand.propertyName.name, "x");
|
| + expect(member, new isInstanceOf<ClassDeclaration>());
|
| + ClassDeclaration declaration = member;
|
| + expect(declaration.name.name, "A");
|
| + expect(declaration.members, hasLength(0));
|
| }
|
|
|
| - void test_parseUnaryExpression_decrement_super_withComment() {
|
| - createParser('/* 0 */ --super');
|
| - PrefixExpression expression = parser.parseUnaryExpression();
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseCompilationUnitMember_classTypeAlias() {
|
| + createParser('abstract class A = B with C;');
|
| + CompilationUnitMember member = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(member);
|
| listener.assertNoErrors();
|
| - expect(expression.operator, isNotNull);
|
| - expect(expression.operator.type, TokenType.MINUS);
|
| - expect(expression.operator.precedingComments, isNotNull);
|
| - Expression innerExpression = expression.operand;
|
| - expect(innerExpression, isNotNull);
|
| - expect(innerExpression is PrefixExpression, isTrue);
|
| - PrefixExpression operand = innerExpression as PrefixExpression;
|
| - expect(operand.operator, isNotNull);
|
| - expect(operand.operator.type, TokenType.MINUS);
|
| - expect(operand.operand, isNotNull);
|
| + expect(member, new isInstanceOf<ClassTypeAlias>());
|
| + ClassTypeAlias declaration = member;
|
| + expect(declaration.name.name, "A");
|
| + expect(declaration.abstractKeyword, isNotNull);
|
| }
|
|
|
| - void test_parseUnaryExpression_increment_normal() {
|
| - createParser('++x');
|
| - PrefixExpression expression = parser.parseUnaryExpression();
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseCompilationUnitMember_constVariable() {
|
| + createParser('const int x = 0;');
|
| + CompilationUnitMember member = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(member);
|
| listener.assertNoErrors();
|
| - expect(expression.operator, isNotNull);
|
| - expect(expression.operator.type, TokenType.PLUS_PLUS);
|
| - expect(expression.operand, isNotNull);
|
| + expect(member, new isInstanceOf<TopLevelVariableDeclaration>());
|
| + TopLevelVariableDeclaration declaration = member;
|
| + expect(declaration.semicolon, isNotNull);
|
| + expect(declaration.variables, isNotNull);
|
| }
|
|
|
| - void test_parseUnaryExpression_increment_super_index() {
|
| - createParser('++super[0]');
|
| - PrefixExpression expression = parser.parseUnaryExpression();
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseCompilationUnitMember_finalVariable() {
|
| + createParser('final x = 0;');
|
| + CompilationUnitMember member = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(member);
|
| listener.assertNoErrors();
|
| - expect(expression.operator, isNotNull);
|
| - expect(expression.operator.type, TokenType.PLUS_PLUS);
|
| - expect(expression.operand, isNotNull);
|
| - IndexExpression operand = expression.operand as IndexExpression;
|
| - expect(operand.realTarget is SuperExpression, isTrue);
|
| - expect(operand.index is IntegerLiteral, isTrue);
|
| - }
|
| -
|
| - void test_parseUnaryExpression_increment_super_propertyAccess() {
|
| - createParser('++super.x');
|
| - PrefixExpression expression = parser.parseUnaryExpression();
|
| - expectNotNullIfNoErrors(expression);
|
| - listener.assertNoErrors();
|
| - expect(expression.operator, isNotNull);
|
| - expect(expression.operator.type, TokenType.PLUS_PLUS);
|
| - expect(expression.operand, isNotNull);
|
| - PropertyAccess operand = expression.operand as PropertyAccess;
|
| - expect(operand.target is SuperExpression, isTrue);
|
| - expect(operand.propertyName.name, "x");
|
| + expect(member, new isInstanceOf<TopLevelVariableDeclaration>());
|
| + TopLevelVariableDeclaration declaration = member;
|
| + expect(declaration.semicolon, isNotNull);
|
| + expect(declaration.variables, isNotNull);
|
| }
|
|
|
| - void test_parseUnaryExpression_minus_normal() {
|
| - createParser('-x');
|
| - PrefixExpression expression = parser.parseUnaryExpression();
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseCompilationUnitMember_function_external_noType() {
|
| + createParser('external f();');
|
| + CompilationUnitMember member = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(member);
|
| listener.assertNoErrors();
|
| - expect(expression.operator, isNotNull);
|
| - expect(expression.operator.type, TokenType.MINUS);
|
| - expect(expression.operand, isNotNull);
|
| + expect(member, new isInstanceOf<FunctionDeclaration>());
|
| + FunctionDeclaration declaration = member;
|
| + expect(declaration.externalKeyword, isNotNull);
|
| + expect(declaration.functionExpression, isNotNull);
|
| + expect(declaration.propertyKeyword, isNull);
|
| }
|
|
|
| - void test_parseUnaryExpression_minus_super() {
|
| - createParser('-super');
|
| - PrefixExpression expression = parser.parseUnaryExpression();
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseCompilationUnitMember_function_external_type() {
|
| + createParser('external int f();');
|
| + CompilationUnitMember member = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(member);
|
| listener.assertNoErrors();
|
| - expect(expression.operator, isNotNull);
|
| - expect(expression.operator.type, TokenType.MINUS);
|
| - expect(expression.operand, isNotNull);
|
| + expect(member, new isInstanceOf<FunctionDeclaration>());
|
| + FunctionDeclaration declaration = member;
|
| + expect(declaration.externalKeyword, isNotNull);
|
| + expect(declaration.functionExpression, isNotNull);
|
| + expect(declaration.propertyKeyword, isNull);
|
| }
|
|
|
| - void test_parseUnaryExpression_not_normal() {
|
| - createParser('!x');
|
| - PrefixExpression expression = parser.parseUnaryExpression();
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseCompilationUnitMember_function_generic_noReturnType() {
|
| + createParser('f<E>() {}');
|
| + CompilationUnitMember member = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(member);
|
| listener.assertNoErrors();
|
| - expect(expression.operator, isNotNull);
|
| - expect(expression.operator.type, TokenType.BANG);
|
| - expect(expression.operand, isNotNull);
|
| + expect(member, new isInstanceOf<FunctionDeclaration>());
|
| + FunctionDeclaration declaration = member;
|
| + expect(declaration.returnType, isNull);
|
| + expect(declaration.functionExpression.typeParameters, isNotNull);
|
| }
|
|
|
| - void test_parseUnaryExpression_not_super() {
|
| - createParser('!super');
|
| - PrefixExpression expression = parser.parseUnaryExpression();
|
| - expectNotNullIfNoErrors(expression);
|
| + void
|
| + test_parseCompilationUnitMember_function_generic_noReturnType_annotated() {
|
| + createParser('f<@a E>() {}');
|
| + CompilationUnitMember member = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(member);
|
| listener.assertNoErrors();
|
| - expect(expression.operator, isNotNull);
|
| - expect(expression.operator.type, TokenType.BANG);
|
| - expect(expression.operand, isNotNull);
|
| + expect(member, new isInstanceOf<FunctionDeclaration>());
|
| + FunctionDeclaration declaration = member;
|
| + expect(declaration.returnType, isNull);
|
| + expect(declaration.functionExpression.typeParameters, isNotNull);
|
| }
|
|
|
| - void test_parseUnaryExpression_tilda_normal() {
|
| - createParser('~x');
|
| - PrefixExpression expression = parser.parseUnaryExpression();
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseCompilationUnitMember_function_generic_returnType() {
|
| + createParser('E f<E>() {}');
|
| + CompilationUnitMember member = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(member);
|
| listener.assertNoErrors();
|
| - expect(expression.operator, isNotNull);
|
| - expect(expression.operator.type, TokenType.TILDE);
|
| - expect(expression.operand, isNotNull);
|
| + expect(member, new isInstanceOf<FunctionDeclaration>());
|
| + FunctionDeclaration declaration = member;
|
| + expect(declaration.returnType, isNotNull);
|
| + expect(declaration.functionExpression.typeParameters, isNotNull);
|
| }
|
|
|
| - void test_parseUnaryExpression_tilda_super() {
|
| - createParser('~super');
|
| - PrefixExpression expression = parser.parseUnaryExpression();
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseCompilationUnitMember_function_generic_void() {
|
| + createParser('void f<T>(T t) {}');
|
| + CompilationUnitMember member = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(member);
|
| listener.assertNoErrors();
|
| - expect(expression.operator, isNotNull);
|
| - expect(expression.operator.type, TokenType.TILDE);
|
| - expect(expression.operand, isNotNull);
|
| + expect(member, new isInstanceOf<FunctionDeclaration>());
|
| + FunctionDeclaration declaration = member;
|
| + expect(declaration.functionExpression, isNotNull);
|
| + expect(declaration.propertyKeyword, isNull);
|
| }
|
|
|
| - void test_parseVariableDeclaration_equals() {
|
| - createParser('a = b');
|
| - VariableDeclaration declaration = parser.parseVariableDeclaration();
|
| - expectNotNullIfNoErrors(declaration);
|
| + void test_parseCompilationUnitMember_function_noType() {
|
| + createParser('f() {}');
|
| + CompilationUnitMember member = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(member);
|
| listener.assertNoErrors();
|
| - expect(declaration.name, isNotNull);
|
| - expect(declaration.equals, isNotNull);
|
| - expect(declaration.initializer, isNotNull);
|
| + expect(member, new isInstanceOf<FunctionDeclaration>());
|
| + FunctionDeclaration declaration = member;
|
| + expect(declaration.functionExpression, isNotNull);
|
| + expect(declaration.propertyKeyword, isNull);
|
| }
|
|
|
| - void test_parseVariableDeclaration_noEquals() {
|
| - createParser('a');
|
| - VariableDeclaration declaration = parser.parseVariableDeclaration();
|
| - expectNotNullIfNoErrors(declaration);
|
| + void test_parseCompilationUnitMember_function_type() {
|
| + createParser('int f() {}');
|
| + CompilationUnitMember member = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(member);
|
| listener.assertNoErrors();
|
| - expect(declaration.name, isNotNull);
|
| - expect(declaration.equals, isNull);
|
| - expect(declaration.initializer, isNull);
|
| + expect(member, new isInstanceOf<FunctionDeclaration>());
|
| + FunctionDeclaration declaration = member;
|
| + expect(declaration.functionExpression, isNotNull);
|
| + expect(declaration.propertyKeyword, isNull);
|
| }
|
|
|
| - void test_parseVariableDeclarationListAfterMetadata_const_noType() {
|
| - createParser('const a');
|
| - VariableDeclarationList declarationList =
|
| - parseFullVariableDeclarationList();
|
| - expectNotNullIfNoErrors(declarationList);
|
| + void test_parseCompilationUnitMember_function_void() {
|
| + createParser('void f() {}');
|
| + CompilationUnitMember member = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(member);
|
| listener.assertNoErrors();
|
| - expect(declarationList.keyword, isNotNull);
|
| - expect(declarationList.type, isNull);
|
| - expect(declarationList.variables, hasLength(1));
|
| + expect(member, new isInstanceOf<FunctionDeclaration>());
|
| + FunctionDeclaration declaration = member;
|
| + expect(declaration.returnType, isNotNull);
|
| }
|
|
|
| - void test_parseVariableDeclarationListAfterMetadata_const_type() {
|
| - createParser('const A a');
|
| - VariableDeclarationList declarationList =
|
| - parseFullVariableDeclarationList();
|
| - expectNotNullIfNoErrors(declarationList);
|
| + void test_parseCompilationUnitMember_getter_external_noType() {
|
| + createParser('external get p;');
|
| + CompilationUnitMember member = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(member);
|
| listener.assertNoErrors();
|
| - expect(declarationList.keyword, isNotNull);
|
| - expect(declarationList.type, isNotNull);
|
| - expect(declarationList.variables, hasLength(1));
|
| + expect(member, new isInstanceOf<FunctionDeclaration>());
|
| + FunctionDeclaration declaration = member;
|
| + expect(declaration.externalKeyword, isNotNull);
|
| + expect(declaration.functionExpression, isNotNull);
|
| + expect(declaration.propertyKeyword, isNotNull);
|
| }
|
|
|
| - void test_parseVariableDeclarationListAfterMetadata_final_noType() {
|
| - createParser('final a');
|
| - VariableDeclarationList declarationList =
|
| - parseFullVariableDeclarationList();
|
| - expectNotNullIfNoErrors(declarationList);
|
| + void test_parseCompilationUnitMember_getter_external_type() {
|
| + createParser('external int get p;');
|
| + CompilationUnitMember member = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(member);
|
| listener.assertNoErrors();
|
| - expect(declarationList.keyword, isNotNull);
|
| - expect(declarationList.type, isNull);
|
| - expect(declarationList.variables, hasLength(1));
|
| + expect(member, new isInstanceOf<FunctionDeclaration>());
|
| + FunctionDeclaration declaration = member;
|
| + expect(declaration.externalKeyword, isNotNull);
|
| + expect(declaration.functionExpression, isNotNull);
|
| + expect(declaration.propertyKeyword, isNotNull);
|
| }
|
|
|
| - void test_parseVariableDeclarationListAfterMetadata_final_type() {
|
| - createParser('final A a');
|
| - VariableDeclarationList declarationList =
|
| - parseFullVariableDeclarationList();
|
| - expectNotNullIfNoErrors(declarationList);
|
| + void test_parseCompilationUnitMember_getter_noType() {
|
| + createParser('get p => 0;');
|
| + CompilationUnitMember member = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(member);
|
| listener.assertNoErrors();
|
| - expect(declarationList.keyword, isNotNull);
|
| - expect(declarationList.type, isNotNull);
|
| - expect(declarationList.variables, hasLength(1));
|
| + expect(member, new isInstanceOf<FunctionDeclaration>());
|
| + FunctionDeclaration declaration = member;
|
| + expect(declaration.functionExpression, isNotNull);
|
| + expect(declaration.propertyKeyword, isNotNull);
|
| }
|
|
|
| - void test_parseVariableDeclarationListAfterMetadata_final_typeComment() {
|
| - enableGenericMethodComments = true;
|
| - createParser('final/*=T*/ x');
|
| - VariableDeclarationList declarationList =
|
| - parseFullVariableDeclarationList();
|
| - expectNotNullIfNoErrors(declarationList);
|
| + void test_parseCompilationUnitMember_getter_type() {
|
| + createParser('int get p => 0;');
|
| + CompilationUnitMember member = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(member);
|
| listener.assertNoErrors();
|
| - expect((declarationList.type as TypeName).name.name, 'T');
|
| - expect(declarationList.isFinal, true);
|
| + expect(member, new isInstanceOf<FunctionDeclaration>());
|
| + FunctionDeclaration declaration = member;
|
| + expect(declaration.functionExpression, isNotNull);
|
| + expect(declaration.propertyKeyword, isNotNull);
|
| }
|
|
|
| - void test_parseVariableDeclarationListAfterMetadata_type_multiple() {
|
| - createParser('A a, b, c');
|
| - VariableDeclarationList declarationList =
|
| - parseFullVariableDeclarationList();
|
| - expectNotNullIfNoErrors(declarationList);
|
| + void test_parseCompilationUnitMember_setter_external_noType() {
|
| + createParser('external set p(v);');
|
| + CompilationUnitMember member = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(member);
|
| listener.assertNoErrors();
|
| - expect(declarationList.keyword, isNull);
|
| - expect(declarationList.type, isNotNull);
|
| - expect(declarationList.variables, hasLength(3));
|
| + expect(member, new isInstanceOf<FunctionDeclaration>());
|
| + FunctionDeclaration declaration = member;
|
| + expect(declaration.externalKeyword, isNotNull);
|
| + expect(declaration.functionExpression, isNotNull);
|
| + expect(declaration.propertyKeyword, isNotNull);
|
| }
|
|
|
| - void test_parseVariableDeclarationListAfterMetadata_type_single() {
|
| - createParser('A a');
|
| - VariableDeclarationList declarationList =
|
| - parseFullVariableDeclarationList();
|
| - expectNotNullIfNoErrors(declarationList);
|
| + void test_parseCompilationUnitMember_setter_external_type() {
|
| + createParser('external void set p(int v);');
|
| + CompilationUnitMember member = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(member);
|
| listener.assertNoErrors();
|
| - expect(declarationList.keyword, isNull);
|
| - expect(declarationList.type, isNotNull);
|
| - expect(declarationList.variables, hasLength(1));
|
| + expect(member, new isInstanceOf<FunctionDeclaration>());
|
| + FunctionDeclaration declaration = member;
|
| + expect(declaration.externalKeyword, isNotNull);
|
| + expect(declaration.functionExpression, isNotNull);
|
| + expect(declaration.propertyKeyword, isNotNull);
|
| }
|
|
|
| - void test_parseVariableDeclarationListAfterMetadata_var_multiple() {
|
| - createParser('var a, b, c');
|
| - VariableDeclarationList declarationList =
|
| - parseFullVariableDeclarationList();
|
| - expectNotNullIfNoErrors(declarationList);
|
| + void test_parseCompilationUnitMember_setter_noType() {
|
| + createParser('set p(v) {}');
|
| + CompilationUnitMember member = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(member);
|
| listener.assertNoErrors();
|
| - expect(declarationList.keyword, isNotNull);
|
| - expect(declarationList.type, isNull);
|
| - expect(declarationList.variables, hasLength(3));
|
| + expect(member, new isInstanceOf<FunctionDeclaration>());
|
| + FunctionDeclaration declaration = member;
|
| + expect(declaration.functionExpression, isNotNull);
|
| + expect(declaration.propertyKeyword, isNotNull);
|
| }
|
|
|
| - void test_parseVariableDeclarationListAfterMetadata_var_single() {
|
| - createParser('var a');
|
| - VariableDeclarationList declarationList =
|
| - parseFullVariableDeclarationList();
|
| - expectNotNullIfNoErrors(declarationList);
|
| + void test_parseCompilationUnitMember_setter_type() {
|
| + createParser('void set p(int v) {}');
|
| + CompilationUnitMember member = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(member);
|
| listener.assertNoErrors();
|
| - expect(declarationList.keyword, isNotNull);
|
| - expect(declarationList.type, isNull);
|
| - expect(declarationList.variables, hasLength(1));
|
| + expect(member, new isInstanceOf<FunctionDeclaration>());
|
| + FunctionDeclaration declaration = member;
|
| + expect(declaration.functionExpression, isNotNull);
|
| + expect(declaration.propertyKeyword, isNotNull);
|
| + expect(declaration.returnType, isNotNull);
|
| }
|
|
|
| - void test_parseVariableDeclarationListAfterMetadata_var_typeComment() {
|
| - enableGenericMethodComments = true;
|
| - createParser('var/*=T*/ x');
|
| - VariableDeclarationList declarationList =
|
| - parseFullVariableDeclarationList();
|
| - expectNotNullIfNoErrors(declarationList);
|
| + void test_parseCompilationUnitMember_typeAlias_abstract() {
|
| + createParser('abstract class C = S with M;');
|
| + CompilationUnitMember member = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(member);
|
| listener.assertNoErrors();
|
| - expect((declarationList.type as TypeName).name.name, 'T');
|
| - expect(declarationList.keyword, isNull);
|
| + expect(member, new isInstanceOf<ClassTypeAlias>());
|
| + ClassTypeAlias typeAlias = member;
|
| + expect(typeAlias.typedefKeyword, isNotNull);
|
| + expect(typeAlias.name.name, "C");
|
| + expect(typeAlias.typeParameters, isNull);
|
| + expect(typeAlias.equals, isNotNull);
|
| + expect(typeAlias.abstractKeyword, isNotNull);
|
| + expect(typeAlias.superclass.name.name, "S");
|
| + expect(typeAlias.withClause, isNotNull);
|
| + expect(typeAlias.implementsClause, isNull);
|
| + expect(typeAlias.semicolon, isNotNull);
|
| }
|
|
|
| - void test_parseVariableDeclarationListAfterType_type() {
|
| - createParser('T a');
|
| - VariableDeclarationList declarationList =
|
| - parseFullVariableDeclarationList();
|
| - expectNotNullIfNoErrors(declarationList);
|
| + void test_parseCompilationUnitMember_typeAlias_generic() {
|
| + createParser('class C<E> = S<E> with M<E> implements I<E>;');
|
| + CompilationUnitMember member = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(member);
|
| listener.assertNoErrors();
|
| - expect(declarationList.keyword, isNull);
|
| - expect((declarationList.type as TypeName).name.name, 'T');
|
| - expect(declarationList.variables, hasLength(1));
|
| + expect(member, new isInstanceOf<ClassTypeAlias>());
|
| + ClassTypeAlias typeAlias = member;
|
| + expect(typeAlias.typedefKeyword, isNotNull);
|
| + expect(typeAlias.name.name, "C");
|
| + expect(typeAlias.typeParameters.typeParameters, hasLength(1));
|
| + expect(typeAlias.equals, isNotNull);
|
| + expect(typeAlias.abstractKeyword, isNull);
|
| + expect(typeAlias.superclass.name.name, "S");
|
| + expect(typeAlias.withClause, isNotNull);
|
| + expect(typeAlias.implementsClause, isNotNull);
|
| + expect(typeAlias.semicolon, isNotNull);
|
| }
|
|
|
| - void test_parseVariableDeclarationListAfterType_var() {
|
| - createParser('var a, b, c');
|
| - VariableDeclarationList declarationList =
|
| - parseFullVariableDeclarationList();
|
| - expectNotNullIfNoErrors(declarationList);
|
| + void test_parseCompilationUnitMember_typeAlias_implements() {
|
| + createParser('class C = S with M implements I;');
|
| + CompilationUnitMember member = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(member);
|
| listener.assertNoErrors();
|
| - expect(declarationList.keyword.lexeme, 'var');
|
| - expect(declarationList.type, isNull);
|
| - expect(declarationList.variables, hasLength(3));
|
| + expect(member, new isInstanceOf<ClassTypeAlias>());
|
| + ClassTypeAlias typeAlias = member;
|
| + expect(typeAlias.typedefKeyword, isNotNull);
|
| + expect(typeAlias.name.name, "C");
|
| + expect(typeAlias.typeParameters, isNull);
|
| + expect(typeAlias.equals, isNotNull);
|
| + expect(typeAlias.abstractKeyword, isNull);
|
| + expect(typeAlias.superclass.name.name, "S");
|
| + expect(typeAlias.withClause, isNotNull);
|
| + expect(typeAlias.implementsClause, isNotNull);
|
| + expect(typeAlias.semicolon, isNotNull);
|
| }
|
|
|
| - void test_parseVariableDeclarationStatementAfterMetadata_multiple() {
|
| - createParser('var x, y, z;');
|
| - VariableDeclarationStatement statement = parser.parseStatement2();
|
| - expectNotNullIfNoErrors(statement);
|
| + void test_parseCompilationUnitMember_typeAlias_noImplements() {
|
| + createParser('class C = S with M;');
|
| + CompilationUnitMember member = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(member);
|
| listener.assertNoErrors();
|
| - expect(statement.semicolon, isNotNull);
|
| - VariableDeclarationList variableList = statement.variables;
|
| - expect(variableList, isNotNull);
|
| - expect(variableList.variables, hasLength(3));
|
| + expect(member, new isInstanceOf<ClassTypeAlias>());
|
| + ClassTypeAlias typeAlias = member;
|
| + expect(typeAlias.typedefKeyword, isNotNull);
|
| + expect(typeAlias.name.name, "C");
|
| + expect(typeAlias.typeParameters, isNull);
|
| + expect(typeAlias.equals, isNotNull);
|
| + expect(typeAlias.abstractKeyword, isNull);
|
| + expect(typeAlias.superclass.name.name, "S");
|
| + expect(typeAlias.withClause, isNotNull);
|
| + expect(typeAlias.implementsClause, isNull);
|
| + expect(typeAlias.semicolon, isNotNull);
|
| }
|
|
|
| - void test_parseVariableDeclarationStatementAfterMetadata_single() {
|
| - createParser('var x;');
|
| - VariableDeclarationStatement statement = parser.parseStatement2();
|
| - expectNotNullIfNoErrors(statement);
|
| + void test_parseCompilationUnitMember_typedef() {
|
| + createParser('typedef F();');
|
| + CompilationUnitMember member = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(member);
|
| listener.assertNoErrors();
|
| - expect(statement.semicolon, isNotNull);
|
| - VariableDeclarationList variableList = statement.variables;
|
| - expect(variableList, isNotNull);
|
| - expect(variableList.variables, hasLength(1));
|
| + expect(member, new isInstanceOf<FunctionTypeAlias>());
|
| + FunctionTypeAlias typeAlias = member;
|
| + expect(typeAlias.name.name, "F");
|
| + expect(typeAlias.parameters.parameters, hasLength(0));
|
| }
|
|
|
| - void test_parseWhileStatement() {
|
| - createParser('while (x) {}');
|
| - WhileStatement statement = parser.parseWhileStatement();
|
| - expectNotNullIfNoErrors(statement);
|
| + void test_parseCompilationUnitMember_variable() {
|
| + createParser('var x = 0;');
|
| + CompilationUnitMember member = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(member);
|
| listener.assertNoErrors();
|
| - expect(statement.whileKeyword, isNotNull);
|
| - expect(statement.leftParenthesis, isNotNull);
|
| - expect(statement.condition, isNotNull);
|
| - expect(statement.rightParenthesis, isNotNull);
|
| - expect(statement.body, isNotNull);
|
| + expect(member, new isInstanceOf<TopLevelVariableDeclaration>());
|
| + TopLevelVariableDeclaration declaration = member;
|
| + expect(declaration.semicolon, isNotNull);
|
| + expect(declaration.variables, isNotNull);
|
| }
|
|
|
| - void test_parseWithClause_multiple() {
|
| - createParser('with A, B, C');
|
| - WithClause clause = parser.parseWithClause();
|
| - expectNotNullIfNoErrors(clause);
|
| + void test_parseCompilationUnitMember_variableGet() {
|
| + createParser('String get = null;');
|
| + CompilationUnitMember member = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(member);
|
| listener.assertNoErrors();
|
| - expect(clause.withKeyword, isNotNull);
|
| - expect(clause.mixinTypes, hasLength(3));
|
| + expect(member, new isInstanceOf<TopLevelVariableDeclaration>());
|
| + TopLevelVariableDeclaration declaration = member;
|
| + expect(declaration.semicolon, isNotNull);
|
| + expect(declaration.variables, isNotNull);
|
| }
|
|
|
| - void test_parseWithClause_single() {
|
| - createParser('with M');
|
| - WithClause clause = parser.parseWithClause();
|
| - expectNotNullIfNoErrors(clause);
|
| + void test_parseCompilationUnitMember_variableSet() {
|
| + createParser('String set = null;');
|
| + CompilationUnitMember member = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(member);
|
| listener.assertNoErrors();
|
| - expect(clause.withKeyword, isNotNull);
|
| - expect(clause.mixinTypes, hasLength(1));
|
| + expect(member, new isInstanceOf<TopLevelVariableDeclaration>());
|
| + TopLevelVariableDeclaration declaration = member;
|
| + expect(declaration.semicolon, isNotNull);
|
| + expect(declaration.variables, isNotNull);
|
| }
|
|
|
| - void test_parseYieldStatement_each() {
|
| - createParser('yield* x;');
|
| - YieldStatement statement = parser.parseYieldStatement();
|
| - expectNotNullIfNoErrors(statement);
|
| + void test_parseDirective_export() {
|
| + createParser("export 'lib/lib.dart';");
|
| + Directive directive = parseFullDirective();
|
| + expectNotNullIfNoErrors(directive);
|
| listener.assertNoErrors();
|
| - expect(statement.yieldKeyword, isNotNull);
|
| - expect(statement.star, isNotNull);
|
| - expect(statement.expression, isNotNull);
|
| - expect(statement.semicolon, isNotNull);
|
| + expect(directive, new isInstanceOf<ExportDirective>());
|
| + ExportDirective exportDirective = directive;
|
| + expect(exportDirective.keyword, isNotNull);
|
| + expect(exportDirective.uri, isNotNull);
|
| + expect(exportDirective.combinators, hasLength(0));
|
| + expect(exportDirective.semicolon, isNotNull);
|
| }
|
|
|
| - void test_parseYieldStatement_normal() {
|
| - createParser('yield x;');
|
| - YieldStatement statement = parser.parseYieldStatement();
|
| - expectNotNullIfNoErrors(statement);
|
| + void test_parseDirective_import() {
|
| + createParser("import 'lib/lib.dart';");
|
| + Directive directive = parseFullDirective();
|
| + expectNotNullIfNoErrors(directive);
|
| listener.assertNoErrors();
|
| - expect(statement.yieldKeyword, isNotNull);
|
| - expect(statement.star, isNull);
|
| - expect(statement.expression, isNotNull);
|
| - expect(statement.semicolon, isNotNull);
|
| + expect(directive, new isInstanceOf<ImportDirective>());
|
| + ImportDirective importDirective = directive;
|
| + expect(importDirective.keyword, isNotNull);
|
| + expect(importDirective.uri, isNotNull);
|
| + expect(importDirective.asKeyword, isNull);
|
| + expect(importDirective.prefix, isNull);
|
| + expect(importDirective.combinators, hasLength(0));
|
| + expect(importDirective.semicolon, isNotNull);
|
| }
|
|
|
| - void test_skipPrefixedIdentifier_invalid() {
|
| - createParser('+');
|
| - Token following = parser.skipPrefixedIdentifier(parser.currentToken);
|
| - expect(following, isNull);
|
| + void test_parseDirective_library() {
|
| + createParser("library l;");
|
| + Directive directive = parseFullDirective();
|
| + expectNotNullIfNoErrors(directive);
|
| + listener.assertNoErrors();
|
| + expect(directive, new isInstanceOf<LibraryDirective>());
|
| + LibraryDirective libraryDirective = directive;
|
| + expect(libraryDirective.libraryKeyword, isNotNull);
|
| + expect(libraryDirective.name, isNotNull);
|
| + expect(libraryDirective.semicolon, isNotNull);
|
| }
|
|
|
| - void test_skipPrefixedIdentifier_notPrefixed() {
|
| - createParser('a +');
|
| - Token following = parser.skipPrefixedIdentifier(parser.currentToken);
|
| - expect(following, isNotNull);
|
| - expect(following.type, TokenType.PLUS);
|
| + void test_parseDirective_part() {
|
| + createParser("part 'lib/lib.dart';");
|
| + Directive directive = parseFullDirective();
|
| + expectNotNullIfNoErrors(directive);
|
| + listener.assertNoErrors();
|
| + expect(directive, new isInstanceOf<PartDirective>());
|
| + PartDirective partDirective = directive;
|
| + expect(partDirective.partKeyword, isNotNull);
|
| + expect(partDirective.uri, isNotNull);
|
| + expect(partDirective.semicolon, isNotNull);
|
| }
|
|
|
| - void test_skipPrefixedIdentifier_prefixed() {
|
| - createParser('a.b +');
|
| - Token following = parser.skipPrefixedIdentifier(parser.currentToken);
|
| - expect(following, isNotNull);
|
| - expect(following.type, TokenType.PLUS);
|
| - }
|
| -
|
| - void test_skipReturnType_invalid() {
|
| - createParser('+');
|
| - Token following = parser.skipReturnType(parser.currentToken);
|
| - expect(following, isNull);
|
| + void test_parseDirective_partOf() {
|
| + createParser("part of l;");
|
| + Directive directive = parseFullDirective();
|
| + expectNotNullIfNoErrors(directive);
|
| + listener.assertNoErrors();
|
| + expect(directive, new isInstanceOf<PartOfDirective>());
|
| + PartOfDirective partOfDirective = directive;
|
| + expect(partOfDirective.partKeyword, isNotNull);
|
| + expect(partOfDirective.ofKeyword, isNotNull);
|
| + expect(partOfDirective.libraryName, isNotNull);
|
| + expect(partOfDirective.semicolon, isNotNull);
|
| }
|
|
|
| - void test_skipReturnType_type() {
|
| - createParser('C +');
|
| - Token following = parser.skipReturnType(parser.currentToken);
|
| - expect(following, isNotNull);
|
| - expect(following.type, TokenType.PLUS);
|
| + void test_parseDirectives_complete() {
|
| + CompilationUnit unit =
|
| + _parseDirectives("#! /bin/dart\nlibrary l;\nclass A {}");
|
| + expect(unit.scriptTag, isNotNull);
|
| + expect(unit.directives, hasLength(1));
|
| }
|
|
|
| - void test_skipReturnType_void() {
|
| - createParser('void +');
|
| - Token following = parser.skipReturnType(parser.currentToken);
|
| - expect(following, isNotNull);
|
| - expect(following.type, TokenType.PLUS);
|
| + void test_parseDirectives_empty() {
|
| + CompilationUnit unit = _parseDirectives("");
|
| + expect(unit.scriptTag, isNull);
|
| + expect(unit.directives, hasLength(0));
|
| }
|
|
|
| - void test_skipSimpleIdentifier_identifier() {
|
| - createParser('i +');
|
| - Token following = parser.skipSimpleIdentifier(parser.currentToken);
|
| - expect(following, isNotNull);
|
| - expect(following.type, TokenType.PLUS);
|
| + void test_parseDirectives_mixed() {
|
| + CompilationUnit unit =
|
| + _parseDirectives("library l; class A {} part 'foo.dart';");
|
| + expect(unit.scriptTag, isNull);
|
| + expect(unit.directives, hasLength(1));
|
| }
|
|
|
| - void test_skipSimpleIdentifier_invalid() {
|
| - createParser('9 +');
|
| - Token following = parser.skipSimpleIdentifier(parser.currentToken);
|
| - expect(following, isNull);
|
| + void test_parseDirectives_multiple() {
|
| + CompilationUnit unit = _parseDirectives("library l;\npart 'a.dart';");
|
| + expect(unit.scriptTag, isNull);
|
| + expect(unit.directives, hasLength(2));
|
| }
|
|
|
| - void test_skipSimpleIdentifier_pseudoKeyword() {
|
| - createParser('as +');
|
| - Token following = parser.skipSimpleIdentifier(parser.currentToken);
|
| - expect(following, isNotNull);
|
| - expect(following.type, TokenType.PLUS);
|
| + void test_parseDirectives_script() {
|
| + CompilationUnit unit = _parseDirectives("#! /bin/dart");
|
| + expect(unit.scriptTag, isNotNull);
|
| + expect(unit.directives, hasLength(0));
|
| }
|
|
|
| - void test_skipStringLiteral_adjacent() {
|
| - createParser("'a' 'b' +");
|
| - Token following = parser.skipStringLiteral(parser.currentToken);
|
| - expect(following, isNotNull);
|
| - expect(following.type, TokenType.PLUS);
|
| + void test_parseDirectives_single() {
|
| + CompilationUnit unit = _parseDirectives("library l;");
|
| + expect(unit.scriptTag, isNull);
|
| + expect(unit.directives, hasLength(1));
|
| }
|
|
|
| - void test_skipStringLiteral_interpolated() {
|
| - createParser("'a\${b}c' +");
|
| - Token following = parser.skipStringLiteral(parser.currentToken);
|
| - expect(following, isNotNull);
|
| - expect(following.type, TokenType.PLUS);
|
| + void test_parseDirectives_topLevelDeclaration() {
|
| + CompilationUnit unit = _parseDirectives("class A {}");
|
| + expect(unit.scriptTag, isNull);
|
| + expect(unit.directives, hasLength(0));
|
| }
|
|
|
| - void test_skipStringLiteral_invalid() {
|
| - createParser('a');
|
| - Token following = parser.skipStringLiteral(parser.currentToken);
|
| - expect(following, isNull);
|
| + void test_parseEnumDeclaration_one() {
|
| + createParser("enum E {ONE}");
|
| + EnumDeclaration declaration = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(declaration);
|
| + listener.assertNoErrors();
|
| + expect(declaration.documentationComment, isNull);
|
| + expect(declaration.enumKeyword, isNotNull);
|
| + expect(declaration.leftBracket, isNotNull);
|
| + expect(declaration.name, isNotNull);
|
| + expect(declaration.constants, hasLength(1));
|
| + expect(declaration.rightBracket, isNotNull);
|
| }
|
|
|
| - void test_skipStringLiteral_single() {
|
| - createParser("'a' +");
|
| - Token following = parser.skipStringLiteral(parser.currentToken);
|
| - expect(following, isNotNull);
|
| - expect(following.type, TokenType.PLUS);
|
| + void test_parseEnumDeclaration_trailingComma() {
|
| + createParser("enum E {ONE,}");
|
| + EnumDeclaration declaration = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(declaration);
|
| + listener.assertNoErrors();
|
| + expect(declaration.documentationComment, isNull);
|
| + expect(declaration.enumKeyword, isNotNull);
|
| + expect(declaration.leftBracket, isNotNull);
|
| + expect(declaration.name, isNotNull);
|
| + expect(declaration.constants, hasLength(1));
|
| + expect(declaration.rightBracket, isNotNull);
|
| }
|
|
|
| - void test_skipTypeArgumentList_invalid() {
|
| - createParser('+');
|
| - Token following = parser.skipTypeArgumentList(parser.currentToken);
|
| - expect(following, isNull);
|
| + void test_parseEnumDeclaration_two() {
|
| + createParser("enum E {ONE, TWO}");
|
| + EnumDeclaration declaration = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(declaration);
|
| + listener.assertNoErrors();
|
| + expect(declaration.documentationComment, isNull);
|
| + expect(declaration.enumKeyword, isNotNull);
|
| + expect(declaration.leftBracket, isNotNull);
|
| + expect(declaration.name, isNotNull);
|
| + expect(declaration.constants, hasLength(2));
|
| + expect(declaration.rightBracket, isNotNull);
|
| }
|
|
|
| - void test_skipTypeArgumentList_multiple() {
|
| - createParser('<E, F, G> +');
|
| - Token following = parser.skipTypeArgumentList(parser.currentToken);
|
| - expect(following, isNotNull);
|
| - expect(following.type, TokenType.PLUS);
|
| + void test_parseExportDirective_configuration_multiple() {
|
| + createParser("export 'lib/lib.dart' if (a) 'b.dart' if (c) 'd.dart';");
|
| + ExportDirective directive = parseFullDirective();
|
| + expectNotNullIfNoErrors(directive);
|
| + listener.assertNoErrors();
|
| + expect(directive.keyword, isNotNull);
|
| + expect(directive.uri, isNotNull);
|
| + expect(directive.configurations, hasLength(2));
|
| + expectDottedName(directive.configurations[0].name, ['a']);
|
| + expectDottedName(directive.configurations[1].name, ['c']);
|
| + expect(directive.combinators, hasLength(0));
|
| + expect(directive.semicolon, isNotNull);
|
| }
|
|
|
| - void test_skipTypeArgumentList_single() {
|
| - createParser('<E> +');
|
| - Token following = parser.skipTypeArgumentList(parser.currentToken);
|
| - expect(following, isNotNull);
|
| - expect(following.type, TokenType.PLUS);
|
| + void test_parseExportDirective_configuration_single() {
|
| + createParser("export 'lib/lib.dart' if (a.b == 'c.dart') '';");
|
| + ExportDirective directive = parseFullDirective();
|
| + expectNotNullIfNoErrors(directive);
|
| + listener.assertNoErrors();
|
| + expect(directive.keyword, isNotNull);
|
| + expect(directive.uri, isNotNull);
|
| + expect(directive.configurations, hasLength(1));
|
| + expectDottedName(directive.configurations[0].name, ['a', 'b']);
|
| + expect(directive.combinators, hasLength(0));
|
| + expect(directive.semicolon, isNotNull);
|
| }
|
|
|
| - void test_skipTypeName_invalid() {
|
| - createParser('+');
|
| - Token following = parser.skipTypeName(parser.currentToken);
|
| - expect(following, isNull);
|
| + void test_parseExportDirective_hide() {
|
| + createParser("export 'lib/lib.dart' hide A, B;");
|
| + ExportDirective directive = parseFullDirective();
|
| + expectNotNullIfNoErrors(directive);
|
| + listener.assertNoErrors();
|
| + expect(directive.keyword, isNotNull);
|
| + expect(directive.uri, isNotNull);
|
| + expect(directive.combinators, hasLength(1));
|
| + expect(directive.semicolon, isNotNull);
|
| }
|
|
|
| - void test_skipTypeName_parameterized() {
|
| - createParser('C<E<F<G>>> +');
|
| - Token following = parser.skipTypeName(parser.currentToken);
|
| - expect(following, isNotNull);
|
| - expect(following.type, TokenType.PLUS);
|
| + void test_parseExportDirective_hide_show() {
|
| + createParser("export 'lib/lib.dart' hide A show B;");
|
| + ExportDirective directive = parseFullDirective();
|
| + expectNotNullIfNoErrors(directive);
|
| + listener.assertNoErrors();
|
| + expect(directive.keyword, isNotNull);
|
| + expect(directive.uri, isNotNull);
|
| + expect(directive.combinators, hasLength(2));
|
| + expect(directive.semicolon, isNotNull);
|
| }
|
|
|
| - void test_skipTypeName_simple() {
|
| - createParser('C +');
|
| - Token following = parser.skipTypeName(parser.currentToken);
|
| - expect(following, isNotNull);
|
| - expect(following.type, TokenType.PLUS);
|
| + void test_parseExportDirective_noCombinator() {
|
| + createParser("export 'lib/lib.dart';");
|
| + ExportDirective directive = parseFullDirective();
|
| + expectNotNullIfNoErrors(directive);
|
| + listener.assertNoErrors();
|
| + expect(directive.keyword, isNotNull);
|
| + expect(directive.uri, isNotNull);
|
| + expect(directive.combinators, hasLength(0));
|
| + expect(directive.semicolon, isNotNull);
|
| }
|
|
|
| - /**
|
| - * Invoke the method [Parser.computeStringValue] with the given argument.
|
| - *
|
| - * @param lexeme the argument to the method
|
| - * @param first `true` if this is the first token in a string literal
|
| - * @param last `true` if this is the last token in a string literal
|
| - * @return the result of invoking the method
|
| - * @throws Exception if the method could not be invoked or throws an exception
|
| - */
|
| - String _computeStringValue(String lexeme, bool first, bool last) {
|
| - createParser('');
|
| - String value = parser.computeStringValue(lexeme, first, last);
|
| + void test_parseExportDirective_show() {
|
| + createParser("export 'lib/lib.dart' show A, B;");
|
| + ExportDirective directive = parseFullDirective();
|
| + expectNotNullIfNoErrors(directive);
|
| listener.assertNoErrors();
|
| - return value;
|
| + expect(directive.keyword, isNotNull);
|
| + expect(directive.uri, isNotNull);
|
| + expect(directive.combinators, hasLength(1));
|
| + expect(directive.semicolon, isNotNull);
|
| }
|
|
|
| - void _expectCommentText(Comment comment, String expectedText) {
|
| - expect(comment.beginToken, same(comment.endToken));
|
| - expect(comment.beginToken.lexeme, expectedText);
|
| + void test_parseExportDirective_show_hide() {
|
| + createParser("export 'lib/lib.dart' show B hide A;");
|
| + ExportDirective directive = parseFullDirective();
|
| + expectNotNullIfNoErrors(directive);
|
| + listener.assertNoErrors();
|
| + expect(directive.keyword, isNotNull);
|
| + expect(directive.uri, isNotNull);
|
| + expect(directive.combinators, hasLength(2));
|
| + expect(directive.semicolon, isNotNull);
|
| }
|
|
|
| - void _expectDottedName(DottedName name, List<String> expectedComponents) {
|
| - int count = expectedComponents.length;
|
| - NodeList<SimpleIdentifier> components = name.components;
|
| - expect(components, hasLength(count));
|
| - for (int i = 0; i < count; i++) {
|
| - SimpleIdentifier component = components[i];
|
| - expect(component, isNotNull);
|
| - expect(component.name, expectedComponents[i]);
|
| - }
|
| + void test_parseFunctionDeclaration_function() {
|
| + createParser('/// Doc\nT f() {}');
|
| + FunctionDeclaration declaration = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(declaration);
|
| + listener.assertNoErrors();
|
| + expectCommentText(declaration.documentationComment, '/// Doc');
|
| + expect((declaration.returnType as TypeName).name.name, 'T');
|
| + expect(declaration.name, isNotNull);
|
| + FunctionExpression expression = declaration.functionExpression;
|
| + expect(expression, isNotNull);
|
| + expect(expression.body, isNotNull);
|
| + expect(expression.typeParameters, isNull);
|
| + expect(expression.parameters, isNotNull);
|
| + expect(declaration.propertyKeyword, isNull);
|
| }
|
|
|
| - /**
|
| - * Invoke the method [Parser.isFunctionDeclaration] with the parser set to the token
|
| - * stream produced by scanning the given source.
|
| - *
|
| - * @param source the source to be scanned to produce the token stream being tested
|
| - * @return the result of invoking the method
|
| - * @throws Exception if the method could not be invoked or throws an exception
|
| - */
|
| - bool _isFunctionDeclaration(String source) {
|
| - createParser(source);
|
| - bool result = parser.isFunctionDeclaration();
|
| - expectNotNullIfNoErrors(result);
|
| - return result;
|
| + void test_parseFunctionDeclaration_functionWithTypeParameters() {
|
| + createParser('/// Doc\nT f<E>() {}');
|
| + FunctionDeclaration declaration = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(declaration);
|
| + listener.assertNoErrors();
|
| + expectCommentText(declaration.documentationComment, '/// Doc');
|
| + expect((declaration.returnType as TypeName).name.name, 'T');
|
| + expect(declaration.name, isNotNull);
|
| + FunctionExpression expression = declaration.functionExpression;
|
| + expect(expression, isNotNull);
|
| + expect(expression.body, isNotNull);
|
| + expect(expression.typeParameters, isNotNull);
|
| + expect(expression.parameters, isNotNull);
|
| + expect(declaration.propertyKeyword, isNull);
|
| + }
|
| +
|
| + void test_parseFunctionDeclaration_functionWithTypeParameters_comment() {
|
| + enableGenericMethodComments = true;
|
| + createParser('/// Doc\nT f/*<E>*/() {}');
|
| + FunctionDeclaration declaration = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(declaration);
|
| + listener.assertNoErrors();
|
| + expectCommentText(declaration.documentationComment, '/// Doc');
|
| + expect((declaration.returnType as TypeName).name.name, 'T');
|
| + expect(declaration.name, isNotNull);
|
| + FunctionExpression expression = declaration.functionExpression;
|
| + expect(expression, isNotNull);
|
| + expect(expression.body, isNotNull);
|
| + expect(expression.typeParameters, isNotNull);
|
| + expect(expression.parameters, isNotNull);
|
| + expect(declaration.propertyKeyword, isNull);
|
| + }
|
| +
|
| + void test_parseFunctionDeclaration_getter() {
|
| + createParser('/// Doc\nT get p => 0;');
|
| + FunctionDeclaration declaration = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(declaration);
|
| + listener.assertNoErrors();
|
| + expectCommentText(declaration.documentationComment, '/// Doc');
|
| + expect((declaration.returnType as TypeName).name.name, 'T');
|
| + expect(declaration.name, isNotNull);
|
| + FunctionExpression expression = declaration.functionExpression;
|
| + expect(expression, isNotNull);
|
| + expect(expression.body, isNotNull);
|
| + expect(expression.typeParameters, isNull);
|
| + expect(expression.parameters, isNull);
|
| + expect(declaration.propertyKeyword, isNotNull);
|
| + }
|
| +
|
| + void test_parseFunctionDeclaration_setter() {
|
| + createParser('/// Doc\nT set p(v) {}');
|
| + FunctionDeclaration declaration = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(declaration);
|
| + listener.assertNoErrors();
|
| + expectCommentText(declaration.documentationComment, '/// Doc');
|
| + expect((declaration.returnType as TypeName).name.name, 'T');
|
| + expect(declaration.name, isNotNull);
|
| + FunctionExpression expression = declaration.functionExpression;
|
| + expect(expression, isNotNull);
|
| + expect(expression.body, isNotNull);
|
| + expect(expression.typeParameters, isNull);
|
| + expect(expression.parameters, isNotNull);
|
| + expect(declaration.propertyKeyword, isNotNull);
|
| + }
|
| +
|
| + @failingTest
|
| + void test_parseGenericTypeAlias_noTypeParameters() {
|
| + createParser('F = int Function(int);');
|
| + GenericTypeAlias alias = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(alias);
|
| + listener.assertNoErrors();
|
| + expect(alias.name, isNotNull);
|
| + expect(alias.name.name, 'F');
|
| + expect(alias.typeParameters, isNull);
|
| + expect(alias.equals, isNotNull);
|
| + expect(alias.functionType, isNotNull);
|
| + expect(alias.semicolon, isNotNull);
|
| + }
|
| +
|
| + @failingTest
|
| + void test_parseGenericTypeAlias_typeParameters() {
|
| + createParser('F<T> = T Function(T);');
|
| + GenericTypeAlias alias = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(alias);
|
| + listener.assertNoErrors();
|
| + expect(alias.name, isNotNull);
|
| + expect(alias.name.name, 'F');
|
| + expect(alias.typeParameters, isNotNull);
|
| + expect(alias.equals, isNotNull);
|
| + expect(alias.functionType, isNotNull);
|
| + expect(alias.semicolon, isNotNull);
|
| + }
|
| +
|
| + void test_parseImportDirective_configuration_multiple() {
|
| + createParser("import 'lib/lib.dart' if (a) 'b.dart' if (c) 'd.dart';");
|
| + ImportDirective directive = parseFullDirective();
|
| + expectNotNullIfNoErrors(directive);
|
| + listener.assertNoErrors();
|
| + expect(directive.keyword, isNotNull);
|
| + expect(directive.uri, isNotNull);
|
| + expect(directive.configurations, hasLength(2));
|
| + expectDottedName(directive.configurations[0].name, ['a']);
|
| + expectDottedName(directive.configurations[1].name, ['c']);
|
| + expect(directive.deferredKeyword, isNull);
|
| + expect(directive.asKeyword, isNull);
|
| + expect(directive.prefix, isNull);
|
| + expect(directive.combinators, hasLength(0));
|
| + expect(directive.semicolon, isNotNull);
|
| + }
|
| +
|
| + void test_parseImportDirective_configuration_single() {
|
| + createParser("import 'lib/lib.dart' if (a.b == 'c.dart') '';");
|
| + ImportDirective directive = parseFullDirective();
|
| + expectNotNullIfNoErrors(directive);
|
| + listener.assertNoErrors();
|
| + expect(directive.keyword, isNotNull);
|
| + expect(directive.uri, isNotNull);
|
| + expect(directive.configurations, hasLength(1));
|
| + expectDottedName(directive.configurations[0].name, ['a', 'b']);
|
| + expect(directive.deferredKeyword, isNull);
|
| + expect(directive.asKeyword, isNull);
|
| + expect(directive.prefix, isNull);
|
| + expect(directive.combinators, hasLength(0));
|
| + expect(directive.semicolon, isNotNull);
|
| + }
|
| +
|
| + void test_parseImportDirective_deferred() {
|
| + createParser("import 'lib/lib.dart' deferred as a;");
|
| + ImportDirective directive = parseFullDirective();
|
| + expectNotNullIfNoErrors(directive);
|
| + listener.assertNoErrors();
|
| + expect(directive.keyword, isNotNull);
|
| + expect(directive.uri, isNotNull);
|
| + expect(directive.deferredKeyword, isNotNull);
|
| + expect(directive.asKeyword, isNotNull);
|
| + expect(directive.prefix, isNotNull);
|
| + expect(directive.combinators, hasLength(0));
|
| + expect(directive.semicolon, isNotNull);
|
| + }
|
| +
|
| + void test_parseImportDirective_hide() {
|
| + createParser("import 'lib/lib.dart' hide A, B;");
|
| + ImportDirective directive = parseFullDirective();
|
| + expectNotNullIfNoErrors(directive);
|
| + listener.assertNoErrors();
|
| + expect(directive.keyword, isNotNull);
|
| + expect(directive.uri, isNotNull);
|
| + expect(directive.deferredKeyword, isNull);
|
| + expect(directive.asKeyword, isNull);
|
| + expect(directive.prefix, isNull);
|
| + expect(directive.combinators, hasLength(1));
|
| + expect(directive.semicolon, isNotNull);
|
| + }
|
| +
|
| + void test_parseImportDirective_noCombinator() {
|
| + createParser("import 'lib/lib.dart';");
|
| + ImportDirective directive = parseFullDirective();
|
| + expectNotNullIfNoErrors(directive);
|
| + listener.assertNoErrors();
|
| + expect(directive.keyword, isNotNull);
|
| + expect(directive.uri, isNotNull);
|
| + expect(directive.deferredKeyword, isNull);
|
| + expect(directive.asKeyword, isNull);
|
| + expect(directive.prefix, isNull);
|
| + expect(directive.combinators, hasLength(0));
|
| + expect(directive.semicolon, isNotNull);
|
| + }
|
| +
|
| + void test_parseImportDirective_prefix() {
|
| + createParser("import 'lib/lib.dart' as a;");
|
| + ImportDirective directive = parseFullDirective();
|
| + expectNotNullIfNoErrors(directive);
|
| + listener.assertNoErrors();
|
| + expect(directive.keyword, isNotNull);
|
| + expect(directive.uri, isNotNull);
|
| + expect(directive.deferredKeyword, isNull);
|
| + expect(directive.asKeyword, isNotNull);
|
| + expect(directive.prefix, isNotNull);
|
| + expect(directive.combinators, hasLength(0));
|
| + expect(directive.semicolon, isNotNull);
|
| + }
|
| +
|
| + void test_parseImportDirective_prefix_hide_show() {
|
| + createParser("import 'lib/lib.dart' as a hide A show B;");
|
| + ImportDirective directive = parseFullDirective();
|
| + expectNotNullIfNoErrors(directive);
|
| + listener.assertNoErrors();
|
| + expect(directive.keyword, isNotNull);
|
| + expect(directive.uri, isNotNull);
|
| + expect(directive.deferredKeyword, isNull);
|
| + expect(directive.asKeyword, isNotNull);
|
| + expect(directive.prefix, isNotNull);
|
| + expect(directive.combinators, hasLength(2));
|
| + expect(directive.semicolon, isNotNull);
|
| + }
|
| +
|
| + void test_parseImportDirective_prefix_show_hide() {
|
| + createParser("import 'lib/lib.dart' as a show B hide A;");
|
| + ImportDirective directive = parseFullDirective();
|
| + expectNotNullIfNoErrors(directive);
|
| + listener.assertNoErrors();
|
| + expect(directive.keyword, isNotNull);
|
| + expect(directive.uri, isNotNull);
|
| + expect(directive.deferredKeyword, isNull);
|
| + expect(directive.asKeyword, isNotNull);
|
| + expect(directive.prefix, isNotNull);
|
| + expect(directive.combinators, hasLength(2));
|
| + expect(directive.semicolon, isNotNull);
|
| + }
|
| +
|
| + void test_parseImportDirective_show() {
|
| + createParser("import 'lib/lib.dart' show A, B;");
|
| + ImportDirective directive = parseFullDirective();
|
| + expectNotNullIfNoErrors(directive);
|
| + listener.assertNoErrors();
|
| + expect(directive.keyword, isNotNull);
|
| + expect(directive.uri, isNotNull);
|
| + expect(directive.deferredKeyword, isNull);
|
| + expect(directive.asKeyword, isNull);
|
| + expect(directive.prefix, isNull);
|
| + expect(directive.combinators, hasLength(1));
|
| + expect(directive.semicolon, isNotNull);
|
| + }
|
| +
|
| + void test_parseLibraryDirective() {
|
| + createParser('library l;');
|
| + LibraryDirective directive = parseFullDirective();
|
| + expectNotNullIfNoErrors(directive);
|
| + listener.assertNoErrors();
|
| + expect(directive.libraryKeyword, isNotNull);
|
| + expect(directive.name, isNotNull);
|
| + expect(directive.semicolon, isNotNull);
|
| + }
|
| +
|
| + void test_parsePartDirective() {
|
| + createParser("part 'lib/lib.dart';");
|
| + PartDirective directive = parseFullDirective();
|
| + expectNotNullIfNoErrors(directive);
|
| + listener.assertNoErrors();
|
| + expect(directive.partKeyword, isNotNull);
|
| + expect(directive.uri, isNotNull);
|
| + expect(directive.semicolon, isNotNull);
|
| + }
|
| +
|
| + void test_parsePartOfDirective_name() {
|
| + enableUriInPartOf = true;
|
| + createParser("part of l;");
|
| + PartOfDirective directive = parseFullDirective();
|
| + expect(directive.partKeyword, isNotNull);
|
| + expect(directive.ofKeyword, isNotNull);
|
| + expect(directive.libraryName, isNotNull);
|
| + expect(directive.uri, isNull);
|
| + expect(directive.semicolon, isNotNull);
|
| + }
|
| +
|
| + void test_parsePartOfDirective_uri() {
|
| + enableUriInPartOf = true;
|
| + createParser("part of 'lib.dart';");
|
| + PartOfDirective directive = parseFullDirective();
|
| + expect(directive.partKeyword, isNotNull);
|
| + expect(directive.ofKeyword, isNotNull);
|
| + expect(directive.libraryName, isNull);
|
| + expect(directive.uri, isNotNull);
|
| + expect(directive.semicolon, isNotNull);
|
| + }
|
| +
|
| + void test_parseTypeAlias_function_noParameters() {
|
| + createParser('typedef bool F();');
|
| + FunctionTypeAlias typeAlias = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(typeAlias);
|
| + listener.assertNoErrors();
|
| + expect(typeAlias.typedefKeyword, isNotNull);
|
| + expect(typeAlias.name, isNotNull);
|
| + expect(typeAlias.parameters, isNotNull);
|
| + expect(typeAlias.returnType, isNotNull);
|
| + expect(typeAlias.semicolon, isNotNull);
|
| + expect(typeAlias.typeParameters, isNull);
|
| + }
|
| +
|
| + void test_parseTypeAlias_function_noReturnType() {
|
| + createParser('typedef F();');
|
| + FunctionTypeAlias typeAlias = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(typeAlias);
|
| + listener.assertNoErrors();
|
| + expect(typeAlias.typedefKeyword, isNotNull);
|
| + expect(typeAlias.name, isNotNull);
|
| + expect(typeAlias.parameters, isNotNull);
|
| + expect(typeAlias.returnType, isNull);
|
| + expect(typeAlias.semicolon, isNotNull);
|
| + expect(typeAlias.typeParameters, isNull);
|
| + }
|
| +
|
| + void test_parseTypeAlias_function_parameterizedReturnType() {
|
| + createParser('typedef A<B> F();');
|
| + FunctionTypeAlias typeAlias = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(typeAlias);
|
| + listener.assertNoErrors();
|
| + expect(typeAlias.typedefKeyword, isNotNull);
|
| + expect(typeAlias.name, isNotNull);
|
| + expect(typeAlias.parameters, isNotNull);
|
| + expect(typeAlias.returnType, isNotNull);
|
| + expect(typeAlias.semicolon, isNotNull);
|
| + expect(typeAlias.typeParameters, isNull);
|
| + }
|
| +
|
| + void test_parseTypeAlias_function_parameters() {
|
| + createParser('typedef bool F(Object value);');
|
| + FunctionTypeAlias typeAlias = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(typeAlias);
|
| + listener.assertNoErrors();
|
| + expect(typeAlias.typedefKeyword, isNotNull);
|
| + expect(typeAlias.name, isNotNull);
|
| + expect(typeAlias.parameters, isNotNull);
|
| + expect(typeAlias.returnType, isNotNull);
|
| + expect(typeAlias.semicolon, isNotNull);
|
| + expect(typeAlias.typeParameters, isNull);
|
| + }
|
| +
|
| + void test_parseTypeAlias_function_typeParameters() {
|
| + createParser('typedef bool F<E>();');
|
| + FunctionTypeAlias typeAlias = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(typeAlias);
|
| + listener.assertNoErrors();
|
| + expect(typeAlias.typedefKeyword, isNotNull);
|
| + expect(typeAlias.name, isNotNull);
|
| + expect(typeAlias.parameters, isNotNull);
|
| + expect(typeAlias.returnType, isNotNull);
|
| + expect(typeAlias.semicolon, isNotNull);
|
| + expect(typeAlias.typeParameters, isNotNull);
|
| }
|
|
|
| - /**
|
| - * Invoke the method [Parser.isFunctionExpression] with the parser set to the token stream
|
| - * produced by scanning the given source.
|
| - *
|
| - * @param source the source to be scanned to produce the token stream being tested
|
| - * @return the result of invoking the method
|
| - * @throws Exception if the method could not be invoked or throws an exception
|
| - */
|
| - bool _isFunctionExpression(String source) {
|
| - createParser(source);
|
| - return parser.isFunctionExpression(parser.currentToken);
|
| + void test_parseTypeAlias_function_voidReturnType() {
|
| + createParser('typedef void F();');
|
| + FunctionTypeAlias typeAlias = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(typeAlias);
|
| + listener.assertNoErrors();
|
| + expect(typeAlias.typedefKeyword, isNotNull);
|
| + expect(typeAlias.name, isNotNull);
|
| + expect(typeAlias.parameters, isNotNull);
|
| + expect(typeAlias.returnType, isNotNull);
|
| + expect(typeAlias.semicolon, isNotNull);
|
| + expect(typeAlias.typeParameters, isNull);
|
| }
|
|
|
| - /**
|
| - * Invoke the method [Parser.isInitializedVariableDeclaration] with the parser set to the
|
| - * token stream produced by scanning the given source.
|
| - *
|
| - * @param source the source to be scanned to produce the token stream being tested
|
| - * @return the result of invoking the method
|
| - * @throws Exception if the method could not be invoked or throws an exception
|
| - */
|
| - bool _isInitializedVariableDeclaration(String source) {
|
| - createParser(source);
|
| - bool result = parser.isInitializedVariableDeclaration();
|
| - expectNotNullIfNoErrors(result);
|
| - return result;
|
| + @failingTest
|
| + void test_parseTypeAlias_genericFunction_noParameters() {
|
| + createParser('typedef F = bool Function();');
|
| + GenericTypeAlias typeAlias = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(typeAlias);
|
| + listener.assertNoErrors();
|
| + expect(typeAlias.typedefKeyword, isNotNull);
|
| + expect(typeAlias.name, isNotNull);
|
| + expect(typeAlias.typeParameters, isNull);
|
| + expect(typeAlias.semicolon, isNotNull);
|
| + GenericFunctionType functionType = typeAlias.functionType;
|
| + expect(functionType, isNotNull);
|
| + expect(functionType.parameters, isNotNull);
|
| + expect(functionType.returnType, isNotNull);
|
| + expect(functionType.typeParameters, isNull);
|
| }
|
|
|
| - /**
|
| - * Invoke the method [Parser.isSwitchMember] with the parser set to the token stream
|
| - * produced by scanning the given source.
|
| - *
|
| - * @param source the source to be scanned to produce the token stream being tested
|
| - * @return the result of invoking the method
|
| - * @throws Exception if the method could not be invoked or throws an exception
|
| - */
|
| - bool _isSwitchMember(String source) {
|
| - createParser(source);
|
| - bool result = parser.isSwitchMember();
|
| - expectNotNullIfNoErrors(result);
|
| - return result;
|
| + @failingTest
|
| + void test_parseTypeAlias_genericFunction_noReturnType() {
|
| + createParser('typedef F = Function();');
|
| + GenericTypeAlias typeAlias = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(typeAlias);
|
| + listener.assertNoErrors();
|
| + expect(typeAlias.typedefKeyword, isNotNull);
|
| + expect(typeAlias.name, isNotNull);
|
| + expect(typeAlias.typeParameters, isNull);
|
| + expect(typeAlias.semicolon, isNotNull);
|
| + GenericFunctionType functionType = typeAlias.functionType;
|
| + expect(functionType, isNotNull);
|
| + expect(functionType.parameters, isNotNull);
|
| + expect(functionType.returnType, isNull);
|
| + expect(functionType.typeParameters, isNull);
|
| + }
|
| +
|
| + @failingTest
|
| + void test_parseTypeAlias_genericFunction_parameterizedReturnType() {
|
| + createParser('typedef F = A<B> Function();');
|
| + GenericTypeAlias typeAlias = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(typeAlias);
|
| + listener.assertNoErrors();
|
| + expect(typeAlias.typedefKeyword, isNotNull);
|
| + expect(typeAlias.name, isNotNull);
|
| + expect(typeAlias.typeParameters, isNull);
|
| + expect(typeAlias.semicolon, isNotNull);
|
| + GenericFunctionType functionType = typeAlias.functionType;
|
| + expect(functionType, isNotNull);
|
| + expect(functionType.parameters, isNotNull);
|
| + expect(functionType.returnType, isNotNull);
|
| + expect(functionType.typeParameters, isNull);
|
| + }
|
| +
|
| + @failingTest
|
| + void test_parseTypeAlias_genericFunction_parameters() {
|
| + createParser('typedef F = bool Function(Object value);');
|
| + GenericTypeAlias typeAlias = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(typeAlias);
|
| + listener.assertNoErrors();
|
| + expect(typeAlias.typedefKeyword, isNotNull);
|
| + expect(typeAlias.name, isNotNull);
|
| + expect(typeAlias.typeParameters, isNull);
|
| + expect(typeAlias.semicolon, isNotNull);
|
| + GenericFunctionType functionType = typeAlias.functionType;
|
| + expect(functionType, isNotNull);
|
| + expect(functionType.parameters, isNotNull);
|
| + expect(functionType.returnType, isNotNull);
|
| + expect(functionType.typeParameters, isNull);
|
| + }
|
| +
|
| + @failingTest
|
| + void test_parseTypeAlias_genericFunction_typeParameters() {
|
| + createParser('typedef F = bool Function<E>();');
|
| + GenericTypeAlias typeAlias = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(typeAlias);
|
| + listener.assertNoErrors();
|
| + expect(typeAlias.typedefKeyword, isNotNull);
|
| + expect(typeAlias.name, isNotNull);
|
| + expect(typeAlias.typeParameters, isNull);
|
| + expect(typeAlias.semicolon, isNotNull);
|
| + GenericFunctionType functionType = typeAlias.functionType;
|
| + expect(functionType, isNotNull);
|
| + expect(functionType.parameters, isNotNull);
|
| + expect(functionType.returnType, isNotNull);
|
| + expect(functionType.typeParameters, isNotNull);
|
| + }
|
| +
|
| + @failingTest
|
| + void test_parseTypeAlias_genericFunction_typeParameters_noParameters() {
|
| + createParser('typedef F<T> = bool Function();');
|
| + GenericTypeAlias typeAlias = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(typeAlias);
|
| + listener.assertNoErrors();
|
| + expect(typeAlias.typedefKeyword, isNotNull);
|
| + expect(typeAlias.name, isNotNull);
|
| + expect(typeAlias.typeParameters, isNotNull);
|
| + expect(typeAlias.semicolon, isNotNull);
|
| + GenericFunctionType functionType = typeAlias.functionType;
|
| + expect(functionType, isNotNull);
|
| + expect(functionType.parameters, isNotNull);
|
| + expect(functionType.returnType, isNotNull);
|
| + expect(functionType.typeParameters, isNull);
|
| + }
|
| +
|
| + @failingTest
|
| + void test_parseTypeAlias_genericFunction_typeParameters_noReturnType() {
|
| + createParser('typedef F<T> = Function();');
|
| + GenericTypeAlias typeAlias = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(typeAlias);
|
| + listener.assertNoErrors();
|
| + expect(typeAlias.typedefKeyword, isNotNull);
|
| + expect(typeAlias.name, isNotNull);
|
| + expect(typeAlias.typeParameters, isNotNull);
|
| + expect(typeAlias.semicolon, isNotNull);
|
| + GenericFunctionType functionType = typeAlias.functionType;
|
| + expect(functionType, isNotNull);
|
| + expect(functionType.parameters, isNotNull);
|
| + expect(functionType.returnType, isNull);
|
| + expect(functionType.typeParameters, isNull);
|
| + }
|
| +
|
| + @failingTest
|
| + void
|
| + test_parseTypeAlias_genericFunction_typeParameters_parameterizedReturnType() {
|
| + createParser('typedef F<T> = A<B> Function();');
|
| + GenericTypeAlias typeAlias = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(typeAlias);
|
| + listener.assertNoErrors();
|
| + expect(typeAlias.typedefKeyword, isNotNull);
|
| + expect(typeAlias.name, isNotNull);
|
| + expect(typeAlias.typeParameters, isNotNull);
|
| + expect(typeAlias.semicolon, isNotNull);
|
| + GenericFunctionType functionType = typeAlias.functionType;
|
| + expect(functionType, isNotNull);
|
| + expect(functionType.parameters, isNotNull);
|
| + expect(functionType.returnType, isNotNull);
|
| + expect(functionType.typeParameters, isNull);
|
| + }
|
| +
|
| + @failingTest
|
| + void test_parseTypeAlias_genericFunction_typeParameters_parameters() {
|
| + createParser('typedef F<T> = bool Function(Object value);');
|
| + GenericTypeAlias typeAlias = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(typeAlias);
|
| + listener.assertNoErrors();
|
| + expect(typeAlias.typedefKeyword, isNotNull);
|
| + expect(typeAlias.name, isNotNull);
|
| + expect(typeAlias.typeParameters, isNotNull);
|
| + expect(typeAlias.semicolon, isNotNull);
|
| + GenericFunctionType functionType = typeAlias.functionType;
|
| + expect(functionType, isNotNull);
|
| + expect(functionType.parameters, isNotNull);
|
| + expect(functionType.returnType, isNotNull);
|
| + expect(functionType.typeParameters, isNull);
|
| + }
|
| +
|
| + @failingTest
|
| + void test_parseTypeAlias_genericFunction_typeParameters_typeParameters() {
|
| + createParser('typedef F<T> = bool Function<E>();');
|
| + GenericTypeAlias typeAlias = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(typeAlias);
|
| + listener.assertNoErrors();
|
| + expect(typeAlias.typedefKeyword, isNotNull);
|
| + expect(typeAlias.name, isNotNull);
|
| + expect(typeAlias.typeParameters, isNotNull);
|
| + expect(typeAlias.semicolon, isNotNull);
|
| + GenericFunctionType functionType = typeAlias.functionType;
|
| + expect(functionType, isNotNull);
|
| + expect(functionType.parameters, isNotNull);
|
| + expect(functionType.returnType, isNotNull);
|
| + expect(functionType.typeParameters, isNotNull);
|
| + }
|
| +
|
| + @failingTest
|
| + void test_parseTypeAlias_genericFunction_typeParameters_voidReturnType() {
|
| + createParser('typedef F<T> = void Function();');
|
| + GenericTypeAlias typeAlias = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(typeAlias);
|
| + listener.assertNoErrors();
|
| + expect(typeAlias.typedefKeyword, isNotNull);
|
| + expect(typeAlias.name, isNotNull);
|
| + expect(typeAlias.typeParameters, isNotNull);
|
| + expect(typeAlias.semicolon, isNotNull);
|
| + GenericFunctionType functionType = typeAlias.functionType;
|
| + expect(functionType, isNotNull);
|
| + expect(functionType.parameters, isNotNull);
|
| + expect(functionType.returnType, isNotNull);
|
| + expect(functionType.typeParameters, isNull);
|
| + }
|
| +
|
| + @failingTest
|
| + void test_parseTypeAlias_genericFunction_voidReturnType() {
|
| + createParser('typedef F = void Function();');
|
| + GenericTypeAlias typeAlias = parseFullCompilationUnitMember();
|
| + expectNotNullIfNoErrors(typeAlias);
|
| + listener.assertNoErrors();
|
| + expect(typeAlias.typedefKeyword, isNotNull);
|
| + expect(typeAlias.name, isNotNull);
|
| + expect(typeAlias.typeParameters, isNull);
|
| + expect(typeAlias.semicolon, isNotNull);
|
| + GenericFunctionType functionType = typeAlias.functionType;
|
| + expect(functionType, isNotNull);
|
| + expect(functionType.parameters, isNotNull);
|
| + expect(functionType.returnType, isNotNull);
|
| + expect(functionType.typeParameters, isNull);
|
| }
|
|
|
| /**
|
|
|