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(); |