| 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 e2105ac0c75e77ca86fef06df7f5616ccaf63817..d6e5e3d4ee2b77e521398bc55582cc8c1643d69f 100644
|
| --- a/pkg/analyzer/test/generated/parser_test.dart
|
| +++ b/pkg/analyzer/test/generated/parser_test.dart
|
| @@ -25,6 +25,7 @@ import 'test_support.dart';
|
|
|
| main() {
|
| defineReflectiveSuite(() {
|
| + defineReflectiveTests(ClassMemberParserTest);
|
| defineReflectiveTests(ComplexParserTest);
|
| defineReflectiveTests(ErrorParserTest);
|
| defineReflectiveTests(FormalParameterParserTest);
|
| @@ -40,6 +41,8 @@ main() {
|
| * which parser is used.
|
| */
|
| abstract class AbstractParserTestCase implements ParserTestHelpers {
|
| + void set enableAssertInitializer(bool value);
|
| +
|
| void set enableGenericMethodComments(bool value);
|
|
|
| void set enableNnbd(bool value);
|
| @@ -197,121 +200,1077 @@ class AstValidator extends UnifyingAstVisitor<Object> {
|
| }
|
| }
|
|
|
| -/**
|
| - * Tests of the analyzer parser based on [ComplexParserTestMixin].
|
| - */
|
| @reflectiveTest
|
| -class ComplexParserTest extends ParserTestCase with ComplexParserTestMixin {}
|
| +class ClassMemberParserTest extends ParserTestCase
|
| + with ClassMemberParserTestMixin {}
|
|
|
| /**
|
| - * The class `ComplexParserTest` defines parser tests that test the parsing of more complex
|
| - * code fragments or the interactions between multiple parsing methods. For example, tests to ensure
|
| - * that the precedence of operations is being handled correctly should be defined in this class.
|
| - *
|
| - * Simpler tests should be defined in the class [SimpleParserTest].
|
| + * Tests which exercise the parser using a class member.
|
| */
|
| -abstract class ComplexParserTestMixin implements AbstractParserTestCase {
|
| - void test_additiveExpression_normal() {
|
| - BinaryExpression expression = parseExpression("x + y - z");
|
| - EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
|
| - BinaryExpression, expression.leftOperand);
|
| +abstract class ClassMemberParserTestMixin implements AbstractParserTestCase {
|
| + void test_constFactory() {
|
| + createParser('const factory C() = A;');
|
| + ClassMember member = parser.parseClassMember('C');
|
| + expect(member, isNotNull);
|
| + assertNoErrors();
|
| }
|
|
|
| - void test_additiveExpression_noSpaces() {
|
| - BinaryExpression expression = parseExpression("i+1");
|
| - EngineTestCase.assertInstanceOf((obj) => obj is SimpleIdentifier,
|
| - SimpleIdentifier, expression.leftOperand);
|
| - EngineTestCase.assertInstanceOf((obj) => obj is IntegerLiteral,
|
| - IntegerLiteral, expression.rightOperand);
|
| + void test_parseAwaitExpression_asStatement_inAsync() {
|
| + createParser('m() async { await x; }');
|
| + ClassMember member = parser.parseClassMember('C');
|
| + expect(member, isNotNull);
|
| + assertNoErrors();
|
| + expect(member, new isInstanceOf<MethodDeclaration>());
|
| + MethodDeclaration method = member;
|
| + FunctionBody body = method.body;
|
| + EngineTestCase.assertInstanceOf(
|
| + (obj) => obj is BlockFunctionBody, BlockFunctionBody, body);
|
| + Statement statement = (body as BlockFunctionBody).block.statements[0];
|
| + EngineTestCase.assertInstanceOf(
|
| + (obj) => obj is ExpressionStatement, ExpressionStatement, statement);
|
| + Expression expression = (statement as ExpressionStatement).expression;
|
| + EngineTestCase.assertInstanceOf(
|
| + (obj) => obj is AwaitExpression, AwaitExpression, expression);
|
| + expect((expression as AwaitExpression).awaitKeyword, isNotNull);
|
| + expect((expression as AwaitExpression).expression, isNotNull);
|
| }
|
|
|
| - void test_additiveExpression_precedence_multiplicative_left() {
|
| - BinaryExpression expression = parseExpression("x * y + z");
|
| - EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
|
| - BinaryExpression, expression.leftOperand);
|
| + void test_parseAwaitExpression_asStatement_inSync() {
|
| + createParser('m() { await x; }');
|
| + ClassMember member = parser.parseClassMember('C');
|
| + expect(member, isNotNull);
|
| + assertNoErrors();
|
| + expect(member, new isInstanceOf<MethodDeclaration>());
|
| + MethodDeclaration method = member;
|
| + FunctionBody body = method.body;
|
| + EngineTestCase.assertInstanceOf(
|
| + (obj) => obj is BlockFunctionBody, BlockFunctionBody, body);
|
| + Statement statement = (body as BlockFunctionBody).block.statements[0];
|
| + EngineTestCase.assertInstanceOf(
|
| + (obj) => obj is VariableDeclarationStatement,
|
| + VariableDeclarationStatement,
|
| + statement);
|
| }
|
|
|
| - void test_additiveExpression_precedence_multiplicative_left_withSuper() {
|
| - BinaryExpression expression = parseExpression("super * y - z");
|
| - EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
|
| - BinaryExpression, expression.leftOperand);
|
| + @failingTest
|
| + void test_parseAwaitExpression_inSync() {
|
| + // This test requires better error recovery than we currently have. In
|
| + // particular, we need to be able to distinguish between an await expression
|
| + // in the wrong context, and the use of 'await' as an identifier.
|
| + createParser('m() { return await x + await y; }');
|
| + MethodDeclaration method = parser.parseClassMember('C');
|
| + expect(method, isNotNull);
|
| + assertNoErrors();
|
| + FunctionBody body = method.body;
|
| + EngineTestCase.assertInstanceOf(
|
| + (obj) => obj is BlockFunctionBody, BlockFunctionBody, body);
|
| + Statement statement = (body as BlockFunctionBody).block.statements[0];
|
| + EngineTestCase.assertInstanceOf(
|
| + (obj) => obj is ReturnStatement, ReturnStatement, statement);
|
| + Expression expression = (statement as ReturnStatement).expression;
|
| + EngineTestCase.assertInstanceOf(
|
| + (obj) => obj is BinaryExpression, BinaryExpression, expression);
|
| + EngineTestCase.assertInstanceOf((obj) => obj is AwaitExpression,
|
| + AwaitExpression, (expression as BinaryExpression).leftOperand);
|
| + EngineTestCase.assertInstanceOf((obj) => obj is AwaitExpression,
|
| + AwaitExpression, (expression as BinaryExpression).rightOperand);
|
| }
|
|
|
| - void test_additiveExpression_precedence_multiplicative_right() {
|
| - BinaryExpression expression = parseExpression("x + y * z");
|
| - EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
|
| - BinaryExpression, expression.rightOperand);
|
| + 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');
|
| + expect(member, isNotNull);
|
| + 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_additiveExpression_super() {
|
| - BinaryExpression expression = parseExpression("super + y - z");
|
| - EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
|
| - BinaryExpression, expression.leftOperand);
|
| + void test_parseClassMember_field_covariant() {
|
| + createParser('covariant T f;');
|
| + ClassMember member = parser.parseClassMember('C');
|
| + expect(member, isNotNull);
|
| + 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_assignableExpression_arguments_normal_chain() {
|
| - PropertyAccess propertyAccess1 = parseExpression("a(b)(c).d(e).f");
|
| - expect(propertyAccess1.propertyName.name, "f");
|
| - //
|
| - // a(b)(c).d(e)
|
| - //
|
| - MethodInvocation invocation2 = EngineTestCase.assertInstanceOf(
|
| - (obj) => obj is MethodInvocation,
|
| - MethodInvocation,
|
| - propertyAccess1.target);
|
| - expect(invocation2.methodName.name, "d");
|
| - expect(invocation2.typeArguments, isNull);
|
| - ArgumentList argumentList2 = invocation2.argumentList;
|
| - expect(argumentList2, isNotNull);
|
| - expect(argumentList2.arguments, hasLength(1));
|
| - //
|
| - // a(b)(c)
|
| - //
|
| - FunctionExpressionInvocation invocation3 = EngineTestCase.assertInstanceOf(
|
| - (obj) => obj is FunctionExpressionInvocation,
|
| - FunctionExpressionInvocation,
|
| - invocation2.target);
|
| - expect(invocation3.typeArguments, isNull);
|
| - ArgumentList argumentList3 = invocation3.argumentList;
|
| - expect(argumentList3, isNotNull);
|
| - expect(argumentList3.arguments, hasLength(1));
|
| - //
|
| - // a(b)
|
| - //
|
| - MethodInvocation invocation4 = EngineTestCase.assertInstanceOf(
|
| - (obj) => obj is MethodInvocation,
|
| - MethodInvocation,
|
| - invocation3.function);
|
| - expect(invocation4.methodName.name, "a");
|
| - expect(invocation4.typeArguments, isNull);
|
| - ArgumentList argumentList4 = invocation4.argumentList;
|
| - expect(argumentList4, isNotNull);
|
| - expect(argumentList4.arguments, hasLength(1));
|
| + void test_parseClassMember_field_instance_prefixedType() {
|
| + createParser('p.A f;');
|
| + ClassMember member = parser.parseClassMember('C');
|
| + expect(member, isNotNull);
|
| + 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_assignableExpression_arguments_normal_chain_typeArgumentComments() {
|
| - enableGenericMethodComments = true;
|
| - _validate_assignableExpression_arguments_normal_chain_typeArguments(
|
| - "a/*<E>*/(b)/*<F>*/(c).d/*<G>*/(e).f");
|
| + void test_parseClassMember_field_namedGet() {
|
| + createParser('var get;');
|
| + ClassMember member = parser.parseClassMember('C');
|
| + expect(member, isNotNull);
|
| + 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_assignableExpression_arguments_normal_chain_typeArguments() {
|
| - _validate_assignableExpression_arguments_normal_chain_typeArguments(
|
| - "a<E>(b)<F>(c).d<G>(e).f");
|
| + void test_parseClassMember_field_namedOperator() {
|
| + createParser('var operator;');
|
| + ClassMember member = parser.parseClassMember('C');
|
| + expect(member, isNotNull);
|
| + 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_assignmentExpression_compound() {
|
| - AssignmentExpression expression = parseExpression("x = y = 0");
|
| - EngineTestCase.assertInstanceOf((obj) => obj is SimpleIdentifier,
|
| - SimpleIdentifier, expression.leftHandSide);
|
| - EngineTestCase.assertInstanceOf((obj) => obj is AssignmentExpression,
|
| - AssignmentExpression, expression.rightHandSide);
|
| + void test_parseClassMember_field_namedOperator_withAssignment() {
|
| + createParser('var operator = (5);');
|
| + ClassMember member = parser.parseClassMember('C');
|
| + expect(member, isNotNull);
|
| + 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_assignmentExpression_indexExpression() {
|
| - AssignmentExpression expression = parseExpression("x[1] = 0");
|
| - EngineTestCase.assertInstanceOf((obj) => obj is IndexExpression,
|
| - IndexExpression, expression.leftHandSide);
|
| + void test_parseClassMember_field_namedSet() {
|
| + createParser('var set;');
|
| + ClassMember member = parser.parseClassMember('C');
|
| + expect(member, isNotNull);
|
| + 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_static() {
|
| + createParser('static A f;');
|
| + ClassMember member = parser.parseClassMember('C');
|
| + expect(member, isNotNull);
|
| + 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, isNotNull);
|
| + 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_getter_functionType() {
|
| + createParser('int Function(int) get g {}');
|
| + ClassMember member = parser.parseClassMember('C');
|
| + expect(member, isNotNull);
|
| + assertNoErrors();
|
| + expect(member, new isInstanceOf<MethodDeclaration>());
|
| + MethodDeclaration method = member;
|
| + expect(method.documentationComment, isNull);
|
| + expect(method.externalKeyword, isNull);
|
| + expect(method.modifierKeyword, isNull);
|
| + expect(method.propertyKeyword, isNotNull);
|
| + expect(method.returnType, isNotNull);
|
| + expect(method.name, isNotNull);
|
| + expect(method.operatorKeyword, isNull);
|
| + expect(method.body, isNotNull);
|
| + expect(method.parameters, isNull);
|
| + }
|
| +
|
| + void test_parseClassMember_getter_void() {
|
| + createParser('void get g {}');
|
| + ClassMember member = parser.parseClassMember('C');
|
| + expect(member, isNotNull);
|
| + assertNoErrors();
|
| + expect(member, new isInstanceOf<MethodDeclaration>());
|
| + MethodDeclaration method = member;
|
| + expect(method.documentationComment, isNull);
|
| + expect(method.externalKeyword, isNull);
|
| + expect(method.modifierKeyword, isNull);
|
| + expect(method.propertyKeyword, isNotNull);
|
| + expect(method.returnType, isNotNull);
|
| + expect(method.name, isNotNull);
|
| + expect(method.operatorKeyword, isNull);
|
| + expect(method.body, isNotNull);
|
| + expect(method.parameters, isNull);
|
| + }
|
| +
|
| + void test_parseClassMember_method_external() {
|
| + createParser('external m();');
|
| + ClassMember member = parser.parseClassMember('C');
|
| + expect(member, isNotNull);
|
| + assertNoErrors();
|
| + expect(member, new isInstanceOf<MethodDeclaration>());
|
| + MethodDeclaration method = member;
|
| + expect(method.body, isNotNull);
|
| + expect(method.documentationComment, isNull);
|
| + expect(method.externalKeyword, isNotNull);
|
| + expect(method.modifierKeyword, isNull);
|
| + expect(method.name, isNotNull);
|
| + expect(method.operatorKeyword, isNull);
|
| + expect(method.typeParameters, isNull);
|
| + expect(method.parameters, isNotNull);
|
| + expect(method.propertyKeyword, isNull);
|
| + expect(method.returnType, isNull);
|
| + }
|
| +
|
| + void test_parseClassMember_method_external_withTypeAndArgs() {
|
| + createParser('external int m(int a);');
|
| + ClassMember member = parser.parseClassMember('C');
|
| + expect(member, isNotNull);
|
| + assertNoErrors();
|
| + expect(member, new isInstanceOf<MethodDeclaration>());
|
| + MethodDeclaration method = member;
|
| + expect(method.body, isNotNull);
|
| + expect(method.documentationComment, isNull);
|
| + expect(method.externalKeyword, isNotNull);
|
| + expect(method.modifierKeyword, isNull);
|
| + expect(method.name, isNotNull);
|
| + expect(method.operatorKeyword, isNull);
|
| + expect(method.typeParameters, isNull);
|
| + expect(method.parameters, isNotNull);
|
| + expect(method.propertyKeyword, isNull);
|
| + expect(method.returnType, isNotNull);
|
| + }
|
| +
|
| + void test_parseClassMember_method_generic_comment_noReturnType() {
|
| + enableGenericMethodComments = true;
|
| + createParser('m/*<T>*/() {}');
|
| + ClassMember member = parser.parseClassMember('C');
|
| + expect(member, isNotNull);
|
| + assertNoErrors();
|
| + expect(member, new isInstanceOf<MethodDeclaration>());
|
| + MethodDeclaration method = member;
|
| + expect(method.documentationComment, isNull);
|
| + expect(method.externalKeyword, isNull);
|
| + expect(method.modifierKeyword, isNull);
|
| + expect(method.propertyKeyword, isNull);
|
| + expect(method.returnType, isNull);
|
| + expect(method.name, isNotNull);
|
| + expect(method.operatorKeyword, isNull);
|
| + expect(method.typeParameters, isNotNull);
|
| + expect(method.parameters, isNotNull);
|
| + expect(method.body, isNotNull);
|
| + }
|
| +
|
| + void test_parseClassMember_method_generic_comment_returnType() {
|
| + enableGenericMethodComments = true;
|
| + createParser('/*=T*/ m/*<T>*/() {}');
|
| + ClassMember member = parser.parseClassMember('C');
|
| + expect(member, isNotNull);
|
| + assertNoErrors();
|
| + expect(member, new isInstanceOf<MethodDeclaration>());
|
| + MethodDeclaration method = member;
|
| + expect(method.documentationComment, isNull);
|
| + expect(method.externalKeyword, isNull);
|
| + expect(method.modifierKeyword, isNull);
|
| + expect(method.propertyKeyword, isNull);
|
| + expect((method.returnType as TypeName).name.name, 'T');
|
| + expect(method.name, isNotNull);
|
| + expect(method.operatorKeyword, isNull);
|
| + expect(method.typeParameters, isNotNull);
|
| + expect(method.parameters, isNotNull);
|
| + expect(method.body, isNotNull);
|
| + }
|
| +
|
| + void test_parseClassMember_method_generic_comment_returnType_bound() {
|
| + enableGenericMethodComments = true;
|
| + createParser('num/*=T*/ m/*<T extends num>*/() {}');
|
| + ClassMember member = parser.parseClassMember('C');
|
| + expect(member, isNotNull);
|
| + assertNoErrors();
|
| + expect(member, new isInstanceOf<MethodDeclaration>());
|
| + MethodDeclaration method = member;
|
| + expect(method.documentationComment, isNull);
|
| + expect(method.externalKeyword, isNull);
|
| + expect(method.modifierKeyword, isNull);
|
| + expect(method.propertyKeyword, isNull);
|
| + expect((method.returnType as TypeName).name.name, 'T');
|
| + expect(method.name, isNotNull);
|
| + expect(method.operatorKeyword, isNull);
|
| + expect(method.typeParameters, isNotNull);
|
| + TypeParameter tp = method.typeParameters.typeParameters[0];
|
| + expect(tp.name.name, 'T');
|
| + expect(tp.extendsKeyword, isNotNull);
|
| + expect((tp.bound as TypeName).name.name, 'num');
|
| + expect(method.parameters, isNotNull);
|
| + expect(method.body, isNotNull);
|
| + }
|
| +
|
| + void test_parseClassMember_method_generic_comment_void() {
|
| + enableGenericMethodComments = true;
|
| + createParser('void m/*<T>*/() {}');
|
| + ClassMember member = parser.parseClassMember('C');
|
| + expect(member, isNotNull);
|
| + assertNoErrors();
|
| + expect(member, new isInstanceOf<MethodDeclaration>());
|
| + MethodDeclaration method = member;
|
| + expect(method.documentationComment, isNull);
|
| + expect(method.externalKeyword, isNull);
|
| + expect(method.modifierKeyword, isNull);
|
| + expect(method.propertyKeyword, isNull);
|
| + expect(method.returnType, isNotNull);
|
| + expect(method.name, isNotNull);
|
| + expect(method.operatorKeyword, isNull);
|
| + expect(method.typeParameters, isNotNull);
|
| + expect(method.parameters, isNotNull);
|
| + expect(method.body, isNotNull);
|
| + }
|
| +
|
| + void test_parseClassMember_method_generic_noReturnType() {
|
| + createParser('m<T>() {}');
|
| + ClassMember member = parser.parseClassMember('C');
|
| + expect(member, isNotNull);
|
| + assertNoErrors();
|
| + expect(member, new isInstanceOf<MethodDeclaration>());
|
| + MethodDeclaration method = member;
|
| + expect(method.documentationComment, isNull);
|
| + expect(method.externalKeyword, isNull);
|
| + expect(method.modifierKeyword, isNull);
|
| + expect(method.propertyKeyword, isNull);
|
| + expect(method.returnType, isNull);
|
| + expect(method.name, isNotNull);
|
| + expect(method.operatorKeyword, isNull);
|
| + expect(method.typeParameters, isNotNull);
|
| + expect(method.parameters, isNotNull);
|
| + expect(method.body, isNotNull);
|
| + }
|
| +
|
| + void test_parseClassMember_method_generic_returnType() {
|
| + createParser('T m<T>() {}');
|
| + ClassMember member = parser.parseClassMember('C');
|
| + expect(member, isNotNull);
|
| + assertNoErrors();
|
| + expect(member, new isInstanceOf<MethodDeclaration>());
|
| + MethodDeclaration method = member;
|
| + expect(method.documentationComment, isNull);
|
| + expect(method.externalKeyword, isNull);
|
| + expect(method.modifierKeyword, isNull);
|
| + expect(method.propertyKeyword, isNull);
|
| + expect(method.returnType, isNotNull);
|
| + expect(method.name, isNotNull);
|
| + expect(method.operatorKeyword, isNull);
|
| + expect(method.typeParameters, isNotNull);
|
| + expect(method.parameters, isNotNull);
|
| + expect(method.body, isNotNull);
|
| + }
|
| +
|
| + void test_parseClassMember_method_generic_void() {
|
| + createParser('void m<T>() {}');
|
| + ClassMember member = parser.parseClassMember('C');
|
| + expect(member, isNotNull);
|
| + assertNoErrors();
|
| + expect(member, new isInstanceOf<MethodDeclaration>());
|
| + MethodDeclaration method = member;
|
| + expect(method.documentationComment, isNull);
|
| + expect(method.externalKeyword, isNull);
|
| + expect(method.modifierKeyword, isNull);
|
| + expect(method.propertyKeyword, isNull);
|
| + expect(method.returnType, isNotNull);
|
| + expect(method.name, isNotNull);
|
| + expect(method.operatorKeyword, isNull);
|
| + expect(method.typeParameters, isNotNull);
|
| + expect(method.parameters, isNotNull);
|
| + expect(method.body, isNotNull);
|
| + }
|
| +
|
| + void test_parseClassMember_method_get_noType() {
|
| + createParser('get() {}');
|
| + ClassMember member = parser.parseClassMember('C');
|
| + expect(member, isNotNull);
|
| + assertNoErrors();
|
| + expect(member, new isInstanceOf<MethodDeclaration>());
|
| + MethodDeclaration method = member;
|
| + expect(method.documentationComment, isNull);
|
| + expect(method.externalKeyword, isNull);
|
| + expect(method.modifierKeyword, isNull);
|
| + expect(method.propertyKeyword, isNull);
|
| + expect(method.returnType, isNull);
|
| + expect(method.name, isNotNull);
|
| + expect(method.operatorKeyword, isNull);
|
| + expect(method.typeParameters, isNull);
|
| + expect(method.parameters, isNotNull);
|
| + expect(method.body, isNotNull);
|
| + }
|
| +
|
| + void test_parseClassMember_method_get_type() {
|
| + createParser('int get() {}');
|
| + ClassMember member = parser.parseClassMember('C');
|
| + expect(member, isNotNull);
|
| + assertNoErrors();
|
| + expect(member, new isInstanceOf<MethodDeclaration>());
|
| + MethodDeclaration method = member;
|
| + expect(method.documentationComment, isNull);
|
| + expect(method.externalKeyword, isNull);
|
| + expect(method.modifierKeyword, isNull);
|
| + expect(method.propertyKeyword, isNull);
|
| + expect(method.returnType, isNotNull);
|
| + expect(method.name, isNotNull);
|
| + expect(method.operatorKeyword, isNull);
|
| + expect(method.typeParameters, isNull);
|
| + expect(method.parameters, isNotNull);
|
| + expect(method.body, isNotNull);
|
| + }
|
| +
|
| + void test_parseClassMember_method_get_void() {
|
| + createParser('void get() {}');
|
| + ClassMember member = parser.parseClassMember('C');
|
| + expect(member, isNotNull);
|
| + assertNoErrors();
|
| + expect(member, new isInstanceOf<MethodDeclaration>());
|
| + MethodDeclaration method = member;
|
| + expect(method.documentationComment, isNull);
|
| + expect(method.externalKeyword, isNull);
|
| + expect(method.modifierKeyword, isNull);
|
| + expect(method.propertyKeyword, isNull);
|
| + expect(method.returnType, isNotNull);
|
| + expect(method.name, isNotNull);
|
| + expect(method.operatorKeyword, isNull);
|
| + expect(method.typeParameters, isNull);
|
| + expect(method.parameters, isNotNull);
|
| + expect(method.body, isNotNull);
|
| + }
|
| +
|
| + void test_parseClassMember_method_operator_noType() {
|
| + createParser('operator() {}');
|
| + ClassMember member = parser.parseClassMember('C');
|
| + expect(member, isNotNull);
|
| + assertNoErrors();
|
| + expect(member, new isInstanceOf<MethodDeclaration>());
|
| + MethodDeclaration method = member;
|
| + expect(method.documentationComment, isNull);
|
| + expect(method.externalKeyword, isNull);
|
| + expect(method.modifierKeyword, isNull);
|
| + expect(method.propertyKeyword, isNull);
|
| + expect(method.returnType, isNull);
|
| + expect(method.name, isNotNull);
|
| + expect(method.operatorKeyword, isNull);
|
| + expect(method.typeParameters, isNull);
|
| + expect(method.parameters, isNotNull);
|
| + expect(method.body, isNotNull);
|
| + }
|
| +
|
| + void test_parseClassMember_method_operator_type() {
|
| + createParser('int operator() {}');
|
| + ClassMember member = parser.parseClassMember('C');
|
| + expect(member, isNotNull);
|
| + assertNoErrors();
|
| + expect(member, new isInstanceOf<MethodDeclaration>());
|
| + MethodDeclaration method = member;
|
| + expect(method.documentationComment, isNull);
|
| + expect(method.externalKeyword, isNull);
|
| + expect(method.modifierKeyword, isNull);
|
| + expect(method.propertyKeyword, isNull);
|
| + expect(method.returnType, isNotNull);
|
| + expect(method.name, isNotNull);
|
| + expect(method.operatorKeyword, isNull);
|
| + expect(method.typeParameters, isNull);
|
| + expect(method.parameters, isNotNull);
|
| + expect(method.body, isNotNull);
|
| + }
|
| +
|
| + void test_parseClassMember_method_operator_void() {
|
| + createParser('void operator() {}');
|
| + ClassMember member = parser.parseClassMember('C');
|
| + expect(member, isNotNull);
|
| + assertNoErrors();
|
| + expect(member, new isInstanceOf<MethodDeclaration>());
|
| + MethodDeclaration method = member;
|
| + expect(method.documentationComment, isNull);
|
| + expect(method.externalKeyword, isNull);
|
| + expect(method.modifierKeyword, isNull);
|
| + expect(method.propertyKeyword, isNull);
|
| + expect(method.returnType, isNotNull);
|
| + expect(method.name, isNotNull);
|
| + expect(method.operatorKeyword, isNull);
|
| + expect(method.typeParameters, isNull);
|
| + expect(method.parameters, isNotNull);
|
| + expect(method.body, isNotNull);
|
| + }
|
| +
|
| + void test_parseClassMember_method_returnType_functionType() {
|
| + createParser('int Function(String) m() {}');
|
| + ClassMember member = parser.parseClassMember('C');
|
| + expect(member, isNotNull);
|
| + assertNoErrors();
|
| + expect(member, new isInstanceOf<MethodDeclaration>());
|
| + MethodDeclaration method = member;
|
| + expect(method.documentationComment, isNull);
|
| + expect(method.externalKeyword, isNull);
|
| + expect(method.modifierKeyword, isNull);
|
| + expect(method.propertyKeyword, isNull);
|
| + expect(method.returnType, isNotNull);
|
| + expect(method.name, isNotNull);
|
| + expect(method.name.name, 'm');
|
| + expect(method.operatorKeyword, isNull);
|
| + expect(method.typeParameters, isNull);
|
| + expect(method.parameters, isNotNull);
|
| + expect(method.body, isNotNull);
|
| + }
|
| +
|
| + void test_parseClassMember_method_returnType_parameterized() {
|
| + createParser('p.A m() {}');
|
| + ClassMember member = parser.parseClassMember('C');
|
| + expect(member, isNotNull);
|
| + assertNoErrors();
|
| + expect(member, new isInstanceOf<MethodDeclaration>());
|
| + MethodDeclaration method = member;
|
| + expect(method.documentationComment, isNull);
|
| + expect(method.externalKeyword, isNull);
|
| + expect(method.modifierKeyword, isNull);
|
| + expect(method.propertyKeyword, isNull);
|
| + expect(method.returnType, isNotNull);
|
| + expect(method.name, isNotNull);
|
| + expect(method.operatorKeyword, isNull);
|
| + expect(method.typeParameters, isNull);
|
| + expect(method.parameters, isNotNull);
|
| + expect(method.body, isNotNull);
|
| + }
|
| +
|
| + void test_parseClassMember_method_set_noType() {
|
| + createParser('set() {}');
|
| + ClassMember member = parser.parseClassMember('C');
|
| + expect(member, isNotNull);
|
| + assertNoErrors();
|
| + expect(member, new isInstanceOf<MethodDeclaration>());
|
| + MethodDeclaration method = member;
|
| + expect(method.documentationComment, isNull);
|
| + expect(method.externalKeyword, isNull);
|
| + expect(method.modifierKeyword, isNull);
|
| + expect(method.propertyKeyword, isNull);
|
| + expect(method.returnType, isNull);
|
| + expect(method.name, isNotNull);
|
| + expect(method.operatorKeyword, isNull);
|
| + expect(method.typeParameters, isNull);
|
| + expect(method.parameters, isNotNull);
|
| + expect(method.body, isNotNull);
|
| + }
|
| +
|
| + void test_parseClassMember_method_set_type() {
|
| + createParser('int set() {}');
|
| + ClassMember member = parser.parseClassMember('C');
|
| + expect(member, isNotNull);
|
| + assertNoErrors();
|
| + expect(member, new isInstanceOf<MethodDeclaration>());
|
| + MethodDeclaration method = member;
|
| + expect(method.documentationComment, isNull);
|
| + expect(method.externalKeyword, isNull);
|
| + expect(method.modifierKeyword, isNull);
|
| + expect(method.propertyKeyword, isNull);
|
| + expect(method.returnType, isNotNull);
|
| + expect(method.name, isNotNull);
|
| + expect(method.operatorKeyword, isNull);
|
| + expect(method.typeParameters, isNull);
|
| + expect(method.parameters, isNotNull);
|
| + expect(method.body, isNotNull);
|
| + }
|
| +
|
| + void test_parseClassMember_method_set_void() {
|
| + createParser('void set() {}');
|
| + ClassMember member = parser.parseClassMember('C');
|
| + expect(member, isNotNull);
|
| + assertNoErrors();
|
| + expect(member, new isInstanceOf<MethodDeclaration>());
|
| + MethodDeclaration method = member;
|
| + expect(method.documentationComment, isNull);
|
| + expect(method.externalKeyword, isNull);
|
| + expect(method.modifierKeyword, isNull);
|
| + expect(method.propertyKeyword, isNull);
|
| + expect(method.returnType, isNotNull);
|
| + expect(method.name, isNotNull);
|
| + expect(method.operatorKeyword, isNull);
|
| + expect(method.typeParameters, isNull);
|
| + expect(method.parameters, isNotNull);
|
| + expect(method.body, isNotNull);
|
| + }
|
| +
|
| + void test_parseClassMember_method_trailing_commas() {
|
| + createParser('void f(int x, int y,) {}');
|
| + ClassMember member = parser.parseClassMember('C');
|
| + expect(member, isNotNull);
|
| + assertNoErrors();
|
| + expect(member, new isInstanceOf<MethodDeclaration>());
|
| + MethodDeclaration method = member;
|
| + expect(method.documentationComment, isNull);
|
| + expect(method.externalKeyword, isNull);
|
| + expect(method.modifierKeyword, isNull);
|
| + expect(method.propertyKeyword, isNull);
|
| + expect(method.returnType, isNotNull);
|
| + expect(method.name, isNotNull);
|
| + expect(method.operatorKeyword, isNull);
|
| + expect(method.typeParameters, isNull);
|
| + expect(method.parameters, isNotNull);
|
| + expect(method.body, isNotNull);
|
| + }
|
| +
|
| + void test_parseClassMember_operator_functionType() {
|
| + createParser('int Function() operator +(int Function() f) {}');
|
| + ClassMember member = parser.parseClassMember('C');
|
| + expect(member, isNotNull);
|
| + assertNoErrors();
|
| + expect(member, new isInstanceOf<MethodDeclaration>());
|
| + MethodDeclaration method = member;
|
| + expect(method.documentationComment, isNull);
|
| + expect(method.externalKeyword, isNull);
|
| + expect(method.modifierKeyword, isNull);
|
| + expect(method.propertyKeyword, isNull);
|
| + expect(method.returnType, new isInstanceOf<GenericFunctionType>());
|
| + expect(method.name, isNotNull);
|
| + expect(method.operatorKeyword, isNotNull);
|
| + expect(method.typeParameters, isNull);
|
| + expect(method.parameters, isNotNull);
|
| + NodeList<FormalParameter> parameters = method.parameters.parameters;
|
| + expect(parameters, hasLength(1));
|
| + expect((parameters[0] as SimpleFormalParameter).type,
|
| + new isInstanceOf<GenericFunctionType>());
|
| + expect(method.body, isNotNull);
|
| + }
|
| +
|
| + void test_parseClassMember_operator_index() {
|
| + createParser('int operator [](int i) {}');
|
| + ClassMember member = parser.parseClassMember('C');
|
| + expect(member, isNotNull);
|
| + assertNoErrors();
|
| + expect(member, new isInstanceOf<MethodDeclaration>());
|
| + MethodDeclaration method = member;
|
| + expect(method.documentationComment, isNull);
|
| + expect(method.externalKeyword, isNull);
|
| + expect(method.modifierKeyword, isNull);
|
| + expect(method.propertyKeyword, isNull);
|
| + expect(method.returnType, isNotNull);
|
| + expect(method.name, isNotNull);
|
| + expect(method.operatorKeyword, isNotNull);
|
| + expect(method.typeParameters, isNull);
|
| + expect(method.parameters, isNotNull);
|
| + expect(method.body, isNotNull);
|
| + }
|
| +
|
| + void test_parseClassMember_operator_indexAssign() {
|
| + createParser('int operator []=(int i) {}');
|
| + ClassMember member = parser.parseClassMember('C');
|
| + expect(member, isNotNull);
|
| + assertNoErrors();
|
| + expect(member, new isInstanceOf<MethodDeclaration>());
|
| + MethodDeclaration method = member;
|
| + expect(method.documentationComment, isNull);
|
| + expect(method.externalKeyword, isNull);
|
| + expect(method.modifierKeyword, isNull);
|
| + expect(method.propertyKeyword, isNull);
|
| + expect(method.returnType, isNotNull);
|
| + expect(method.name, isNotNull);
|
| + expect(method.operatorKeyword, isNotNull);
|
| + expect(method.typeParameters, isNull);
|
| + expect(method.parameters, isNotNull);
|
| + expect(method.body, isNotNull);
|
| + }
|
| +
|
| + void test_parseClassMember_redirectingFactory_const() {
|
| + createParser('const factory C() = B;');
|
| + ClassMember member = parser.parseClassMember('C');
|
| + expect(member, isNotNull);
|
| + assertNoErrors();
|
| + expect(member, new isInstanceOf<ConstructorDeclaration>());
|
| + ConstructorDeclaration constructor = member;
|
| + expect(constructor.externalKeyword, isNull);
|
| + expect(constructor.constKeyword, isNotNull);
|
| + expect(constructor.factoryKeyword, isNotNull);
|
| + expect(constructor.returnType, isNotNull);
|
| + expect(constructor.period, isNull);
|
| + expect(constructor.name, isNull);
|
| + expect(constructor.parameters, isNotNull);
|
| + expect(constructor.separator, isNotNull);
|
| + expect(constructor.initializers, hasLength(0));
|
| + expect(constructor.redirectedConstructor, isNotNull);
|
| + expect(constructor.body, isNotNull);
|
| + }
|
| +
|
| + void test_parseClassMember_redirectingFactory_nonConst() {
|
| + createParser('factory C() = B;');
|
| + ClassMember member = parser.parseClassMember('C');
|
| + expect(member, isNotNull);
|
| + assertNoErrors();
|
| + expect(member, new isInstanceOf<ConstructorDeclaration>());
|
| + ConstructorDeclaration constructor = member;
|
| + expect(constructor.externalKeyword, isNull);
|
| + expect(constructor.constKeyword, isNull);
|
| + expect(constructor.factoryKeyword, isNotNull);
|
| + expect(constructor.returnType, isNotNull);
|
| + expect(constructor.period, isNull);
|
| + expect(constructor.name, isNull);
|
| + expect(constructor.parameters, isNotNull);
|
| + expect(constructor.separator, isNotNull);
|
| + expect(constructor.initializers, hasLength(0));
|
| + expect(constructor.redirectedConstructor, isNotNull);
|
| + expect(constructor.body, isNotNull);
|
| + }
|
| +
|
| + void test_parseConstructor_assert() {
|
| + enableAssertInitializer = true;
|
| + createParser('C(x, y) : _x = x, assert (x < y), _y = y;');
|
| + ClassMember member = parser.parseClassMember('C');
|
| + expect(member, isNotNull);
|
| + 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);
|
| + }
|
| +
|
| + 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');
|
| + expect(member, isNotNull);
|
| + 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);
|
| + }
|
| +
|
| + void test_parseConstructorFieldInitializer_qualified() {
|
| + createParser('this.a = b');
|
| + ConstructorFieldInitializer initializer =
|
| + parser.parseConstructorFieldInitializer(true);
|
| + expect(initializer, isNotNull);
|
| + assertNoErrors();
|
| + expect(initializer.equals, isNotNull);
|
| + expect(initializer.expression, isNotNull);
|
| + expect(initializer.fieldName, isNotNull);
|
| + expect(initializer.thisKeyword, isNotNull);
|
| + expect(initializer.period, isNotNull);
|
| + }
|
| +
|
| + void test_parseConstructorFieldInitializer_unqualified() {
|
| + createParser('a = b');
|
| + ConstructorFieldInitializer initializer =
|
| + parser.parseConstructorFieldInitializer(false);
|
| + expect(initializer, isNotNull);
|
| + assertNoErrors();
|
| + expect(initializer.equals, isNotNull);
|
| + expect(initializer.expression, isNotNull);
|
| + expect(initializer.fieldName, isNotNull);
|
| + expect(initializer.thisKeyword, isNull);
|
| + expect(initializer.period, isNull);
|
| + }
|
| +
|
| + void test_parseGetter_nonStatic() {
|
| + createParser('/// Doc\nT get a;');
|
| + MethodDeclaration method = parser.parseClassMember('C');
|
| + expect(method, isNotNull);
|
| + 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');
|
| + }
|
| +
|
| + void test_parseGetter_static() {
|
| + createParser('/// Doc\nstatic T get a => 42;');
|
| + MethodDeclaration method = parser.parseClassMember('C');
|
| + expect(method, isNotNull);
|
| + 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_parseInitializedIdentifierList_type() {
|
| + createParser("/// Doc\nstatic T a = 1, b, c = 3;");
|
| + FieldDeclaration declaration = parser.parseClassMember('C');
|
| + expect(declaration, isNotNull);
|
| + 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);
|
| + }
|
| +
|
| + void test_parseInitializedIdentifierList_var() {
|
| + createParser('/// Doc\nstatic var a = 1, b, c = 3;');
|
| + FieldDeclaration declaration = parser.parseClassMember('C');
|
| + expect(declaration, isNotNull);
|
| + 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_parseOperator() {
|
| + createParser('/// Doc\nT operator +(A a);');
|
| + MethodDeclaration method = parser.parseClassMember('C');
|
| + expect(method, isNotNull);
|
| + 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_parseSetter_nonStatic() {
|
| + createParser('/// Doc\nT set a(var x);');
|
| + MethodDeclaration method = parser.parseClassMember('C');
|
| + expect(method, isNotNull);
|
| + 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');
|
| + expect(method, isNotNull);
|
| + 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');
|
| + }
|
| +}
|
| +
|
| +/**
|
| + * Tests of the analyzer parser based on [ComplexParserTestMixin].
|
| + */
|
| +@reflectiveTest
|
| +class ComplexParserTest extends ParserTestCase with ComplexParserTestMixin {}
|
| +
|
| +/**
|
| + * The class `ComplexParserTest` defines parser tests that test the parsing of more complex
|
| + * code fragments or the interactions between multiple parsing methods. For example, tests to ensure
|
| + * that the precedence of operations is being handled correctly should be defined in this class.
|
| + *
|
| + * Simpler tests should be defined in the class [SimpleParserTest].
|
| + */
|
| +abstract class ComplexParserTestMixin implements AbstractParserTestCase {
|
| + void test_additiveExpression_normal() {
|
| + BinaryExpression expression = parseExpression("x + y - z");
|
| + EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
|
| + BinaryExpression, expression.leftOperand);
|
| + }
|
| +
|
| + void test_additiveExpression_noSpaces() {
|
| + BinaryExpression expression = parseExpression("i+1");
|
| + EngineTestCase.assertInstanceOf((obj) => obj is SimpleIdentifier,
|
| + SimpleIdentifier, expression.leftOperand);
|
| + EngineTestCase.assertInstanceOf((obj) => obj is IntegerLiteral,
|
| + IntegerLiteral, expression.rightOperand);
|
| + }
|
| +
|
| + void test_additiveExpression_precedence_multiplicative_left() {
|
| + BinaryExpression expression = parseExpression("x * y + z");
|
| + EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
|
| + BinaryExpression, expression.leftOperand);
|
| + }
|
| +
|
| + void test_additiveExpression_precedence_multiplicative_left_withSuper() {
|
| + BinaryExpression expression = parseExpression("super * y - z");
|
| + EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
|
| + BinaryExpression, expression.leftOperand);
|
| + }
|
| +
|
| + void test_additiveExpression_precedence_multiplicative_right() {
|
| + BinaryExpression expression = parseExpression("x + y * z");
|
| + EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
|
| + BinaryExpression, expression.rightOperand);
|
| + }
|
| +
|
| + void test_additiveExpression_super() {
|
| + BinaryExpression expression = parseExpression("super + y - z");
|
| + EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
|
| + BinaryExpression, expression.leftOperand);
|
| + }
|
| +
|
| + void test_assignableExpression_arguments_normal_chain() {
|
| + PropertyAccess propertyAccess1 = parseExpression("a(b)(c).d(e).f");
|
| + expect(propertyAccess1.propertyName.name, "f");
|
| + //
|
| + // a(b)(c).d(e)
|
| + //
|
| + MethodInvocation invocation2 = EngineTestCase.assertInstanceOf(
|
| + (obj) => obj is MethodInvocation,
|
| + MethodInvocation,
|
| + propertyAccess1.target);
|
| + expect(invocation2.methodName.name, "d");
|
| + expect(invocation2.typeArguments, isNull);
|
| + ArgumentList argumentList2 = invocation2.argumentList;
|
| + expect(argumentList2, isNotNull);
|
| + expect(argumentList2.arguments, hasLength(1));
|
| + //
|
| + // a(b)(c)
|
| + //
|
| + FunctionExpressionInvocation invocation3 = EngineTestCase.assertInstanceOf(
|
| + (obj) => obj is FunctionExpressionInvocation,
|
| + FunctionExpressionInvocation,
|
| + invocation2.target);
|
| + expect(invocation3.typeArguments, isNull);
|
| + ArgumentList argumentList3 = invocation3.argumentList;
|
| + expect(argumentList3, isNotNull);
|
| + expect(argumentList3.arguments, hasLength(1));
|
| + //
|
| + // a(b)
|
| + //
|
| + MethodInvocation invocation4 = EngineTestCase.assertInstanceOf(
|
| + (obj) => obj is MethodInvocation,
|
| + MethodInvocation,
|
| + invocation3.function);
|
| + expect(invocation4.methodName.name, "a");
|
| + expect(invocation4.typeArguments, isNull);
|
| + ArgumentList argumentList4 = invocation4.argumentList;
|
| + expect(argumentList4, isNotNull);
|
| + expect(argumentList4.arguments, hasLength(1));
|
| + }
|
| +
|
| + void test_assignableExpression_arguments_normal_chain_typeArgumentComments() {
|
| + enableGenericMethodComments = true;
|
| + _validate_assignableExpression_arguments_normal_chain_typeArguments(
|
| + "a/*<E>*/(b)/*<F>*/(c).d/*<G>*/(e).f");
|
| + }
|
| +
|
| + void test_assignableExpression_arguments_normal_chain_typeArguments() {
|
| + _validate_assignableExpression_arguments_normal_chain_typeArguments(
|
| + "a<E>(b)<F>(c).d<G>(e).f");
|
| + }
|
| +
|
| + void test_assignmentExpression_compound() {
|
| + AssignmentExpression expression = parseExpression("x = y = 0");
|
| + EngineTestCase.assertInstanceOf((obj) => obj is SimpleIdentifier,
|
| + SimpleIdentifier, expression.leftHandSide);
|
| + EngineTestCase.assertInstanceOf((obj) => obj is AssignmentExpression,
|
| + AssignmentExpression, expression.rightHandSide);
|
| + }
|
| +
|
| + void test_assignmentExpression_indexExpression() {
|
| + AssignmentExpression expression = parseExpression("x[1] = 0");
|
| + EngineTestCase.assertInstanceOf((obj) => obj is IndexExpression,
|
| + IndexExpression, expression.leftHandSide);
|
| EngineTestCase.assertInstanceOf((obj) => obj is IntegerLiteral,
|
| IntegerLiteral, expression.rightHandSide);
|
| }
|
| @@ -5712,13 +6671,6 @@ class SimpleParserTest extends ParserTestCase {
|
| expect(_computeStringValue("text'''", false, true), "text");
|
| }
|
|
|
| - void test_constFactory() {
|
| - createParser('const factory C() = A;');
|
| - ClassMember member = parser.parseClassMember('C');
|
| - expectNotNullIfNoErrors(member);
|
| - listener.assertNoErrors();
|
| - }
|
| -
|
| void test_createSyntheticIdentifier() {
|
| createParser('');
|
| SimpleIdentifier identifier = parser.createSyntheticIdentifier();
|
| @@ -5757,1880 +6709,1119 @@ class SimpleParserTest extends ParserTestCase {
|
| expect(_isFunctionDeclaration("C f() => e"), isTrue);
|
| }
|
|
|
| - void test_isFunctionDeclaration_normalReturn_typeParameters_block() {
|
| - expect(_isFunctionDeclaration("C f<E>() {}"), isTrue);
|
| - }
|
| -
|
| - void test_isFunctionDeclaration_normalReturn_typeParameters_expression() {
|
| - expect(_isFunctionDeclaration("C f<E>() => e"), isTrue);
|
| - }
|
| -
|
| - void test_isFunctionDeclaration_voidReturn_block() {
|
| - expect(_isFunctionDeclaration("void f() {}"), isTrue);
|
| - }
|
| -
|
| - void test_isFunctionDeclaration_voidReturn_expression() {
|
| - expect(_isFunctionDeclaration("void f() => e"), isTrue);
|
| - }
|
| -
|
| - void test_isFunctionDeclaration_voidReturn_typeParameters_block() {
|
| - expect(_isFunctionDeclaration("void f<E>() {}"), isTrue);
|
| - }
|
| -
|
| - void test_isFunctionDeclaration_voidReturn_typeParameters_expression() {
|
| - expect(_isFunctionDeclaration("void f<E>() => e"), isTrue);
|
| - }
|
| -
|
| - void test_isFunctionExpression_false_noBody() {
|
| - expect(_isFunctionExpression("f();"), isFalse);
|
| - }
|
| -
|
| - void test_isFunctionExpression_false_notParameters() {
|
| - expect(_isFunctionExpression("(a + b) {"), isFalse);
|
| - }
|
| -
|
| - void test_isFunctionExpression_noParameters_block() {
|
| - expect(_isFunctionExpression("() {}"), isTrue);
|
| - }
|
| -
|
| - void test_isFunctionExpression_noParameters_expression() {
|
| - expect(_isFunctionExpression("() => e"), isTrue);
|
| - }
|
| -
|
| - void test_isFunctionExpression_noParameters_typeParameters_block() {
|
| - expect(_isFunctionExpression("<E>() {}"), isTrue);
|
| - }
|
| -
|
| - void test_isFunctionExpression_noParameters_typeParameters_expression() {
|
| - expect(_isFunctionExpression("<E>() => e"), isTrue);
|
| - }
|
| -
|
| - void test_isFunctionExpression_parameter_final() {
|
| - expect(_isFunctionExpression("(final a) {}"), isTrue);
|
| - expect(_isFunctionExpression("(final a, b) {}"), isTrue);
|
| - expect(_isFunctionExpression("(final a, final b) {}"), isTrue);
|
| - }
|
| -
|
| - void test_isFunctionExpression_parameter_final_typed() {
|
| - expect(_isFunctionExpression("(final int a) {}"), isTrue);
|
| - expect(_isFunctionExpression("(final prefix.List a) {}"), isTrue);
|
| - expect(_isFunctionExpression("(final List<int> a) {}"), isTrue);
|
| - expect(_isFunctionExpression("(final prefix.List<int> a) {}"), isTrue);
|
| - }
|
| -
|
| - void test_isFunctionExpression_parameter_multiple() {
|
| - expect(_isFunctionExpression("(a, b) {}"), isTrue);
|
| - }
|
| -
|
| - void test_isFunctionExpression_parameter_named() {
|
| - expect(_isFunctionExpression("({a}) {}"), isTrue);
|
| - }
|
| -
|
| - void test_isFunctionExpression_parameter_optional() {
|
| - expect(_isFunctionExpression("([a]) {}"), isTrue);
|
| - }
|
| -
|
| - void test_isFunctionExpression_parameter_single() {
|
| - expect(_isFunctionExpression("(a) {}"), isTrue);
|
| - }
|
| -
|
| - void test_isFunctionExpression_parameter_typed() {
|
| - expect(_isFunctionExpression("(int a, int b) {}"), isTrue);
|
| - }
|
| -
|
| - void test_isInitializedVariableDeclaration_assignment() {
|
| - expect(_isInitializedVariableDeclaration("a = null;"), isFalse);
|
| - }
|
| -
|
| - void test_isInitializedVariableDeclaration_comparison() {
|
| - expect(_isInitializedVariableDeclaration("a < 0;"), isFalse);
|
| - }
|
| -
|
| - void test_isInitializedVariableDeclaration_conditional() {
|
| - expect(_isInitializedVariableDeclaration("a == null ? init() : update();"),
|
| - isFalse);
|
| - }
|
| -
|
| - void test_isInitializedVariableDeclaration_const_noType_initialized() {
|
| - expect(_isInitializedVariableDeclaration("const a = 0;"), isTrue);
|
| - }
|
| -
|
| - void test_isInitializedVariableDeclaration_const_noType_uninitialized() {
|
| - expect(_isInitializedVariableDeclaration("const a;"), isTrue);
|
| - }
|
| -
|
| - void test_isInitializedVariableDeclaration_const_simpleType_uninitialized() {
|
| - expect(_isInitializedVariableDeclaration("const A a;"), isTrue);
|
| - }
|
| -
|
| - void test_isInitializedVariableDeclaration_final_noType_initialized() {
|
| - expect(_isInitializedVariableDeclaration("final a = 0;"), isTrue);
|
| - }
|
| -
|
| - void test_isInitializedVariableDeclaration_final_noType_uninitialized() {
|
| - expect(_isInitializedVariableDeclaration("final a;"), isTrue);
|
| - }
|
| -
|
| - void test_isInitializedVariableDeclaration_final_simpleType_initialized() {
|
| - expect(_isInitializedVariableDeclaration("final A a = 0;"), isTrue);
|
| - }
|
| -
|
| - void test_isInitializedVariableDeclaration_functionDeclaration_typed() {
|
| - expect(_isInitializedVariableDeclaration("A f() {};"), isFalse);
|
| - }
|
| -
|
| - void test_isInitializedVariableDeclaration_functionDeclaration_untyped() {
|
| - expect(_isInitializedVariableDeclaration("f() {};"), isFalse);
|
| - }
|
| -
|
| - void test_isInitializedVariableDeclaration_noType_initialized() {
|
| - expect(_isInitializedVariableDeclaration("var a = 0;"), isTrue);
|
| - }
|
| -
|
| - void test_isInitializedVariableDeclaration_noType_uninitialized() {
|
| - expect(_isInitializedVariableDeclaration("var a;"), isTrue);
|
| - }
|
| -
|
| - void test_isInitializedVariableDeclaration_parameterizedType_initialized() {
|
| - expect(_isInitializedVariableDeclaration("List<int> a = null;"), isTrue);
|
| - }
|
| -
|
| - void test_isInitializedVariableDeclaration_parameterizedType_uninitialized() {
|
| - expect(_isInitializedVariableDeclaration("List<int> a;"), isTrue);
|
| - }
|
| -
|
| - void test_isInitializedVariableDeclaration_simpleType_initialized() {
|
| - expect(_isInitializedVariableDeclaration("A a = 0;"), isTrue);
|
| - }
|
| -
|
| - void test_isInitializedVariableDeclaration_simpleType_uninitialized() {
|
| - expect(_isInitializedVariableDeclaration("A a;"), isTrue);
|
| - }
|
| -
|
| - void test_isSwitchMember_case_labeled() {
|
| - expect(_isSwitchMember("l1: l2: case"), isTrue);
|
| - }
|
| -
|
| - void test_isSwitchMember_case_unlabeled() {
|
| - expect(_isSwitchMember("case"), isTrue);
|
| - }
|
| -
|
| - void test_isSwitchMember_default_labeled() {
|
| - expect(_isSwitchMember("l1: l2: default"), isTrue);
|
| - }
|
| -
|
| - void test_isSwitchMember_default_unlabeled() {
|
| - expect(_isSwitchMember("default"), isTrue);
|
| - }
|
| -
|
| - void test_isSwitchMember_false() {
|
| - expect(_isSwitchMember("break;"), isFalse);
|
| - }
|
| -
|
| - void test_parseAdditiveExpression_normal() {
|
| - createParser('x + y');
|
| - Expression expression = parser.parseAdditiveExpression();
|
| - 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.PLUS);
|
| - expect(binaryExpression.rightOperand, isNotNull);
|
| - }
|
| -
|
| - void test_parseAdditiveExpression_super() {
|
| - createParser('super + y');
|
| - Expression expression = parser.parseAdditiveExpression();
|
| - 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.PLUS);
|
| - expect(binaryExpression.rightOperand, isNotNull);
|
| - }
|
| -
|
| - void test_parseAnnotation_n1() {
|
| - createParser('@A');
|
| - Annotation annotation = parser.parseAnnotation();
|
| - expectNotNullIfNoErrors(annotation);
|
| - listener.assertNoErrors();
|
| - expect(annotation.atSign, isNotNull);
|
| - expect(annotation.name, isNotNull);
|
| - expect(annotation.period, isNull);
|
| - expect(annotation.constructorName, isNull);
|
| - expect(annotation.arguments, isNull);
|
| - }
|
| -
|
| - void test_parseAnnotation_n1_a() {
|
| - createParser('@A(x,y)');
|
| - Annotation annotation = parser.parseAnnotation();
|
| - expectNotNullIfNoErrors(annotation);
|
| - listener.assertNoErrors();
|
| - expect(annotation.atSign, isNotNull);
|
| - expect(annotation.name, isNotNull);
|
| - expect(annotation.period, isNull);
|
| - expect(annotation.constructorName, isNull);
|
| - expect(annotation.arguments, isNotNull);
|
| - }
|
| -
|
| - void test_parseAnnotation_n2() {
|
| - createParser('@A.B');
|
| - Annotation annotation = parser.parseAnnotation();
|
| - expectNotNullIfNoErrors(annotation);
|
| - listener.assertNoErrors();
|
| - expect(annotation.atSign, isNotNull);
|
| - expect(annotation.name, isNotNull);
|
| - expect(annotation.period, isNull);
|
| - expect(annotation.constructorName, isNull);
|
| - expect(annotation.arguments, isNull);
|
| + void test_isFunctionDeclaration_normalReturn_typeParameters_block() {
|
| + expect(_isFunctionDeclaration("C f<E>() {}"), isTrue);
|
| }
|
|
|
| - void test_parseAnnotation_n2_a() {
|
| - createParser('@A.B(x,y)');
|
| - Annotation annotation = parser.parseAnnotation();
|
| - expectNotNullIfNoErrors(annotation);
|
| - listener.assertNoErrors();
|
| - expect(annotation.atSign, isNotNull);
|
| - expect(annotation.name, isNotNull);
|
| - expect(annotation.period, isNull);
|
| - expect(annotation.constructorName, isNull);
|
| - expect(annotation.arguments, isNotNull);
|
| + void test_isFunctionDeclaration_normalReturn_typeParameters_expression() {
|
| + expect(_isFunctionDeclaration("C f<E>() => e"), isTrue);
|
| }
|
|
|
| - void test_parseAnnotation_n3() {
|
| - createParser('@A.B.C');
|
| - Annotation annotation = parser.parseAnnotation();
|
| - expectNotNullIfNoErrors(annotation);
|
| - listener.assertNoErrors();
|
| - expect(annotation.atSign, isNotNull);
|
| - expect(annotation.name, isNotNull);
|
| - expect(annotation.period, isNotNull);
|
| - expect(annotation.constructorName, isNotNull);
|
| - expect(annotation.arguments, isNull);
|
| + void test_isFunctionDeclaration_voidReturn_block() {
|
| + expect(_isFunctionDeclaration("void f() {}"), isTrue);
|
| }
|
|
|
| - void test_parseAnnotation_n3_a() {
|
| - createParser('@A.B.C(x,y)');
|
| - Annotation annotation = parser.parseAnnotation();
|
| - expectNotNullIfNoErrors(annotation);
|
| - listener.assertNoErrors();
|
| - expect(annotation.atSign, isNotNull);
|
| - expect(annotation.name, isNotNull);
|
| - expect(annotation.period, isNotNull);
|
| - expect(annotation.constructorName, isNotNull);
|
| - expect(annotation.arguments, isNotNull);
|
| + void test_isFunctionDeclaration_voidReturn_expression() {
|
| + expect(_isFunctionDeclaration("void f() => e"), isTrue);
|
| }
|
|
|
| - void test_parseArgument_named() {
|
| - createParser('n: x');
|
| - Expression expression = parser.parseArgument();
|
| - expectNotNullIfNoErrors(expression);
|
| - listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<NamedExpression>());
|
| - NamedExpression namedExpression = expression;
|
| - Label name = namedExpression.name;
|
| - expect(name, isNotNull);
|
| - expect(name.label, isNotNull);
|
| - expect(name.colon, isNotNull);
|
| - expect(namedExpression.expression, isNotNull);
|
| + void test_isFunctionDeclaration_voidReturn_typeParameters_block() {
|
| + expect(_isFunctionDeclaration("void f<E>() {}"), isTrue);
|
| }
|
|
|
| - void test_parseArgument_unnamed() {
|
| - String lexeme = "x";
|
| - createParser(lexeme);
|
| - Expression expression = parser.parseArgument();
|
| - expectNotNullIfNoErrors(expression);
|
| - listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<SimpleIdentifier>());
|
| - SimpleIdentifier identifier = expression;
|
| - expect(identifier.name, lexeme);
|
| + void test_isFunctionDeclaration_voidReturn_typeParameters_expression() {
|
| + expect(_isFunctionDeclaration("void f<E>() => e"), isTrue);
|
| }
|
|
|
| - void test_parseArgumentList_empty() {
|
| - createParser('()');
|
| - ArgumentList argumentList = parser.parseArgumentList();
|
| - expectNotNullIfNoErrors(argumentList);
|
| - listener.assertNoErrors();
|
| - NodeList<Expression> arguments = argumentList.arguments;
|
| - expect(arguments, hasLength(0));
|
| + void test_isFunctionExpression_false_noBody() {
|
| + expect(_isFunctionExpression("f();"), isFalse);
|
| }
|
|
|
| - void test_parseArgumentList_mixed() {
|
| - createParser('(w, x, y: y, z: z)');
|
| - ArgumentList argumentList = parser.parseArgumentList();
|
| - expectNotNullIfNoErrors(argumentList);
|
| - listener.assertNoErrors();
|
| - NodeList<Expression> arguments = argumentList.arguments;
|
| - expect(arguments, hasLength(4));
|
| + void test_isFunctionExpression_false_notParameters() {
|
| + expect(_isFunctionExpression("(a + b) {"), isFalse);
|
| }
|
|
|
| - void test_parseArgumentList_noNamed() {
|
| - createParser('(x, y, z)');
|
| - ArgumentList argumentList = parser.parseArgumentList();
|
| - expectNotNullIfNoErrors(argumentList);
|
| - listener.assertNoErrors();
|
| - NodeList<Expression> arguments = argumentList.arguments;
|
| - expect(arguments, hasLength(3));
|
| + void test_isFunctionExpression_noParameters_block() {
|
| + expect(_isFunctionExpression("() {}"), isTrue);
|
| }
|
|
|
| - void test_parseArgumentList_onlyNamed() {
|
| - createParser('(x: x, y: y)');
|
| - ArgumentList argumentList = parser.parseArgumentList();
|
| - expectNotNullIfNoErrors(argumentList);
|
| - listener.assertNoErrors();
|
| - NodeList<Expression> arguments = argumentList.arguments;
|
| - expect(arguments, hasLength(2));
|
| + void test_isFunctionExpression_noParameters_expression() {
|
| + expect(_isFunctionExpression("() => e"), isTrue);
|
| }
|
|
|
| - void test_parseArgumentList_trailing_comma() {
|
| - createParser('(x, y, z,)');
|
| - ArgumentList argumentList = parser.parseArgumentList();
|
| - expectNotNullIfNoErrors(argumentList);
|
| - listener.assertNoErrors();
|
| - NodeList<Expression> arguments = argumentList.arguments;
|
| - expect(arguments, hasLength(3));
|
| + void test_isFunctionExpression_noParameters_typeParameters_block() {
|
| + expect(_isFunctionExpression("<E>() {}"), isTrue);
|
| }
|
|
|
| - void test_parseAssertStatement() {
|
| - createParser('assert (x);');
|
| - AssertStatement statement = parser.parseAssertStatement();
|
| - expectNotNullIfNoErrors(statement);
|
| - listener.assertNoErrors();
|
| - expect(statement.assertKeyword, isNotNull);
|
| - expect(statement.leftParenthesis, isNotNull);
|
| - expect(statement.condition, isNotNull);
|
| - expect(statement.comma, isNull);
|
| - expect(statement.message, isNull);
|
| - expect(statement.rightParenthesis, isNotNull);
|
| - expect(statement.semicolon, isNotNull);
|
| + void test_isFunctionExpression_noParameters_typeParameters_expression() {
|
| + expect(_isFunctionExpression("<E>() => e"), isTrue);
|
| }
|
|
|
| - void test_parseAssertStatement_messageLowPrecedence() {
|
| - // Using a throw expression as an assert message would be silly in
|
| - // practice, but it's the lowest precedence expression type, so verifying
|
| - // that it works should give us high confidence that other expression types
|
| - // will work as well.
|
| - createParser('assert (x, throw "foo");');
|
| - AssertStatement statement = parser.parseAssertStatement();
|
| - expectNotNullIfNoErrors(statement);
|
| - listener.assertNoErrors();
|
| - expect(statement.assertKeyword, isNotNull);
|
| - expect(statement.leftParenthesis, isNotNull);
|
| - expect(statement.condition, isNotNull);
|
| - expect(statement.comma, isNotNull);
|
| - expect(statement.message, isNotNull);
|
| - expect(statement.rightParenthesis, isNotNull);
|
| - expect(statement.semicolon, isNotNull);
|
| + void test_isFunctionExpression_parameter_final() {
|
| + expect(_isFunctionExpression("(final a) {}"), isTrue);
|
| + expect(_isFunctionExpression("(final a, b) {}"), isTrue);
|
| + expect(_isFunctionExpression("(final a, final b) {}"), isTrue);
|
| }
|
|
|
| - void test_parseAssertStatement_messageString() {
|
| - createParser('assert (x, "foo");');
|
| - AssertStatement statement = parser.parseAssertStatement();
|
| - expectNotNullIfNoErrors(statement);
|
| - listener.assertNoErrors();
|
| - expect(statement.assertKeyword, isNotNull);
|
| - expect(statement.leftParenthesis, isNotNull);
|
| - expect(statement.condition, isNotNull);
|
| - expect(statement.comma, isNotNull);
|
| - expect(statement.message, isNotNull);
|
| - expect(statement.rightParenthesis, isNotNull);
|
| - expect(statement.semicolon, isNotNull);
|
| + void test_isFunctionExpression_parameter_final_typed() {
|
| + expect(_isFunctionExpression("(final int a) {}"), isTrue);
|
| + expect(_isFunctionExpression("(final prefix.List a) {}"), isTrue);
|
| + expect(_isFunctionExpression("(final List<int> a) {}"), isTrue);
|
| + expect(_isFunctionExpression("(final prefix.List<int> a) {}"), isTrue);
|
| }
|
|
|
| - void test_parseAssignableExpression_expression_args_dot() {
|
| - createParser('(x)(y).z');
|
| - Expression expression = parser.parseAssignableExpression(false);
|
| - expectNotNullIfNoErrors(expression);
|
| - listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<PropertyAccess>());
|
| - PropertyAccess propertyAccess = expression;
|
| - FunctionExpressionInvocation invocation =
|
| - propertyAccess.target as FunctionExpressionInvocation;
|
| - expect(invocation.function, isNotNull);
|
| - expect(invocation.typeArguments, isNull);
|
| - ArgumentList argumentList = invocation.argumentList;
|
| - expect(argumentList, isNotNull);
|
| - expect(argumentList.arguments, hasLength(1));
|
| - expect(propertyAccess.operator, isNotNull);
|
| - expect(propertyAccess.propertyName, isNotNull);
|
| + void test_isFunctionExpression_parameter_multiple() {
|
| + expect(_isFunctionExpression("(a, b) {}"), isTrue);
|
| }
|
|
|
| - void
|
| - test_parseAssignableExpression_expression_args_dot_typeParameterComments() {
|
| - enableGenericMethodComments = true;
|
| - createParser('(x)/*<F>*/(y).z');
|
| - Expression expression = parser.parseAssignableExpression(false);
|
| - expectNotNullIfNoErrors(expression);
|
| - listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<PropertyAccess>());
|
| - PropertyAccess propertyAccess = expression;
|
| - FunctionExpressionInvocation invocation =
|
| - propertyAccess.target as FunctionExpressionInvocation;
|
| - expect(invocation.function, isNotNull);
|
| - expect(invocation.typeArguments, isNotNull);
|
| - ArgumentList argumentList = invocation.argumentList;
|
| - expect(argumentList, isNotNull);
|
| - expect(argumentList.arguments, hasLength(1));
|
| - expect(propertyAccess.operator, isNotNull);
|
| - expect(propertyAccess.propertyName, isNotNull);
|
| + void test_isFunctionExpression_parameter_named() {
|
| + expect(_isFunctionExpression("({a}) {}"), isTrue);
|
| }
|
|
|
| - void test_parseAssignableExpression_expression_args_dot_typeParameters() {
|
| - createParser('(x)<F>(y).z');
|
| - Expression expression = parser.parseAssignableExpression(false);
|
| - expectNotNullIfNoErrors(expression);
|
| - listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<PropertyAccess>());
|
| - PropertyAccess propertyAccess = expression;
|
| - FunctionExpressionInvocation invocation =
|
| - propertyAccess.target as FunctionExpressionInvocation;
|
| - expect(invocation.function, isNotNull);
|
| - expect(invocation.typeArguments, isNotNull);
|
| - ArgumentList argumentList = invocation.argumentList;
|
| - expect(argumentList, isNotNull);
|
| - expect(argumentList.arguments, hasLength(1));
|
| - expect(propertyAccess.operator, isNotNull);
|
| - expect(propertyAccess.propertyName, isNotNull);
|
| + void test_isFunctionExpression_parameter_optional() {
|
| + expect(_isFunctionExpression("([a]) {}"), isTrue);
|
| }
|
|
|
| - void test_parseAssignableExpression_expression_dot() {
|
| - createParser('(x).y');
|
| - Expression expression = parser.parseAssignableExpression(false);
|
| - expectNotNullIfNoErrors(expression);
|
| - listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<PropertyAccess>());
|
| - PropertyAccess propertyAccess = expression;
|
| - expect(propertyAccess.target, isNotNull);
|
| - expect(propertyAccess.operator.type, TokenType.PERIOD);
|
| - expect(propertyAccess.propertyName, isNotNull);
|
| + void test_isFunctionExpression_parameter_single() {
|
| + expect(_isFunctionExpression("(a) {}"), isTrue);
|
| }
|
|
|
| - void test_parseAssignableExpression_expression_index() {
|
| - createParser('(x)[y]');
|
| - Expression expression = parser.parseAssignableExpression(false);
|
| - expectNotNullIfNoErrors(expression);
|
| - listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<IndexExpression>());
|
| - IndexExpression indexExpression = expression;
|
| - expect(indexExpression.target, isNotNull);
|
| - expect(indexExpression.leftBracket, isNotNull);
|
| - expect(indexExpression.index, isNotNull);
|
| - expect(indexExpression.rightBracket, isNotNull);
|
| + void test_isFunctionExpression_parameter_typed() {
|
| + expect(_isFunctionExpression("(int a, int b) {}"), isTrue);
|
| }
|
|
|
| - void test_parseAssignableExpression_expression_question_dot() {
|
| - createParser('(x)?.y');
|
| - Expression expression = parser.parseAssignableExpression(false);
|
| - expectNotNullIfNoErrors(expression);
|
| - listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<PropertyAccess>());
|
| - PropertyAccess propertyAccess = expression;
|
| - expect(propertyAccess.target, isNotNull);
|
| - expect(propertyAccess.operator.type, TokenType.QUESTION_PERIOD);
|
| - expect(propertyAccess.propertyName, isNotNull);
|
| + void test_isInitializedVariableDeclaration_assignment() {
|
| + expect(_isInitializedVariableDeclaration("a = null;"), isFalse);
|
| + }
|
| +
|
| + void test_isInitializedVariableDeclaration_comparison() {
|
| + expect(_isInitializedVariableDeclaration("a < 0;"), isFalse);
|
| }
|
|
|
| - void test_parseAssignableExpression_identifier() {
|
| - createParser('x');
|
| - Expression expression = parser.parseAssignableExpression(false);
|
| - expectNotNullIfNoErrors(expression);
|
| - listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<SimpleIdentifier>());
|
| - SimpleIdentifier identifier = expression;
|
| - expect(identifier, isNotNull);
|
| + void test_isInitializedVariableDeclaration_conditional() {
|
| + expect(_isInitializedVariableDeclaration("a == null ? init() : update();"),
|
| + isFalse);
|
| }
|
|
|
| - void test_parseAssignableExpression_identifier_args_dot() {
|
| - createParser('x(y).z');
|
| - Expression expression = parser.parseAssignableExpression(false);
|
| - expectNotNullIfNoErrors(expression);
|
| - listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<PropertyAccess>());
|
| - PropertyAccess propertyAccess = expression;
|
| - MethodInvocation invocation = propertyAccess.target as MethodInvocation;
|
| - expect(invocation.methodName.name, "x");
|
| - expect(invocation.typeArguments, isNull);
|
| - ArgumentList argumentList = invocation.argumentList;
|
| - expect(argumentList, isNotNull);
|
| - expect(argumentList.arguments, hasLength(1));
|
| - expect(propertyAccess.operator, isNotNull);
|
| - expect(propertyAccess.propertyName, isNotNull);
|
| + void test_isInitializedVariableDeclaration_const_noType_initialized() {
|
| + expect(_isInitializedVariableDeclaration("const a = 0;"), isTrue);
|
| }
|
|
|
| - void
|
| - test_parseAssignableExpression_identifier_args_dot_typeParameterComments() {
|
| - enableGenericMethodComments = true;
|
| - createParser('x/*<E>*/(y).z');
|
| - Expression expression = parser.parseAssignableExpression(false);
|
| - expectNotNullIfNoErrors(expression);
|
| - listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<PropertyAccess>());
|
| - PropertyAccess propertyAccess = expression;
|
| - MethodInvocation invocation = propertyAccess.target as MethodInvocation;
|
| - expect(invocation.methodName.name, "x");
|
| - expect(invocation.typeArguments, isNotNull);
|
| - ArgumentList argumentList = invocation.argumentList;
|
| - expect(argumentList, isNotNull);
|
| - expect(argumentList.arguments, hasLength(1));
|
| - expect(propertyAccess.operator, isNotNull);
|
| - expect(propertyAccess.propertyName, isNotNull);
|
| + void test_isInitializedVariableDeclaration_const_noType_uninitialized() {
|
| + expect(_isInitializedVariableDeclaration("const a;"), isTrue);
|
| }
|
|
|
| - void test_parseAssignableExpression_identifier_args_dot_typeParameters() {
|
| - createParser('x<E>(y).z');
|
| - Expression expression = parser.parseAssignableExpression(false);
|
| - expectNotNullIfNoErrors(expression);
|
| - listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<PropertyAccess>());
|
| - PropertyAccess propertyAccess = expression;
|
| - MethodInvocation invocation = propertyAccess.target as MethodInvocation;
|
| - expect(invocation.methodName.name, "x");
|
| - expect(invocation.typeArguments, isNotNull);
|
| - ArgumentList argumentList = invocation.argumentList;
|
| - expect(argumentList, isNotNull);
|
| - expect(argumentList.arguments, hasLength(1));
|
| - expect(propertyAccess.operator, isNotNull);
|
| - expect(propertyAccess.propertyName, isNotNull);
|
| + void test_isInitializedVariableDeclaration_const_simpleType_uninitialized() {
|
| + expect(_isInitializedVariableDeclaration("const A a;"), isTrue);
|
| }
|
|
|
| - void test_parseAssignableExpression_identifier_dot() {
|
| - createParser('x.y');
|
| - Expression expression = parser.parseAssignableExpression(false);
|
| - expectNotNullIfNoErrors(expression);
|
| - listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<PropertyAccess>());
|
| - PropertyAccess propertyAccess = expression;
|
| - expect(propertyAccess.target, isNotNull);
|
| - expect(propertyAccess.operator, isNotNull);
|
| - expect(propertyAccess.operator.type, TokenType.PERIOD);
|
| - expect(propertyAccess.propertyName, isNotNull);
|
| + void test_isInitializedVariableDeclaration_final_noType_initialized() {
|
| + expect(_isInitializedVariableDeclaration("final a = 0;"), isTrue);
|
| }
|
|
|
| - void test_parseAssignableExpression_identifier_index() {
|
| - createParser('x[y]');
|
| - Expression expression = parser.parseAssignableExpression(false);
|
| - expectNotNullIfNoErrors(expression);
|
| - listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<IndexExpression>());
|
| - IndexExpression indexExpression = expression;
|
| - expect(indexExpression.target, isNotNull);
|
| - expect(indexExpression.leftBracket, isNotNull);
|
| - expect(indexExpression.index, isNotNull);
|
| - expect(indexExpression.rightBracket, isNotNull);
|
| + void test_isInitializedVariableDeclaration_final_noType_uninitialized() {
|
| + expect(_isInitializedVariableDeclaration("final a;"), isTrue);
|
| }
|
|
|
| - void test_parseAssignableExpression_identifier_question_dot() {
|
| - createParser('x?.y');
|
| - Expression expression = parser.parseAssignableExpression(false);
|
| - expectNotNullIfNoErrors(expression);
|
| - listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<PropertyAccess>());
|
| - PropertyAccess propertyAccess = expression;
|
| - expect(propertyAccess.target, isNotNull);
|
| - expect(propertyAccess.operator.type, TokenType.QUESTION_PERIOD);
|
| - expect(propertyAccess.propertyName, isNotNull);
|
| + void test_isInitializedVariableDeclaration_final_simpleType_initialized() {
|
| + expect(_isInitializedVariableDeclaration("final A a = 0;"), isTrue);
|
| }
|
|
|
| - void test_parseAssignableExpression_super_dot() {
|
| - createParser('super.y');
|
| - Expression expression = parser.parseAssignableExpression(false);
|
| - expectNotNullIfNoErrors(expression);
|
| - listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<PropertyAccess>());
|
| - PropertyAccess propertyAccess = expression;
|
| - EngineTestCase.assertInstanceOf((obj) => obj is SuperExpression,
|
| - SuperExpression, propertyAccess.target);
|
| - expect(propertyAccess.operator, isNotNull);
|
| - expect(propertyAccess.propertyName, isNotNull);
|
| + void test_isInitializedVariableDeclaration_functionDeclaration_typed() {
|
| + expect(_isInitializedVariableDeclaration("A f() {};"), isFalse);
|
| }
|
|
|
| - void test_parseAssignableExpression_super_index() {
|
| - createParser('super[y]');
|
| - Expression expression = parser.parseAssignableExpression(false);
|
| - expectNotNullIfNoErrors(expression);
|
| - listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<IndexExpression>());
|
| - IndexExpression indexExpression = expression;
|
| - expect(indexExpression.target, new isInstanceOf<SuperExpression>());
|
| - expect(indexExpression.leftBracket, isNotNull);
|
| - expect(indexExpression.index, isNotNull);
|
| - expect(indexExpression.rightBracket, isNotNull);
|
| + void test_isInitializedVariableDeclaration_functionDeclaration_untyped() {
|
| + expect(_isInitializedVariableDeclaration("f() {};"), isFalse);
|
| }
|
|
|
| - void test_parseAssignableSelector_dot() {
|
| - createParser('.x');
|
| - Expression expression = parser.parseAssignableSelector(null, true);
|
| - expectNotNullIfNoErrors(expression);
|
| - listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<PropertyAccess>());
|
| - PropertyAccess propertyAccess = expression;
|
| - expect(propertyAccess.operator.type, TokenType.PERIOD);
|
| - expect(propertyAccess.propertyName, isNotNull);
|
| + void test_isInitializedVariableDeclaration_noType_initialized() {
|
| + expect(_isInitializedVariableDeclaration("var a = 0;"), isTrue);
|
| }
|
|
|
| - void test_parseAssignableSelector_index() {
|
| - createParser('[x]');
|
| - Expression expression = parser.parseAssignableSelector(null, true);
|
| - expectNotNullIfNoErrors(expression);
|
| - listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<IndexExpression>());
|
| - IndexExpression indexExpression = expression;
|
| - expect(indexExpression.leftBracket, isNotNull);
|
| - expect(indexExpression.index, isNotNull);
|
| - expect(indexExpression.rightBracket, isNotNull);
|
| + void test_isInitializedVariableDeclaration_noType_uninitialized() {
|
| + expect(_isInitializedVariableDeclaration("var a;"), isTrue);
|
| }
|
|
|
| - void test_parseAssignableSelector_none() {
|
| - createParser(';');
|
| - Expression expression =
|
| - parser.parseAssignableSelector(astFactory.simpleIdentifier(null), true);
|
| - expectNotNullIfNoErrors(expression);
|
| - listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<SimpleIdentifier>());
|
| - SimpleIdentifier identifier = expression;
|
| - expect(identifier, isNotNull);
|
| + void test_isInitializedVariableDeclaration_parameterizedType_initialized() {
|
| + expect(_isInitializedVariableDeclaration("List<int> a = null;"), isTrue);
|
| }
|
|
|
| - void test_parseAssignableSelector_question_dot() {
|
| - createParser('?.x');
|
| - Expression expression = parser.parseAssignableSelector(null, true);
|
| - expectNotNullIfNoErrors(expression);
|
| - listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<PropertyAccess>());
|
| - PropertyAccess propertyAccess = expression;
|
| - expect(propertyAccess.operator.type, TokenType.QUESTION_PERIOD);
|
| - expect(propertyAccess.propertyName, isNotNull);
|
| + void test_isInitializedVariableDeclaration_parameterizedType_uninitialized() {
|
| + expect(_isInitializedVariableDeclaration("List<int> a;"), isTrue);
|
| }
|
|
|
| - void test_parseAwaitExpression() {
|
| - createParser('await x;');
|
| - AwaitExpression expression = parser.parseAwaitExpression();
|
| - expectNotNullIfNoErrors(expression);
|
| - listener.assertNoErrors();
|
| - expect(expression.awaitKeyword, isNotNull);
|
| - expect(expression.expression, isNotNull);
|
| + void test_isInitializedVariableDeclaration_simpleType_initialized() {
|
| + expect(_isInitializedVariableDeclaration("A a = 0;"), isTrue);
|
| }
|
|
|
| - void test_parseAwaitExpression_asStatement_inAsync() {
|
| - createParser('m() async { await x; }');
|
| - ClassMember member = parser.parseClassMember('C');
|
| - expectNotNullIfNoErrors(member);
|
| - listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<MethodDeclaration>());
|
| - MethodDeclaration method = member;
|
| - FunctionBody body = method.body;
|
| - EngineTestCase.assertInstanceOf(
|
| - (obj) => obj is BlockFunctionBody, BlockFunctionBody, body);
|
| - Statement statement = (body as BlockFunctionBody).block.statements[0];
|
| - EngineTestCase.assertInstanceOf(
|
| - (obj) => obj is ExpressionStatement, ExpressionStatement, statement);
|
| - Expression expression = (statement as ExpressionStatement).expression;
|
| - EngineTestCase.assertInstanceOf(
|
| - (obj) => obj is AwaitExpression, AwaitExpression, expression);
|
| - expect((expression as AwaitExpression).awaitKeyword, isNotNull);
|
| - expect((expression as AwaitExpression).expression, isNotNull);
|
| + void test_isInitializedVariableDeclaration_simpleType_uninitialized() {
|
| + expect(_isInitializedVariableDeclaration("A a;"), isTrue);
|
| }
|
|
|
| - void test_parseAwaitExpression_asStatement_inSync() {
|
| - createParser('m() { await x; }');
|
| - ClassMember member = parser.parseClassMember('C');
|
| - expectNotNullIfNoErrors(member);
|
| - listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<MethodDeclaration>());
|
| - MethodDeclaration method = member;
|
| - FunctionBody body = method.body;
|
| - EngineTestCase.assertInstanceOf(
|
| - (obj) => obj is BlockFunctionBody, BlockFunctionBody, body);
|
| - Statement statement = (body as BlockFunctionBody).block.statements[0];
|
| - EngineTestCase.assertInstanceOf(
|
| - (obj) => obj is VariableDeclarationStatement,
|
| - VariableDeclarationStatement,
|
| - statement);
|
| + void test_isSwitchMember_case_labeled() {
|
| + expect(_isSwitchMember("l1: l2: case"), isTrue);
|
| }
|
|
|
| - @failingTest
|
| - void test_parseAwaitExpression_inSync() {
|
| - // This test requires better error recovery than we currently have. In
|
| - // particular, we need to be able to distinguish between an await expression
|
| - // in the wrong context, and the use of 'await' as an identifier.
|
| - createParser('m() { return await x + await y; }');
|
| - MethodDeclaration method = parser.parseClassMember('C');
|
| - expectNotNullIfNoErrors(method);
|
| - listener.assertNoErrors();
|
| - FunctionBody body = method.body;
|
| - EngineTestCase.assertInstanceOf(
|
| - (obj) => obj is BlockFunctionBody, BlockFunctionBody, body);
|
| - Statement statement = (body as BlockFunctionBody).block.statements[0];
|
| - EngineTestCase.assertInstanceOf(
|
| - (obj) => obj is ReturnStatement, ReturnStatement, statement);
|
| - Expression expression = (statement as ReturnStatement).expression;
|
| - EngineTestCase.assertInstanceOf(
|
| - (obj) => obj is BinaryExpression, BinaryExpression, expression);
|
| - EngineTestCase.assertInstanceOf((obj) => obj is AwaitExpression,
|
| - AwaitExpression, (expression as BinaryExpression).leftOperand);
|
| - EngineTestCase.assertInstanceOf((obj) => obj is AwaitExpression,
|
| - AwaitExpression, (expression as BinaryExpression).rightOperand);
|
| + void test_isSwitchMember_case_unlabeled() {
|
| + expect(_isSwitchMember("case"), isTrue);
|
| }
|
|
|
| - void test_parseBitwiseAndExpression_normal() {
|
| - createParser('x & y');
|
| - Expression expression = parser.parseBitwiseAndExpression();
|
| - 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);
|
| - expect(binaryExpression.rightOperand, isNotNull);
|
| + void test_isSwitchMember_default_labeled() {
|
| + expect(_isSwitchMember("l1: l2: default"), isTrue);
|
| }
|
|
|
| - void test_parseBitwiseAndExpression_super() {
|
| - createParser('super & y');
|
| - Expression expression = parser.parseBitwiseAndExpression();
|
| - 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.AMPERSAND);
|
| - expect(binaryExpression.rightOperand, isNotNull);
|
| + void test_isSwitchMember_default_unlabeled() {
|
| + expect(_isSwitchMember("default"), isTrue);
|
| }
|
|
|
| - void test_parseBitwiseOrExpression_normal() {
|
| - createParser('x | y');
|
| - Expression expression = parser.parseBitwiseOrExpression();
|
| + void test_isSwitchMember_false() {
|
| + expect(_isSwitchMember("break;"), isFalse);
|
| + }
|
| +
|
| + void test_parseAdditiveExpression_normal() {
|
| + createParser('x + y');
|
| + Expression expression = parser.parseAdditiveExpression();
|
| 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);
|
| + expect(binaryExpression.operator.type, TokenType.PLUS);
|
| expect(binaryExpression.rightOperand, isNotNull);
|
| }
|
|
|
| - void test_parseBitwiseOrExpression_super() {
|
| - createParser('super | y');
|
| - Expression expression = parser.parseBitwiseOrExpression();
|
| + void test_parseAdditiveExpression_super() {
|
| + createParser('super + y');
|
| + Expression expression = parser.parseAdditiveExpression();
|
| 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.BAR);
|
| + expect(binaryExpression.operator.type, TokenType.PLUS);
|
| expect(binaryExpression.rightOperand, isNotNull);
|
| }
|
|
|
| - void test_parseBitwiseXorExpression_normal() {
|
| - createParser('x ^ y');
|
| - Expression expression = parser.parseBitwiseXorExpression();
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseAnnotation_n1() {
|
| + createParser('@A');
|
| + Annotation annotation = parser.parseAnnotation();
|
| + expectNotNullIfNoErrors(annotation);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<BinaryExpression>());
|
| - BinaryExpression binaryExpression = expression;
|
| - expect(binaryExpression.leftOperand, isNotNull);
|
| - expect(binaryExpression.operator, isNotNull);
|
| - expect(binaryExpression.operator.type, TokenType.CARET);
|
| - expect(binaryExpression.rightOperand, isNotNull);
|
| + expect(annotation.atSign, isNotNull);
|
| + expect(annotation.name, isNotNull);
|
| + expect(annotation.period, isNull);
|
| + expect(annotation.constructorName, isNull);
|
| + expect(annotation.arguments, isNull);
|
| }
|
|
|
| - void test_parseBitwiseXorExpression_super() {
|
| - createParser('super ^ y');
|
| - Expression expression = parser.parseBitwiseXorExpression();
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseAnnotation_n1_a() {
|
| + createParser('@A(x,y)');
|
| + Annotation annotation = parser.parseAnnotation();
|
| + expectNotNullIfNoErrors(annotation);
|
| 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.CARET);
|
| - expect(binaryExpression.rightOperand, isNotNull);
|
| + expect(annotation.atSign, isNotNull);
|
| + expect(annotation.name, isNotNull);
|
| + expect(annotation.period, isNull);
|
| + expect(annotation.constructorName, isNull);
|
| + expect(annotation.arguments, isNotNull);
|
| }
|
|
|
| - void test_parseBlock_empty() {
|
| - createParser('{}');
|
| - Block block = parser.parseBlock();
|
| - expectNotNullIfNoErrors(block);
|
| + void test_parseAnnotation_n2() {
|
| + createParser('@A.B');
|
| + Annotation annotation = parser.parseAnnotation();
|
| + expectNotNullIfNoErrors(annotation);
|
| listener.assertNoErrors();
|
| - expect(block.leftBracket, isNotNull);
|
| - expect(block.statements, hasLength(0));
|
| - expect(block.rightBracket, isNotNull);
|
| + expect(annotation.atSign, isNotNull);
|
| + expect(annotation.name, isNotNull);
|
| + expect(annotation.period, isNull);
|
| + expect(annotation.constructorName, isNull);
|
| + expect(annotation.arguments, isNull);
|
| }
|
|
|
| - void test_parseBlock_nonEmpty() {
|
| - createParser('{;}');
|
| - Block block = parser.parseBlock();
|
| - expectNotNullIfNoErrors(block);
|
| + void test_parseAnnotation_n2_a() {
|
| + createParser('@A.B(x,y)');
|
| + Annotation annotation = parser.parseAnnotation();
|
| + expectNotNullIfNoErrors(annotation);
|
| listener.assertNoErrors();
|
| - expect(block.leftBracket, isNotNull);
|
| - expect(block.statements, hasLength(1));
|
| - expect(block.rightBracket, isNotNull);
|
| + expect(annotation.atSign, isNotNull);
|
| + expect(annotation.name, isNotNull);
|
| + expect(annotation.period, isNull);
|
| + expect(annotation.constructorName, isNull);
|
| + expect(annotation.arguments, isNotNull);
|
| }
|
|
|
| - void test_parseBreakStatement_label() {
|
| - createParser('break foo;');
|
| - BreakStatement statement = parser.parseBreakStatement();
|
| - expectNotNullIfNoErrors(statement);
|
| + void test_parseAnnotation_n3() {
|
| + createParser('@A.B.C');
|
| + Annotation annotation = parser.parseAnnotation();
|
| + expectNotNullIfNoErrors(annotation);
|
| listener.assertNoErrors();
|
| - expect(statement.breakKeyword, isNotNull);
|
| - expect(statement.label, isNotNull);
|
| - expect(statement.semicolon, isNotNull);
|
| + expect(annotation.atSign, isNotNull);
|
| + expect(annotation.name, isNotNull);
|
| + expect(annotation.period, isNotNull);
|
| + expect(annotation.constructorName, isNotNull);
|
| + expect(annotation.arguments, isNull);
|
| }
|
|
|
| - void test_parseBreakStatement_noLabel() {
|
| - createParser('break;');
|
| - BreakStatement statement = parser.parseBreakStatement();
|
| - expectNotNullIfNoErrors(statement);
|
| - listener.assertErrorsWithCodes([ParserErrorCode.BREAK_OUTSIDE_OF_LOOP]);
|
| - expect(statement.breakKeyword, isNotNull);
|
| - expect(statement.label, isNull);
|
| - expect(statement.semicolon, isNotNull);
|
| + void test_parseAnnotation_n3_a() {
|
| + createParser('@A.B.C(x,y)');
|
| + Annotation annotation = parser.parseAnnotation();
|
| + expectNotNullIfNoErrors(annotation);
|
| + listener.assertNoErrors();
|
| + expect(annotation.atSign, isNotNull);
|
| + expect(annotation.name, isNotNull);
|
| + expect(annotation.period, isNotNull);
|
| + expect(annotation.constructorName, isNotNull);
|
| + expect(annotation.arguments, isNotNull);
|
| }
|
|
|
| - void test_parseCascadeSection_i() {
|
| - createParser('..[i]');
|
| - Expression expression = parser.parseCascadeSection();
|
| + void test_parseArgument_named() {
|
| + createParser('n: x');
|
| + Expression expression = parser.parseArgument();
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<IndexExpression>());
|
| - IndexExpression section = expression;
|
| - expect(section.target, isNull);
|
| - expect(section.leftBracket, isNotNull);
|
| - expect(section.index, isNotNull);
|
| - expect(section.rightBracket, isNotNull);
|
| + expect(expression, new isInstanceOf<NamedExpression>());
|
| + NamedExpression namedExpression = expression;
|
| + Label name = namedExpression.name;
|
| + expect(name, isNotNull);
|
| + expect(name.label, isNotNull);
|
| + expect(name.colon, isNotNull);
|
| + expect(namedExpression.expression, isNotNull);
|
| }
|
|
|
| - void test_parseCascadeSection_ia() {
|
| - createParser('..[i](b)');
|
| - Expression expression = parser.parseCascadeSection();
|
| + void test_parseArgument_unnamed() {
|
| + String lexeme = "x";
|
| + createParser(lexeme);
|
| + Expression expression = parser.parseArgument();
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<FunctionExpressionInvocation>());
|
| - FunctionExpressionInvocation section = expression;
|
| - expect(section.function, new isInstanceOf<IndexExpression>());
|
| - expect(section.typeArguments, isNull);
|
| - expect(section.argumentList, isNotNull);
|
| + expect(expression, new isInstanceOf<SimpleIdentifier>());
|
| + SimpleIdentifier identifier = expression;
|
| + expect(identifier.name, lexeme);
|
| }
|
|
|
| - void test_parseCascadeSection_ia_typeArgumentComments() {
|
| - enableGenericMethodComments = true;
|
| - createParser('..[i]/*<E>*/(b)');
|
| - Expression expression = parser.parseCascadeSection();
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseArgumentList_empty() {
|
| + createParser('()');
|
| + ArgumentList argumentList = parser.parseArgumentList();
|
| + expectNotNullIfNoErrors(argumentList);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<FunctionExpressionInvocation>());
|
| - FunctionExpressionInvocation section = expression;
|
| - expect(section.function, new isInstanceOf<IndexExpression>());
|
| - expect(section.typeArguments, isNotNull);
|
| - expect(section.argumentList, isNotNull);
|
| + NodeList<Expression> arguments = argumentList.arguments;
|
| + expect(arguments, hasLength(0));
|
| }
|
|
|
| - void test_parseCascadeSection_ia_typeArguments() {
|
| - createParser('..[i]<E>(b)');
|
| - Expression expression = parser.parseCascadeSection();
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseArgumentList_mixed() {
|
| + createParser('(w, x, y: y, z: z)');
|
| + ArgumentList argumentList = parser.parseArgumentList();
|
| + expectNotNullIfNoErrors(argumentList);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<FunctionExpressionInvocation>());
|
| - FunctionExpressionInvocation section = expression;
|
| - expect(section.function, new isInstanceOf<IndexExpression>());
|
| - expect(section.typeArguments, isNotNull);
|
| - expect(section.argumentList, isNotNull);
|
| + NodeList<Expression> arguments = argumentList.arguments;
|
| + expect(arguments, hasLength(4));
|
| }
|
|
|
| - void test_parseCascadeSection_ii() {
|
| - createParser('..a(b).c(d)');
|
| - Expression expression = parser.parseCascadeSection();
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseArgumentList_noNamed() {
|
| + createParser('(x, y, z)');
|
| + ArgumentList argumentList = parser.parseArgumentList();
|
| + expectNotNullIfNoErrors(argumentList);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<MethodInvocation>());
|
| - MethodInvocation section = expression;
|
| - expect(section.target, new isInstanceOf<MethodInvocation>());
|
| - expect(section.operator, isNotNull);
|
| - expect(section.methodName, isNotNull);
|
| - expect(section.typeArguments, isNull);
|
| - expect(section.argumentList, isNotNull);
|
| - expect(section.argumentList.arguments, hasLength(1));
|
| + NodeList<Expression> arguments = argumentList.arguments;
|
| + expect(arguments, hasLength(3));
|
| }
|
|
|
| - void test_parseCascadeSection_ii_typeArgumentComments() {
|
| - enableGenericMethodComments = true;
|
| - createParser('..a/*<E>*/(b).c/*<F>*/(d)');
|
| - Expression expression = parser.parseCascadeSection();
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseArgumentList_onlyNamed() {
|
| + createParser('(x: x, y: y)');
|
| + ArgumentList argumentList = parser.parseArgumentList();
|
| + expectNotNullIfNoErrors(argumentList);
|
| + listener.assertNoErrors();
|
| + NodeList<Expression> arguments = argumentList.arguments;
|
| + expect(arguments, hasLength(2));
|
| + }
|
| +
|
| + void test_parseArgumentList_trailing_comma() {
|
| + createParser('(x, y, z,)');
|
| + ArgumentList argumentList = parser.parseArgumentList();
|
| + expectNotNullIfNoErrors(argumentList);
|
| + listener.assertNoErrors();
|
| + NodeList<Expression> arguments = argumentList.arguments;
|
| + expect(arguments, hasLength(3));
|
| + }
|
| +
|
| + void test_parseAssertStatement() {
|
| + createParser('assert (x);');
|
| + AssertStatement statement = parser.parseAssertStatement();
|
| + expectNotNullIfNoErrors(statement);
|
| + listener.assertNoErrors();
|
| + expect(statement.assertKeyword, isNotNull);
|
| + expect(statement.leftParenthesis, isNotNull);
|
| + expect(statement.condition, isNotNull);
|
| + expect(statement.comma, isNull);
|
| + expect(statement.message, isNull);
|
| + expect(statement.rightParenthesis, isNotNull);
|
| + expect(statement.semicolon, isNotNull);
|
| + }
|
| +
|
| + void test_parseAssertStatement_messageLowPrecedence() {
|
| + // Using a throw expression as an assert message would be silly in
|
| + // practice, but it's the lowest precedence expression type, so verifying
|
| + // that it works should give us high confidence that other expression types
|
| + // will work as well.
|
| + createParser('assert (x, throw "foo");');
|
| + AssertStatement statement = parser.parseAssertStatement();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<MethodInvocation>());
|
| - MethodInvocation section = expression;
|
| - expect(section.target, new isInstanceOf<MethodInvocation>());
|
| - expect(section.operator, isNotNull);
|
| - expect(section.methodName, isNotNull);
|
| - expect(section.typeArguments, isNotNull);
|
| - expect(section.argumentList, isNotNull);
|
| - expect(section.argumentList.arguments, hasLength(1));
|
| + expect(statement.assertKeyword, isNotNull);
|
| + expect(statement.leftParenthesis, isNotNull);
|
| + expect(statement.condition, isNotNull);
|
| + expect(statement.comma, isNotNull);
|
| + expect(statement.message, isNotNull);
|
| + expect(statement.rightParenthesis, isNotNull);
|
| + expect(statement.semicolon, isNotNull);
|
| }
|
|
|
| - void test_parseCascadeSection_ii_typeArguments() {
|
| - createParser('..a<E>(b).c<F>(d)');
|
| - Expression expression = parser.parseCascadeSection();
|
| - expectNotNullIfNoErrors(expression);
|
| + void test_parseAssertStatement_messageString() {
|
| + createParser('assert (x, "foo");');
|
| + AssertStatement statement = parser.parseAssertStatement();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<MethodInvocation>());
|
| - MethodInvocation section = expression;
|
| - expect(section.target, new isInstanceOf<MethodInvocation>());
|
| - expect(section.operator, isNotNull);
|
| - expect(section.methodName, isNotNull);
|
| - expect(section.typeArguments, isNotNull);
|
| - expect(section.argumentList, isNotNull);
|
| - expect(section.argumentList.arguments, hasLength(1));
|
| + expect(statement.assertKeyword, isNotNull);
|
| + expect(statement.leftParenthesis, isNotNull);
|
| + expect(statement.condition, isNotNull);
|
| + expect(statement.comma, isNotNull);
|
| + expect(statement.message, isNotNull);
|
| + expect(statement.rightParenthesis, isNotNull);
|
| + expect(statement.semicolon, isNotNull);
|
| }
|
|
|
| - void test_parseCascadeSection_p() {
|
| - createParser('..a');
|
| - Expression expression = parser.parseCascadeSection();
|
| + void test_parseAssignableExpression_expression_args_dot() {
|
| + createParser('(x)(y).z');
|
| + Expression expression = parser.parseAssignableExpression(false);
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| expect(expression, new isInstanceOf<PropertyAccess>());
|
| - PropertyAccess section = expression;
|
| - expect(section.target, isNull);
|
| - expect(section.operator, isNotNull);
|
| - expect(section.propertyName, isNotNull);
|
| + PropertyAccess propertyAccess = expression;
|
| + FunctionExpressionInvocation invocation =
|
| + propertyAccess.target as FunctionExpressionInvocation;
|
| + expect(invocation.function, isNotNull);
|
| + expect(invocation.typeArguments, isNull);
|
| + ArgumentList argumentList = invocation.argumentList;
|
| + expect(argumentList, isNotNull);
|
| + expect(argumentList.arguments, hasLength(1));
|
| + expect(propertyAccess.operator, isNotNull);
|
| + expect(propertyAccess.propertyName, isNotNull);
|
| }
|
|
|
| - void test_parseCascadeSection_p_assign() {
|
| - createParser('..a = 3');
|
| - Expression expression = parser.parseCascadeSection();
|
| + void
|
| + test_parseAssignableExpression_expression_args_dot_typeParameterComments() {
|
| + enableGenericMethodComments = true;
|
| + createParser('(x)/*<F>*/(y).z');
|
| + Expression expression = parser.parseAssignableExpression(false);
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<AssignmentExpression>());
|
| - AssignmentExpression section = expression;
|
| - expect(section.leftHandSide, isNotNull);
|
| - expect(section.operator, isNotNull);
|
| - Expression rhs = section.rightHandSide;
|
| - expect(rhs, isNotNull);
|
| + expect(expression, new isInstanceOf<PropertyAccess>());
|
| + PropertyAccess propertyAccess = expression;
|
| + FunctionExpressionInvocation invocation =
|
| + propertyAccess.target as FunctionExpressionInvocation;
|
| + expect(invocation.function, isNotNull);
|
| + expect(invocation.typeArguments, isNotNull);
|
| + ArgumentList argumentList = invocation.argumentList;
|
| + expect(argumentList, isNotNull);
|
| + expect(argumentList.arguments, hasLength(1));
|
| + expect(propertyAccess.operator, isNotNull);
|
| + expect(propertyAccess.propertyName, isNotNull);
|
| }
|
|
|
| - void test_parseCascadeSection_p_assign_withCascade() {
|
| - createParser('..a = 3..m()');
|
| - Expression expression = parser.parseCascadeSection();
|
| + void test_parseAssignableExpression_expression_args_dot_typeParameters() {
|
| + createParser('(x)<F>(y).z');
|
| + Expression expression = parser.parseAssignableExpression(false);
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<AssignmentExpression>());
|
| - AssignmentExpression section = expression;
|
| - expect(section.leftHandSide, isNotNull);
|
| - expect(section.operator, isNotNull);
|
| - Expression rhs = section.rightHandSide;
|
| - EngineTestCase.assertInstanceOf(
|
| - (obj) => obj is IntegerLiteral, IntegerLiteral, rhs);
|
| + expect(expression, new isInstanceOf<PropertyAccess>());
|
| + PropertyAccess propertyAccess = expression;
|
| + FunctionExpressionInvocation invocation =
|
| + propertyAccess.target as FunctionExpressionInvocation;
|
| + expect(invocation.function, isNotNull);
|
| + expect(invocation.typeArguments, isNotNull);
|
| + ArgumentList argumentList = invocation.argumentList;
|
| + expect(argumentList, isNotNull);
|
| + expect(argumentList.arguments, hasLength(1));
|
| + expect(propertyAccess.operator, isNotNull);
|
| + expect(propertyAccess.propertyName, isNotNull);
|
| }
|
|
|
| - void test_parseCascadeSection_p_assign_withCascade_typeArgumentComments() {
|
| - enableGenericMethodComments = true;
|
| - createParser('..a = 3..m/*<E>*/()');
|
| - Expression expression = parser.parseCascadeSection();
|
| + void test_parseAssignableExpression_expression_dot() {
|
| + createParser('(x).y');
|
| + Expression expression = parser.parseAssignableExpression(false);
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<AssignmentExpression>());
|
| - AssignmentExpression section = expression;
|
| - expect(section.leftHandSide, isNotNull);
|
| - expect(section.operator, isNotNull);
|
| - Expression rhs = section.rightHandSide;
|
| - EngineTestCase.assertInstanceOf(
|
| - (obj) => obj is IntegerLiteral, IntegerLiteral, rhs);
|
| + expect(expression, new isInstanceOf<PropertyAccess>());
|
| + PropertyAccess propertyAccess = expression;
|
| + expect(propertyAccess.target, isNotNull);
|
| + expect(propertyAccess.operator.type, TokenType.PERIOD);
|
| + expect(propertyAccess.propertyName, isNotNull);
|
| }
|
|
|
| - void test_parseCascadeSection_p_assign_withCascade_typeArguments() {
|
| - createParser('..a = 3..m<E>()');
|
| - Expression expression = parser.parseCascadeSection();
|
| + void test_parseAssignableExpression_expression_index() {
|
| + createParser('(x)[y]');
|
| + Expression expression = parser.parseAssignableExpression(false);
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<AssignmentExpression>());
|
| - AssignmentExpression section = expression;
|
| - expect(section.leftHandSide, isNotNull);
|
| - expect(section.operator, isNotNull);
|
| - Expression rhs = section.rightHandSide;
|
| - EngineTestCase.assertInstanceOf(
|
| - (obj) => obj is IntegerLiteral, IntegerLiteral, rhs);
|
| + expect(expression, new isInstanceOf<IndexExpression>());
|
| + IndexExpression indexExpression = expression;
|
| + expect(indexExpression.target, isNotNull);
|
| + expect(indexExpression.leftBracket, isNotNull);
|
| + expect(indexExpression.index, isNotNull);
|
| + expect(indexExpression.rightBracket, isNotNull);
|
| }
|
|
|
| - void test_parseCascadeSection_p_builtIn() {
|
| - createParser('..as');
|
| - Expression expression = parser.parseCascadeSection();
|
| + void test_parseAssignableExpression_expression_question_dot() {
|
| + createParser('(x)?.y');
|
| + Expression expression = parser.parseAssignableExpression(false);
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| expect(expression, new isInstanceOf<PropertyAccess>());
|
| - PropertyAccess section = expression;
|
| - expect(section.target, isNull);
|
| - expect(section.operator, isNotNull);
|
| - expect(section.propertyName, isNotNull);
|
| + PropertyAccess propertyAccess = expression;
|
| + expect(propertyAccess.target, isNotNull);
|
| + expect(propertyAccess.operator.type, TokenType.QUESTION_PERIOD);
|
| + expect(propertyAccess.propertyName, isNotNull);
|
| }
|
|
|
| - void test_parseCascadeSection_pa() {
|
| - createParser('..a(b)');
|
| - Expression expression = parser.parseCascadeSection();
|
| + void test_parseAssignableExpression_identifier() {
|
| + createParser('x');
|
| + Expression expression = parser.parseAssignableExpression(false);
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<MethodInvocation>());
|
| - MethodInvocation section = expression;
|
| - expect(section.target, isNull);
|
| - expect(section.operator, isNotNull);
|
| - expect(section.methodName, isNotNull);
|
| - expect(section.typeArguments, isNull);
|
| - expect(section.argumentList, isNotNull);
|
| - expect(section.argumentList.arguments, hasLength(1));
|
| + expect(expression, new isInstanceOf<SimpleIdentifier>());
|
| + SimpleIdentifier identifier = expression;
|
| + expect(identifier, isNotNull);
|
| }
|
|
|
| - void test_parseCascadeSection_pa_typeArgumentComments() {
|
| - enableGenericMethodComments = true;
|
| - createParser('..a/*<E>*/(b)');
|
| - Expression expression = parser.parseCascadeSection();
|
| + void test_parseAssignableExpression_identifier_args_dot() {
|
| + createParser('x(y).z');
|
| + Expression expression = parser.parseAssignableExpression(false);
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<MethodInvocation>());
|
| - MethodInvocation section = expression;
|
| - expect(section.target, isNull);
|
| - expect(section.operator, isNotNull);
|
| - expect(section.methodName, isNotNull);
|
| - expect(section.typeArguments, isNotNull);
|
| - expect(section.argumentList, isNotNull);
|
| - expect(section.argumentList.arguments, hasLength(1));
|
| + expect(expression, new isInstanceOf<PropertyAccess>());
|
| + PropertyAccess propertyAccess = expression;
|
| + MethodInvocation invocation = propertyAccess.target as MethodInvocation;
|
| + expect(invocation.methodName.name, "x");
|
| + expect(invocation.typeArguments, isNull);
|
| + ArgumentList argumentList = invocation.argumentList;
|
| + expect(argumentList, isNotNull);
|
| + expect(argumentList.arguments, hasLength(1));
|
| + expect(propertyAccess.operator, isNotNull);
|
| + expect(propertyAccess.propertyName, isNotNull);
|
| }
|
|
|
| - void test_parseCascadeSection_pa_typeArguments() {
|
| - createParser('..a<E>(b)');
|
| - Expression expression = parser.parseCascadeSection();
|
| + void
|
| + test_parseAssignableExpression_identifier_args_dot_typeParameterComments() {
|
| + enableGenericMethodComments = true;
|
| + createParser('x/*<E>*/(y).z');
|
| + Expression expression = parser.parseAssignableExpression(false);
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<MethodInvocation>());
|
| - MethodInvocation section = expression;
|
| - expect(section.target, isNull);
|
| - expect(section.operator, isNotNull);
|
| - expect(section.methodName, isNotNull);
|
| - expect(section.typeArguments, isNotNull);
|
| - expect(section.argumentList, isNotNull);
|
| - expect(section.argumentList.arguments, hasLength(1));
|
| + expect(expression, new isInstanceOf<PropertyAccess>());
|
| + PropertyAccess propertyAccess = expression;
|
| + MethodInvocation invocation = propertyAccess.target as MethodInvocation;
|
| + expect(invocation.methodName.name, "x");
|
| + expect(invocation.typeArguments, isNotNull);
|
| + ArgumentList argumentList = invocation.argumentList;
|
| + expect(argumentList, isNotNull);
|
| + expect(argumentList.arguments, hasLength(1));
|
| + expect(propertyAccess.operator, isNotNull);
|
| + expect(propertyAccess.propertyName, isNotNull);
|
| }
|
|
|
| - void test_parseCascadeSection_paa() {
|
| - createParser('..a(b)(c)');
|
| - Expression expression = parser.parseCascadeSection();
|
| + void test_parseAssignableExpression_identifier_args_dot_typeParameters() {
|
| + createParser('x<E>(y).z');
|
| + Expression expression = parser.parseAssignableExpression(false);
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<FunctionExpressionInvocation>());
|
| - FunctionExpressionInvocation section = expression;
|
| - expect(section.function, new isInstanceOf<MethodInvocation>());
|
| - expect(section.typeArguments, isNull);
|
| - expect(section.argumentList, isNotNull);
|
| - expect(section.argumentList.arguments, hasLength(1));
|
| + expect(expression, new isInstanceOf<PropertyAccess>());
|
| + PropertyAccess propertyAccess = expression;
|
| + MethodInvocation invocation = propertyAccess.target as MethodInvocation;
|
| + expect(invocation.methodName.name, "x");
|
| + expect(invocation.typeArguments, isNotNull);
|
| + ArgumentList argumentList = invocation.argumentList;
|
| + expect(argumentList, isNotNull);
|
| + expect(argumentList.arguments, hasLength(1));
|
| + expect(propertyAccess.operator, isNotNull);
|
| + expect(propertyAccess.propertyName, isNotNull);
|
| }
|
|
|
| - void test_parseCascadeSection_paa_typeArgumentComments() {
|
| - enableGenericMethodComments = true;
|
| - createParser('..a/*<E>*/(b)/*<F>*/(c)');
|
| - Expression expression = parser.parseCascadeSection();
|
| + void test_parseAssignableExpression_identifier_dot() {
|
| + createParser('x.y');
|
| + Expression expression = parser.parseAssignableExpression(false);
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<FunctionExpressionInvocation>());
|
| - FunctionExpressionInvocation section = expression;
|
| - expect(section.function, new isInstanceOf<MethodInvocation>());
|
| - expect(section.typeArguments, isNotNull);
|
| - expect(section.argumentList, isNotNull);
|
| - expect(section.argumentList.arguments, hasLength(1));
|
| + expect(expression, new isInstanceOf<PropertyAccess>());
|
| + PropertyAccess propertyAccess = expression;
|
| + expect(propertyAccess.target, isNotNull);
|
| + expect(propertyAccess.operator, isNotNull);
|
| + expect(propertyAccess.operator.type, TokenType.PERIOD);
|
| + expect(propertyAccess.propertyName, isNotNull);
|
| }
|
|
|
| - void test_parseCascadeSection_paa_typeArguments() {
|
| - createParser('..a<E>(b)<F>(c)');
|
| - Expression expression = parser.parseCascadeSection();
|
| + void test_parseAssignableExpression_identifier_index() {
|
| + createParser('x[y]');
|
| + Expression expression = parser.parseAssignableExpression(false);
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<FunctionExpressionInvocation>());
|
| - FunctionExpressionInvocation section = expression;
|
| - expect(section.function, new isInstanceOf<MethodInvocation>());
|
| - expect(section.typeArguments, isNotNull);
|
| - expect(section.argumentList, isNotNull);
|
| - expect(section.argumentList.arguments, hasLength(1));
|
| + expect(expression, new isInstanceOf<IndexExpression>());
|
| + IndexExpression indexExpression = expression;
|
| + expect(indexExpression.target, isNotNull);
|
| + expect(indexExpression.leftBracket, isNotNull);
|
| + expect(indexExpression.index, isNotNull);
|
| + expect(indexExpression.rightBracket, isNotNull);
|
| }
|
|
|
| - void test_parseCascadeSection_paapaa() {
|
| - createParser('..a(b)(c).d(e)(f)');
|
| - Expression expression = parser.parseCascadeSection();
|
| + void test_parseAssignableExpression_identifier_question_dot() {
|
| + createParser('x?.y');
|
| + Expression expression = parser.parseAssignableExpression(false);
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<FunctionExpressionInvocation>());
|
| - FunctionExpressionInvocation section = expression;
|
| - expect(section.function, new isInstanceOf<MethodInvocation>());
|
| - expect(section.typeArguments, isNull);
|
| - expect(section.argumentList, isNotNull);
|
| - expect(section.argumentList.arguments, hasLength(1));
|
| + expect(expression, new isInstanceOf<PropertyAccess>());
|
| + PropertyAccess propertyAccess = expression;
|
| + expect(propertyAccess.target, isNotNull);
|
| + expect(propertyAccess.operator.type, TokenType.QUESTION_PERIOD);
|
| + expect(propertyAccess.propertyName, isNotNull);
|
| }
|
|
|
| - void test_parseCascadeSection_paapaa_typeArgumentComments() {
|
| - enableGenericMethodComments = true;
|
| - createParser('..a/*<E>*/(b)/*<F>*/(c).d/*<G>*/(e)/*<H>*/(f)');
|
| - Expression expression = parser.parseCascadeSection();
|
| + void test_parseAssignableExpression_super_dot() {
|
| + createParser('super.y');
|
| + Expression expression = parser.parseAssignableExpression(false);
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<FunctionExpressionInvocation>());
|
| - FunctionExpressionInvocation section = expression;
|
| - expect(section.function, new isInstanceOf<MethodInvocation>());
|
| - expect(section.typeArguments, isNotNull);
|
| - expect(section.argumentList, isNotNull);
|
| - expect(section.argumentList.arguments, hasLength(1));
|
| + expect(expression, new isInstanceOf<PropertyAccess>());
|
| + PropertyAccess propertyAccess = expression;
|
| + EngineTestCase.assertInstanceOf((obj) => obj is SuperExpression,
|
| + SuperExpression, propertyAccess.target);
|
| + expect(propertyAccess.operator, isNotNull);
|
| + expect(propertyAccess.propertyName, isNotNull);
|
| }
|
|
|
| - void test_parseCascadeSection_paapaa_typeArguments() {
|
| - createParser('..a<E>(b)<F>(c).d<G>(e)<H>(f)');
|
| - Expression expression = parser.parseCascadeSection();
|
| + void test_parseAssignableExpression_super_index() {
|
| + createParser('super[y]');
|
| + Expression expression = parser.parseAssignableExpression(false);
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<FunctionExpressionInvocation>());
|
| - FunctionExpressionInvocation section = expression;
|
| - expect(section.function, new isInstanceOf<MethodInvocation>());
|
| - expect(section.typeArguments, isNotNull);
|
| - expect(section.argumentList, isNotNull);
|
| - expect(section.argumentList.arguments, hasLength(1));
|
| + expect(expression, new isInstanceOf<IndexExpression>());
|
| + IndexExpression indexExpression = expression;
|
| + expect(indexExpression.target, new isInstanceOf<SuperExpression>());
|
| + expect(indexExpression.leftBracket, isNotNull);
|
| + expect(indexExpression.index, isNotNull);
|
| + expect(indexExpression.rightBracket, isNotNull);
|
| }
|
|
|
| - void test_parseCascadeSection_pap() {
|
| - createParser('..a(b).c');
|
| - Expression expression = parser.parseCascadeSection();
|
| + void test_parseAssignableSelector_dot() {
|
| + createParser('.x');
|
| + Expression expression = parser.parseAssignableSelector(null, true);
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| expect(expression, new isInstanceOf<PropertyAccess>());
|
| - PropertyAccess section = expression;
|
| - expect(section.target, isNotNull);
|
| - expect(section.operator, isNotNull);
|
| - expect(section.propertyName, isNotNull);
|
| + PropertyAccess propertyAccess = expression;
|
| + expect(propertyAccess.operator.type, TokenType.PERIOD);
|
| + expect(propertyAccess.propertyName, isNotNull);
|
| }
|
|
|
| - void test_parseCascadeSection_pap_typeArgumentComments() {
|
| - enableGenericMethodComments = true;
|
| - createParser('..a/*<E>*/(b).c');
|
| - Expression expression = parser.parseCascadeSection();
|
| + void test_parseAssignableSelector_index() {
|
| + createParser('[x]');
|
| + Expression expression = parser.parseAssignableSelector(null, true);
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<PropertyAccess>());
|
| - PropertyAccess section = expression;
|
| - expect(section.target, isNotNull);
|
| - expect(section.operator, isNotNull);
|
| - expect(section.propertyName, isNotNull);
|
| + expect(expression, new isInstanceOf<IndexExpression>());
|
| + IndexExpression indexExpression = expression;
|
| + expect(indexExpression.leftBracket, isNotNull);
|
| + expect(indexExpression.index, isNotNull);
|
| + expect(indexExpression.rightBracket, isNotNull);
|
| }
|
|
|
| - void test_parseCascadeSection_pap_typeArguments() {
|
| - createParser('..a<E>(b).c');
|
| - Expression expression = parser.parseCascadeSection();
|
| + void test_parseAssignableSelector_none() {
|
| + createParser(';');
|
| + Expression expression =
|
| + parser.parseAssignableSelector(astFactory.simpleIdentifier(null), true);
|
| expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(expression, new isInstanceOf<PropertyAccess>());
|
| - PropertyAccess section = expression;
|
| - expect(section.target, isNotNull);
|
| - expect(section.operator, isNotNull);
|
| - expect(section.propertyName, isNotNull);
|
| + expect(expression, new isInstanceOf<SimpleIdentifier>());
|
| + SimpleIdentifier identifier = expression;
|
| + expect(identifier, isNotNull);
|
| }
|
|
|
| - 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);
|
| + void test_parseAssignableSelector_question_dot() {
|
| + createParser('?.x');
|
| + Expression expression = parser.parseAssignableSelector(null, true);
|
| + expectNotNullIfNoErrors(expression);
|
| 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));
|
| + expect(expression, new isInstanceOf<PropertyAccess>());
|
| + PropertyAccess propertyAccess = expression;
|
| + expect(propertyAccess.operator.type, TokenType.QUESTION_PERIOD);
|
| + expect(propertyAccess.propertyName, isNotNull);
|
| }
|
|
|
| - void test_parseClassMember_field_covariant() {
|
| - createParser('covariant T f;');
|
| - ClassMember member = parser.parseClassMember('C');
|
| - expectNotNullIfNoErrors(member);
|
| + void test_parseAwaitExpression() {
|
| + createParser('await x;');
|
| + AwaitExpression expression = parser.parseAwaitExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| 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);
|
| + expect(expression.awaitKeyword, isNotNull);
|
| + expect(expression.expression, isNotNull);
|
| }
|
|
|
| - void test_parseClassMember_field_instance_prefixedType() {
|
| - createParser('p.A f;');
|
| - ClassMember member = parser.parseClassMember('C');
|
| - expectNotNullIfNoErrors(member);
|
| + void test_parseBitwiseAndExpression_normal() {
|
| + createParser('x & y');
|
| + Expression expression = parser.parseBitwiseAndExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| 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(expression, new isInstanceOf<BinaryExpression>());
|
| + BinaryExpression binaryExpression = expression;
|
| + expect(binaryExpression.leftOperand, isNotNull);
|
| + expect(binaryExpression.operator, isNotNull);
|
| + expect(binaryExpression.operator.type, TokenType.AMPERSAND);
|
| + expect(binaryExpression.rightOperand, isNotNull);
|
| }
|
|
|
| - void test_parseClassMember_field_namedGet() {
|
| - createParser('var get;');
|
| - ClassMember member = parser.parseClassMember('C');
|
| - expectNotNullIfNoErrors(member);
|
| + void test_parseBitwiseAndExpression_super() {
|
| + createParser('super & y');
|
| + Expression expression = parser.parseBitwiseAndExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| 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(expression, new isInstanceOf<BinaryExpression>());
|
| + BinaryExpression binaryExpression = expression;
|
| + expect(binaryExpression.leftOperand, new isInstanceOf<SuperExpression>());
|
| + expect(binaryExpression.operator, isNotNull);
|
| + expect(binaryExpression.operator.type, TokenType.AMPERSAND);
|
| + expect(binaryExpression.rightOperand, 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_parseBitwiseOrExpression_normal() {
|
| + createParser('x | y');
|
| + Expression expression = parser.parseBitwiseOrExpression();
|
| + 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);
|
| + expect(binaryExpression.rightOperand, isNotNull);
|
| }
|
|
|
| - void test_parseClassMember_field_namedOperator_withAssignment() {
|
| - createParser('var operator = (5);');
|
| - ClassMember member = parser.parseClassMember('C');
|
| - expectNotNullIfNoErrors(member);
|
| + void test_parseBitwiseOrExpression_super() {
|
| + createParser('super | y');
|
| + Expression expression = parser.parseBitwiseOrExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| 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);
|
| + expect(expression, new isInstanceOf<BinaryExpression>());
|
| + BinaryExpression binaryExpression = expression;
|
| + expect(binaryExpression.leftOperand, new isInstanceOf<SuperExpression>());
|
| + expect(binaryExpression.operator, isNotNull);
|
| + expect(binaryExpression.operator.type, TokenType.BAR);
|
| + expect(binaryExpression.rightOperand, isNotNull);
|
| }
|
|
|
| - void test_parseClassMember_field_namedSet() {
|
| - createParser('var set;');
|
| - ClassMember member = parser.parseClassMember('C');
|
| - expectNotNullIfNoErrors(member);
|
| + void test_parseBitwiseXorExpression_normal() {
|
| + createParser('x ^ y');
|
| + Expression expression = parser.parseBitwiseXorExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| 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(expression, new isInstanceOf<BinaryExpression>());
|
| + BinaryExpression binaryExpression = expression;
|
| + expect(binaryExpression.leftOperand, isNotNull);
|
| + expect(binaryExpression.operator, isNotNull);
|
| + expect(binaryExpression.operator.type, TokenType.CARET);
|
| + expect(binaryExpression.rightOperand, isNotNull);
|
| }
|
|
|
| - void test_parseClassMember_field_static() {
|
| - createParser('static A f;');
|
| - ClassMember member = parser.parseClassMember('C');
|
| - expectNotNullIfNoErrors(member);
|
| + void test_parseBitwiseXorExpression_super() {
|
| + createParser('super ^ y');
|
| + Expression expression = parser.parseBitwiseXorExpression();
|
| + expectNotNullIfNoErrors(expression);
|
| 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, isNotNull);
|
| - 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(expression, new isInstanceOf<BinaryExpression>());
|
| + BinaryExpression binaryExpression = expression;
|
| + expect(binaryExpression.leftOperand, new isInstanceOf<SuperExpression>());
|
| + expect(binaryExpression.operator, isNotNull);
|
| + expect(binaryExpression.operator.type, TokenType.CARET);
|
| + expect(binaryExpression.rightOperand, isNotNull);
|
| }
|
|
|
| - void test_parseClassMember_getter_functionType() {
|
| - createParser('int Function(int) get g {}');
|
| - ClassMember member = parser.parseClassMember('C');
|
| - expectNotNullIfNoErrors(member);
|
| + void test_parseBlock_empty() {
|
| + createParser('{}');
|
| + Block block = parser.parseBlock();
|
| + expectNotNullIfNoErrors(block);
|
| listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<MethodDeclaration>());
|
| - MethodDeclaration method = member;
|
| - expect(method.documentationComment, isNull);
|
| - expect(method.externalKeyword, isNull);
|
| - expect(method.modifierKeyword, isNull);
|
| - expect(method.propertyKeyword, isNotNull);
|
| - expect(method.returnType, isNotNull);
|
| - expect(method.name, isNotNull);
|
| - expect(method.operatorKeyword, isNull);
|
| - expect(method.body, isNotNull);
|
| - expect(method.parameters, isNull);
|
| + expect(block.leftBracket, isNotNull);
|
| + expect(block.statements, hasLength(0));
|
| + expect(block.rightBracket, isNotNull);
|
| }
|
|
|
| - void test_parseClassMember_getter_void() {
|
| - createParser('void get g {}');
|
| - ClassMember member = parser.parseClassMember('C');
|
| - expectNotNullIfNoErrors(member);
|
| + void test_parseBlock_nonEmpty() {
|
| + createParser('{;}');
|
| + Block block = parser.parseBlock();
|
| + expectNotNullIfNoErrors(block);
|
| listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<MethodDeclaration>());
|
| - MethodDeclaration method = member;
|
| - expect(method.documentationComment, isNull);
|
| - expect(method.externalKeyword, isNull);
|
| - expect(method.modifierKeyword, isNull);
|
| - expect(method.propertyKeyword, isNotNull);
|
| - expect(method.returnType, isNotNull);
|
| - expect(method.name, isNotNull);
|
| - expect(method.operatorKeyword, isNull);
|
| - expect(method.body, isNotNull);
|
| - expect(method.parameters, isNull);
|
| + expect(block.leftBracket, isNotNull);
|
| + expect(block.statements, hasLength(1));
|
| + expect(block.rightBracket, isNotNull);
|
| }
|
|
|
| - void test_parseClassMember_method_external() {
|
| - createParser('external m();');
|
| - ClassMember member = parser.parseClassMember('C');
|
| - expectNotNullIfNoErrors(member);
|
| + void test_parseBreakStatement_label() {
|
| + createParser('break foo;');
|
| + BreakStatement statement = parser.parseBreakStatement();
|
| + expectNotNullIfNoErrors(statement);
|
| listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<MethodDeclaration>());
|
| - MethodDeclaration method = member;
|
| - expect(method.body, isNotNull);
|
| - expect(method.documentationComment, isNull);
|
| - expect(method.externalKeyword, isNotNull);
|
| - expect(method.modifierKeyword, isNull);
|
| - expect(method.name, isNotNull);
|
| - expect(method.operatorKeyword, isNull);
|
| - expect(method.typeParameters, isNull);
|
| - expect(method.parameters, isNotNull);
|
| - expect(method.propertyKeyword, isNull);
|
| - expect(method.returnType, isNull);
|
| + expect(statement.breakKeyword, isNotNull);
|
| + expect(statement.label, isNotNull);
|
| + expect(statement.semicolon, isNotNull);
|
| }
|
|
|
| - void test_parseClassMember_method_external_withTypeAndArgs() {
|
| - createParser('external int m(int a);');
|
| - ClassMember member = parser.parseClassMember('C');
|
| - expectNotNullIfNoErrors(member);
|
| - listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<MethodDeclaration>());
|
| - MethodDeclaration method = member;
|
| - expect(method.body, isNotNull);
|
| - expect(method.documentationComment, isNull);
|
| - expect(method.externalKeyword, isNotNull);
|
| - expect(method.modifierKeyword, isNull);
|
| - expect(method.name, isNotNull);
|
| - expect(method.operatorKeyword, isNull);
|
| - expect(method.typeParameters, isNull);
|
| - expect(method.parameters, isNotNull);
|
| - expect(method.propertyKeyword, isNull);
|
| - expect(method.returnType, isNotNull);
|
| + void test_parseBreakStatement_noLabel() {
|
| + createParser('break;');
|
| + BreakStatement statement = parser.parseBreakStatement();
|
| + expectNotNullIfNoErrors(statement);
|
| + listener.assertErrorsWithCodes([ParserErrorCode.BREAK_OUTSIDE_OF_LOOP]);
|
| + expect(statement.breakKeyword, isNotNull);
|
| + expect(statement.label, isNull);
|
| + expect(statement.semicolon, isNotNull);
|
| }
|
|
|
| - void test_parseClassMember_method_generic_comment_noReturnType() {
|
| - enableGenericMethodComments = true;
|
| - createParser('m/*<T>*/() {}');
|
| - ClassMember member = parser.parseClassMember('C');
|
| - expectNotNullIfNoErrors(member);
|
| + void test_parseCascadeSection_i() {
|
| + createParser('..[i]');
|
| + Expression expression = parser.parseCascadeSection();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<MethodDeclaration>());
|
| - MethodDeclaration method = member;
|
| - expect(method.documentationComment, isNull);
|
| - expect(method.externalKeyword, isNull);
|
| - expect(method.modifierKeyword, isNull);
|
| - expect(method.propertyKeyword, isNull);
|
| - expect(method.returnType, isNull);
|
| - expect(method.name, isNotNull);
|
| - expect(method.operatorKeyword, isNull);
|
| - expect(method.typeParameters, isNotNull);
|
| - expect(method.parameters, isNotNull);
|
| - expect(method.body, isNotNull);
|
| + expect(expression, new isInstanceOf<IndexExpression>());
|
| + IndexExpression section = expression;
|
| + expect(section.target, isNull);
|
| + expect(section.leftBracket, isNotNull);
|
| + expect(section.index, isNotNull);
|
| + expect(section.rightBracket, isNotNull);
|
| }
|
|
|
| - void test_parseClassMember_method_generic_comment_returnType() {
|
| - enableGenericMethodComments = true;
|
| - createParser('/*=T*/ m/*<T>*/() {}');
|
| - ClassMember member = parser.parseClassMember('C');
|
| - expectNotNullIfNoErrors(member);
|
| + void test_parseCascadeSection_ia() {
|
| + createParser('..[i](b)');
|
| + Expression expression = parser.parseCascadeSection();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<MethodDeclaration>());
|
| - MethodDeclaration method = member;
|
| - expect(method.documentationComment, isNull);
|
| - expect(method.externalKeyword, isNull);
|
| - expect(method.modifierKeyword, isNull);
|
| - expect(method.propertyKeyword, isNull);
|
| - expect((method.returnType as TypeName).name.name, 'T');
|
| - expect(method.name, isNotNull);
|
| - expect(method.operatorKeyword, isNull);
|
| - expect(method.typeParameters, isNotNull);
|
| - expect(method.parameters, isNotNull);
|
| - expect(method.body, isNotNull);
|
| + expect(expression, new isInstanceOf<FunctionExpressionInvocation>());
|
| + FunctionExpressionInvocation section = expression;
|
| + expect(section.function, new isInstanceOf<IndexExpression>());
|
| + expect(section.typeArguments, isNull);
|
| + expect(section.argumentList, isNotNull);
|
| }
|
|
|
| - void test_parseClassMember_method_generic_comment_returnType_bound() {
|
| + void test_parseCascadeSection_ia_typeArgumentComments() {
|
| enableGenericMethodComments = true;
|
| - createParser('num/*=T*/ m/*<T extends num>*/() {}');
|
| - ClassMember member = parser.parseClassMember('C');
|
| - expectNotNullIfNoErrors(member);
|
| - listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<MethodDeclaration>());
|
| - MethodDeclaration method = member;
|
| - expect(method.documentationComment, isNull);
|
| - expect(method.externalKeyword, isNull);
|
| - expect(method.modifierKeyword, isNull);
|
| - expect(method.propertyKeyword, isNull);
|
| - expect((method.returnType as TypeName).name.name, 'T');
|
| - expect(method.name, isNotNull);
|
| - expect(method.operatorKeyword, isNull);
|
| - expect(method.typeParameters, isNotNull);
|
| - TypeParameter tp = method.typeParameters.typeParameters[0];
|
| - expect(tp.name.name, 'T');
|
| - expect(tp.extendsKeyword, isNotNull);
|
| - expect((tp.bound as TypeName).name.name, 'num');
|
| - expect(method.parameters, isNotNull);
|
| - expect(method.body, isNotNull);
|
| + createParser('..[i]/*<E>*/(b)');
|
| + Expression expression = parser.parseCascadeSection();
|
| + expectNotNullIfNoErrors(expression);
|
| + listener.assertNoErrors();
|
| + expect(expression, new isInstanceOf<FunctionExpressionInvocation>());
|
| + FunctionExpressionInvocation section = expression;
|
| + expect(section.function, new isInstanceOf<IndexExpression>());
|
| + expect(section.typeArguments, isNotNull);
|
| + expect(section.argumentList, isNotNull);
|
| }
|
|
|
| - void test_parseClassMember_method_generic_comment_void() {
|
| - enableGenericMethodComments = true;
|
| - createParser('void m/*<T>*/() {}');
|
| - ClassMember member = parser.parseClassMember('C');
|
| - expectNotNullIfNoErrors(member);
|
| + void test_parseCascadeSection_ia_typeArguments() {
|
| + createParser('..[i]<E>(b)');
|
| + Expression expression = parser.parseCascadeSection();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<MethodDeclaration>());
|
| - MethodDeclaration method = member;
|
| - expect(method.documentationComment, isNull);
|
| - expect(method.externalKeyword, isNull);
|
| - expect(method.modifierKeyword, isNull);
|
| - expect(method.propertyKeyword, isNull);
|
| - expect(method.returnType, isNotNull);
|
| - expect(method.name, isNotNull);
|
| - expect(method.operatorKeyword, isNull);
|
| - expect(method.typeParameters, isNotNull);
|
| - expect(method.parameters, isNotNull);
|
| - expect(method.body, isNotNull);
|
| + expect(expression, new isInstanceOf<FunctionExpressionInvocation>());
|
| + FunctionExpressionInvocation section = expression;
|
| + expect(section.function, new isInstanceOf<IndexExpression>());
|
| + expect(section.typeArguments, isNotNull);
|
| + expect(section.argumentList, isNotNull);
|
| }
|
|
|
| - void test_parseClassMember_method_generic_noReturnType() {
|
| - createParser('m<T>() {}');
|
| - ClassMember member = parser.parseClassMember('C');
|
| - expectNotNullIfNoErrors(member);
|
| + void test_parseCascadeSection_ii() {
|
| + createParser('..a(b).c(d)');
|
| + Expression expression = parser.parseCascadeSection();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<MethodDeclaration>());
|
| - MethodDeclaration method = member;
|
| - expect(method.documentationComment, isNull);
|
| - expect(method.externalKeyword, isNull);
|
| - expect(method.modifierKeyword, isNull);
|
| - expect(method.propertyKeyword, isNull);
|
| - expect(method.returnType, isNull);
|
| - expect(method.name, isNotNull);
|
| - expect(method.operatorKeyword, isNull);
|
| - expect(method.typeParameters, isNotNull);
|
| - expect(method.parameters, isNotNull);
|
| - expect(method.body, isNotNull);
|
| + expect(expression, new isInstanceOf<MethodInvocation>());
|
| + MethodInvocation section = expression;
|
| + expect(section.target, new isInstanceOf<MethodInvocation>());
|
| + expect(section.operator, isNotNull);
|
| + expect(section.methodName, isNotNull);
|
| + expect(section.typeArguments, isNull);
|
| + expect(section.argumentList, isNotNull);
|
| + expect(section.argumentList.arguments, hasLength(1));
|
| }
|
|
|
| - void test_parseClassMember_method_generic_returnType() {
|
| - createParser('T m<T>() {}');
|
| - ClassMember member = parser.parseClassMember('C');
|
| - expectNotNullIfNoErrors(member);
|
| + void test_parseCascadeSection_ii_typeArgumentComments() {
|
| + enableGenericMethodComments = true;
|
| + createParser('..a/*<E>*/(b).c/*<F>*/(d)');
|
| + Expression expression = parser.parseCascadeSection();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<MethodDeclaration>());
|
| - MethodDeclaration method = member;
|
| - expect(method.documentationComment, isNull);
|
| - expect(method.externalKeyword, isNull);
|
| - expect(method.modifierKeyword, isNull);
|
| - expect(method.propertyKeyword, isNull);
|
| - expect(method.returnType, isNotNull);
|
| - expect(method.name, isNotNull);
|
| - expect(method.operatorKeyword, isNull);
|
| - expect(method.typeParameters, isNotNull);
|
| - expect(method.parameters, isNotNull);
|
| - expect(method.body, isNotNull);
|
| + expect(expression, new isInstanceOf<MethodInvocation>());
|
| + MethodInvocation section = expression;
|
| + expect(section.target, new isInstanceOf<MethodInvocation>());
|
| + expect(section.operator, isNotNull);
|
| + expect(section.methodName, isNotNull);
|
| + expect(section.typeArguments, isNotNull);
|
| + expect(section.argumentList, isNotNull);
|
| + expect(section.argumentList.arguments, hasLength(1));
|
| }
|
|
|
| - void test_parseClassMember_method_generic_void() {
|
| - createParser('void m<T>() {}');
|
| - ClassMember member = parser.parseClassMember('C');
|
| - expectNotNullIfNoErrors(member);
|
| + void test_parseCascadeSection_ii_typeArguments() {
|
| + createParser('..a<E>(b).c<F>(d)');
|
| + Expression expression = parser.parseCascadeSection();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<MethodDeclaration>());
|
| - MethodDeclaration method = member;
|
| - expect(method.documentationComment, isNull);
|
| - expect(method.externalKeyword, isNull);
|
| - expect(method.modifierKeyword, isNull);
|
| - expect(method.propertyKeyword, isNull);
|
| - expect(method.returnType, isNotNull);
|
| - expect(method.name, isNotNull);
|
| - expect(method.operatorKeyword, isNull);
|
| - expect(method.typeParameters, isNotNull);
|
| - expect(method.parameters, isNotNull);
|
| - expect(method.body, isNotNull);
|
| + expect(expression, new isInstanceOf<MethodInvocation>());
|
| + MethodInvocation section = expression;
|
| + expect(section.target, new isInstanceOf<MethodInvocation>());
|
| + expect(section.operator, isNotNull);
|
| + expect(section.methodName, isNotNull);
|
| + expect(section.typeArguments, isNotNull);
|
| + expect(section.argumentList, isNotNull);
|
| + expect(section.argumentList.arguments, hasLength(1));
|
| }
|
|
|
| - void test_parseClassMember_method_get_noType() {
|
| - createParser('get() {}');
|
| - ClassMember member = parser.parseClassMember('C');
|
| - expectNotNullIfNoErrors(member);
|
| + void test_parseCascadeSection_p() {
|
| + createParser('..a');
|
| + Expression expression = parser.parseCascadeSection();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<MethodDeclaration>());
|
| - MethodDeclaration method = member;
|
| - expect(method.documentationComment, isNull);
|
| - expect(method.externalKeyword, isNull);
|
| - expect(method.modifierKeyword, isNull);
|
| - expect(method.propertyKeyword, isNull);
|
| - expect(method.returnType, isNull);
|
| - expect(method.name, isNotNull);
|
| - expect(method.operatorKeyword, isNull);
|
| - expect(method.typeParameters, isNull);
|
| - expect(method.parameters, isNotNull);
|
| - expect(method.body, isNotNull);
|
| + expect(expression, new isInstanceOf<PropertyAccess>());
|
| + PropertyAccess section = expression;
|
| + expect(section.target, isNull);
|
| + expect(section.operator, isNotNull);
|
| + expect(section.propertyName, isNotNull);
|
| }
|
|
|
| - void test_parseClassMember_method_get_type() {
|
| - createParser('int get() {}');
|
| - ClassMember member = parser.parseClassMember('C');
|
| - expectNotNullIfNoErrors(member);
|
| + void test_parseCascadeSection_p_assign() {
|
| + createParser('..a = 3');
|
| + Expression expression = parser.parseCascadeSection();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<MethodDeclaration>());
|
| - MethodDeclaration method = member;
|
| - expect(method.documentationComment, isNull);
|
| - expect(method.externalKeyword, isNull);
|
| - expect(method.modifierKeyword, isNull);
|
| - expect(method.propertyKeyword, isNull);
|
| - expect(method.returnType, isNotNull);
|
| - expect(method.name, isNotNull);
|
| - expect(method.operatorKeyword, isNull);
|
| - expect(method.typeParameters, isNull);
|
| - expect(method.parameters, isNotNull);
|
| - expect(method.body, isNotNull);
|
| + expect(expression, new isInstanceOf<AssignmentExpression>());
|
| + AssignmentExpression section = expression;
|
| + expect(section.leftHandSide, isNotNull);
|
| + expect(section.operator, isNotNull);
|
| + Expression rhs = section.rightHandSide;
|
| + expect(rhs, isNotNull);
|
| }
|
|
|
| - void test_parseClassMember_method_get_void() {
|
| - createParser('void get() {}');
|
| - ClassMember member = parser.parseClassMember('C');
|
| - expectNotNullIfNoErrors(member);
|
| + void test_parseCascadeSection_p_assign_withCascade() {
|
| + createParser('..a = 3..m()');
|
| + Expression expression = parser.parseCascadeSection();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<MethodDeclaration>());
|
| - MethodDeclaration method = member;
|
| - expect(method.documentationComment, isNull);
|
| - expect(method.externalKeyword, isNull);
|
| - expect(method.modifierKeyword, isNull);
|
| - expect(method.propertyKeyword, isNull);
|
| - expect(method.returnType, isNotNull);
|
| - expect(method.name, isNotNull);
|
| - expect(method.operatorKeyword, isNull);
|
| - expect(method.typeParameters, isNull);
|
| - expect(method.parameters, isNotNull);
|
| - expect(method.body, isNotNull);
|
| + expect(expression, new isInstanceOf<AssignmentExpression>());
|
| + AssignmentExpression section = expression;
|
| + expect(section.leftHandSide, isNotNull);
|
| + expect(section.operator, isNotNull);
|
| + Expression rhs = section.rightHandSide;
|
| + EngineTestCase.assertInstanceOf(
|
| + (obj) => obj is IntegerLiteral, IntegerLiteral, rhs);
|
| }
|
|
|
| - void test_parseClassMember_method_operator_noType() {
|
| - createParser('operator() {}');
|
| - ClassMember member = parser.parseClassMember('C');
|
| - expectNotNullIfNoErrors(member);
|
| + void test_parseCascadeSection_p_assign_withCascade_typeArgumentComments() {
|
| + enableGenericMethodComments = true;
|
| + createParser('..a = 3..m/*<E>*/()');
|
| + Expression expression = parser.parseCascadeSection();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<MethodDeclaration>());
|
| - MethodDeclaration method = member;
|
| - expect(method.documentationComment, isNull);
|
| - expect(method.externalKeyword, isNull);
|
| - expect(method.modifierKeyword, isNull);
|
| - expect(method.propertyKeyword, isNull);
|
| - expect(method.returnType, isNull);
|
| - expect(method.name, isNotNull);
|
| - expect(method.operatorKeyword, isNull);
|
| - expect(method.typeParameters, isNull);
|
| - expect(method.parameters, isNotNull);
|
| - expect(method.body, isNotNull);
|
| + expect(expression, new isInstanceOf<AssignmentExpression>());
|
| + AssignmentExpression section = expression;
|
| + expect(section.leftHandSide, isNotNull);
|
| + expect(section.operator, isNotNull);
|
| + Expression rhs = section.rightHandSide;
|
| + EngineTestCase.assertInstanceOf(
|
| + (obj) => obj is IntegerLiteral, IntegerLiteral, rhs);
|
| }
|
|
|
| - void test_parseClassMember_method_operator_type() {
|
| - createParser('int operator() {}');
|
| - ClassMember member = parser.parseClassMember('C');
|
| - expectNotNullIfNoErrors(member);
|
| + void test_parseCascadeSection_p_assign_withCascade_typeArguments() {
|
| + createParser('..a = 3..m<E>()');
|
| + Expression expression = parser.parseCascadeSection();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<MethodDeclaration>());
|
| - MethodDeclaration method = member;
|
| - expect(method.documentationComment, isNull);
|
| - expect(method.externalKeyword, isNull);
|
| - expect(method.modifierKeyword, isNull);
|
| - expect(method.propertyKeyword, isNull);
|
| - expect(method.returnType, isNotNull);
|
| - expect(method.name, isNotNull);
|
| - expect(method.operatorKeyword, isNull);
|
| - expect(method.typeParameters, isNull);
|
| - expect(method.parameters, isNotNull);
|
| - expect(method.body, isNotNull);
|
| + expect(expression, new isInstanceOf<AssignmentExpression>());
|
| + AssignmentExpression section = expression;
|
| + expect(section.leftHandSide, isNotNull);
|
| + expect(section.operator, isNotNull);
|
| + Expression rhs = section.rightHandSide;
|
| + EngineTestCase.assertInstanceOf(
|
| + (obj) => obj is IntegerLiteral, IntegerLiteral, rhs);
|
| + }
|
| +
|
| + void test_parseCascadeSection_p_builtIn() {
|
| + createParser('..as');
|
| + Expression expression = parser.parseCascadeSection();
|
| + expectNotNullIfNoErrors(expression);
|
| + listener.assertNoErrors();
|
| + expect(expression, new isInstanceOf<PropertyAccess>());
|
| + PropertyAccess section = expression;
|
| + expect(section.target, isNull);
|
| + expect(section.operator, isNotNull);
|
| + expect(section.propertyName, isNotNull);
|
| }
|
|
|
| - void test_parseClassMember_method_operator_void() {
|
| - createParser('void operator() {}');
|
| - ClassMember member = parser.parseClassMember('C');
|
| - expectNotNullIfNoErrors(member);
|
| + void test_parseCascadeSection_pa() {
|
| + createParser('..a(b)');
|
| + Expression expression = parser.parseCascadeSection();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<MethodDeclaration>());
|
| - MethodDeclaration method = member;
|
| - expect(method.documentationComment, isNull);
|
| - expect(method.externalKeyword, isNull);
|
| - expect(method.modifierKeyword, isNull);
|
| - expect(method.propertyKeyword, isNull);
|
| - expect(method.returnType, isNotNull);
|
| - expect(method.name, isNotNull);
|
| - expect(method.operatorKeyword, isNull);
|
| - expect(method.typeParameters, isNull);
|
| - expect(method.parameters, isNotNull);
|
| - expect(method.body, isNotNull);
|
| + expect(expression, new isInstanceOf<MethodInvocation>());
|
| + MethodInvocation section = expression;
|
| + expect(section.target, isNull);
|
| + expect(section.operator, isNotNull);
|
| + expect(section.methodName, isNotNull);
|
| + expect(section.typeArguments, isNull);
|
| + expect(section.argumentList, isNotNull);
|
| + expect(section.argumentList.arguments, hasLength(1));
|
| }
|
|
|
| - void test_parseClassMember_method_returnType_functionType() {
|
| - createParser('int Function(String) m() {}');
|
| - ClassMember member = parser.parseClassMember('C');
|
| - expectNotNullIfNoErrors(member);
|
| + void test_parseCascadeSection_pa_typeArgumentComments() {
|
| + enableGenericMethodComments = true;
|
| + createParser('..a/*<E>*/(b)');
|
| + Expression expression = parser.parseCascadeSection();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<MethodDeclaration>());
|
| - MethodDeclaration method = member;
|
| - expect(method.documentationComment, isNull);
|
| - expect(method.externalKeyword, isNull);
|
| - expect(method.modifierKeyword, isNull);
|
| - expect(method.propertyKeyword, isNull);
|
| - expect(method.returnType, isNotNull);
|
| - expect(method.name, isNotNull);
|
| - expect(method.name.name, 'm');
|
| - expect(method.operatorKeyword, isNull);
|
| - expect(method.typeParameters, isNull);
|
| - expect(method.parameters, isNotNull);
|
| - expect(method.body, isNotNull);
|
| + expect(expression, new isInstanceOf<MethodInvocation>());
|
| + MethodInvocation section = expression;
|
| + expect(section.target, isNull);
|
| + expect(section.operator, isNotNull);
|
| + expect(section.methodName, isNotNull);
|
| + expect(section.typeArguments, isNotNull);
|
| + expect(section.argumentList, isNotNull);
|
| + expect(section.argumentList.arguments, hasLength(1));
|
| }
|
|
|
| - void test_parseClassMember_method_returnType_parameterized() {
|
| - createParser('p.A m() {}');
|
| - ClassMember member = parser.parseClassMember('C');
|
| - expectNotNullIfNoErrors(member);
|
| + void test_parseCascadeSection_pa_typeArguments() {
|
| + createParser('..a<E>(b)');
|
| + Expression expression = parser.parseCascadeSection();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<MethodDeclaration>());
|
| - MethodDeclaration method = member;
|
| - expect(method.documentationComment, isNull);
|
| - expect(method.externalKeyword, isNull);
|
| - expect(method.modifierKeyword, isNull);
|
| - expect(method.propertyKeyword, isNull);
|
| - expect(method.returnType, isNotNull);
|
| - expect(method.name, isNotNull);
|
| - expect(method.operatorKeyword, isNull);
|
| - expect(method.typeParameters, isNull);
|
| - expect(method.parameters, isNotNull);
|
| - expect(method.body, isNotNull);
|
| + expect(expression, new isInstanceOf<MethodInvocation>());
|
| + MethodInvocation section = expression;
|
| + expect(section.target, isNull);
|
| + expect(section.operator, isNotNull);
|
| + expect(section.methodName, isNotNull);
|
| + expect(section.typeArguments, isNotNull);
|
| + expect(section.argumentList, isNotNull);
|
| + expect(section.argumentList.arguments, hasLength(1));
|
| }
|
|
|
| - void test_parseClassMember_method_set_noType() {
|
| - createParser('set() {}');
|
| - ClassMember member = parser.parseClassMember('C');
|
| - expectNotNullIfNoErrors(member);
|
| + void test_parseCascadeSection_paa() {
|
| + createParser('..a(b)(c)');
|
| + Expression expression = parser.parseCascadeSection();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<MethodDeclaration>());
|
| - MethodDeclaration method = member;
|
| - expect(method.documentationComment, isNull);
|
| - expect(method.externalKeyword, isNull);
|
| - expect(method.modifierKeyword, isNull);
|
| - expect(method.propertyKeyword, isNull);
|
| - expect(method.returnType, isNull);
|
| - expect(method.name, isNotNull);
|
| - expect(method.operatorKeyword, isNull);
|
| - expect(method.typeParameters, isNull);
|
| - expect(method.parameters, isNotNull);
|
| - expect(method.body, isNotNull);
|
| + expect(expression, new isInstanceOf<FunctionExpressionInvocation>());
|
| + FunctionExpressionInvocation section = expression;
|
| + expect(section.function, new isInstanceOf<MethodInvocation>());
|
| + expect(section.typeArguments, isNull);
|
| + expect(section.argumentList, isNotNull);
|
| + expect(section.argumentList.arguments, hasLength(1));
|
| }
|
|
|
| - void test_parseClassMember_method_set_type() {
|
| - createParser('int set() {}');
|
| - ClassMember member = parser.parseClassMember('C');
|
| - expectNotNullIfNoErrors(member);
|
| + void test_parseCascadeSection_paa_typeArgumentComments() {
|
| + enableGenericMethodComments = true;
|
| + createParser('..a/*<E>*/(b)/*<F>*/(c)');
|
| + Expression expression = parser.parseCascadeSection();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<MethodDeclaration>());
|
| - MethodDeclaration method = member;
|
| - expect(method.documentationComment, isNull);
|
| - expect(method.externalKeyword, isNull);
|
| - expect(method.modifierKeyword, isNull);
|
| - expect(method.propertyKeyword, isNull);
|
| - expect(method.returnType, isNotNull);
|
| - expect(method.name, isNotNull);
|
| - expect(method.operatorKeyword, isNull);
|
| - expect(method.typeParameters, isNull);
|
| - expect(method.parameters, isNotNull);
|
| - expect(method.body, isNotNull);
|
| + expect(expression, new isInstanceOf<FunctionExpressionInvocation>());
|
| + FunctionExpressionInvocation section = expression;
|
| + expect(section.function, new isInstanceOf<MethodInvocation>());
|
| + expect(section.typeArguments, isNotNull);
|
| + expect(section.argumentList, isNotNull);
|
| + expect(section.argumentList.arguments, hasLength(1));
|
| }
|
|
|
| - void test_parseClassMember_method_set_void() {
|
| - createParser('void set() {}');
|
| - ClassMember member = parser.parseClassMember('C');
|
| - expectNotNullIfNoErrors(member);
|
| + void test_parseCascadeSection_paa_typeArguments() {
|
| + createParser('..a<E>(b)<F>(c)');
|
| + Expression expression = parser.parseCascadeSection();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<MethodDeclaration>());
|
| - MethodDeclaration method = member;
|
| - expect(method.documentationComment, isNull);
|
| - expect(method.externalKeyword, isNull);
|
| - expect(method.modifierKeyword, isNull);
|
| - expect(method.propertyKeyword, isNull);
|
| - expect(method.returnType, isNotNull);
|
| - expect(method.name, isNotNull);
|
| - expect(method.operatorKeyword, isNull);
|
| - expect(method.typeParameters, isNull);
|
| - expect(method.parameters, isNotNull);
|
| - expect(method.body, isNotNull);
|
| + expect(expression, new isInstanceOf<FunctionExpressionInvocation>());
|
| + FunctionExpressionInvocation section = expression;
|
| + expect(section.function, new isInstanceOf<MethodInvocation>());
|
| + expect(section.typeArguments, isNotNull);
|
| + expect(section.argumentList, isNotNull);
|
| + expect(section.argumentList.arguments, hasLength(1));
|
| }
|
|
|
| - void test_parseClassMember_method_trailing_commas() {
|
| - createParser('void f(int x, int y,) {}');
|
| - ClassMember member = parser.parseClassMember('C');
|
| - expectNotNullIfNoErrors(member);
|
| + void test_parseCascadeSection_paapaa() {
|
| + createParser('..a(b)(c).d(e)(f)');
|
| + Expression expression = parser.parseCascadeSection();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<MethodDeclaration>());
|
| - MethodDeclaration method = member;
|
| - expect(method.documentationComment, isNull);
|
| - expect(method.externalKeyword, isNull);
|
| - expect(method.modifierKeyword, isNull);
|
| - expect(method.propertyKeyword, isNull);
|
| - expect(method.returnType, isNotNull);
|
| - expect(method.name, isNotNull);
|
| - expect(method.operatorKeyword, isNull);
|
| - expect(method.typeParameters, isNull);
|
| - expect(method.parameters, isNotNull);
|
| - expect(method.body, isNotNull);
|
| + expect(expression, new isInstanceOf<FunctionExpressionInvocation>());
|
| + FunctionExpressionInvocation section = expression;
|
| + expect(section.function, new isInstanceOf<MethodInvocation>());
|
| + expect(section.typeArguments, isNull);
|
| + expect(section.argumentList, isNotNull);
|
| + expect(section.argumentList.arguments, hasLength(1));
|
| }
|
|
|
| - void test_parseClassMember_operator_functionType() {
|
| - createParser('int Function() operator +(int Function() f) {}');
|
| - ClassMember member = parser.parseClassMember('C');
|
| - expectNotNullIfNoErrors(member);
|
| + void test_parseCascadeSection_paapaa_typeArgumentComments() {
|
| + enableGenericMethodComments = true;
|
| + createParser('..a/*<E>*/(b)/*<F>*/(c).d/*<G>*/(e)/*<H>*/(f)');
|
| + Expression expression = parser.parseCascadeSection();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<MethodDeclaration>());
|
| - MethodDeclaration method = member;
|
| - expect(method.documentationComment, isNull);
|
| - expect(method.externalKeyword, isNull);
|
| - expect(method.modifierKeyword, isNull);
|
| - expect(method.propertyKeyword, isNull);
|
| - expect(method.returnType, new isInstanceOf<GenericFunctionType>());
|
| - expect(method.name, isNotNull);
|
| - expect(method.operatorKeyword, isNotNull);
|
| - expect(method.typeParameters, isNull);
|
| - expect(method.parameters, isNotNull);
|
| - NodeList<FormalParameter> parameters = method.parameters.parameters;
|
| - expect(parameters, hasLength(1));
|
| - expect((parameters[0] as SimpleFormalParameter).type,
|
| - new isInstanceOf<GenericFunctionType>());
|
| - expect(method.body, isNotNull);
|
| + expect(expression, new isInstanceOf<FunctionExpressionInvocation>());
|
| + FunctionExpressionInvocation section = expression;
|
| + expect(section.function, new isInstanceOf<MethodInvocation>());
|
| + expect(section.typeArguments, isNotNull);
|
| + expect(section.argumentList, isNotNull);
|
| + expect(section.argumentList.arguments, hasLength(1));
|
| }
|
|
|
| - void test_parseClassMember_operator_index() {
|
| - createParser('int operator [](int i) {}');
|
| - ClassMember member = parser.parseClassMember('C');
|
| - expectNotNullIfNoErrors(member);
|
| + void test_parseCascadeSection_paapaa_typeArguments() {
|
| + createParser('..a<E>(b)<F>(c).d<G>(e)<H>(f)');
|
| + Expression expression = parser.parseCascadeSection();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<MethodDeclaration>());
|
| - MethodDeclaration method = member;
|
| - expect(method.documentationComment, isNull);
|
| - expect(method.externalKeyword, isNull);
|
| - expect(method.modifierKeyword, isNull);
|
| - expect(method.propertyKeyword, isNull);
|
| - expect(method.returnType, isNotNull);
|
| - expect(method.name, isNotNull);
|
| - expect(method.operatorKeyword, isNotNull);
|
| - expect(method.typeParameters, isNull);
|
| - expect(method.parameters, isNotNull);
|
| - expect(method.body, isNotNull);
|
| + expect(expression, new isInstanceOf<FunctionExpressionInvocation>());
|
| + FunctionExpressionInvocation section = expression;
|
| + expect(section.function, new isInstanceOf<MethodInvocation>());
|
| + expect(section.typeArguments, isNotNull);
|
| + expect(section.argumentList, isNotNull);
|
| + expect(section.argumentList.arguments, hasLength(1));
|
| }
|
|
|
| - void test_parseClassMember_operator_indexAssign() {
|
| - createParser('int operator []=(int i) {}');
|
| - ClassMember member = parser.parseClassMember('C');
|
| - expectNotNullIfNoErrors(member);
|
| + void test_parseCascadeSection_pap() {
|
| + createParser('..a(b).c');
|
| + Expression expression = parser.parseCascadeSection();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<MethodDeclaration>());
|
| - MethodDeclaration method = member;
|
| - expect(method.documentationComment, isNull);
|
| - expect(method.externalKeyword, isNull);
|
| - expect(method.modifierKeyword, isNull);
|
| - expect(method.propertyKeyword, isNull);
|
| - expect(method.returnType, isNotNull);
|
| - expect(method.name, isNotNull);
|
| - expect(method.operatorKeyword, isNotNull);
|
| - expect(method.typeParameters, isNull);
|
| - expect(method.parameters, isNotNull);
|
| - expect(method.body, isNotNull);
|
| + expect(expression, new isInstanceOf<PropertyAccess>());
|
| + PropertyAccess section = expression;
|
| + expect(section.target, isNotNull);
|
| + expect(section.operator, isNotNull);
|
| + expect(section.propertyName, isNotNull);
|
| }
|
|
|
| - void test_parseClassMember_redirectingFactory_const() {
|
| - createParser('const factory C() = B;');
|
| - ClassMember member = parser.parseClassMember('C');
|
| - expectNotNullIfNoErrors(member);
|
| + void test_parseCascadeSection_pap_typeArgumentComments() {
|
| + enableGenericMethodComments = true;
|
| + createParser('..a/*<E>*/(b).c');
|
| + Expression expression = parser.parseCascadeSection();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<ConstructorDeclaration>());
|
| - ConstructorDeclaration constructor = member;
|
| - expect(constructor.externalKeyword, isNull);
|
| - expect(constructor.constKeyword, isNotNull);
|
| - expect(constructor.factoryKeyword, isNotNull);
|
| - expect(constructor.returnType, isNotNull);
|
| - expect(constructor.period, isNull);
|
| - expect(constructor.name, isNull);
|
| - expect(constructor.parameters, isNotNull);
|
| - expect(constructor.separator, isNotNull);
|
| - expect(constructor.initializers, hasLength(0));
|
| - expect(constructor.redirectedConstructor, isNotNull);
|
| - expect(constructor.body, isNotNull);
|
| + expect(expression, new isInstanceOf<PropertyAccess>());
|
| + PropertyAccess section = expression;
|
| + expect(section.target, isNotNull);
|
| + expect(section.operator, isNotNull);
|
| + expect(section.propertyName, isNotNull);
|
| }
|
|
|
| - void test_parseClassMember_redirectingFactory_nonConst() {
|
| - createParser('factory C() = B;');
|
| - ClassMember member = parser.parseClassMember('C');
|
| - expectNotNullIfNoErrors(member);
|
| + void test_parseCascadeSection_pap_typeArguments() {
|
| + createParser('..a<E>(b).c');
|
| + Expression expression = parser.parseCascadeSection();
|
| + expectNotNullIfNoErrors(expression);
|
| listener.assertNoErrors();
|
| - expect(member, new isInstanceOf<ConstructorDeclaration>());
|
| - ConstructorDeclaration constructor = member;
|
| - expect(constructor.externalKeyword, isNull);
|
| - expect(constructor.constKeyword, isNull);
|
| - expect(constructor.factoryKeyword, isNotNull);
|
| - expect(constructor.returnType, isNotNull);
|
| - expect(constructor.period, isNull);
|
| - expect(constructor.name, isNull);
|
| - expect(constructor.parameters, isNotNull);
|
| - expect(constructor.separator, isNotNull);
|
| - expect(constructor.initializers, hasLength(0));
|
| - expect(constructor.redirectedConstructor, isNotNull);
|
| - expect(constructor.body, isNotNull);
|
| + expect(expression, new isInstanceOf<PropertyAccess>());
|
| + PropertyAccess section = expression;
|
| + expect(section.target, isNotNull);
|
| + expect(section.operator, isNotNull);
|
| + expect(section.propertyName, isNotNull);
|
| }
|
|
|
| void test_parseCombinator_hide() {
|
| @@ -8404,71 +8595,6 @@ void''');
|
| // TODO(brianwilkerson) Implement tests for this method.
|
| }
|
|
|
| - 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<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_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<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_parseConstructorFieldInitializer_qualified() {
|
| - createParser('this.a = b');
|
| - ConstructorFieldInitializer initializer =
|
| - parser.parseConstructorFieldInitializer(true);
|
| - expectNotNullIfNoErrors(initializer);
|
| - listener.assertNoErrors();
|
| - expect(initializer.equals, isNotNull);
|
| - expect(initializer.expression, isNotNull);
|
| - expect(initializer.fieldName, isNotNull);
|
| - expect(initializer.thisKeyword, isNotNull);
|
| - expect(initializer.period, 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();
|
| @@ -9558,39 +9684,6 @@ void''');
|
| expect((expression.body as ExpressionFunctionBody).semicolon, isNull);
|
| }
|
|
|
| - void test_parseGetter_nonStatic() {
|
| - createParser('/// Doc\nT get a;');
|
| - MethodDeclaration method = parser.parseClassMember('C');
|
| - expectNotNullIfNoErrors(method);
|
| - 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');
|
| - }
|
| -
|
| - void test_parseGetter_static() {
|
| - createParser('/// Doc\nstatic T get a => 42;');
|
| - MethodDeclaration method = parser.parseClassMember('C');
|
| - expectNotNullIfNoErrors(method);
|
| - 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();
|
| @@ -9681,36 +9774,6 @@ void''');
|
| expect(clause.implementsKeyword, isNotNull);
|
| }
|
|
|
| - void test_parseInitializedIdentifierList_type() {
|
| - createParser("/// Doc\nstatic T 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, 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_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_parseInstanceCreationExpression_qualifiedType() {
|
| Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
|
| createParser('A.B()');
|
| @@ -10476,23 +10539,6 @@ void''');
|
| listener.assertNoErrors();
|
| }
|
|
|
| - void test_parseOperator() {
|
| - createParser('/// Doc\nT operator +(A a);');
|
| - MethodDeclaration method = parser.parseClassMember('C');
|
| - expectNotNullIfNoErrors(method);
|
| - 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.
|
| }
|
| @@ -11154,40 +11200,6 @@ void''');
|
| expect(typeName.typeArguments, isNull);
|
| }
|
|
|
| - void test_parseSetter_nonStatic() {
|
| - createParser('/// Doc\nT set a(var x);');
|
| - MethodDeclaration method = parser.parseClassMember('C');
|
| - expectNotNullIfNoErrors(method);
|
| - 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);
|
| - 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();
|
|
|