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

Unified Diff: pkg/analyzer/test/generated/parser_test.dart

Issue 2713553011: Split parser tests that exercise class members to their own class. (Closed)
Patch Set: Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: 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();
« no previous file with comments | « pkg/analyzer/test/generated/parser_fasta_test.dart ('k') | pkg/front_end/lib/src/fasta/analyzer/ast_builder.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698