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

Side by Side Diff: pkg/analyzer/test/generated/parser_test.dart

Issue 2717233004: Extract ExpressionParserText from SimpleParserTest. (Closed)
Patch Set: Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « pkg/analyzer/test/generated/parser_fasta_test.dart ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library analyzer.test.generated.parser_test; 5 library analyzer.test.generated.parser_test;
6 6
7 import 'package:analyzer/dart/ast/ast.dart'; 7 import 'package:analyzer/dart/ast/ast.dart';
8 import 'package:analyzer/dart/ast/standard_ast_factory.dart'; 8 import 'package:analyzer/dart/ast/standard_ast_factory.dart';
9 import 'package:analyzer/dart/ast/token.dart'; 9 import 'package:analyzer/dart/ast/token.dart';
10 import 'package:analyzer/dart/ast/visitor.dart'; 10 import 'package:analyzer/dart/ast/visitor.dart';
(...skipping 10 matching lines...) Expand all
21 import 'package:test/test.dart'; 21 import 'package:test/test.dart';
22 import 'package:test_reflective_loader/test_reflective_loader.dart'; 22 import 'package:test_reflective_loader/test_reflective_loader.dart';
23 23
24 import 'test_support.dart'; 24 import 'test_support.dart';
25 25
26 main() { 26 main() {
27 defineReflectiveSuite(() { 27 defineReflectiveSuite(() {
28 defineReflectiveTests(ClassMemberParserTest); 28 defineReflectiveTests(ClassMemberParserTest);
29 defineReflectiveTests(ComplexParserTest); 29 defineReflectiveTests(ComplexParserTest);
30 defineReflectiveTests(ErrorParserTest); 30 defineReflectiveTests(ErrorParserTest);
31 defineReflectiveTests(ExpressionParserText);
31 defineReflectiveTests(FormalParameterParserTest); 32 defineReflectiveTests(FormalParameterParserTest);
32 defineReflectiveTests(NonErrorParserTest); 33 defineReflectiveTests(NonErrorParserTest);
33 defineReflectiveTests(RecoveryParserTest); 34 defineReflectiveTests(RecoveryParserTest);
34 defineReflectiveTests(SimpleParserTest); 35 defineReflectiveTests(SimpleParserTest);
35 defineReflectiveTests(TopLevelParserTest); 36 defineReflectiveTests(TopLevelParserTest);
36 }); 37 });
37 } 38 }
38 39
39 /** 40 /**
40 * Abstract base class for parser tests, which does not make assumptions about 41 * Abstract base class for parser tests, which does not make assumptions about
41 * which parser is used. 42 * which parser is used.
42 */ 43 */
43 abstract class AbstractParserTestCase implements ParserTestHelpers { 44 abstract class AbstractParserTestCase implements ParserTestHelpers {
44 void set enableAssertInitializer(bool value); 45 void set enableAssertInitializer(bool value);
45 46
46 void set enableGenericMethodComments(bool value); 47 void set enableGenericMethodComments(bool value);
47 48
49 void set enableLazyAssignmentOperators(bool value);
50
48 void set enableNnbd(bool value); 51 void set enableNnbd(bool value);
49 52
50 /** 53 /**
51 * Set a flag indicating whether the parser is to parse part-of directives 54 * Set a flag indicating whether the parser is to parse part-of directives
52 * that specify a URI rather than a library name. 55 * that specify a URI rather than a library name.
53 */ 56 */
54 void set enableUriInPartOf(bool value); 57 void set enableUriInPartOf(bool value);
55 58
56 /** 59 /**
57 * Get the parser used by the test. 60 * Get the parser used by the test.
(...skipping 3882 matching lines...) Expand 10 before | Expand all | Expand 10 after
3940 3943
3941 void test_wrongTerminatorForParameterGroup_optional() { 3944 void test_wrongTerminatorForParameterGroup_optional() {
3942 createParser('(a, [b, c})'); 3945 createParser('(a, [b, c})');
3943 FormalParameterList list = parser.parseFormalParameterList(); 3946 FormalParameterList list = parser.parseFormalParameterList();
3944 expectNotNullIfNoErrors(list); 3947 expectNotNullIfNoErrors(list);
3945 listener.assertErrorsWithCodes( 3948 listener.assertErrorsWithCodes(
3946 [ParserErrorCode.WRONG_TERMINATOR_FOR_PARAMETER_GROUP]); 3949 [ParserErrorCode.WRONG_TERMINATOR_FOR_PARAMETER_GROUP]);
3947 } 3950 }
3948 } 3951 }
3949 3952
3953 @reflectiveTest
3954 class ExpressionParserText extends ParserTestCase
Paul Berry 2017/02/27 20:39:39 I think you mean "ExpressionParserTest"
3955 with ExpressionParserTextMixin {}
3956
3957 abstract class ExpressionParserTextMixin implements AbstractParserTestCase {
Paul Berry 2017/02/27 20:39:39 Similarly, this should be "ExpressionParserTestMix
3958 void test_parseAdditiveExpression_normal() {
3959 createParser('x + y');
3960 Expression expression = parser.parseAdditiveExpression();
3961 expect(expression, isNotNull);
3962 assertNoErrors();
3963 expect(expression, new isInstanceOf<BinaryExpression>());
3964 BinaryExpression binaryExpression = expression;
3965 expect(binaryExpression.leftOperand, isNotNull);
3966 expect(binaryExpression.operator, isNotNull);
3967 expect(binaryExpression.operator.type, TokenType.PLUS);
3968 expect(binaryExpression.rightOperand, isNotNull);
3969 }
3970
3971 void test_parseAdditiveExpression_super() {
3972 createParser('super + y');
3973 Expression expression = parser.parseAdditiveExpression();
3974 expect(expression, isNotNull);
3975 assertNoErrors();
3976 expect(expression, new isInstanceOf<BinaryExpression>());
3977 BinaryExpression binaryExpression = expression;
3978 expect(binaryExpression.leftOperand, new isInstanceOf<SuperExpression>());
3979 expect(binaryExpression.operator, isNotNull);
3980 expect(binaryExpression.operator.type, TokenType.PLUS);
3981 expect(binaryExpression.rightOperand, isNotNull);
3982 }
3983
3984 void test_parseAssignableExpression_expression_args_dot() {
3985 createParser('(x)(y).z');
3986 Expression expression = parser.parseAssignableExpression(false);
3987 expect(expression, isNotNull);
3988 assertNoErrors();
3989 expect(expression, new isInstanceOf<PropertyAccess>());
3990 PropertyAccess propertyAccess = expression;
3991 FunctionExpressionInvocation invocation =
3992 propertyAccess.target as FunctionExpressionInvocation;
3993 expect(invocation.function, isNotNull);
3994 expect(invocation.typeArguments, isNull);
3995 ArgumentList argumentList = invocation.argumentList;
3996 expect(argumentList, isNotNull);
3997 expect(argumentList.arguments, hasLength(1));
3998 expect(propertyAccess.operator, isNotNull);
3999 expect(propertyAccess.propertyName, isNotNull);
4000 }
4001
4002 void
4003 test_parseAssignableExpression_expression_args_dot_typeParameterComments() {
4004 enableGenericMethodComments = true;
4005 createParser('(x)/*<F>*/(y).z');
4006 Expression expression = parser.parseAssignableExpression(false);
4007 expect(expression, isNotNull);
4008 assertNoErrors();
4009 expect(expression, new isInstanceOf<PropertyAccess>());
4010 PropertyAccess propertyAccess = expression;
4011 FunctionExpressionInvocation invocation =
4012 propertyAccess.target as FunctionExpressionInvocation;
4013 expect(invocation.function, isNotNull);
4014 expect(invocation.typeArguments, isNotNull);
4015 ArgumentList argumentList = invocation.argumentList;
4016 expect(argumentList, isNotNull);
4017 expect(argumentList.arguments, hasLength(1));
4018 expect(propertyAccess.operator, isNotNull);
4019 expect(propertyAccess.propertyName, isNotNull);
4020 }
4021
4022 void test_parseAssignableExpression_expression_args_dot_typeParameters() {
4023 createParser('(x)<F>(y).z');
4024 Expression expression = parser.parseAssignableExpression(false);
4025 expect(expression, isNotNull);
4026 assertNoErrors();
4027 expect(expression, new isInstanceOf<PropertyAccess>());
4028 PropertyAccess propertyAccess = expression;
4029 FunctionExpressionInvocation invocation =
4030 propertyAccess.target as FunctionExpressionInvocation;
4031 expect(invocation.function, isNotNull);
4032 expect(invocation.typeArguments, isNotNull);
4033 ArgumentList argumentList = invocation.argumentList;
4034 expect(argumentList, isNotNull);
4035 expect(argumentList.arguments, hasLength(1));
4036 expect(propertyAccess.operator, isNotNull);
4037 expect(propertyAccess.propertyName, isNotNull);
4038 }
4039
4040 void test_parseAssignableExpression_expression_dot() {
4041 createParser('(x).y');
4042 Expression expression = parser.parseAssignableExpression(false);
4043 expect(expression, isNotNull);
4044 assertNoErrors();
4045 expect(expression, new isInstanceOf<PropertyAccess>());
4046 PropertyAccess propertyAccess = expression;
4047 expect(propertyAccess.target, isNotNull);
4048 expect(propertyAccess.operator.type, TokenType.PERIOD);
4049 expect(propertyAccess.propertyName, isNotNull);
4050 }
4051
4052 void test_parseAssignableExpression_expression_index() {
4053 createParser('(x)[y]');
4054 Expression expression = parser.parseAssignableExpression(false);
4055 expect(expression, isNotNull);
4056 assertNoErrors();
4057 expect(expression, new isInstanceOf<IndexExpression>());
4058 IndexExpression indexExpression = expression;
4059 expect(indexExpression.target, isNotNull);
4060 expect(indexExpression.leftBracket, isNotNull);
4061 expect(indexExpression.index, isNotNull);
4062 expect(indexExpression.rightBracket, isNotNull);
4063 }
4064
4065 void test_parseAssignableExpression_expression_question_dot() {
4066 createParser('(x)?.y');
4067 Expression expression = parser.parseAssignableExpression(false);
4068 expect(expression, isNotNull);
4069 assertNoErrors();
4070 expect(expression, new isInstanceOf<PropertyAccess>());
4071 PropertyAccess propertyAccess = expression;
4072 expect(propertyAccess.target, isNotNull);
4073 expect(propertyAccess.operator.type, TokenType.QUESTION_PERIOD);
4074 expect(propertyAccess.propertyName, isNotNull);
4075 }
4076
4077 void test_parseAssignableExpression_identifier() {
4078 createParser('x');
4079 Expression expression = parser.parseAssignableExpression(false);
4080 expect(expression, isNotNull);
4081 assertNoErrors();
4082 expect(expression, new isInstanceOf<SimpleIdentifier>());
4083 SimpleIdentifier identifier = expression;
4084 expect(identifier, isNotNull);
4085 }
4086
4087 void test_parseAssignableExpression_identifier_args_dot() {
4088 createParser('x(y).z');
4089 Expression expression = parser.parseAssignableExpression(false);
4090 expect(expression, isNotNull);
4091 assertNoErrors();
4092 expect(expression, new isInstanceOf<PropertyAccess>());
4093 PropertyAccess propertyAccess = expression;
4094 MethodInvocation invocation = propertyAccess.target as MethodInvocation;
4095 expect(invocation.methodName.name, "x");
4096 expect(invocation.typeArguments, isNull);
4097 ArgumentList argumentList = invocation.argumentList;
4098 expect(argumentList, isNotNull);
4099 expect(argumentList.arguments, hasLength(1));
4100 expect(propertyAccess.operator, isNotNull);
4101 expect(propertyAccess.propertyName, isNotNull);
4102 }
4103
4104 void
4105 test_parseAssignableExpression_identifier_args_dot_typeParameterComments() {
4106 enableGenericMethodComments = true;
4107 createParser('x/*<E>*/(y).z');
4108 Expression expression = parser.parseAssignableExpression(false);
4109 expect(expression, isNotNull);
4110 assertNoErrors();
4111 expect(expression, new isInstanceOf<PropertyAccess>());
4112 PropertyAccess propertyAccess = expression;
4113 MethodInvocation invocation = propertyAccess.target as MethodInvocation;
4114 expect(invocation.methodName.name, "x");
4115 expect(invocation.typeArguments, isNotNull);
4116 ArgumentList argumentList = invocation.argumentList;
4117 expect(argumentList, isNotNull);
4118 expect(argumentList.arguments, hasLength(1));
4119 expect(propertyAccess.operator, isNotNull);
4120 expect(propertyAccess.propertyName, isNotNull);
4121 }
4122
4123 void test_parseAssignableExpression_identifier_args_dot_typeParameters() {
4124 createParser('x<E>(y).z');
4125 Expression expression = parser.parseAssignableExpression(false);
4126 expect(expression, isNotNull);
4127 assertNoErrors();
4128 expect(expression, new isInstanceOf<PropertyAccess>());
4129 PropertyAccess propertyAccess = expression;
4130 MethodInvocation invocation = propertyAccess.target as MethodInvocation;
4131 expect(invocation.methodName.name, "x");
4132 expect(invocation.typeArguments, isNotNull);
4133 ArgumentList argumentList = invocation.argumentList;
4134 expect(argumentList, isNotNull);
4135 expect(argumentList.arguments, hasLength(1));
4136 expect(propertyAccess.operator, isNotNull);
4137 expect(propertyAccess.propertyName, isNotNull);
4138 }
4139
4140 void test_parseAssignableExpression_identifier_dot() {
4141 createParser('x.y');
4142 Expression expression = parser.parseAssignableExpression(false);
4143 expect(expression, isNotNull);
4144 assertNoErrors();
4145 expect(expression, new isInstanceOf<PropertyAccess>());
4146 PropertyAccess propertyAccess = expression;
4147 expect(propertyAccess.target, isNotNull);
4148 expect(propertyAccess.operator, isNotNull);
4149 expect(propertyAccess.operator.type, TokenType.PERIOD);
4150 expect(propertyAccess.propertyName, isNotNull);
4151 }
4152
4153 void test_parseAssignableExpression_identifier_index() {
4154 createParser('x[y]');
4155 Expression expression = parser.parseAssignableExpression(false);
4156 expect(expression, isNotNull);
4157 assertNoErrors();
4158 expect(expression, new isInstanceOf<IndexExpression>());
4159 IndexExpression indexExpression = expression;
4160 expect(indexExpression.target, isNotNull);
4161 expect(indexExpression.leftBracket, isNotNull);
4162 expect(indexExpression.index, isNotNull);
4163 expect(indexExpression.rightBracket, isNotNull);
4164 }
4165
4166 void test_parseAssignableExpression_identifier_question_dot() {
4167 createParser('x?.y');
4168 Expression expression = parser.parseAssignableExpression(false);
4169 expect(expression, isNotNull);
4170 assertNoErrors();
4171 expect(expression, new isInstanceOf<PropertyAccess>());
4172 PropertyAccess propertyAccess = expression;
4173 expect(propertyAccess.target, isNotNull);
4174 expect(propertyAccess.operator.type, TokenType.QUESTION_PERIOD);
4175 expect(propertyAccess.propertyName, isNotNull);
4176 }
4177
4178 void test_parseAssignableExpression_super_dot() {
4179 createParser('super.y');
4180 Expression expression = parser.parseAssignableExpression(false);
4181 expect(expression, isNotNull);
4182 assertNoErrors();
4183 expect(expression, new isInstanceOf<PropertyAccess>());
4184 PropertyAccess propertyAccess = expression;
4185 EngineTestCase.assertInstanceOf((obj) => obj is SuperExpression,
4186 SuperExpression, propertyAccess.target);
4187 expect(propertyAccess.operator, isNotNull);
4188 expect(propertyAccess.propertyName, isNotNull);
4189 }
4190
4191 void test_parseAssignableExpression_super_index() {
4192 createParser('super[y]');
4193 Expression expression = parser.parseAssignableExpression(false);
4194 expect(expression, isNotNull);
4195 assertNoErrors();
4196 expect(expression, new isInstanceOf<IndexExpression>());
4197 IndexExpression indexExpression = expression;
4198 expect(indexExpression.target, new isInstanceOf<SuperExpression>());
4199 expect(indexExpression.leftBracket, isNotNull);
4200 expect(indexExpression.index, isNotNull);
4201 expect(indexExpression.rightBracket, isNotNull);
4202 }
4203
4204 void test_parseAssignableSelector_dot() {
4205 createParser('.x');
4206 Expression expression = parser.parseAssignableSelector(null, true);
4207 expect(expression, isNotNull);
4208 assertNoErrors();
4209 expect(expression, new isInstanceOf<PropertyAccess>());
4210 PropertyAccess propertyAccess = expression;
4211 expect(propertyAccess.operator.type, TokenType.PERIOD);
4212 expect(propertyAccess.propertyName, isNotNull);
4213 }
4214
4215 void test_parseAssignableSelector_index() {
4216 createParser('[x]');
4217 Expression expression = parser.parseAssignableSelector(null, true);
4218 expect(expression, isNotNull);
4219 assertNoErrors();
4220 expect(expression, new isInstanceOf<IndexExpression>());
4221 IndexExpression indexExpression = expression;
4222 expect(indexExpression.leftBracket, isNotNull);
4223 expect(indexExpression.index, isNotNull);
4224 expect(indexExpression.rightBracket, isNotNull);
4225 }
4226
4227 void test_parseAssignableSelector_none() {
4228 createParser(';');
4229 Expression expression =
4230 parser.parseAssignableSelector(astFactory.simpleIdentifier(null), true);
4231 expect(expression, isNotNull);
4232 assertNoErrors();
4233 expect(expression, new isInstanceOf<SimpleIdentifier>());
4234 SimpleIdentifier identifier = expression;
4235 expect(identifier, isNotNull);
4236 }
4237
4238 void test_parseAssignableSelector_question_dot() {
4239 createParser('?.x');
4240 Expression expression = parser.parseAssignableSelector(null, true);
4241 expect(expression, isNotNull);
4242 assertNoErrors();
4243 expect(expression, new isInstanceOf<PropertyAccess>());
4244 PropertyAccess propertyAccess = expression;
4245 expect(propertyAccess.operator.type, TokenType.QUESTION_PERIOD);
4246 expect(propertyAccess.propertyName, isNotNull);
4247 }
4248
4249 void test_parseAwaitExpression() {
4250 createParser('await x;');
4251 AwaitExpression expression = parser.parseAwaitExpression();
4252 expect(expression, isNotNull);
4253 assertNoErrors();
4254 expect(expression.awaitKeyword, isNotNull);
4255 expect(expression.expression, isNotNull);
4256 }
4257
4258 void test_parseBitwiseAndExpression_normal() {
4259 createParser('x & y');
4260 Expression expression = parser.parseBitwiseAndExpression();
4261 expect(expression, isNotNull);
4262 assertNoErrors();
4263 expect(expression, new isInstanceOf<BinaryExpression>());
4264 BinaryExpression binaryExpression = expression;
4265 expect(binaryExpression.leftOperand, isNotNull);
4266 expect(binaryExpression.operator, isNotNull);
4267 expect(binaryExpression.operator.type, TokenType.AMPERSAND);
4268 expect(binaryExpression.rightOperand, isNotNull);
4269 }
4270
4271 void test_parseBitwiseAndExpression_super() {
4272 createParser('super & y');
4273 Expression expression = parser.parseBitwiseAndExpression();
4274 expect(expression, isNotNull);
4275 assertNoErrors();
4276 expect(expression, new isInstanceOf<BinaryExpression>());
4277 BinaryExpression binaryExpression = expression;
4278 expect(binaryExpression.leftOperand, new isInstanceOf<SuperExpression>());
4279 expect(binaryExpression.operator, isNotNull);
4280 expect(binaryExpression.operator.type, TokenType.AMPERSAND);
4281 expect(binaryExpression.rightOperand, isNotNull);
4282 }
4283
4284 void test_parseBitwiseOrExpression_normal() {
4285 createParser('x | y');
4286 Expression expression = parser.parseBitwiseOrExpression();
4287 expect(expression, isNotNull);
4288 assertNoErrors();
4289 expect(expression, new isInstanceOf<BinaryExpression>());
4290 BinaryExpression binaryExpression = expression;
4291 expect(binaryExpression.leftOperand, isNotNull);
4292 expect(binaryExpression.operator, isNotNull);
4293 expect(binaryExpression.operator.type, TokenType.BAR);
4294 expect(binaryExpression.rightOperand, isNotNull);
4295 }
4296
4297 void test_parseBitwiseOrExpression_super() {
4298 createParser('super | y');
4299 Expression expression = parser.parseBitwiseOrExpression();
4300 expect(expression, isNotNull);
4301 assertNoErrors();
4302 expect(expression, new isInstanceOf<BinaryExpression>());
4303 BinaryExpression binaryExpression = expression;
4304 expect(binaryExpression.leftOperand, new isInstanceOf<SuperExpression>());
4305 expect(binaryExpression.operator, isNotNull);
4306 expect(binaryExpression.operator.type, TokenType.BAR);
4307 expect(binaryExpression.rightOperand, isNotNull);
4308 }
4309
4310 void test_parseBitwiseXorExpression_normal() {
4311 createParser('x ^ y');
4312 Expression expression = parser.parseBitwiseXorExpression();
4313 expect(expression, isNotNull);
4314 assertNoErrors();
4315 expect(expression, new isInstanceOf<BinaryExpression>());
4316 BinaryExpression binaryExpression = expression;
4317 expect(binaryExpression.leftOperand, isNotNull);
4318 expect(binaryExpression.operator, isNotNull);
4319 expect(binaryExpression.operator.type, TokenType.CARET);
4320 expect(binaryExpression.rightOperand, isNotNull);
4321 }
4322
4323 void test_parseBitwiseXorExpression_super() {
4324 createParser('super ^ y');
4325 Expression expression = parser.parseBitwiseXorExpression();
4326 expect(expression, isNotNull);
4327 assertNoErrors();
4328 expect(expression, new isInstanceOf<BinaryExpression>());
4329 BinaryExpression binaryExpression = expression;
4330 expect(binaryExpression.leftOperand, new isInstanceOf<SuperExpression>());
4331 expect(binaryExpression.operator, isNotNull);
4332 expect(binaryExpression.operator.type, TokenType.CARET);
4333 expect(binaryExpression.rightOperand, isNotNull);
4334 }
4335
4336 void test_parseCascadeSection_i() {
4337 createParser('..[i]');
4338 Expression expression = parser.parseCascadeSection();
4339 expect(expression, isNotNull);
4340 assertNoErrors();
4341 expect(expression, new isInstanceOf<IndexExpression>());
4342 IndexExpression section = expression;
4343 expect(section.target, isNull);
4344 expect(section.leftBracket, isNotNull);
4345 expect(section.index, isNotNull);
4346 expect(section.rightBracket, isNotNull);
4347 }
4348
4349 void test_parseCascadeSection_ia() {
4350 createParser('..[i](b)');
4351 Expression expression = parser.parseCascadeSection();
4352 expect(expression, isNotNull);
4353 assertNoErrors();
4354 expect(expression, new isInstanceOf<FunctionExpressionInvocation>());
4355 FunctionExpressionInvocation section = expression;
4356 expect(section.function, new isInstanceOf<IndexExpression>());
4357 expect(section.typeArguments, isNull);
4358 expect(section.argumentList, isNotNull);
4359 }
4360
4361 void test_parseCascadeSection_ia_typeArgumentComments() {
4362 enableGenericMethodComments = true;
4363 createParser('..[i]/*<E>*/(b)');
4364 Expression expression = parser.parseCascadeSection();
4365 expect(expression, isNotNull);
4366 assertNoErrors();
4367 expect(expression, new isInstanceOf<FunctionExpressionInvocation>());
4368 FunctionExpressionInvocation section = expression;
4369 expect(section.function, new isInstanceOf<IndexExpression>());
4370 expect(section.typeArguments, isNotNull);
4371 expect(section.argumentList, isNotNull);
4372 }
4373
4374 void test_parseCascadeSection_ia_typeArguments() {
4375 createParser('..[i]<E>(b)');
4376 Expression expression = parser.parseCascadeSection();
4377 expect(expression, isNotNull);
4378 assertNoErrors();
4379 expect(expression, new isInstanceOf<FunctionExpressionInvocation>());
4380 FunctionExpressionInvocation section = expression;
4381 expect(section.function, new isInstanceOf<IndexExpression>());
4382 expect(section.typeArguments, isNotNull);
4383 expect(section.argumentList, isNotNull);
4384 }
4385
4386 void test_parseCascadeSection_ii() {
4387 createParser('..a(b).c(d)');
4388 Expression expression = parser.parseCascadeSection();
4389 expect(expression, isNotNull);
4390 assertNoErrors();
4391 expect(expression, new isInstanceOf<MethodInvocation>());
4392 MethodInvocation section = expression;
4393 expect(section.target, new isInstanceOf<MethodInvocation>());
4394 expect(section.operator, isNotNull);
4395 expect(section.methodName, isNotNull);
4396 expect(section.typeArguments, isNull);
4397 expect(section.argumentList, isNotNull);
4398 expect(section.argumentList.arguments, hasLength(1));
4399 }
4400
4401 void test_parseCascadeSection_ii_typeArgumentComments() {
4402 enableGenericMethodComments = true;
4403 createParser('..a/*<E>*/(b).c/*<F>*/(d)');
4404 Expression expression = parser.parseCascadeSection();
4405 expect(expression, isNotNull);
4406 assertNoErrors();
4407 expect(expression, new isInstanceOf<MethodInvocation>());
4408 MethodInvocation section = expression;
4409 expect(section.target, new isInstanceOf<MethodInvocation>());
4410 expect(section.operator, isNotNull);
4411 expect(section.methodName, isNotNull);
4412 expect(section.typeArguments, isNotNull);
4413 expect(section.argumentList, isNotNull);
4414 expect(section.argumentList.arguments, hasLength(1));
4415 }
4416
4417 void test_parseCascadeSection_ii_typeArguments() {
4418 createParser('..a<E>(b).c<F>(d)');
4419 Expression expression = parser.parseCascadeSection();
4420 expect(expression, isNotNull);
4421 assertNoErrors();
4422 expect(expression, new isInstanceOf<MethodInvocation>());
4423 MethodInvocation section = expression;
4424 expect(section.target, new isInstanceOf<MethodInvocation>());
4425 expect(section.operator, isNotNull);
4426 expect(section.methodName, isNotNull);
4427 expect(section.typeArguments, isNotNull);
4428 expect(section.argumentList, isNotNull);
4429 expect(section.argumentList.arguments, hasLength(1));
4430 }
4431
4432 void test_parseCascadeSection_p() {
4433 createParser('..a');
4434 Expression expression = parser.parseCascadeSection();
4435 expect(expression, isNotNull);
4436 assertNoErrors();
4437 expect(expression, new isInstanceOf<PropertyAccess>());
4438 PropertyAccess section = expression;
4439 expect(section.target, isNull);
4440 expect(section.operator, isNotNull);
4441 expect(section.propertyName, isNotNull);
4442 }
4443
4444 void test_parseCascadeSection_p_assign() {
4445 createParser('..a = 3');
4446 Expression expression = parser.parseCascadeSection();
4447 expect(expression, isNotNull);
4448 assertNoErrors();
4449 expect(expression, new isInstanceOf<AssignmentExpression>());
4450 AssignmentExpression section = expression;
4451 expect(section.leftHandSide, isNotNull);
4452 expect(section.operator, isNotNull);
4453 Expression rhs = section.rightHandSide;
4454 expect(rhs, isNotNull);
4455 }
4456
4457 void test_parseCascadeSection_p_assign_withCascade() {
4458 createParser('..a = 3..m()');
4459 Expression expression = parser.parseCascadeSection();
4460 expect(expression, isNotNull);
4461 assertNoErrors();
4462 expect(expression, new isInstanceOf<AssignmentExpression>());
4463 AssignmentExpression section = expression;
4464 expect(section.leftHandSide, isNotNull);
4465 expect(section.operator, isNotNull);
4466 Expression rhs = section.rightHandSide;
4467 EngineTestCase.assertInstanceOf(
4468 (obj) => obj is IntegerLiteral, IntegerLiteral, rhs);
4469 }
4470
4471 void test_parseCascadeSection_p_assign_withCascade_typeArgumentComments() {
4472 enableGenericMethodComments = true;
4473 createParser('..a = 3..m/*<E>*/()');
4474 Expression expression = parser.parseCascadeSection();
4475 expect(expression, isNotNull);
4476 assertNoErrors();
4477 expect(expression, new isInstanceOf<AssignmentExpression>());
4478 AssignmentExpression section = expression;
4479 expect(section.leftHandSide, isNotNull);
4480 expect(section.operator, isNotNull);
4481 Expression rhs = section.rightHandSide;
4482 EngineTestCase.assertInstanceOf(
4483 (obj) => obj is IntegerLiteral, IntegerLiteral, rhs);
4484 }
4485
4486 void test_parseCascadeSection_p_assign_withCascade_typeArguments() {
4487 createParser('..a = 3..m<E>()');
4488 Expression expression = parser.parseCascadeSection();
4489 expect(expression, isNotNull);
4490 assertNoErrors();
4491 expect(expression, new isInstanceOf<AssignmentExpression>());
4492 AssignmentExpression section = expression;
4493 expect(section.leftHandSide, isNotNull);
4494 expect(section.operator, isNotNull);
4495 Expression rhs = section.rightHandSide;
4496 EngineTestCase.assertInstanceOf(
4497 (obj) => obj is IntegerLiteral, IntegerLiteral, rhs);
4498 }
4499
4500 void test_parseCascadeSection_p_builtIn() {
4501 createParser('..as');
4502 Expression expression = parser.parseCascadeSection();
4503 expect(expression, isNotNull);
4504 assertNoErrors();
4505 expect(expression, new isInstanceOf<PropertyAccess>());
4506 PropertyAccess section = expression;
4507 expect(section.target, isNull);
4508 expect(section.operator, isNotNull);
4509 expect(section.propertyName, isNotNull);
4510 }
4511
4512 void test_parseCascadeSection_pa() {
4513 createParser('..a(b)');
4514 Expression expression = parser.parseCascadeSection();
4515 expect(expression, isNotNull);
4516 assertNoErrors();
4517 expect(expression, new isInstanceOf<MethodInvocation>());
4518 MethodInvocation section = expression;
4519 expect(section.target, isNull);
4520 expect(section.operator, isNotNull);
4521 expect(section.methodName, isNotNull);
4522 expect(section.typeArguments, isNull);
4523 expect(section.argumentList, isNotNull);
4524 expect(section.argumentList.arguments, hasLength(1));
4525 }
4526
4527 void test_parseCascadeSection_pa_typeArgumentComments() {
4528 enableGenericMethodComments = true;
4529 createParser('..a/*<E>*/(b)');
4530 Expression expression = parser.parseCascadeSection();
4531 expect(expression, isNotNull);
4532 assertNoErrors();
4533 expect(expression, new isInstanceOf<MethodInvocation>());
4534 MethodInvocation section = expression;
4535 expect(section.target, isNull);
4536 expect(section.operator, isNotNull);
4537 expect(section.methodName, isNotNull);
4538 expect(section.typeArguments, isNotNull);
4539 expect(section.argumentList, isNotNull);
4540 expect(section.argumentList.arguments, hasLength(1));
4541 }
4542
4543 void test_parseCascadeSection_pa_typeArguments() {
4544 createParser('..a<E>(b)');
4545 Expression expression = parser.parseCascadeSection();
4546 expect(expression, isNotNull);
4547 assertNoErrors();
4548 expect(expression, new isInstanceOf<MethodInvocation>());
4549 MethodInvocation section = expression;
4550 expect(section.target, isNull);
4551 expect(section.operator, isNotNull);
4552 expect(section.methodName, isNotNull);
4553 expect(section.typeArguments, isNotNull);
4554 expect(section.argumentList, isNotNull);
4555 expect(section.argumentList.arguments, hasLength(1));
4556 }
4557
4558 void test_parseCascadeSection_paa() {
4559 createParser('..a(b)(c)');
4560 Expression expression = parser.parseCascadeSection();
4561 expect(expression, isNotNull);
4562 assertNoErrors();
4563 expect(expression, new isInstanceOf<FunctionExpressionInvocation>());
4564 FunctionExpressionInvocation section = expression;
4565 expect(section.function, new isInstanceOf<MethodInvocation>());
4566 expect(section.typeArguments, isNull);
4567 expect(section.argumentList, isNotNull);
4568 expect(section.argumentList.arguments, hasLength(1));
4569 }
4570
4571 void test_parseCascadeSection_paa_typeArgumentComments() {
4572 enableGenericMethodComments = true;
4573 createParser('..a/*<E>*/(b)/*<F>*/(c)');
4574 Expression expression = parser.parseCascadeSection();
4575 expect(expression, isNotNull);
4576 assertNoErrors();
4577 expect(expression, new isInstanceOf<FunctionExpressionInvocation>());
4578 FunctionExpressionInvocation section = expression;
4579 expect(section.function, new isInstanceOf<MethodInvocation>());
4580 expect(section.typeArguments, isNotNull);
4581 expect(section.argumentList, isNotNull);
4582 expect(section.argumentList.arguments, hasLength(1));
4583 }
4584
4585 void test_parseCascadeSection_paa_typeArguments() {
4586 createParser('..a<E>(b)<F>(c)');
4587 Expression expression = parser.parseCascadeSection();
4588 expect(expression, isNotNull);
4589 assertNoErrors();
4590 expect(expression, new isInstanceOf<FunctionExpressionInvocation>());
4591 FunctionExpressionInvocation section = expression;
4592 expect(section.function, new isInstanceOf<MethodInvocation>());
4593 expect(section.typeArguments, isNotNull);
4594 expect(section.argumentList, isNotNull);
4595 expect(section.argumentList.arguments, hasLength(1));
4596 }
4597
4598 void test_parseCascadeSection_paapaa() {
4599 createParser('..a(b)(c).d(e)(f)');
4600 Expression expression = parser.parseCascadeSection();
4601 expect(expression, isNotNull);
4602 assertNoErrors();
4603 expect(expression, new isInstanceOf<FunctionExpressionInvocation>());
4604 FunctionExpressionInvocation section = expression;
4605 expect(section.function, new isInstanceOf<MethodInvocation>());
4606 expect(section.typeArguments, isNull);
4607 expect(section.argumentList, isNotNull);
4608 expect(section.argumentList.arguments, hasLength(1));
4609 }
4610
4611 void test_parseCascadeSection_paapaa_typeArgumentComments() {
4612 enableGenericMethodComments = true;
4613 createParser('..a/*<E>*/(b)/*<F>*/(c).d/*<G>*/(e)/*<H>*/(f)');
4614 Expression expression = parser.parseCascadeSection();
4615 expect(expression, isNotNull);
4616 assertNoErrors();
4617 expect(expression, new isInstanceOf<FunctionExpressionInvocation>());
4618 FunctionExpressionInvocation section = expression;
4619 expect(section.function, new isInstanceOf<MethodInvocation>());
4620 expect(section.typeArguments, isNotNull);
4621 expect(section.argumentList, isNotNull);
4622 expect(section.argumentList.arguments, hasLength(1));
4623 }
4624
4625 void test_parseCascadeSection_paapaa_typeArguments() {
4626 createParser('..a<E>(b)<F>(c).d<G>(e)<H>(f)');
4627 Expression expression = parser.parseCascadeSection();
4628 expect(expression, isNotNull);
4629 assertNoErrors();
4630 expect(expression, new isInstanceOf<FunctionExpressionInvocation>());
4631 FunctionExpressionInvocation section = expression;
4632 expect(section.function, new isInstanceOf<MethodInvocation>());
4633 expect(section.typeArguments, isNotNull);
4634 expect(section.argumentList, isNotNull);
4635 expect(section.argumentList.arguments, hasLength(1));
4636 }
4637
4638 void test_parseCascadeSection_pap() {
4639 createParser('..a(b).c');
4640 Expression expression = parser.parseCascadeSection();
4641 expect(expression, isNotNull);
4642 assertNoErrors();
4643 expect(expression, new isInstanceOf<PropertyAccess>());
4644 PropertyAccess section = expression;
4645 expect(section.target, isNotNull);
4646 expect(section.operator, isNotNull);
4647 expect(section.propertyName, isNotNull);
4648 }
4649
4650 void test_parseCascadeSection_pap_typeArgumentComments() {
4651 enableGenericMethodComments = true;
4652 createParser('..a/*<E>*/(b).c');
4653 Expression expression = parser.parseCascadeSection();
4654 expect(expression, isNotNull);
4655 assertNoErrors();
4656 expect(expression, new isInstanceOf<PropertyAccess>());
4657 PropertyAccess section = expression;
4658 expect(section.target, isNotNull);
4659 expect(section.operator, isNotNull);
4660 expect(section.propertyName, isNotNull);
4661 }
4662
4663 void test_parseCascadeSection_pap_typeArguments() {
4664 createParser('..a<E>(b).c');
4665 Expression expression = parser.parseCascadeSection();
4666 expect(expression, isNotNull);
4667 assertNoErrors();
4668 expect(expression, new isInstanceOf<PropertyAccess>());
4669 PropertyAccess section = expression;
4670 expect(section.target, isNotNull);
4671 expect(section.operator, isNotNull);
4672 expect(section.propertyName, isNotNull);
4673 }
4674
4675 void test_parseConditionalExpression() {
4676 createParser('x ? y : z');
4677 ConditionalExpression expression = parser.parseConditionalExpression();
4678 expect(expression, isNotNull);
4679 assertNoErrors();
4680 expect(expression.condition, isNotNull);
4681 expect(expression.question, isNotNull);
4682 expect(expression.thenExpression, isNotNull);
4683 expect(expression.colon, isNotNull);
4684 expect(expression.elseExpression, isNotNull);
4685 }
4686
4687 void test_parseConstExpression_instanceCreation() {
4688 createParser('const A()');
4689 Expression expression = parser.parseConstExpression();
4690 expect(expression, isNotNull);
4691 assertNoErrors();
4692 expect(expression, new isInstanceOf<InstanceCreationExpression>());
4693 InstanceCreationExpression instanceCreation = expression;
4694 expect(instanceCreation.keyword, isNotNull);
4695 ConstructorName name = instanceCreation.constructorName;
4696 expect(name, isNotNull);
4697 expect(name.type, isNotNull);
4698 expect(name.period, isNull);
4699 expect(name.name, isNull);
4700 expect(instanceCreation.argumentList, isNotNull);
4701 }
4702
4703 void test_parseConstExpression_listLiteral_typed() {
4704 createParser('const <A> []');
4705 Expression expression = parser.parseConstExpression();
4706 expect(expression, isNotNull);
4707 assertNoErrors();
4708 expect(expression, new isInstanceOf<ListLiteral>());
4709 ListLiteral literal = expression;
4710 expect(literal.constKeyword, isNotNull);
4711 expect(literal.typeArguments, isNotNull);
4712 expect(literal.leftBracket, isNotNull);
4713 expect(literal.elements, hasLength(0));
4714 expect(literal.rightBracket, isNotNull);
4715 }
4716
4717 void test_parseConstExpression_listLiteral_typed_genericComment() {
4718 enableGenericMethodComments = true;
4719 createParser('const /*<A>*/ []');
4720 Expression expression = parser.parseConstExpression();
4721 expect(expression, isNotNull);
4722 assertNoErrors();
4723 expect(expression, new isInstanceOf<ListLiteral>());
4724 ListLiteral literal = expression;
4725 expect(literal.constKeyword, isNotNull);
4726 expect(literal.typeArguments, isNotNull);
4727 expect(literal.leftBracket, isNotNull);
4728 expect(literal.elements, hasLength(0));
4729 expect(literal.rightBracket, isNotNull);
4730 }
4731
4732 void test_parseConstExpression_listLiteral_untyped() {
4733 createParser('const []');
4734 Expression expression = parser.parseConstExpression();
4735 expect(expression, isNotNull);
4736 assertNoErrors();
4737 expect(expression, new isInstanceOf<ListLiteral>());
4738 ListLiteral literal = expression;
4739 expect(literal.constKeyword, isNotNull);
4740 expect(literal.typeArguments, isNull);
4741 expect(literal.leftBracket, isNotNull);
4742 expect(literal.elements, hasLength(0));
4743 expect(literal.rightBracket, isNotNull);
4744 }
4745
4746 void test_parseConstExpression_mapLiteral_typed() {
4747 createParser('const <A, B> {}');
4748 Expression expression = parser.parseConstExpression();
4749 expect(expression, isNotNull);
4750 assertNoErrors();
4751 expect(expression, new isInstanceOf<MapLiteral>());
4752 MapLiteral literal = expression;
4753 expect(literal.leftBracket, isNotNull);
4754 expect(literal.entries, hasLength(0));
4755 expect(literal.rightBracket, isNotNull);
4756 expect(literal.typeArguments, isNotNull);
4757 }
4758
4759 void test_parseConstExpression_mapLiteral_typed_genericComment() {
4760 enableGenericMethodComments = true;
4761 createParser('const /*<A, B>*/ {}');
4762 Expression expression = parser.parseConstExpression();
4763 expect(expression, isNotNull);
4764 assertNoErrors();
4765 expect(expression, new isInstanceOf<MapLiteral>());
4766 MapLiteral literal = expression;
4767 expect(literal.leftBracket, isNotNull);
4768 expect(literal.entries, hasLength(0));
4769 expect(literal.rightBracket, isNotNull);
4770 expect(literal.typeArguments, isNotNull);
4771 }
4772
4773 void test_parseConstExpression_mapLiteral_untyped() {
4774 createParser('const {}');
4775 Expression expression = parser.parseConstExpression();
4776 expect(expression, isNotNull);
4777 assertNoErrors();
4778 expect(expression, new isInstanceOf<MapLiteral>());
4779 MapLiteral literal = expression;
4780 expect(literal.leftBracket, isNotNull);
4781 expect(literal.entries, hasLength(0));
4782 expect(literal.rightBracket, isNotNull);
4783 expect(literal.typeArguments, isNull);
4784 }
4785
4786 void test_parseEqualityExpression_normal() {
4787 createParser('x == y');
4788 BinaryExpression expression = parser.parseEqualityExpression();
4789 expect(expression, isNotNull);
4790 assertNoErrors();
4791 expect(expression.leftOperand, isNotNull);
4792 expect(expression.operator, isNotNull);
4793 expect(expression.operator.type, TokenType.EQ_EQ);
4794 expect(expression.rightOperand, isNotNull);
4795 }
4796
4797 void test_parseEqualityExpression_super() {
4798 createParser('super == y');
4799 BinaryExpression expression = parser.parseEqualityExpression();
4800 expect(expression, isNotNull);
4801 assertNoErrors();
4802 expect(expression.leftOperand, new isInstanceOf<SuperExpression>());
4803 expect(expression.operator, isNotNull);
4804 expect(expression.operator.type, TokenType.EQ_EQ);
4805 expect(expression.rightOperand, isNotNull);
4806 }
4807
4808 void test_parseExpression_assign() {
4809 // TODO(brianwilkerson) Implement more tests for this method.
4810 Expression expression = parseExpression('x = y');
4811 expect(expression, new isInstanceOf<AssignmentExpression>());
4812 AssignmentExpression assignmentExpression = expression;
4813 expect(assignmentExpression.leftHandSide, isNotNull);
4814 expect(assignmentExpression.operator, isNotNull);
4815 expect(assignmentExpression.operator.type, TokenType.EQ);
4816 expect(assignmentExpression.rightHandSide, isNotNull);
4817 }
4818
4819 void test_parseExpression_assign_compound() {
4820 enableLazyAssignmentOperators = true;
4821 Expression expression = parseExpression('x ||= y');
4822 expect(expression, new isInstanceOf<AssignmentExpression>());
4823 AssignmentExpression assignmentExpression = expression;
4824 expect(assignmentExpression.leftHandSide, isNotNull);
4825 expect(assignmentExpression.operator, isNotNull);
4826 expect(assignmentExpression.operator.type, TokenType.BAR_BAR_EQ);
4827 expect(assignmentExpression.rightHandSide, isNotNull);
4828 }
4829
4830 void test_parseExpression_comparison() {
4831 Expression expression = parseExpression('--a.b == c');
4832 expect(expression, new isInstanceOf<BinaryExpression>());
4833 BinaryExpression binaryExpression = expression;
4834 expect(binaryExpression.leftOperand, isNotNull);
4835 expect(binaryExpression.operator, isNotNull);
4836 expect(binaryExpression.operator.type, TokenType.EQ_EQ);
4837 expect(binaryExpression.rightOperand, isNotNull);
4838 }
4839
4840 void test_parseExpression_function_async() {
4841 Expression expression = parseExpression('() async {}');
4842 expect(expression, new isInstanceOf<FunctionExpression>());
4843 FunctionExpression functionExpression = expression;
4844 expect(functionExpression.body, isNotNull);
4845 expect(functionExpression.body.isAsynchronous, isTrue);
4846 expect(functionExpression.body.isGenerator, isFalse);
4847 expect(functionExpression.parameters, isNotNull);
4848 }
4849
4850 void test_parseExpression_function_asyncStar() {
4851 Expression expression = parseExpression('() async* {}');
4852 expect(expression, new isInstanceOf<FunctionExpression>());
4853 FunctionExpression functionExpression = expression;
4854 expect(functionExpression.body, isNotNull);
4855 expect(functionExpression.body.isAsynchronous, isTrue);
4856 expect(functionExpression.body.isGenerator, isTrue);
4857 expect(functionExpression.parameters, isNotNull);
4858 }
4859
4860 void test_parseExpression_function_sync() {
4861 Expression expression = parseExpression('() {}');
4862 expect(expression, new isInstanceOf<FunctionExpression>());
4863 FunctionExpression functionExpression = expression;
4864 expect(functionExpression.body, isNotNull);
4865 expect(functionExpression.body.isAsynchronous, isFalse);
4866 expect(functionExpression.body.isGenerator, isFalse);
4867 expect(functionExpression.parameters, isNotNull);
4868 }
4869
4870 void test_parseExpression_function_syncStar() {
4871 Expression expression = parseExpression('() sync* {}');
4872 expect(expression, new isInstanceOf<FunctionExpression>());
4873 FunctionExpression functionExpression = expression;
4874 expect(functionExpression.body, isNotNull);
4875 expect(functionExpression.body.isAsynchronous, isFalse);
4876 expect(functionExpression.body.isGenerator, isTrue);
4877 expect(functionExpression.parameters, isNotNull);
4878 }
4879
4880 void test_parseExpression_invokeFunctionExpression() {
4881 Expression expression = parseExpression('(a) {return a + a;} (3)');
4882 expect(expression, new isInstanceOf<FunctionExpressionInvocation>());
4883 FunctionExpressionInvocation invocation = expression;
4884 expect(invocation.function, new isInstanceOf<FunctionExpression>());
4885 FunctionExpression functionExpression =
4886 invocation.function as FunctionExpression;
4887 expect(functionExpression.parameters, isNotNull);
4888 expect(functionExpression.body, isNotNull);
4889 expect(invocation.typeArguments, isNull);
4890 ArgumentList list = invocation.argumentList;
4891 expect(list, isNotNull);
4892 expect(list.arguments, hasLength(1));
4893 }
4894
4895 void test_parseExpression_nonAwait() {
4896 Expression expression = parseExpression('await()');
4897 expect(expression, new isInstanceOf<MethodInvocation>());
4898 MethodInvocation invocation = expression;
4899 expect(invocation.methodName.name, 'await');
4900 expect(invocation.typeArguments, isNull);
4901 expect(invocation.argumentList, isNotNull);
4902 }
4903
4904 void test_parseExpression_superMethodInvocation() {
4905 Expression expression = parseExpression('super.m()');
4906 expect(expression, new isInstanceOf<MethodInvocation>());
4907 MethodInvocation invocation = expression;
4908 expect(invocation.target, isNotNull);
4909 expect(invocation.methodName, isNotNull);
4910 expect(invocation.typeArguments, isNull);
4911 expect(invocation.argumentList, isNotNull);
4912 }
4913
4914 void test_parseExpression_superMethodInvocation_typeArgumentComments() {
4915 enableGenericMethodComments = true;
4916 Expression expression = parseExpression('super.m/*<E>*/()');
4917 expect(expression, new isInstanceOf<MethodInvocation>());
4918 MethodInvocation invocation = expression;
4919 expect(invocation.target, isNotNull);
4920 expect(invocation.methodName, isNotNull);
4921 expect(invocation.typeArguments, isNotNull);
4922 expect(invocation.argumentList, isNotNull);
4923 }
4924
4925 void test_parseExpression_superMethodInvocation_typeArguments() {
4926 Expression expression = parseExpression('super.m<E>()');
4927 expect(expression, new isInstanceOf<MethodInvocation>());
4928 MethodInvocation invocation = expression;
4929 expect(invocation.target, isNotNull);
4930 expect(invocation.methodName, isNotNull);
4931 expect(invocation.typeArguments, isNotNull);
4932 expect(invocation.argumentList, isNotNull);
4933 }
4934
4935 void test_parseExpressionList_multiple() {
4936 createParser('1, 2, 3');
4937 List<Expression> result = parser.parseExpressionList();
4938 expect(result, isNotNull);
4939 assertNoErrors();
4940 expect(result, hasLength(3));
4941 }
4942
4943 void test_parseExpressionList_single() {
4944 createParser('1');
4945 List<Expression> result = parser.parseExpressionList();
4946 expect(result, isNotNull);
4947 assertNoErrors();
4948 expect(result, hasLength(1));
4949 }
4950
4951 void test_parseExpressionWithoutCascade_assign() {
4952 // TODO(brianwilkerson) Implement more tests for this method.
4953 createParser('x = y');
4954 Expression expression = parser.parseExpressionWithoutCascade();
4955 expect(expression, isNotNull);
4956 assertNoErrors();
4957 expect(expression, new isInstanceOf<AssignmentExpression>());
4958 AssignmentExpression assignmentExpression = expression;
4959 expect(assignmentExpression.leftHandSide, isNotNull);
4960 expect(assignmentExpression.operator, isNotNull);
4961 expect(assignmentExpression.operator.type, TokenType.EQ);
4962 expect(assignmentExpression.rightHandSide, isNotNull);
4963 }
4964
4965 void test_parseExpressionWithoutCascade_comparison() {
4966 createParser('--a.b == c');
4967 Expression expression = parser.parseExpressionWithoutCascade();
4968 expect(expression, isNotNull);
4969 assertNoErrors();
4970 expect(expression, new isInstanceOf<BinaryExpression>());
4971 BinaryExpression binaryExpression = expression;
4972 expect(binaryExpression.leftOperand, isNotNull);
4973 expect(binaryExpression.operator, isNotNull);
4974 expect(binaryExpression.operator.type, TokenType.EQ_EQ);
4975 expect(binaryExpression.rightOperand, isNotNull);
4976 }
4977
4978 void test_parseExpressionWithoutCascade_superMethodInvocation() {
4979 createParser('super.m()');
4980 Expression expression = parser.parseExpressionWithoutCascade();
4981 expect(expression, isNotNull);
4982 assertNoErrors();
4983 expect(expression, new isInstanceOf<MethodInvocation>());
4984 MethodInvocation invocation = expression;
4985 expect(invocation.target, isNotNull);
4986 expect(invocation.methodName, isNotNull);
4987 expect(invocation.typeArguments, isNull);
4988 expect(invocation.argumentList, isNotNull);
4989 }
4990
4991 void
4992 test_parseExpressionWithoutCascade_superMethodInvocation_typeArgumentComme nts() {
4993 enableGenericMethodComments = true;
4994 createParser('super.m/*<E>*/()');
4995 Expression expression = parser.parseExpressionWithoutCascade();
4996 expect(expression, isNotNull);
4997 assertNoErrors();
4998 expect(expression, new isInstanceOf<MethodInvocation>());
4999 MethodInvocation invocation = expression;
5000 expect(invocation.target, isNotNull);
5001 expect(invocation.methodName, isNotNull);
5002 expect(invocation.typeArguments, isNotNull);
5003 expect(invocation.argumentList, isNotNull);
5004 }
5005
5006 void
5007 test_parseExpressionWithoutCascade_superMethodInvocation_typeArguments() {
5008 createParser('super.m<E>()');
5009 Expression expression = parser.parseExpressionWithoutCascade();
5010 expect(expression, isNotNull);
5011 assertNoErrors();
5012 expect(expression, new isInstanceOf<MethodInvocation>());
5013 MethodInvocation invocation = expression;
5014 expect(invocation.target, isNotNull);
5015 expect(invocation.methodName, isNotNull);
5016 expect(invocation.typeArguments, isNotNull);
5017 expect(invocation.argumentList, isNotNull);
5018 }
5019
5020 void test_parseFunctionExpression_body_inExpression() {
5021 createParser('(int i) => i++');
5022 FunctionExpression expression = parser.parseFunctionExpression();
5023 expect(expression, isNotNull);
5024 assertNoErrors();
5025 expect(expression.body, isNotNull);
5026 expect(expression.typeParameters, isNull);
5027 expect(expression.parameters, isNotNull);
5028 expect((expression.body as ExpressionFunctionBody).semicolon, isNull);
5029 }
5030
5031 void test_parseFunctionExpression_typeParameterComments() {
5032 enableGenericMethodComments = true;
5033 createParser('/*<E>*/(/*=E*/ i) => i++');
5034 FunctionExpression expression = parser.parseFunctionExpression();
5035 expect(expression, isNotNull);
5036 assertNoErrors();
5037 expect(expression.body, isNotNull);
5038 expect(expression.typeParameters, isNotNull);
5039 expect(expression.parameters, isNotNull);
5040 expect((expression.body as ExpressionFunctionBody).semicolon, isNull);
5041 SimpleFormalParameter p = expression.parameters.parameters[0];
5042 expect(p.type, isNotNull);
5043 }
5044
5045 void test_parseFunctionExpression_typeParameters() {
5046 createParser('<E>(E i) => i++');
5047 FunctionExpression expression = parser.parseFunctionExpression();
5048 expect(expression, isNotNull);
5049 assertNoErrors();
5050 expect(expression.body, isNotNull);
5051 expect(expression.typeParameters, isNotNull);
5052 expect(expression.parameters, isNotNull);
5053 expect((expression.body as ExpressionFunctionBody).semicolon, isNull);
5054 }
5055
5056 void test_parseInstanceCreationExpression_qualifiedType() {
5057 Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
5058 createParser('A.B()');
5059 InstanceCreationExpression expression =
5060 parser.parseInstanceCreationExpression(token);
5061 expect(expression, isNotNull);
5062 assertNoErrors();
5063 expect(expression.keyword, token);
5064 ConstructorName name = expression.constructorName;
5065 expect(name, isNotNull);
5066 TypeName type = name.type;
5067 expect(type, isNotNull);
5068 expect(type.typeArguments, isNull);
5069 expect(name.period, isNull);
5070 expect(name.name, isNull);
5071 expect(expression.argumentList, isNotNull);
5072 }
5073
5074 void test_parseInstanceCreationExpression_qualifiedType_named() {
5075 Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
5076 createParser('A.B.c()');
5077 InstanceCreationExpression expression =
5078 parser.parseInstanceCreationExpression(token);
5079 expect(expression, isNotNull);
5080 assertNoErrors();
5081 expect(expression.keyword, token);
5082 ConstructorName name = expression.constructorName;
5083 expect(name, isNotNull);
5084 TypeName type = name.type;
5085 expect(type, isNotNull);
5086 expect(type.typeArguments, isNull);
5087 expect(name.period, isNotNull);
5088 expect(name.name, isNotNull);
5089 expect(expression.argumentList, isNotNull);
5090 }
5091
5092 void
5093 test_parseInstanceCreationExpression_qualifiedType_named_typeParameterComm ent() {
5094 enableGenericMethodComments = true;
5095 Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
5096 createParser('A.B/*<E>*/.c()');
5097 InstanceCreationExpression expression =
5098 parser.parseInstanceCreationExpression(token);
5099 expect(expression, isNotNull);
5100 assertNoErrors();
5101 expect(expression.keyword, token);
5102 ConstructorName name = expression.constructorName;
5103 expect(name, isNotNull);
5104 TypeName type = name.type;
5105 expect(type, isNotNull);
5106 expect(type.typeArguments.arguments, hasLength(1));
5107 expect(name.period, isNotNull);
5108 expect(name.name, isNotNull);
5109 expect(expression.argumentList, isNotNull);
5110 }
5111
5112 void
5113 test_parseInstanceCreationExpression_qualifiedType_named_typeParameters() {
5114 Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
5115 createParser('A.B<E>.c()');
5116 InstanceCreationExpression expression =
5117 parser.parseInstanceCreationExpression(token);
5118 expect(expression, isNotNull);
5119 assertNoErrors();
5120 expect(expression.keyword, token);
5121 ConstructorName name = expression.constructorName;
5122 expect(name, isNotNull);
5123 TypeName type = name.type;
5124 expect(type, isNotNull);
5125 expect(type.typeArguments.arguments, hasLength(1));
5126 expect(name.period, isNotNull);
5127 expect(name.name, isNotNull);
5128 expect(expression.argumentList, isNotNull);
5129 }
5130
5131 void
5132 test_parseInstanceCreationExpression_qualifiedType_typeParameterComment() {
5133 enableGenericMethodComments = true;
5134 Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
5135 createParser('A.B/*<E>*/()');
5136 InstanceCreationExpression expression =
5137 parser.parseInstanceCreationExpression(token);
5138 expect(expression, isNotNull);
5139 assertNoErrors();
5140 expect(expression.keyword, token);
5141 ConstructorName name = expression.constructorName;
5142 expect(name, isNotNull);
5143 TypeName type = name.type;
5144 expect(type, isNotNull);
5145 expect(type.typeArguments.arguments, hasLength(1));
5146 expect(name.period, isNull);
5147 expect(name.name, isNull);
5148 expect(expression.argumentList, isNotNull);
5149 }
5150
5151 void test_parseInstanceCreationExpression_qualifiedType_typeParameters() {
5152 Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
5153 createParser('A.B<E>()');
5154 InstanceCreationExpression expression =
5155 parser.parseInstanceCreationExpression(token);
5156 expect(expression, isNotNull);
5157 assertNoErrors();
5158 expect(expression.keyword, token);
5159 ConstructorName name = expression.constructorName;
5160 expect(name, isNotNull);
5161 TypeName type = name.type;
5162 expect(type, isNotNull);
5163 expect(type.typeArguments.arguments, hasLength(1));
5164 expect(name.period, isNull);
5165 expect(name.name, isNull);
5166 expect(expression.argumentList, isNotNull);
5167 }
5168
5169 void test_parseInstanceCreationExpression_type() {
5170 Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
5171 createParser('A()');
5172 InstanceCreationExpression expression =
5173 parser.parseInstanceCreationExpression(token);
5174 expect(expression, isNotNull);
5175 assertNoErrors();
5176 expect(expression.keyword, token);
5177 ConstructorName name = expression.constructorName;
5178 expect(name, isNotNull);
5179 TypeName type = name.type;
5180 expect(type, isNotNull);
5181 expect(type.typeArguments, isNull);
5182 expect(name.period, isNull);
5183 expect(name.name, isNull);
5184 expect(expression.argumentList, isNotNull);
5185 }
5186
5187 void test_parseInstanceCreationExpression_type_named() {
5188 enableGenericMethodComments = true;
5189 Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
5190 createParser('A.c()');
5191 InstanceCreationExpression expression =
5192 parser.parseInstanceCreationExpression(token);
5193 expect(expression, isNotNull);
5194 assertNoErrors();
5195 expect(expression.keyword, token);
5196 ConstructorName name = expression.constructorName;
5197 expect(name, isNotNull);
5198 TypeName type = name.type;
5199 expect(type, isNotNull);
5200 expect(type.typeArguments, isNull);
5201 expect(name.period, isNull);
5202 expect(name.name, isNull);
5203 expect(expression.argumentList, isNotNull);
5204 }
5205
5206 void test_parseInstanceCreationExpression_type_named_typeParameterComment() {
5207 enableGenericMethodComments = true;
5208 Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
5209 createParser('A/*<B>*/.c()');
5210 InstanceCreationExpression expression =
5211 parser.parseInstanceCreationExpression(token);
5212 expect(expression, isNotNull);
5213 assertNoErrors();
5214 expect(expression.keyword, token);
5215 ConstructorName name = expression.constructorName;
5216 expect(name, isNotNull);
5217 TypeName type = name.type;
5218 expect(type, isNotNull);
5219 expect(type.typeArguments.arguments, hasLength(1));
5220 expect(name.period, isNotNull);
5221 expect(name.name, isNotNull);
5222 expect(expression.argumentList, isNotNull);
5223 }
5224
5225 void test_parseInstanceCreationExpression_type_named_typeParameters() {
5226 Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
5227 createParser('A<B>.c()');
5228 InstanceCreationExpression expression =
5229 parser.parseInstanceCreationExpression(token);
5230 expect(expression, isNotNull);
5231 assertNoErrors();
5232 expect(expression.keyword, token);
5233 ConstructorName name = expression.constructorName;
5234 expect(name, isNotNull);
5235 TypeName type = name.type;
5236 expect(type, isNotNull);
5237 expect(type.typeArguments.arguments, hasLength(1));
5238 expect(name.period, isNotNull);
5239 expect(name.name, isNotNull);
5240 expect(expression.argumentList, isNotNull);
5241 }
5242
5243 void test_parseInstanceCreationExpression_type_typeParameterComment() {
5244 enableGenericMethodComments = true;
5245 Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
5246 createParser('A/*<B>*/()');
5247 InstanceCreationExpression expression =
5248 parser.parseInstanceCreationExpression(token);
5249 expect(expression, isNotNull);
5250 assertNoErrors();
5251 expect(expression.keyword, token);
5252 ConstructorName name = expression.constructorName;
5253 expect(name, isNotNull);
5254 TypeName type = name.type;
5255 expect(type, isNotNull);
5256 expect(type.typeArguments.arguments, hasLength(1));
5257 expect(name.period, isNull);
5258 expect(name.name, isNull);
5259 expect(expression.argumentList, isNotNull);
5260 }
5261
5262 void test_parseInstanceCreationExpression_type_typeParameters() {
5263 Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
5264 createParser('A<B>()');
5265 InstanceCreationExpression expression =
5266 parser.parseInstanceCreationExpression(token);
5267 expect(expression, isNotNull);
5268 assertNoErrors();
5269 expect(expression.keyword, token);
5270 ConstructorName name = expression.constructorName;
5271 expect(name, isNotNull);
5272 TypeName type = name.type;
5273 expect(type, isNotNull);
5274 expect(type.typeArguments.arguments, hasLength(1));
5275 expect(name.period, isNull);
5276 expect(name.name, isNull);
5277 expect(expression.argumentList, isNotNull);
5278 }
5279
5280 void test_parseInstanceCreationExpression_type_typeParameters_nullable() {
5281 enableNnbd = true;
5282 Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
5283 createParser('A<B?>()');
5284 InstanceCreationExpression expression =
5285 parser.parseInstanceCreationExpression(token);
5286 expect(expression, isNotNull);
5287 assertNoErrors();
5288 expect(expression.keyword, token);
5289 ConstructorName name = expression.constructorName;
5290 expect(name, isNotNull);
5291 TypeName type = name.type;
5292 expect(type, isNotNull);
5293 expect(name.period, isNull);
5294 expect(name.name, isNull);
5295 expect(expression.argumentList, isNotNull);
5296 NodeList<TypeAnnotation> arguments = type.typeArguments.arguments;
5297 expect(arguments, hasLength(1));
5298 expect((arguments[0] as TypeName).question, isNotNull);
5299 }
5300
5301 void test_parseListLiteral_empty_oneToken() {
5302 Token token = TokenFactory.tokenFromKeyword(Keyword.CONST);
5303 TypeArgumentList typeArguments = null;
5304 createParser('[]');
5305 ListLiteral literal = parser.parseListLiteral(token, typeArguments);
5306 expect(literal, isNotNull);
5307 assertNoErrors();
5308 expect(literal.constKeyword, token);
5309 expect(literal.typeArguments, typeArguments);
5310 expect(literal.leftBracket, isNotNull);
5311 expect(literal.elements, hasLength(0));
5312 expect(literal.rightBracket, isNotNull);
5313 }
5314
5315 void test_parseListLiteral_empty_oneToken_withComment() {
5316 Token token = null;
5317 TypeArgumentList typeArguments = null;
5318 createParser('/* 0 */ []');
5319 ListLiteral literal = parser.parseListLiteral(token, typeArguments);
5320 expect(literal, isNotNull);
5321 assertNoErrors();
5322 expect(literal.constKeyword, token);
5323 expect(literal.typeArguments, typeArguments);
5324 Token leftBracket = literal.leftBracket;
5325 expect(leftBracket, isNotNull);
5326 expect(leftBracket.precedingComments, isNotNull);
5327 expect(literal.elements, hasLength(0));
5328 expect(literal.rightBracket, isNotNull);
5329 }
5330
5331 void test_parseListLiteral_empty_twoTokens() {
5332 Token token = TokenFactory.tokenFromKeyword(Keyword.CONST);
5333 TypeArgumentList typeArguments = null;
5334 createParser('[ ]');
5335 ListLiteral literal = parser.parseListLiteral(token, typeArguments);
5336 expect(literal, isNotNull);
5337 assertNoErrors();
5338 expect(literal.constKeyword, token);
5339 expect(literal.typeArguments, typeArguments);
5340 expect(literal.leftBracket, isNotNull);
5341 expect(literal.elements, hasLength(0));
5342 expect(literal.rightBracket, isNotNull);
5343 }
5344
5345 void test_parseListLiteral_multiple() {
5346 createParser('[1, 2, 3]');
5347 ListLiteral literal = parser.parseListLiteral(null, null);
5348 expect(literal, isNotNull);
5349 assertNoErrors();
5350 expect(literal.constKeyword, isNull);
5351 expect(literal.typeArguments, isNull);
5352 expect(literal.leftBracket, isNotNull);
5353 expect(literal.elements, hasLength(3));
5354 expect(literal.rightBracket, isNotNull);
5355 }
5356
5357 void test_parseListLiteral_single() {
5358 createParser('[1]');
5359 ListLiteral literal = parser.parseListLiteral(null, null);
5360 expect(literal, isNotNull);
5361 assertNoErrors();
5362 expect(literal.constKeyword, isNull);
5363 expect(literal.typeArguments, isNull);
5364 expect(literal.leftBracket, isNotNull);
5365 expect(literal.elements, hasLength(1));
5366 expect(literal.rightBracket, isNotNull);
5367 }
5368
5369 void test_parseListOrMapLiteral_list_noType() {
5370 createParser('[1]');
5371 TypedLiteral literal = parser.parseListOrMapLiteral(null);
5372 expect(literal, isNotNull);
5373 assertNoErrors();
5374 expect(literal, new isInstanceOf<ListLiteral>());
5375 ListLiteral listLiteral = literal;
5376 expect(listLiteral.constKeyword, isNull);
5377 expect(listLiteral.typeArguments, isNull);
5378 expect(listLiteral.leftBracket, isNotNull);
5379 expect(listLiteral.elements, hasLength(1));
5380 expect(listLiteral.rightBracket, isNotNull);
5381 }
5382
5383 void test_parseListOrMapLiteral_list_type() {
5384 createParser('<int> [1]');
5385 TypedLiteral literal = parser.parseListOrMapLiteral(null);
5386 expect(literal, isNotNull);
5387 assertNoErrors();
5388 expect(literal, new isInstanceOf<ListLiteral>());
5389 ListLiteral listLiteral = literal;
5390 expect(listLiteral.constKeyword, isNull);
5391 expect(listLiteral.typeArguments, isNotNull);
5392 expect(listLiteral.leftBracket, isNotNull);
5393 expect(listLiteral.elements, hasLength(1));
5394 expect(listLiteral.rightBracket, isNotNull);
5395 }
5396
5397 void test_parseListOrMapLiteral_map_noType() {
5398 createParser("{'1' : 1}");
5399 TypedLiteral literal = parser.parseListOrMapLiteral(null);
5400 expect(literal, isNotNull);
5401 assertNoErrors();
5402 expect(literal, new isInstanceOf<MapLiteral>());
5403 MapLiteral mapLiteral = literal;
5404 expect(mapLiteral.constKeyword, isNull);
5405 expect(mapLiteral.typeArguments, isNull);
5406 expect(mapLiteral.leftBracket, isNotNull);
5407 expect(mapLiteral.entries, hasLength(1));
5408 expect(mapLiteral.rightBracket, isNotNull);
5409 }
5410
5411 void test_parseListOrMapLiteral_map_type() {
5412 createParser("<String, int> {'1' : 1}");
5413 TypedLiteral literal = parser.parseListOrMapLiteral(null);
5414 expect(literal, isNotNull);
5415 assertNoErrors();
5416 expect(literal, new isInstanceOf<MapLiteral>());
5417 MapLiteral mapLiteral = literal;
5418 expect(mapLiteral.constKeyword, isNull);
5419 expect(mapLiteral.typeArguments, isNotNull);
5420 expect(mapLiteral.leftBracket, isNotNull);
5421 expect(mapLiteral.entries, hasLength(1));
5422 expect(mapLiteral.rightBracket, isNotNull);
5423 }
5424
5425 void test_parseLogicalAndExpression() {
5426 createParser('x && y');
5427 Expression expression = parser.parseLogicalAndExpression();
5428 expect(expression, isNotNull);
5429 assertNoErrors();
5430 expect(expression, new isInstanceOf<BinaryExpression>());
5431 BinaryExpression binaryExpression = expression;
5432 expect(binaryExpression.leftOperand, isNotNull);
5433 expect(binaryExpression.operator, isNotNull);
5434 expect(binaryExpression.operator.type, TokenType.AMPERSAND_AMPERSAND);
5435 expect(binaryExpression.rightOperand, isNotNull);
5436 }
5437
5438 void test_parseLogicalOrExpression() {
5439 createParser('x || y');
5440 Expression expression = parser.parseLogicalOrExpression();
5441 expect(expression, isNotNull);
5442 assertNoErrors();
5443 expect(expression, new isInstanceOf<BinaryExpression>());
5444 BinaryExpression binaryExpression = expression;
5445 expect(binaryExpression.leftOperand, isNotNull);
5446 expect(binaryExpression.operator, isNotNull);
5447 expect(binaryExpression.operator.type, TokenType.BAR_BAR);
5448 expect(binaryExpression.rightOperand, isNotNull);
5449 }
5450
5451 void test_parseMapLiteral_empty() {
5452 Token token = TokenFactory.tokenFromKeyword(Keyword.CONST);
5453 TypeArgumentList typeArguments = AstTestFactory.typeArgumentList(
5454 [AstTestFactory.typeName4("String"), AstTestFactory.typeName4("int")]);
5455 createParser('{}');
5456 MapLiteral literal = parser.parseMapLiteral(token, typeArguments);
5457 expect(literal, isNotNull);
5458 assertNoErrors();
5459 expect(literal.constKeyword, token);
5460 expect(literal.typeArguments, typeArguments);
5461 expect(literal.leftBracket, isNotNull);
5462 expect(literal.entries, hasLength(0));
5463 expect(literal.rightBracket, isNotNull);
5464 }
5465
5466 void test_parseMapLiteral_multiple() {
5467 createParser("{'a' : b, 'x' : y}");
5468 MapLiteral literal = parser.parseMapLiteral(null, null);
5469 expect(literal, isNotNull);
5470 assertNoErrors();
5471 expect(literal.leftBracket, isNotNull);
5472 expect(literal.entries, hasLength(2));
5473 expect(literal.rightBracket, isNotNull);
5474 }
5475
5476 void test_parseMapLiteral_single() {
5477 createParser("{'x' : y}");
5478 MapLiteral literal = parser.parseMapLiteral(null, null);
5479 expect(literal, isNotNull);
5480 assertNoErrors();
5481 expect(literal.leftBracket, isNotNull);
5482 expect(literal.entries, hasLength(1));
5483 expect(literal.rightBracket, isNotNull);
5484 }
5485
5486 void test_parseMapLiteralEntry_complex() {
5487 createParser('2 + 2 : y');
5488 MapLiteralEntry entry = parser.parseMapLiteralEntry();
5489 expect(entry, isNotNull);
5490 assertNoErrors();
5491 expect(entry.key, isNotNull);
5492 expect(entry.separator, isNotNull);
5493 expect(entry.value, isNotNull);
5494 }
5495
5496 void test_parseMapLiteralEntry_int() {
5497 createParser('0 : y');
5498 MapLiteralEntry entry = parser.parseMapLiteralEntry();
5499 expect(entry, isNotNull);
5500 assertNoErrors();
5501 expect(entry.key, isNotNull);
5502 expect(entry.separator, isNotNull);
5503 expect(entry.value, isNotNull);
5504 }
5505
5506 void test_parseMapLiteralEntry_string() {
5507 createParser("'x' : y");
5508 MapLiteralEntry entry = parser.parseMapLiteralEntry();
5509 expect(entry, isNotNull);
5510 assertNoErrors();
5511 expect(entry.key, isNotNull);
5512 expect(entry.separator, isNotNull);
5513 expect(entry.value, isNotNull);
5514 }
5515
5516 void test_parseMultiplicativeExpression_normal() {
5517 createParser('x * y');
5518 Expression expression = parser.parseMultiplicativeExpression();
5519 expect(expression, isNotNull);
5520 assertNoErrors();
5521 expect(expression, new isInstanceOf<BinaryExpression>());
5522 BinaryExpression binaryExpression = expression;
5523 expect(binaryExpression.leftOperand, isNotNull);
5524 expect(binaryExpression.operator, isNotNull);
5525 expect(binaryExpression.operator.type, TokenType.STAR);
5526 expect(binaryExpression.rightOperand, isNotNull);
5527 }
5528
5529 void test_parseMultiplicativeExpression_super() {
5530 createParser('super * y');
5531 Expression expression = parser.parseMultiplicativeExpression();
5532 expect(expression, isNotNull);
5533 assertNoErrors();
5534 expect(expression, new isInstanceOf<BinaryExpression>());
5535 BinaryExpression binaryExpression = expression;
5536 expect(binaryExpression.leftOperand, new isInstanceOf<SuperExpression>());
5537 expect(binaryExpression.operator, isNotNull);
5538 expect(binaryExpression.operator.type, TokenType.STAR);
5539 expect(binaryExpression.rightOperand, isNotNull);
5540 }
5541
5542 void test_parseNewExpression() {
5543 createParser('new A()');
5544 InstanceCreationExpression expression = parser.parseNewExpression();
5545 expect(expression, isNotNull);
5546 assertNoErrors();
5547 expect(expression.keyword, isNotNull);
5548 ConstructorName name = expression.constructorName;
5549 expect(name, isNotNull);
5550 expect(name.type, isNotNull);
5551 expect(name.period, isNull);
5552 expect(name.name, isNull);
5553 expect(expression.argumentList, isNotNull);
5554 }
5555
5556 void test_parsePostfixExpression_decrement() {
5557 createParser('i--');
5558 Expression expression = parser.parsePostfixExpression();
5559 expect(expression, isNotNull);
5560 assertNoErrors();
5561 expect(expression, new isInstanceOf<PostfixExpression>());
5562 PostfixExpression postfixExpression = expression;
5563 expect(postfixExpression.operand, isNotNull);
5564 expect(postfixExpression.operator, isNotNull);
5565 expect(postfixExpression.operator.type, TokenType.MINUS_MINUS);
5566 }
5567
5568 void test_parsePostfixExpression_increment() {
5569 createParser('i++');
5570 Expression expression = parser.parsePostfixExpression();
5571 expect(expression, isNotNull);
5572 assertNoErrors();
5573 expect(expression, new isInstanceOf<PostfixExpression>());
5574 PostfixExpression postfixExpression = expression;
5575 expect(postfixExpression.operand, isNotNull);
5576 expect(postfixExpression.operator, isNotNull);
5577 expect(postfixExpression.operator.type, TokenType.PLUS_PLUS);
5578 }
5579
5580 void test_parsePostfixExpression_none_indexExpression() {
5581 createParser('a[0]');
5582 Expression expression = parser.parsePostfixExpression();
5583 expect(expression, isNotNull);
5584 assertNoErrors();
5585 expect(expression, new isInstanceOf<IndexExpression>());
5586 IndexExpression indexExpression = expression;
5587 expect(indexExpression.target, isNotNull);
5588 expect(indexExpression.index, isNotNull);
5589 }
5590
5591 void test_parsePostfixExpression_none_methodInvocation() {
5592 createParser('a.m()');
5593 Expression expression = parser.parsePostfixExpression();
5594 expect(expression, isNotNull);
5595 assertNoErrors();
5596 expect(expression, new isInstanceOf<MethodInvocation>());
5597 MethodInvocation methodInvocation = expression;
5598 expect(methodInvocation.target, isNotNull);
5599 expect(methodInvocation.operator.type, TokenType.PERIOD);
5600 expect(methodInvocation.methodName, isNotNull);
5601 expect(methodInvocation.typeArguments, isNull);
5602 expect(methodInvocation.argumentList, isNotNull);
5603 }
5604
5605 void test_parsePostfixExpression_none_methodInvocation_question_dot() {
5606 createParser('a?.m()');
5607 Expression expression = parser.parsePostfixExpression();
5608 expect(expression, isNotNull);
5609 assertNoErrors();
5610 expect(expression, new isInstanceOf<MethodInvocation>());
5611 MethodInvocation methodInvocation = expression;
5612 expect(methodInvocation.target, isNotNull);
5613 expect(methodInvocation.operator.type, TokenType.QUESTION_PERIOD);
5614 expect(methodInvocation.methodName, isNotNull);
5615 expect(methodInvocation.typeArguments, isNull);
5616 expect(methodInvocation.argumentList, isNotNull);
5617 }
5618
5619 void
5620 test_parsePostfixExpression_none_methodInvocation_question_dot_typeArgumen tComments() {
5621 enableGenericMethodComments = true;
5622 createParser('a?.m/*<E>*/()');
5623 Expression expression = parser.parsePostfixExpression();
5624 expect(expression, isNotNull);
5625 assertNoErrors();
5626 expect(expression, new isInstanceOf<MethodInvocation>());
5627 MethodInvocation methodInvocation = expression;
5628 expect(methodInvocation.target, isNotNull);
5629 expect(methodInvocation.operator.type, TokenType.QUESTION_PERIOD);
5630 expect(methodInvocation.methodName, isNotNull);
5631 expect(methodInvocation.typeArguments, isNotNull);
5632 expect(methodInvocation.argumentList, isNotNull);
5633 }
5634
5635 void
5636 test_parsePostfixExpression_none_methodInvocation_question_dot_typeArgumen ts() {
5637 createParser('a?.m<E>()');
5638 Expression expression = parser.parsePostfixExpression();
5639 expect(expression, isNotNull);
5640 assertNoErrors();
5641 expect(expression, new isInstanceOf<MethodInvocation>());
5642 MethodInvocation methodInvocation = expression;
5643 expect(methodInvocation.target, isNotNull);
5644 expect(methodInvocation.operator.type, TokenType.QUESTION_PERIOD);
5645 expect(methodInvocation.methodName, isNotNull);
5646 expect(methodInvocation.typeArguments, isNotNull);
5647 expect(methodInvocation.argumentList, isNotNull);
5648 }
5649
5650 void
5651 test_parsePostfixExpression_none_methodInvocation_typeArgumentComments() {
5652 enableGenericMethodComments = true;
5653 createParser('a.m/*<E>*/()');
5654 Expression expression = parser.parsePostfixExpression();
5655 expect(expression, isNotNull);
5656 assertNoErrors();
5657 expect(expression, new isInstanceOf<MethodInvocation>());
5658 MethodInvocation methodInvocation = expression;
5659 expect(methodInvocation.target, isNotNull);
5660 expect(methodInvocation.operator.type, TokenType.PERIOD);
5661 expect(methodInvocation.methodName, isNotNull);
5662 expect(methodInvocation.typeArguments, isNotNull);
5663 expect(methodInvocation.argumentList, isNotNull);
5664 }
5665
5666 void test_parsePostfixExpression_none_methodInvocation_typeArguments() {
5667 createParser('a.m<E>()');
5668 Expression expression = parser.parsePostfixExpression();
5669 expect(expression, isNotNull);
5670 assertNoErrors();
5671 expect(expression, new isInstanceOf<MethodInvocation>());
5672 MethodInvocation methodInvocation = expression;
5673 expect(methodInvocation.target, isNotNull);
5674 expect(methodInvocation.operator.type, TokenType.PERIOD);
5675 expect(methodInvocation.methodName, isNotNull);
5676 expect(methodInvocation.typeArguments, isNotNull);
5677 expect(methodInvocation.argumentList, isNotNull);
5678 }
5679
5680 void test_parsePostfixExpression_none_propertyAccess() {
5681 createParser('a.b');
5682 Expression expression = parser.parsePostfixExpression();
5683 expect(expression, isNotNull);
5684 assertNoErrors();
5685 expect(expression, new isInstanceOf<PrefixedIdentifier>());
5686 PrefixedIdentifier identifier = expression;
5687 expect(identifier.prefix, isNotNull);
5688 expect(identifier.identifier, isNotNull);
5689 }
5690
5691 void test_parsePrefixedIdentifier_noPrefix() {
5692 String lexeme = "bar";
5693 createParser(lexeme);
5694 Identifier identifier = parser.parsePrefixedIdentifier();
5695 expect(identifier, isNotNull);
5696 assertNoErrors();
5697 expect(identifier, new isInstanceOf<SimpleIdentifier>());
5698 SimpleIdentifier simpleIdentifier = identifier;
5699 expect(simpleIdentifier.token, isNotNull);
5700 expect(simpleIdentifier.name, lexeme);
5701 }
5702
5703 void test_parsePrefixedIdentifier_prefix() {
5704 String lexeme = "foo.bar";
5705 createParser(lexeme);
5706 Identifier identifier = parser.parsePrefixedIdentifier();
5707 expect(identifier, isNotNull);
5708 assertNoErrors();
5709 expect(identifier, new isInstanceOf<PrefixedIdentifier>());
5710 PrefixedIdentifier prefixedIdentifier = identifier;
5711 expect(prefixedIdentifier.prefix.name, "foo");
5712 expect(prefixedIdentifier.period, isNotNull);
5713 expect(prefixedIdentifier.identifier.name, "bar");
5714 }
5715
5716 void test_parsePrimaryExpression_const() {
5717 createParser('const A()');
5718 Expression expression = parser.parsePrimaryExpression();
5719 expect(expression, isNotNull);
5720 assertNoErrors();
5721 expect(expression, isNotNull);
5722 }
5723
5724 void test_parsePrimaryExpression_double() {
5725 String doubleLiteral = "3.2e4";
5726 createParser(doubleLiteral);
5727 Expression expression = parser.parsePrimaryExpression();
5728 expect(expression, isNotNull);
5729 assertNoErrors();
5730 expect(expression, new isInstanceOf<DoubleLiteral>());
5731 DoubleLiteral literal = expression;
5732 expect(literal.literal, isNotNull);
5733 expect(literal.value, double.parse(doubleLiteral));
5734 }
5735
5736 void test_parsePrimaryExpression_false() {
5737 createParser('false');
5738 Expression expression = parser.parsePrimaryExpression();
5739 expect(expression, isNotNull);
5740 assertNoErrors();
5741 expect(expression, new isInstanceOf<BooleanLiteral>());
5742 BooleanLiteral literal = expression;
5743 expect(literal.literal, isNotNull);
5744 expect(literal.value, isFalse);
5745 }
5746
5747 void test_parsePrimaryExpression_function_arguments() {
5748 createParser('(int i) => i + 1');
5749 Expression expression = parser.parsePrimaryExpression();
5750 expect(expression, isNotNull);
5751 assertNoErrors();
5752 expect(expression, new isInstanceOf<FunctionExpression>());
5753 FunctionExpression functionExpression = expression;
5754 expect(functionExpression.parameters, isNotNull);
5755 expect(functionExpression.body, isNotNull);
5756 }
5757
5758 void test_parsePrimaryExpression_function_noArguments() {
5759 createParser('() => 42');
5760 Expression expression = parser.parsePrimaryExpression();
5761 expect(expression, isNotNull);
5762 assertNoErrors();
5763 expect(expression, new isInstanceOf<FunctionExpression>());
5764 FunctionExpression functionExpression = expression;
5765 expect(functionExpression.parameters, isNotNull);
5766 expect(functionExpression.body, isNotNull);
5767 }
5768
5769 void test_parsePrimaryExpression_genericFunctionExpression() {
5770 createParser('<X, Y>(Map<X, Y> m, X x) => m[x]');
5771 Expression expression = parser.parsePrimaryExpression();
5772 expect(expression, isNotNull);
5773 assertNoErrors();
5774 expect(expression, new isInstanceOf<FunctionExpression>());
5775 FunctionExpression function = expression;
5776 expect(function.typeParameters, isNotNull);
5777 }
5778
5779 void test_parsePrimaryExpression_hex() {
5780 String hexLiteral = "3F";
5781 createParser('0x$hexLiteral');
5782 Expression expression = parser.parsePrimaryExpression();
5783 expect(expression, isNotNull);
5784 assertNoErrors();
5785 expect(expression, new isInstanceOf<IntegerLiteral>());
5786 IntegerLiteral literal = expression;
5787 expect(literal.literal, isNotNull);
5788 expect(literal.value, int.parse(hexLiteral, radix: 16));
5789 }
5790
5791 void test_parsePrimaryExpression_identifier() {
5792 createParser('a');
5793 Expression expression = parser.parsePrimaryExpression();
5794 expect(expression, isNotNull);
5795 assertNoErrors();
5796 expect(expression, new isInstanceOf<SimpleIdentifier>());
5797 SimpleIdentifier identifier = expression;
5798 expect(identifier, isNotNull);
5799 }
5800
5801 void test_parsePrimaryExpression_int() {
5802 String intLiteral = "472";
5803 createParser(intLiteral);
5804 Expression expression = parser.parsePrimaryExpression();
5805 expect(expression, isNotNull);
5806 assertNoErrors();
5807 expect(expression, new isInstanceOf<IntegerLiteral>());
5808 IntegerLiteral literal = expression;
5809 expect(literal.literal, isNotNull);
5810 expect(literal.value, int.parse(intLiteral));
5811 }
5812
5813 void test_parsePrimaryExpression_listLiteral() {
5814 createParser('[ ]');
5815 Expression expression = parser.parsePrimaryExpression();
5816 expect(expression, isNotNull);
5817 assertNoErrors();
5818 expect(expression, new isInstanceOf<ListLiteral>());
5819 ListLiteral literal = expression;
5820 expect(literal, isNotNull);
5821 }
5822
5823 void test_parsePrimaryExpression_listLiteral_index() {
5824 createParser('[]');
5825 Expression expression = parser.parsePrimaryExpression();
5826 expect(expression, isNotNull);
5827 assertNoErrors();
5828 expect(expression, new isInstanceOf<ListLiteral>());
5829 ListLiteral literal = expression;
5830 expect(literal, isNotNull);
5831 }
5832
5833 void test_parsePrimaryExpression_listLiteral_typed() {
5834 createParser('<A>[ ]');
5835 Expression expression = parser.parsePrimaryExpression();
5836 expect(expression, isNotNull);
5837 assertNoErrors();
5838 expect(expression, new isInstanceOf<ListLiteral>());
5839 ListLiteral literal = expression;
5840 expect(literal.typeArguments, isNotNull);
5841 expect(literal.typeArguments.arguments, hasLength(1));
5842 }
5843
5844 void test_parsePrimaryExpression_listLiteral_typed_genericComment() {
5845 enableGenericMethodComments = true;
5846 createParser('/*<A>*/[ ]');
5847 Expression expression = parser.parsePrimaryExpression();
5848 expect(expression, isNotNull);
5849 assertNoErrors();
5850 expect(expression, new isInstanceOf<ListLiteral>());
5851 ListLiteral literal = expression;
5852 expect(literal.typeArguments, isNotNull);
5853 expect(literal.typeArguments.arguments, hasLength(1));
5854 }
5855
5856 void test_parsePrimaryExpression_mapLiteral() {
5857 createParser('{}');
5858 Expression expression = parser.parsePrimaryExpression();
5859 expect(expression, isNotNull);
5860 assertNoErrors();
5861 expect(expression, new isInstanceOf<MapLiteral>());
5862 MapLiteral literal = expression;
5863 expect(literal.typeArguments, isNull);
5864 expect(literal, isNotNull);
5865 }
5866
5867 void test_parsePrimaryExpression_mapLiteral_typed() {
5868 createParser('<A, B>{}');
5869 Expression expression = parser.parsePrimaryExpression();
5870 expect(expression, isNotNull);
5871 assertNoErrors();
5872 expect(expression, new isInstanceOf<MapLiteral>());
5873 MapLiteral literal = expression;
5874 expect(literal.typeArguments, isNotNull);
5875 expect(literal.typeArguments.arguments, hasLength(2));
5876 }
5877
5878 void test_parsePrimaryExpression_mapLiteral_typed_genericComment() {
5879 enableGenericMethodComments = true;
5880 createParser('/*<A, B>*/{}');
5881 Expression expression = parser.parsePrimaryExpression();
5882 expect(expression, isNotNull);
5883 assertNoErrors();
5884 expect(expression, new isInstanceOf<MapLiteral>());
5885 MapLiteral literal = expression;
5886 expect(literal.typeArguments, isNotNull);
5887 expect(literal.typeArguments.arguments, hasLength(2));
5888 }
5889
5890 void test_parsePrimaryExpression_new() {
5891 createParser('new A()');
5892 Expression expression = parser.parsePrimaryExpression();
5893 expect(expression, isNotNull);
5894 assertNoErrors();
5895 expect(expression, new isInstanceOf<InstanceCreationExpression>());
5896 InstanceCreationExpression creation = expression;
5897 expect(creation, isNotNull);
5898 }
5899
5900 void test_parsePrimaryExpression_null() {
5901 createParser('null');
5902 Expression expression = parser.parsePrimaryExpression();
5903 expect(expression, isNotNull);
5904 assertNoErrors();
5905 expect(expression, new isInstanceOf<NullLiteral>());
5906 NullLiteral literal = expression;
5907 expect(literal.literal, isNotNull);
5908 }
5909
5910 void test_parsePrimaryExpression_parenthesized() {
5911 createParser('(x)');
5912 Expression expression = parser.parsePrimaryExpression();
5913 expect(expression, isNotNull);
5914 assertNoErrors();
5915 expect(expression, new isInstanceOf<ParenthesizedExpression>());
5916 ParenthesizedExpression parens = expression;
5917 expect(parens, isNotNull);
5918 }
5919
5920 void test_parsePrimaryExpression_string() {
5921 createParser('"string"');
5922 Expression expression = parser.parsePrimaryExpression();
5923 expect(expression, isNotNull);
5924 assertNoErrors();
5925 expect(expression, new isInstanceOf<SimpleStringLiteral>());
5926 SimpleStringLiteral literal = expression;
5927 expect(literal.isMultiline, isFalse);
5928 expect(literal.isRaw, isFalse);
5929 expect(literal.value, "string");
5930 }
5931
5932 void test_parsePrimaryExpression_string_multiline() {
5933 createParser("'''string'''");
5934 Expression expression = parser.parsePrimaryExpression();
5935 expect(expression, isNotNull);
5936 assertNoErrors();
5937 expect(expression, new isInstanceOf<SimpleStringLiteral>());
5938 SimpleStringLiteral literal = expression;
5939 expect(literal.isMultiline, isTrue);
5940 expect(literal.isRaw, isFalse);
5941 expect(literal.value, "string");
5942 }
5943
5944 void test_parsePrimaryExpression_string_raw() {
5945 createParser("r'string'");
5946 Expression expression = parser.parsePrimaryExpression();
5947 expect(expression, isNotNull);
5948 assertNoErrors();
5949 expect(expression, new isInstanceOf<SimpleStringLiteral>());
5950 SimpleStringLiteral literal = expression;
5951 expect(literal.isMultiline, isFalse);
5952 expect(literal.isRaw, isTrue);
5953 expect(literal.value, "string");
5954 }
5955
5956 void test_parsePrimaryExpression_super() {
5957 createParser('super.x');
5958 Expression expression = parser.parsePrimaryExpression();
5959 expect(expression, isNotNull);
5960 assertNoErrors();
5961 expect(expression, new isInstanceOf<PropertyAccess>());
5962 PropertyAccess propertyAccess = expression;
5963 expect(propertyAccess.target is SuperExpression, isTrue);
5964 expect(propertyAccess.operator, isNotNull);
5965 expect(propertyAccess.operator.type, TokenType.PERIOD);
5966 expect(propertyAccess.propertyName, isNotNull);
5967 }
5968
5969 void test_parsePrimaryExpression_this() {
5970 createParser('this');
5971 Expression expression = parser.parsePrimaryExpression();
5972 expect(expression, isNotNull);
5973 assertNoErrors();
5974 expect(expression, new isInstanceOf<ThisExpression>());
5975 ThisExpression thisExpression = expression;
5976 expect(thisExpression.thisKeyword, isNotNull);
5977 }
5978
5979 void test_parsePrimaryExpression_true() {
5980 createParser('true');
5981 Expression expression = parser.parsePrimaryExpression();
5982 expect(expression, isNotNull);
5983 assertNoErrors();
5984 expect(expression, new isInstanceOf<BooleanLiteral>());
5985 BooleanLiteral literal = expression;
5986 expect(literal.literal, isNotNull);
5987 expect(literal.value, isTrue);
5988 }
5989
5990 void test_parseRelationalExpression_as_functionType_noReturnType() {
5991 createParser('x as Function(int)');
5992 Expression expression = parser.parseRelationalExpression();
5993 expect(expression, isNotNull);
5994 assertNoErrors();
5995 expect(expression, new isInstanceOf<AsExpression>());
5996 AsExpression asExpression = expression;
5997 expect(asExpression.expression, isNotNull);
5998 expect(asExpression.asOperator, isNotNull);
5999 expect(asExpression.type, new isInstanceOf<GenericFunctionType>());
6000 }
6001
6002 void test_parseRelationalExpression_as_functionType_returnType() {
6003 createParser('x as String Function(int)');
6004 Expression expression = parser.parseRelationalExpression();
6005 expect(expression, isNotNull);
6006 assertNoErrors();
6007 expect(expression, new isInstanceOf<AsExpression>());
6008 AsExpression asExpression = expression;
6009 expect(asExpression.expression, isNotNull);
6010 expect(asExpression.asOperator, isNotNull);
6011 expect(asExpression.type, new isInstanceOf<GenericFunctionType>());
6012 }
6013
6014 void test_parseRelationalExpression_as_generic() {
6015 createParser('x as C<D>');
6016 Expression expression = parser.parseRelationalExpression();
6017 expect(expression, isNotNull);
6018 assertNoErrors();
6019 expect(expression, new isInstanceOf<AsExpression>());
6020 AsExpression asExpression = expression;
6021 expect(asExpression.expression, isNotNull);
6022 expect(asExpression.asOperator, isNotNull);
6023 expect(asExpression.type, new isInstanceOf<TypeName>());
6024 }
6025
6026 void test_parseRelationalExpression_as_nullable() {
6027 enableNnbd = true;
6028 createParser('x as Y?)');
6029 Expression expression = parser.parseRelationalExpression();
6030 expect(expression, isNotNull);
6031 assertNoErrors();
6032 expect(expression, new isInstanceOf<AsExpression>());
6033 AsExpression asExpression = expression;
6034 expect(asExpression.expression, isNotNull);
6035 expect(asExpression.asOperator, isNotNull);
6036 expect(asExpression.type, new isInstanceOf<TypeName>());
6037 }
6038
6039 void test_parseRelationalExpression_as_simple() {
6040 createParser('x as Y');
6041 Expression expression = parser.parseRelationalExpression();
6042 expect(expression, isNotNull);
6043 assertNoErrors();
6044 expect(expression, new isInstanceOf<AsExpression>());
6045 AsExpression asExpression = expression;
6046 expect(asExpression.expression, isNotNull);
6047 expect(asExpression.asOperator, isNotNull);
6048 expect(asExpression.type, new isInstanceOf<TypeName>());
6049 }
6050
6051 void test_parseRelationalExpression_as_simple_function() {
6052 createParser('x as Function');
6053 Expression expression = parser.parseRelationalExpression();
6054 expect(expression, isNotNull);
6055 assertNoErrors();
6056 expect(expression, new isInstanceOf<AsExpression>());
6057 AsExpression asExpression = expression;
6058 expect(asExpression.expression, isNotNull);
6059 expect(asExpression.asOperator, isNotNull);
6060 expect(asExpression.type, new isInstanceOf<TypeName>());
6061 }
6062
6063 void test_parseRelationalExpression_is() {
6064 createParser('x is y');
6065 Expression expression = parser.parseRelationalExpression();
6066 expect(expression, isNotNull);
6067 assertNoErrors();
6068 expect(expression, new isInstanceOf<IsExpression>());
6069 IsExpression isExpression = expression;
6070 expect(isExpression.expression, isNotNull);
6071 expect(isExpression.isOperator, isNotNull);
6072 expect(isExpression.notOperator, isNull);
6073 expect(isExpression.type, isNotNull);
6074 }
6075
6076 void test_parseRelationalExpression_is_nullable() {
6077 enableNnbd = true;
6078 createParser('x is y?)');
6079 Expression expression = parser.parseRelationalExpression();
6080 expect(expression, isNotNull);
6081 assertNoErrors();
6082 expect(expression, new isInstanceOf<IsExpression>());
6083 IsExpression isExpression = expression;
6084 expect(isExpression.expression, isNotNull);
6085 expect(isExpression.isOperator, isNotNull);
6086 expect(isExpression.notOperator, isNull);
6087 expect(isExpression.type, isNotNull);
6088 }
6089
6090 void test_parseRelationalExpression_isNot() {
6091 createParser('x is! y');
6092 Expression expression = parser.parseRelationalExpression();
6093 expect(expression, isNotNull);
6094 assertNoErrors();
6095 expect(expression, new isInstanceOf<IsExpression>());
6096 IsExpression isExpression = expression;
6097 expect(isExpression.expression, isNotNull);
6098 expect(isExpression.isOperator, isNotNull);
6099 expect(isExpression.notOperator, isNotNull);
6100 expect(isExpression.type, isNotNull);
6101 }
6102
6103 void test_parseRelationalExpression_normal() {
6104 createParser('x < y');
6105 Expression expression = parser.parseRelationalExpression();
6106 expect(expression, isNotNull);
6107 assertNoErrors();
6108 expect(expression, new isInstanceOf<BinaryExpression>());
6109 BinaryExpression binaryExpression = expression;
6110 expect(binaryExpression.leftOperand, isNotNull);
6111 expect(binaryExpression.operator, isNotNull);
6112 expect(binaryExpression.operator.type, TokenType.LT);
6113 expect(binaryExpression.rightOperand, isNotNull);
6114 }
6115
6116 void test_parseRelationalExpression_super() {
6117 createParser('super < y');
6118 Expression expression = parser.parseRelationalExpression();
6119 expect(expression, isNotNull);
6120 assertNoErrors();
6121 expect(expression, new isInstanceOf<BinaryExpression>());
6122 BinaryExpression binaryExpression = expression;
6123 expect(binaryExpression.leftOperand, isNotNull);
6124 expect(binaryExpression.operator, isNotNull);
6125 expect(binaryExpression.operator.type, TokenType.LT);
6126 expect(binaryExpression.rightOperand, isNotNull);
6127 }
6128
6129 void test_parseRethrowExpression() {
6130 createParser('rethrow;');
6131 RethrowExpression expression = parser.parseRethrowExpression();
6132 expect(expression, isNotNull);
6133 assertNoErrors();
6134 expect(expression.rethrowKeyword, isNotNull);
6135 }
6136
6137 void test_parseShiftExpression_normal() {
6138 createParser('x << y');
6139 BinaryExpression expression = parser.parseShiftExpression();
6140 expect(expression, isNotNull);
6141 assertNoErrors();
6142 expect(expression.leftOperand, isNotNull);
6143 expect(expression.operator, isNotNull);
6144 expect(expression.operator.type, TokenType.LT_LT);
6145 expect(expression.rightOperand, isNotNull);
6146 }
6147
6148 void test_parseShiftExpression_super() {
6149 createParser('super << y');
6150 BinaryExpression expression = parser.parseShiftExpression();
6151 expect(expression, isNotNull);
6152 assertNoErrors();
6153 expect(expression.leftOperand, isNotNull);
6154 expect(expression.operator, isNotNull);
6155 expect(expression.operator.type, TokenType.LT_LT);
6156 expect(expression.rightOperand, isNotNull);
6157 }
6158
6159 void test_parseSimpleIdentifier1_normalIdentifier() {
6160 // TODO(brianwilkerson) Implement tests for this method.
6161 }
6162
6163 void test_parseSimpleIdentifier_builtInIdentifier() {
6164 String lexeme = "as";
6165 createParser(lexeme);
6166 SimpleIdentifier identifier = parser.parseSimpleIdentifier();
6167 expect(identifier, isNotNull);
6168 assertNoErrors();
6169 expect(identifier.token, isNotNull);
6170 expect(identifier.name, lexeme);
6171 }
6172
6173 void test_parseSimpleIdentifier_normalIdentifier() {
6174 String lexeme = "foo";
6175 createParser(lexeme);
6176 SimpleIdentifier identifier = parser.parseSimpleIdentifier();
6177 expect(identifier, isNotNull);
6178 assertNoErrors();
6179 expect(identifier.token, isNotNull);
6180 expect(identifier.name, lexeme);
6181 }
6182
6183 void test_parseStringLiteral_adjacent() {
6184 createParser("'a' 'b'");
6185 Expression expression = parser.parseStringLiteral();
6186 expect(expression, isNotNull);
6187 assertNoErrors();
6188 expect(expression, new isInstanceOf<AdjacentStrings>());
6189 AdjacentStrings literal = expression;
6190 NodeList<StringLiteral> strings = literal.strings;
6191 expect(strings, hasLength(2));
6192 StringLiteral firstString = strings[0];
6193 StringLiteral secondString = strings[1];
6194 expect((firstString as SimpleStringLiteral).value, "a");
6195 expect((secondString as SimpleStringLiteral).value, "b");
6196 }
6197
6198 void test_parseStringLiteral_endsWithInterpolation() {
6199 createParser(r"'x$y'");
6200 Expression expression = parser.parseStringLiteral();
6201 expect(expression, isNotNull);
6202 assertNoErrors();
6203 expect(expression, new isInstanceOf<StringInterpolation>());
6204 StringInterpolation interpolation = expression;
6205 expect(interpolation.elements, hasLength(3));
6206 expect(interpolation.elements[0], new isInstanceOf<InterpolationString>());
6207 InterpolationString element0 = interpolation.elements[0];
6208 expect(element0.value, 'x');
6209 expect(
6210 interpolation.elements[1], new isInstanceOf<InterpolationExpression>());
6211 InterpolationExpression element1 = interpolation.elements[1];
6212 expect(element1.expression, new isInstanceOf<SimpleIdentifier>());
6213 expect(interpolation.elements[2], new isInstanceOf<InterpolationString>());
6214 InterpolationString element2 = interpolation.elements[2];
6215 expect(element2.value, '');
6216 }
6217
6218 void test_parseStringLiteral_interpolated() {
6219 createParser("'a \${b} c \$this d'");
6220 Expression expression = parser.parseStringLiteral();
6221 expect(expression, isNotNull);
6222 assertNoErrors();
6223 expect(expression, new isInstanceOf<StringInterpolation>());
6224 StringInterpolation literal = expression;
6225 NodeList<InterpolationElement> elements = literal.elements;
6226 expect(elements, hasLength(5));
6227 expect(elements[0] is InterpolationString, isTrue);
6228 expect(elements[1] is InterpolationExpression, isTrue);
6229 expect(elements[2] is InterpolationString, isTrue);
6230 expect(elements[3] is InterpolationExpression, isTrue);
6231 expect(elements[4] is InterpolationString, isTrue);
6232 }
6233
6234 void test_parseStringLiteral_multiline_encodedSpace() {
6235 createParser("'''\\x20\na'''");
6236 Expression expression = parser.parseStringLiteral();
6237 expect(expression, isNotNull);
6238 assertNoErrors();
6239 expect(expression, new isInstanceOf<SimpleStringLiteral>());
6240 SimpleStringLiteral literal = expression;
6241 expect(literal.literal, isNotNull);
6242 expect(literal.value, " \na");
6243 }
6244
6245 void test_parseStringLiteral_multiline_endsWithInterpolation() {
6246 createParser(r"'''x$y'''");
6247 Expression expression = parser.parseStringLiteral();
6248 expect(expression, isNotNull);
6249 assertNoErrors();
6250 expect(expression, new isInstanceOf<StringInterpolation>());
6251 StringInterpolation interpolation = expression;
6252 expect(interpolation.elements, hasLength(3));
6253 expect(interpolation.elements[0], new isInstanceOf<InterpolationString>());
6254 InterpolationString element0 = interpolation.elements[0];
6255 expect(element0.value, 'x');
6256 expect(
6257 interpolation.elements[1], new isInstanceOf<InterpolationExpression>());
6258 InterpolationExpression element1 = interpolation.elements[1];
6259 expect(element1.expression, new isInstanceOf<SimpleIdentifier>());
6260 expect(interpolation.elements[2], new isInstanceOf<InterpolationString>());
6261 InterpolationString element2 = interpolation.elements[2];
6262 expect(element2.value, '');
6263 }
6264
6265 void test_parseStringLiteral_multiline_escapedBackslash() {
6266 createParser("'''\\\\\na'''");
6267 Expression expression = parser.parseStringLiteral();
6268 expect(expression, isNotNull);
6269 assertNoErrors();
6270 expect(expression, new isInstanceOf<SimpleStringLiteral>());
6271 SimpleStringLiteral literal = expression;
6272 expect(literal.literal, isNotNull);
6273 expect(literal.value, "\\\na");
6274 }
6275
6276 void test_parseStringLiteral_multiline_escapedBackslash_raw() {
6277 createParser("r'''\\\\\na'''");
6278 Expression expression = parser.parseStringLiteral();
6279 expect(expression, isNotNull);
6280 assertNoErrors();
6281 expect(expression, new isInstanceOf<SimpleStringLiteral>());
6282 SimpleStringLiteral literal = expression;
6283 expect(literal.literal, isNotNull);
6284 expect(literal.value, "\\\\\na");
6285 }
6286
6287 void test_parseStringLiteral_multiline_escapedEolMarker() {
6288 createParser("'''\\\na'''");
6289 Expression expression = parser.parseStringLiteral();
6290 expect(expression, isNotNull);
6291 assertNoErrors();
6292 expect(expression, new isInstanceOf<SimpleStringLiteral>());
6293 SimpleStringLiteral literal = expression;
6294 expect(literal.literal, isNotNull);
6295 expect(literal.value, "a");
6296 }
6297
6298 void test_parseStringLiteral_multiline_escapedEolMarker_raw() {
6299 createParser("r'''\\\na'''");
6300 Expression expression = parser.parseStringLiteral();
6301 expect(expression, isNotNull);
6302 assertNoErrors();
6303 expect(expression, new isInstanceOf<SimpleStringLiteral>());
6304 SimpleStringLiteral literal = expression;
6305 expect(literal.literal, isNotNull);
6306 expect(literal.value, "a");
6307 }
6308
6309 void test_parseStringLiteral_multiline_escapedSpaceAndEolMarker() {
6310 createParser("'''\\ \\\na'''");
6311 Expression expression = parser.parseStringLiteral();
6312 expect(expression, isNotNull);
6313 assertNoErrors();
6314 expect(expression, new isInstanceOf<SimpleStringLiteral>());
6315 SimpleStringLiteral literal = expression;
6316 expect(literal.literal, isNotNull);
6317 expect(literal.value, "a");
6318 }
6319
6320 void test_parseStringLiteral_multiline_escapedSpaceAndEolMarker_raw() {
6321 createParser("r'''\\ \\\na'''");
6322 Expression expression = parser.parseStringLiteral();
6323 expect(expression, isNotNull);
6324 assertNoErrors();
6325 expect(expression, new isInstanceOf<SimpleStringLiteral>());
6326 SimpleStringLiteral literal = expression;
6327 expect(literal.literal, isNotNull);
6328 expect(literal.value, "a");
6329 }
6330
6331 void test_parseStringLiteral_multiline_escapedTab() {
6332 createParser("'''\\t\na'''");
6333 Expression expression = parser.parseStringLiteral();
6334 expect(expression, isNotNull);
6335 assertNoErrors();
6336 expect(expression, new isInstanceOf<SimpleStringLiteral>());
6337 SimpleStringLiteral literal = expression;
6338 expect(literal.literal, isNotNull);
6339 expect(literal.value, "\t\na");
6340 }
6341
6342 void test_parseStringLiteral_multiline_escapedTab_raw() {
6343 createParser("r'''\\t\na'''");
6344 Expression expression = parser.parseStringLiteral();
6345 expect(expression, isNotNull);
6346 assertNoErrors();
6347 expect(expression, new isInstanceOf<SimpleStringLiteral>());
6348 SimpleStringLiteral literal = expression;
6349 expect(literal.literal, isNotNull);
6350 expect(literal.value, "\\t\na");
6351 }
6352
6353 void test_parseStringLiteral_multiline_quoteAfterInterpolation() {
6354 createParser(r"""'''$x'y'''""");
6355 Expression expression = parser.parseStringLiteral();
6356 expect(expression, isNotNull);
6357 assertNoErrors();
6358 expect(expression, new isInstanceOf<StringInterpolation>());
6359 StringInterpolation interpolation = expression;
6360 expect(interpolation.elements, hasLength(3));
6361 expect(interpolation.elements[0], new isInstanceOf<InterpolationString>());
6362 InterpolationString element0 = interpolation.elements[0];
6363 expect(element0.value, '');
6364 expect(
6365 interpolation.elements[1], new isInstanceOf<InterpolationExpression>());
6366 InterpolationExpression element1 = interpolation.elements[1];
6367 expect(element1.expression, new isInstanceOf<SimpleIdentifier>());
6368 expect(interpolation.elements[2], new isInstanceOf<InterpolationString>());
6369 InterpolationString element2 = interpolation.elements[2];
6370 expect(element2.value, "'y");
6371 }
6372
6373 void test_parseStringLiteral_multiline_startsWithInterpolation() {
6374 createParser(r"'''${x}y'''");
6375 Expression expression = parser.parseStringLiteral();
6376 expect(expression, isNotNull);
6377 assertNoErrors();
6378 expect(expression, new isInstanceOf<StringInterpolation>());
6379 StringInterpolation interpolation = expression;
6380 expect(interpolation.elements, hasLength(3));
6381 expect(interpolation.elements[0], new isInstanceOf<InterpolationString>());
6382 InterpolationString element0 = interpolation.elements[0];
6383 expect(element0.value, '');
6384 expect(
6385 interpolation.elements[1], new isInstanceOf<InterpolationExpression>());
6386 InterpolationExpression element1 = interpolation.elements[1];
6387 expect(element1.expression, new isInstanceOf<SimpleIdentifier>());
6388 expect(interpolation.elements[2], new isInstanceOf<InterpolationString>());
6389 InterpolationString element2 = interpolation.elements[2];
6390 expect(element2.value, 'y');
6391 }
6392
6393 void test_parseStringLiteral_multiline_twoSpaces() {
6394 createParser("''' \na'''");
6395 Expression expression = parser.parseStringLiteral();
6396 expect(expression, isNotNull);
6397 assertNoErrors();
6398 expect(expression, new isInstanceOf<SimpleStringLiteral>());
6399 SimpleStringLiteral literal = expression;
6400 expect(literal.literal, isNotNull);
6401 expect(literal.value, "a");
6402 }
6403
6404 void test_parseStringLiteral_multiline_twoSpaces_raw() {
6405 createParser("r''' \na'''");
6406 Expression expression = parser.parseStringLiteral();
6407 expect(expression, isNotNull);
6408 assertNoErrors();
6409 expect(expression, new isInstanceOf<SimpleStringLiteral>());
6410 SimpleStringLiteral literal = expression;
6411 expect(literal.literal, isNotNull);
6412 expect(literal.value, "a");
6413 }
6414
6415 void test_parseStringLiteral_multiline_untrimmed() {
6416 createParser("''' a\nb'''");
6417 Expression expression = parser.parseStringLiteral();
6418 expect(expression, isNotNull);
6419 assertNoErrors();
6420 expect(expression, new isInstanceOf<SimpleStringLiteral>());
6421 SimpleStringLiteral literal = expression;
6422 expect(literal.literal, isNotNull);
6423 expect(literal.value, " a\nb");
6424 }
6425
6426 void test_parseStringLiteral_quoteAfterInterpolation() {
6427 createParser(r"""'$x"'""");
6428 Expression expression = parser.parseStringLiteral();
6429 expect(expression, isNotNull);
6430 assertNoErrors();
6431 expect(expression, new isInstanceOf<StringInterpolation>());
6432 StringInterpolation interpolation = expression;
6433 expect(interpolation.elements, hasLength(3));
6434 expect(interpolation.elements[0], new isInstanceOf<InterpolationString>());
6435 InterpolationString element0 = interpolation.elements[0];
6436 expect(element0.value, '');
6437 expect(
6438 interpolation.elements[1], new isInstanceOf<InterpolationExpression>());
6439 InterpolationExpression element1 = interpolation.elements[1];
6440 expect(element1.expression, new isInstanceOf<SimpleIdentifier>());
6441 expect(interpolation.elements[2], new isInstanceOf<InterpolationString>());
6442 InterpolationString element2 = interpolation.elements[2];
6443 expect(element2.value, '"');
6444 }
6445
6446 void test_parseStringLiteral_single() {
6447 createParser("'a'");
6448 Expression expression = parser.parseStringLiteral();
6449 expect(expression, isNotNull);
6450 assertNoErrors();
6451 expect(expression, new isInstanceOf<SimpleStringLiteral>());
6452 SimpleStringLiteral literal = expression;
6453 expect(literal.literal, isNotNull);
6454 expect(literal.value, "a");
6455 }
6456
6457 void test_parseStringLiteral_startsWithInterpolation() {
6458 createParser(r"'${x}y'");
6459 Expression expression = parser.parseStringLiteral();
6460 expect(expression, isNotNull);
6461 assertNoErrors();
6462 expect(expression, new isInstanceOf<StringInterpolation>());
6463 StringInterpolation interpolation = expression;
6464 expect(interpolation.elements, hasLength(3));
6465 expect(interpolation.elements[0], new isInstanceOf<InterpolationString>());
6466 InterpolationString element0 = interpolation.elements[0];
6467 expect(element0.value, '');
6468 expect(
6469 interpolation.elements[1], new isInstanceOf<InterpolationExpression>());
6470 InterpolationExpression element1 = interpolation.elements[1];
6471 expect(element1.expression, new isInstanceOf<SimpleIdentifier>());
6472 expect(interpolation.elements[2], new isInstanceOf<InterpolationString>());
6473 InterpolationString element2 = interpolation.elements[2];
6474 expect(element2.value, 'y');
6475 }
6476
6477 void test_parseSuperConstructorInvocation_named() {
6478 createParser('super.a()');
6479 SuperConstructorInvocation invocation =
6480 parser.parseSuperConstructorInvocation();
6481 expect(invocation, isNotNull);
6482 assertNoErrors();
6483 expect(invocation.argumentList, isNotNull);
6484 expect(invocation.constructorName, isNotNull);
6485 expect(invocation.superKeyword, isNotNull);
6486 expect(invocation.period, isNotNull);
6487 }
6488
6489 void test_parseSuperConstructorInvocation_unnamed() {
6490 createParser('super()');
6491 SuperConstructorInvocation invocation =
6492 parser.parseSuperConstructorInvocation();
6493 expect(invocation, isNotNull);
6494 assertNoErrors();
6495 expect(invocation.argumentList, isNotNull);
6496 expect(invocation.constructorName, isNull);
6497 expect(invocation.superKeyword, isNotNull);
6498 expect(invocation.period, isNull);
6499 }
6500
6501 void test_parseSymbolLiteral_builtInIdentifier() {
6502 createParser('#dynamic.static.abstract');
6503 SymbolLiteral literal = parser.parseSymbolLiteral();
6504 expect(literal, isNotNull);
6505 assertNoErrors();
6506 expect(literal.poundSign, isNotNull);
6507 List<Token> components = literal.components;
6508 expect(components, hasLength(3));
6509 expect(components[0].lexeme, "dynamic");
6510 expect(components[1].lexeme, "static");
6511 expect(components[2].lexeme, "abstract");
6512 }
6513
6514 void test_parseSymbolLiteral_multiple() {
6515 createParser('#a.b.c');
6516 SymbolLiteral literal = parser.parseSymbolLiteral();
6517 expect(literal, isNotNull);
6518 assertNoErrors();
6519 expect(literal.poundSign, isNotNull);
6520 List<Token> components = literal.components;
6521 expect(components, hasLength(3));
6522 expect(components[0].lexeme, "a");
6523 expect(components[1].lexeme, "b");
6524 expect(components[2].lexeme, "c");
6525 }
6526
6527 void test_parseSymbolLiteral_operator() {
6528 createParser('#==');
6529 SymbolLiteral literal = parser.parseSymbolLiteral();
6530 expect(literal, isNotNull);
6531 assertNoErrors();
6532 expect(literal.poundSign, isNotNull);
6533 List<Token> components = literal.components;
6534 expect(components, hasLength(1));
6535 expect(components[0].lexeme, "==");
6536 }
6537
6538 void test_parseSymbolLiteral_single() {
6539 createParser('#a');
6540 SymbolLiteral literal = parser.parseSymbolLiteral();
6541 expect(literal, isNotNull);
6542 assertNoErrors();
6543 expect(literal.poundSign, isNotNull);
6544 List<Token> components = literal.components;
6545 expect(components, hasLength(1));
6546 expect(components[0].lexeme, "a");
6547 }
6548
6549 void test_parseSymbolLiteral_void() {
6550 createParser('#void');
6551 SymbolLiteral literal = parser.parseSymbolLiteral();
6552 expect(literal, isNotNull);
6553 assertNoErrors();
6554 expect(literal.poundSign, isNotNull);
6555 List<Token> components = literal.components;
6556 expect(components, hasLength(1));
6557 expect(components[0].lexeme, "void");
6558 }
6559
6560 void test_parseThrowExpression() {
6561 createParser('throw x;');
6562 Expression expression = parser.parseThrowExpression();
6563 expect(expression, isNotNull);
6564 assertNoErrors();
6565 expect(expression, new isInstanceOf<ThrowExpression>());
6566 ThrowExpression throwExpression = expression;
6567 expect(throwExpression.throwKeyword, isNotNull);
6568 expect(throwExpression.expression, isNotNull);
6569 }
6570
6571 void test_parseThrowExpressionWithoutCascade() {
6572 createParser('throw x;');
6573 Expression expression = parser.parseThrowExpressionWithoutCascade();
6574 expect(expression, isNotNull);
6575 assertNoErrors();
6576 expect(expression, new isInstanceOf<ThrowExpression>());
6577 ThrowExpression throwExpression = expression;
6578 expect(throwExpression.throwKeyword, isNotNull);
6579 expect(throwExpression.expression, isNotNull);
6580 }
6581
6582 void test_parseUnaryExpression_decrement_normal() {
6583 createParser('--x');
6584 PrefixExpression expression = parser.parseUnaryExpression();
6585 expect(expression, isNotNull);
6586 assertNoErrors();
6587 expect(expression.operator, isNotNull);
6588 expect(expression.operator.type, TokenType.MINUS_MINUS);
6589 expect(expression.operand, isNotNull);
6590 }
6591
6592 void test_parseUnaryExpression_decrement_super() {
6593 createParser('--super');
6594 PrefixExpression expression = parser.parseUnaryExpression();
6595 expect(expression, isNotNull);
6596 assertNoErrors();
6597 expect(expression.operator, isNotNull);
6598 expect(expression.operator.type, TokenType.MINUS);
6599 Expression innerExpression = expression.operand;
6600 expect(innerExpression, isNotNull);
6601 expect(innerExpression is PrefixExpression, isTrue);
6602 PrefixExpression operand = innerExpression as PrefixExpression;
6603 expect(operand.operator, isNotNull);
6604 expect(operand.operator.type, TokenType.MINUS);
6605 expect(operand.operand, isNotNull);
6606 }
6607
6608 void test_parseUnaryExpression_decrement_super_propertyAccess() {
6609 createParser('--super.x');
6610 PrefixExpression expression = parser.parseUnaryExpression();
6611 expect(expression, isNotNull);
6612 assertNoErrors();
6613 expect(expression.operator, isNotNull);
6614 expect(expression.operator.type, TokenType.MINUS_MINUS);
6615 expect(expression.operand, isNotNull);
6616 PropertyAccess operand = expression.operand as PropertyAccess;
6617 expect(operand.target is SuperExpression, isTrue);
6618 expect(operand.propertyName.name, "x");
6619 }
6620
6621 void test_parseUnaryExpression_decrement_super_withComment() {
6622 createParser('/* 0 */ --super');
6623 PrefixExpression expression = parser.parseUnaryExpression();
6624 expect(expression, isNotNull);
6625 assertNoErrors();
6626 expect(expression.operator, isNotNull);
6627 expect(expression.operator.type, TokenType.MINUS);
6628 expect(expression.operator.precedingComments, isNotNull);
6629 Expression innerExpression = expression.operand;
6630 expect(innerExpression, isNotNull);
6631 expect(innerExpression is PrefixExpression, isTrue);
6632 PrefixExpression operand = innerExpression as PrefixExpression;
6633 expect(operand.operator, isNotNull);
6634 expect(operand.operator.type, TokenType.MINUS);
6635 expect(operand.operand, isNotNull);
6636 }
6637
6638 void test_parseUnaryExpression_increment_normal() {
6639 createParser('++x');
6640 PrefixExpression expression = parser.parseUnaryExpression();
6641 expect(expression, isNotNull);
6642 assertNoErrors();
6643 expect(expression.operator, isNotNull);
6644 expect(expression.operator.type, TokenType.PLUS_PLUS);
6645 expect(expression.operand, isNotNull);
6646 }
6647
6648 void test_parseUnaryExpression_increment_super_index() {
6649 createParser('++super[0]');
6650 PrefixExpression expression = parser.parseUnaryExpression();
6651 expect(expression, isNotNull);
6652 assertNoErrors();
6653 expect(expression.operator, isNotNull);
6654 expect(expression.operator.type, TokenType.PLUS_PLUS);
6655 expect(expression.operand, isNotNull);
6656 IndexExpression operand = expression.operand as IndexExpression;
6657 expect(operand.realTarget is SuperExpression, isTrue);
6658 expect(operand.index is IntegerLiteral, isTrue);
6659 }
6660
6661 void test_parseUnaryExpression_increment_super_propertyAccess() {
6662 createParser('++super.x');
6663 PrefixExpression expression = parser.parseUnaryExpression();
6664 expect(expression, isNotNull);
6665 assertNoErrors();
6666 expect(expression.operator, isNotNull);
6667 expect(expression.operator.type, TokenType.PLUS_PLUS);
6668 expect(expression.operand, isNotNull);
6669 PropertyAccess operand = expression.operand as PropertyAccess;
6670 expect(operand.target is SuperExpression, isTrue);
6671 expect(operand.propertyName.name, "x");
6672 }
6673
6674 void test_parseUnaryExpression_minus_normal() {
6675 createParser('-x');
6676 PrefixExpression expression = parser.parseUnaryExpression();
6677 expect(expression, isNotNull);
6678 assertNoErrors();
6679 expect(expression.operator, isNotNull);
6680 expect(expression.operator.type, TokenType.MINUS);
6681 expect(expression.operand, isNotNull);
6682 }
6683
6684 void test_parseUnaryExpression_minus_super() {
6685 createParser('-super');
6686 PrefixExpression expression = parser.parseUnaryExpression();
6687 expect(expression, isNotNull);
6688 assertNoErrors();
6689 expect(expression.operator, isNotNull);
6690 expect(expression.operator.type, TokenType.MINUS);
6691 expect(expression.operand, isNotNull);
6692 }
6693
6694 void test_parseUnaryExpression_not_normal() {
6695 createParser('!x');
6696 PrefixExpression expression = parser.parseUnaryExpression();
6697 expect(expression, isNotNull);
6698 assertNoErrors();
6699 expect(expression.operator, isNotNull);
6700 expect(expression.operator.type, TokenType.BANG);
6701 expect(expression.operand, isNotNull);
6702 }
6703
6704 void test_parseUnaryExpression_not_super() {
6705 createParser('!super');
6706 PrefixExpression expression = parser.parseUnaryExpression();
6707 expect(expression, isNotNull);
6708 assertNoErrors();
6709 expect(expression.operator, isNotNull);
6710 expect(expression.operator.type, TokenType.BANG);
6711 expect(expression.operand, isNotNull);
6712 }
6713
6714 void test_parseUnaryExpression_tilda_normal() {
6715 createParser('~x');
6716 PrefixExpression expression = parser.parseUnaryExpression();
6717 expect(expression, isNotNull);
6718 assertNoErrors();
6719 expect(expression.operator, isNotNull);
6720 expect(expression.operator.type, TokenType.TILDE);
6721 expect(expression.operand, isNotNull);
6722 }
6723
6724 void test_parseUnaryExpression_tilda_super() {
6725 createParser('~super');
6726 PrefixExpression expression = parser.parseUnaryExpression();
6727 expect(expression, isNotNull);
6728 assertNoErrors();
6729 expect(expression.operator, isNotNull);
6730 expect(expression.operator.type, TokenType.TILDE);
6731 expect(expression.operand, isNotNull);
6732 }
6733 }
6734
3950 /** 6735 /**
3951 * Tests of the analyzer parser based on [FormalParameterParserTestMixin]. 6736 * Tests of the analyzer parser based on [FormalParameterParserTestMixin].
3952 */ 6737 */
3953 @reflectiveTest 6738 @reflectiveTest
3954 class FormalParameterParserTest extends ParserTestCase 6739 class FormalParameterParserTest extends ParserTestCase
3955 with FormalParameterParserTestMixin {} 6740 with FormalParameterParserTestMixin {}
3956 6741
3957 /** 6742 /**
3958 * The class [FormalParameterParserTestMixin] defines parser tests that test 6743 * The class [FormalParameterParserTestMixin] defines parser tests that test
3959 * the parsing of formal parameters. 6744 * the parsing of formal parameters.
(...skipping 2912 matching lines...) Expand 10 before | Expand all | Expand 10 after
6872 } 9657 }
6873 9658
6874 void test_isSwitchMember_default_unlabeled() { 9659 void test_isSwitchMember_default_unlabeled() {
6875 expect(_isSwitchMember("default"), isTrue); 9660 expect(_isSwitchMember("default"), isTrue);
6876 } 9661 }
6877 9662
6878 void test_isSwitchMember_false() { 9663 void test_isSwitchMember_false() {
6879 expect(_isSwitchMember("break;"), isFalse); 9664 expect(_isSwitchMember("break;"), isFalse);
6880 } 9665 }
6881 9666
6882 void test_parseAdditiveExpression_normal() {
6883 createParser('x + y');
6884 Expression expression = parser.parseAdditiveExpression();
6885 expectNotNullIfNoErrors(expression);
6886 listener.assertNoErrors();
6887 expect(expression, new isInstanceOf<BinaryExpression>());
6888 BinaryExpression binaryExpression = expression;
6889 expect(binaryExpression.leftOperand, isNotNull);
6890 expect(binaryExpression.operator, isNotNull);
6891 expect(binaryExpression.operator.type, TokenType.PLUS);
6892 expect(binaryExpression.rightOperand, isNotNull);
6893 }
6894
6895 void test_parseAdditiveExpression_super() {
6896 createParser('super + y');
6897 Expression expression = parser.parseAdditiveExpression();
6898 expectNotNullIfNoErrors(expression);
6899 listener.assertNoErrors();
6900 expect(expression, new isInstanceOf<BinaryExpression>());
6901 BinaryExpression binaryExpression = expression;
6902 expect(binaryExpression.leftOperand, new isInstanceOf<SuperExpression>());
6903 expect(binaryExpression.operator, isNotNull);
6904 expect(binaryExpression.operator.type, TokenType.PLUS);
6905 expect(binaryExpression.rightOperand, isNotNull);
6906 }
6907
6908 void test_parseAnnotation_n1() { 9667 void test_parseAnnotation_n1() {
6909 createParser('@A'); 9668 createParser('@A');
6910 Annotation annotation = parser.parseAnnotation(); 9669 Annotation annotation = parser.parseAnnotation();
6911 expectNotNullIfNoErrors(annotation); 9670 expectNotNullIfNoErrors(annotation);
6912 listener.assertNoErrors(); 9671 listener.assertNoErrors();
6913 expect(annotation.atSign, isNotNull); 9672 expect(annotation.atSign, isNotNull);
6914 expect(annotation.name, isNotNull); 9673 expect(annotation.name, isNotNull);
6915 expect(annotation.period, isNull); 9674 expect(annotation.period, isNull);
6916 expect(annotation.constructorName, isNull); 9675 expect(annotation.constructorName, isNull);
6917 expect(annotation.arguments, isNull); 9676 expect(annotation.arguments, isNull);
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
7086 listener.assertNoErrors(); 9845 listener.assertNoErrors();
7087 expect(statement.assertKeyword, isNotNull); 9846 expect(statement.assertKeyword, isNotNull);
7088 expect(statement.leftParenthesis, isNotNull); 9847 expect(statement.leftParenthesis, isNotNull);
7089 expect(statement.condition, isNotNull); 9848 expect(statement.condition, isNotNull);
7090 expect(statement.comma, isNotNull); 9849 expect(statement.comma, isNotNull);
7091 expect(statement.message, isNotNull); 9850 expect(statement.message, isNotNull);
7092 expect(statement.rightParenthesis, isNotNull); 9851 expect(statement.rightParenthesis, isNotNull);
7093 expect(statement.semicolon, isNotNull); 9852 expect(statement.semicolon, isNotNull);
7094 } 9853 }
7095 9854
7096 void test_parseAssignableExpression_expression_args_dot() {
7097 createParser('(x)(y).z');
7098 Expression expression = parser.parseAssignableExpression(false);
7099 expectNotNullIfNoErrors(expression);
7100 listener.assertNoErrors();
7101 expect(expression, new isInstanceOf<PropertyAccess>());
7102 PropertyAccess propertyAccess = expression;
7103 FunctionExpressionInvocation invocation =
7104 propertyAccess.target as FunctionExpressionInvocation;
7105 expect(invocation.function, isNotNull);
7106 expect(invocation.typeArguments, isNull);
7107 ArgumentList argumentList = invocation.argumentList;
7108 expect(argumentList, isNotNull);
7109 expect(argumentList.arguments, hasLength(1));
7110 expect(propertyAccess.operator, isNotNull);
7111 expect(propertyAccess.propertyName, isNotNull);
7112 }
7113
7114 void
7115 test_parseAssignableExpression_expression_args_dot_typeParameterComments() {
7116 enableGenericMethodComments = true;
7117 createParser('(x)/*<F>*/(y).z');
7118 Expression expression = parser.parseAssignableExpression(false);
7119 expectNotNullIfNoErrors(expression);
7120 listener.assertNoErrors();
7121 expect(expression, new isInstanceOf<PropertyAccess>());
7122 PropertyAccess propertyAccess = expression;
7123 FunctionExpressionInvocation invocation =
7124 propertyAccess.target as FunctionExpressionInvocation;
7125 expect(invocation.function, isNotNull);
7126 expect(invocation.typeArguments, isNotNull);
7127 ArgumentList argumentList = invocation.argumentList;
7128 expect(argumentList, isNotNull);
7129 expect(argumentList.arguments, hasLength(1));
7130 expect(propertyAccess.operator, isNotNull);
7131 expect(propertyAccess.propertyName, isNotNull);
7132 }
7133
7134 void test_parseAssignableExpression_expression_args_dot_typeParameters() {
7135 createParser('(x)<F>(y).z');
7136 Expression expression = parser.parseAssignableExpression(false);
7137 expectNotNullIfNoErrors(expression);
7138 listener.assertNoErrors();
7139 expect(expression, new isInstanceOf<PropertyAccess>());
7140 PropertyAccess propertyAccess = expression;
7141 FunctionExpressionInvocation invocation =
7142 propertyAccess.target as FunctionExpressionInvocation;
7143 expect(invocation.function, isNotNull);
7144 expect(invocation.typeArguments, isNotNull);
7145 ArgumentList argumentList = invocation.argumentList;
7146 expect(argumentList, isNotNull);
7147 expect(argumentList.arguments, hasLength(1));
7148 expect(propertyAccess.operator, isNotNull);
7149 expect(propertyAccess.propertyName, isNotNull);
7150 }
7151
7152 void test_parseAssignableExpression_expression_dot() {
7153 createParser('(x).y');
7154 Expression expression = parser.parseAssignableExpression(false);
7155 expectNotNullIfNoErrors(expression);
7156 listener.assertNoErrors();
7157 expect(expression, new isInstanceOf<PropertyAccess>());
7158 PropertyAccess propertyAccess = expression;
7159 expect(propertyAccess.target, isNotNull);
7160 expect(propertyAccess.operator.type, TokenType.PERIOD);
7161 expect(propertyAccess.propertyName, isNotNull);
7162 }
7163
7164 void test_parseAssignableExpression_expression_index() {
7165 createParser('(x)[y]');
7166 Expression expression = parser.parseAssignableExpression(false);
7167 expectNotNullIfNoErrors(expression);
7168 listener.assertNoErrors();
7169 expect(expression, new isInstanceOf<IndexExpression>());
7170 IndexExpression indexExpression = expression;
7171 expect(indexExpression.target, isNotNull);
7172 expect(indexExpression.leftBracket, isNotNull);
7173 expect(indexExpression.index, isNotNull);
7174 expect(indexExpression.rightBracket, isNotNull);
7175 }
7176
7177 void test_parseAssignableExpression_expression_question_dot() {
7178 createParser('(x)?.y');
7179 Expression expression = parser.parseAssignableExpression(false);
7180 expectNotNullIfNoErrors(expression);
7181 listener.assertNoErrors();
7182 expect(expression, new isInstanceOf<PropertyAccess>());
7183 PropertyAccess propertyAccess = expression;
7184 expect(propertyAccess.target, isNotNull);
7185 expect(propertyAccess.operator.type, TokenType.QUESTION_PERIOD);
7186 expect(propertyAccess.propertyName, isNotNull);
7187 }
7188
7189 void test_parseAssignableExpression_identifier() {
7190 createParser('x');
7191 Expression expression = parser.parseAssignableExpression(false);
7192 expectNotNullIfNoErrors(expression);
7193 listener.assertNoErrors();
7194 expect(expression, new isInstanceOf<SimpleIdentifier>());
7195 SimpleIdentifier identifier = expression;
7196 expect(identifier, isNotNull);
7197 }
7198
7199 void test_parseAssignableExpression_identifier_args_dot() {
7200 createParser('x(y).z');
7201 Expression expression = parser.parseAssignableExpression(false);
7202 expectNotNullIfNoErrors(expression);
7203 listener.assertNoErrors();
7204 expect(expression, new isInstanceOf<PropertyAccess>());
7205 PropertyAccess propertyAccess = expression;
7206 MethodInvocation invocation = propertyAccess.target as MethodInvocation;
7207 expect(invocation.methodName.name, "x");
7208 expect(invocation.typeArguments, isNull);
7209 ArgumentList argumentList = invocation.argumentList;
7210 expect(argumentList, isNotNull);
7211 expect(argumentList.arguments, hasLength(1));
7212 expect(propertyAccess.operator, isNotNull);
7213 expect(propertyAccess.propertyName, isNotNull);
7214 }
7215
7216 void
7217 test_parseAssignableExpression_identifier_args_dot_typeParameterComments() {
7218 enableGenericMethodComments = true;
7219 createParser('x/*<E>*/(y).z');
7220 Expression expression = parser.parseAssignableExpression(false);
7221 expectNotNullIfNoErrors(expression);
7222 listener.assertNoErrors();
7223 expect(expression, new isInstanceOf<PropertyAccess>());
7224 PropertyAccess propertyAccess = expression;
7225 MethodInvocation invocation = propertyAccess.target as MethodInvocation;
7226 expect(invocation.methodName.name, "x");
7227 expect(invocation.typeArguments, isNotNull);
7228 ArgumentList argumentList = invocation.argumentList;
7229 expect(argumentList, isNotNull);
7230 expect(argumentList.arguments, hasLength(1));
7231 expect(propertyAccess.operator, isNotNull);
7232 expect(propertyAccess.propertyName, isNotNull);
7233 }
7234
7235 void test_parseAssignableExpression_identifier_args_dot_typeParameters() {
7236 createParser('x<E>(y).z');
7237 Expression expression = parser.parseAssignableExpression(false);
7238 expectNotNullIfNoErrors(expression);
7239 listener.assertNoErrors();
7240 expect(expression, new isInstanceOf<PropertyAccess>());
7241 PropertyAccess propertyAccess = expression;
7242 MethodInvocation invocation = propertyAccess.target as MethodInvocation;
7243 expect(invocation.methodName.name, "x");
7244 expect(invocation.typeArguments, isNotNull);
7245 ArgumentList argumentList = invocation.argumentList;
7246 expect(argumentList, isNotNull);
7247 expect(argumentList.arguments, hasLength(1));
7248 expect(propertyAccess.operator, isNotNull);
7249 expect(propertyAccess.propertyName, isNotNull);
7250 }
7251
7252 void test_parseAssignableExpression_identifier_dot() {
7253 createParser('x.y');
7254 Expression expression = parser.parseAssignableExpression(false);
7255 expectNotNullIfNoErrors(expression);
7256 listener.assertNoErrors();
7257 expect(expression, new isInstanceOf<PropertyAccess>());
7258 PropertyAccess propertyAccess = expression;
7259 expect(propertyAccess.target, isNotNull);
7260 expect(propertyAccess.operator, isNotNull);
7261 expect(propertyAccess.operator.type, TokenType.PERIOD);
7262 expect(propertyAccess.propertyName, isNotNull);
7263 }
7264
7265 void test_parseAssignableExpression_identifier_index() {
7266 createParser('x[y]');
7267 Expression expression = parser.parseAssignableExpression(false);
7268 expectNotNullIfNoErrors(expression);
7269 listener.assertNoErrors();
7270 expect(expression, new isInstanceOf<IndexExpression>());
7271 IndexExpression indexExpression = expression;
7272 expect(indexExpression.target, isNotNull);
7273 expect(indexExpression.leftBracket, isNotNull);
7274 expect(indexExpression.index, isNotNull);
7275 expect(indexExpression.rightBracket, isNotNull);
7276 }
7277
7278 void test_parseAssignableExpression_identifier_question_dot() {
7279 createParser('x?.y');
7280 Expression expression = parser.parseAssignableExpression(false);
7281 expectNotNullIfNoErrors(expression);
7282 listener.assertNoErrors();
7283 expect(expression, new isInstanceOf<PropertyAccess>());
7284 PropertyAccess propertyAccess = expression;
7285 expect(propertyAccess.target, isNotNull);
7286 expect(propertyAccess.operator.type, TokenType.QUESTION_PERIOD);
7287 expect(propertyAccess.propertyName, isNotNull);
7288 }
7289
7290 void test_parseAssignableExpression_super_dot() {
7291 createParser('super.y');
7292 Expression expression = parser.parseAssignableExpression(false);
7293 expectNotNullIfNoErrors(expression);
7294 listener.assertNoErrors();
7295 expect(expression, new isInstanceOf<PropertyAccess>());
7296 PropertyAccess propertyAccess = expression;
7297 EngineTestCase.assertInstanceOf((obj) => obj is SuperExpression,
7298 SuperExpression, propertyAccess.target);
7299 expect(propertyAccess.operator, isNotNull);
7300 expect(propertyAccess.propertyName, isNotNull);
7301 }
7302
7303 void test_parseAssignableExpression_super_index() {
7304 createParser('super[y]');
7305 Expression expression = parser.parseAssignableExpression(false);
7306 expectNotNullIfNoErrors(expression);
7307 listener.assertNoErrors();
7308 expect(expression, new isInstanceOf<IndexExpression>());
7309 IndexExpression indexExpression = expression;
7310 expect(indexExpression.target, new isInstanceOf<SuperExpression>());
7311 expect(indexExpression.leftBracket, isNotNull);
7312 expect(indexExpression.index, isNotNull);
7313 expect(indexExpression.rightBracket, isNotNull);
7314 }
7315
7316 void test_parseAssignableSelector_dot() {
7317 createParser('.x');
7318 Expression expression = parser.parseAssignableSelector(null, true);
7319 expectNotNullIfNoErrors(expression);
7320 listener.assertNoErrors();
7321 expect(expression, new isInstanceOf<PropertyAccess>());
7322 PropertyAccess propertyAccess = expression;
7323 expect(propertyAccess.operator.type, TokenType.PERIOD);
7324 expect(propertyAccess.propertyName, isNotNull);
7325 }
7326
7327 void test_parseAssignableSelector_index() {
7328 createParser('[x]');
7329 Expression expression = parser.parseAssignableSelector(null, true);
7330 expectNotNullIfNoErrors(expression);
7331 listener.assertNoErrors();
7332 expect(expression, new isInstanceOf<IndexExpression>());
7333 IndexExpression indexExpression = expression;
7334 expect(indexExpression.leftBracket, isNotNull);
7335 expect(indexExpression.index, isNotNull);
7336 expect(indexExpression.rightBracket, isNotNull);
7337 }
7338
7339 void test_parseAssignableSelector_none() {
7340 createParser(';');
7341 Expression expression =
7342 parser.parseAssignableSelector(astFactory.simpleIdentifier(null), true);
7343 expectNotNullIfNoErrors(expression);
7344 listener.assertNoErrors();
7345 expect(expression, new isInstanceOf<SimpleIdentifier>());
7346 SimpleIdentifier identifier = expression;
7347 expect(identifier, isNotNull);
7348 }
7349
7350 void test_parseAssignableSelector_question_dot() {
7351 createParser('?.x');
7352 Expression expression = parser.parseAssignableSelector(null, true);
7353 expectNotNullIfNoErrors(expression);
7354 listener.assertNoErrors();
7355 expect(expression, new isInstanceOf<PropertyAccess>());
7356 PropertyAccess propertyAccess = expression;
7357 expect(propertyAccess.operator.type, TokenType.QUESTION_PERIOD);
7358 expect(propertyAccess.propertyName, isNotNull);
7359 }
7360
7361 void test_parseAwaitExpression() {
7362 createParser('await x;');
7363 AwaitExpression expression = parser.parseAwaitExpression();
7364 expectNotNullIfNoErrors(expression);
7365 listener.assertNoErrors();
7366 expect(expression.awaitKeyword, isNotNull);
7367 expect(expression.expression, isNotNull);
7368 }
7369
7370 void test_parseBitwiseAndExpression_normal() {
7371 createParser('x & y');
7372 Expression expression = parser.parseBitwiseAndExpression();
7373 expectNotNullIfNoErrors(expression);
7374 listener.assertNoErrors();
7375 expect(expression, new isInstanceOf<BinaryExpression>());
7376 BinaryExpression binaryExpression = expression;
7377 expect(binaryExpression.leftOperand, isNotNull);
7378 expect(binaryExpression.operator, isNotNull);
7379 expect(binaryExpression.operator.type, TokenType.AMPERSAND);
7380 expect(binaryExpression.rightOperand, isNotNull);
7381 }
7382
7383 void test_parseBitwiseAndExpression_super() {
7384 createParser('super & y');
7385 Expression expression = parser.parseBitwiseAndExpression();
7386 expectNotNullIfNoErrors(expression);
7387 listener.assertNoErrors();
7388 expect(expression, new isInstanceOf<BinaryExpression>());
7389 BinaryExpression binaryExpression = expression;
7390 expect(binaryExpression.leftOperand, new isInstanceOf<SuperExpression>());
7391 expect(binaryExpression.operator, isNotNull);
7392 expect(binaryExpression.operator.type, TokenType.AMPERSAND);
7393 expect(binaryExpression.rightOperand, isNotNull);
7394 }
7395
7396 void test_parseBitwiseOrExpression_normal() {
7397 createParser('x | y');
7398 Expression expression = parser.parseBitwiseOrExpression();
7399 expectNotNullIfNoErrors(expression);
7400 listener.assertNoErrors();
7401 expect(expression, new isInstanceOf<BinaryExpression>());
7402 BinaryExpression binaryExpression = expression;
7403 expect(binaryExpression.leftOperand, isNotNull);
7404 expect(binaryExpression.operator, isNotNull);
7405 expect(binaryExpression.operator.type, TokenType.BAR);
7406 expect(binaryExpression.rightOperand, isNotNull);
7407 }
7408
7409 void test_parseBitwiseOrExpression_super() {
7410 createParser('super | y');
7411 Expression expression = parser.parseBitwiseOrExpression();
7412 expectNotNullIfNoErrors(expression);
7413 listener.assertNoErrors();
7414 expect(expression, new isInstanceOf<BinaryExpression>());
7415 BinaryExpression binaryExpression = expression;
7416 expect(binaryExpression.leftOperand, new isInstanceOf<SuperExpression>());
7417 expect(binaryExpression.operator, isNotNull);
7418 expect(binaryExpression.operator.type, TokenType.BAR);
7419 expect(binaryExpression.rightOperand, isNotNull);
7420 }
7421
7422 void test_parseBitwiseXorExpression_normal() {
7423 createParser('x ^ y');
7424 Expression expression = parser.parseBitwiseXorExpression();
7425 expectNotNullIfNoErrors(expression);
7426 listener.assertNoErrors();
7427 expect(expression, new isInstanceOf<BinaryExpression>());
7428 BinaryExpression binaryExpression = expression;
7429 expect(binaryExpression.leftOperand, isNotNull);
7430 expect(binaryExpression.operator, isNotNull);
7431 expect(binaryExpression.operator.type, TokenType.CARET);
7432 expect(binaryExpression.rightOperand, isNotNull);
7433 }
7434
7435 void test_parseBitwiseXorExpression_super() {
7436 createParser('super ^ y');
7437 Expression expression = parser.parseBitwiseXorExpression();
7438 expectNotNullIfNoErrors(expression);
7439 listener.assertNoErrors();
7440 expect(expression, new isInstanceOf<BinaryExpression>());
7441 BinaryExpression binaryExpression = expression;
7442 expect(binaryExpression.leftOperand, new isInstanceOf<SuperExpression>());
7443 expect(binaryExpression.operator, isNotNull);
7444 expect(binaryExpression.operator.type, TokenType.CARET);
7445 expect(binaryExpression.rightOperand, isNotNull);
7446 }
7447
7448 void test_parseBlock_empty() { 9855 void test_parseBlock_empty() {
7449 createParser('{}'); 9856 createParser('{}');
7450 Block block = parser.parseBlock(); 9857 Block block = parser.parseBlock();
7451 expectNotNullIfNoErrors(block); 9858 expectNotNullIfNoErrors(block);
7452 listener.assertNoErrors(); 9859 listener.assertNoErrors();
7453 expect(block.leftBracket, isNotNull); 9860 expect(block.leftBracket, isNotNull);
7454 expect(block.statements, hasLength(0)); 9861 expect(block.statements, hasLength(0));
7455 expect(block.rightBracket, isNotNull); 9862 expect(block.rightBracket, isNotNull);
7456 } 9863 }
7457 9864
(...skipping 20 matching lines...) Expand all
7478 void test_parseBreakStatement_noLabel() { 9885 void test_parseBreakStatement_noLabel() {
7479 createParser('break;'); 9886 createParser('break;');
7480 BreakStatement statement = parser.parseBreakStatement(); 9887 BreakStatement statement = parser.parseBreakStatement();
7481 expectNotNullIfNoErrors(statement); 9888 expectNotNullIfNoErrors(statement);
7482 listener.assertErrorsWithCodes([ParserErrorCode.BREAK_OUTSIDE_OF_LOOP]); 9889 listener.assertErrorsWithCodes([ParserErrorCode.BREAK_OUTSIDE_OF_LOOP]);
7483 expect(statement.breakKeyword, isNotNull); 9890 expect(statement.breakKeyword, isNotNull);
7484 expect(statement.label, isNull); 9891 expect(statement.label, isNull);
7485 expect(statement.semicolon, isNotNull); 9892 expect(statement.semicolon, isNotNull);
7486 } 9893 }
7487 9894
7488 void test_parseCascadeSection_i() {
7489 createParser('..[i]');
7490 Expression expression = parser.parseCascadeSection();
7491 expectNotNullIfNoErrors(expression);
7492 listener.assertNoErrors();
7493 expect(expression, new isInstanceOf<IndexExpression>());
7494 IndexExpression section = expression;
7495 expect(section.target, isNull);
7496 expect(section.leftBracket, isNotNull);
7497 expect(section.index, isNotNull);
7498 expect(section.rightBracket, isNotNull);
7499 }
7500
7501 void test_parseCascadeSection_ia() {
7502 createParser('..[i](b)');
7503 Expression expression = parser.parseCascadeSection();
7504 expectNotNullIfNoErrors(expression);
7505 listener.assertNoErrors();
7506 expect(expression, new isInstanceOf<FunctionExpressionInvocation>());
7507 FunctionExpressionInvocation section = expression;
7508 expect(section.function, new isInstanceOf<IndexExpression>());
7509 expect(section.typeArguments, isNull);
7510 expect(section.argumentList, isNotNull);
7511 }
7512
7513 void test_parseCascadeSection_ia_typeArgumentComments() {
7514 enableGenericMethodComments = true;
7515 createParser('..[i]/*<E>*/(b)');
7516 Expression expression = parser.parseCascadeSection();
7517 expectNotNullIfNoErrors(expression);
7518 listener.assertNoErrors();
7519 expect(expression, new isInstanceOf<FunctionExpressionInvocation>());
7520 FunctionExpressionInvocation section = expression;
7521 expect(section.function, new isInstanceOf<IndexExpression>());
7522 expect(section.typeArguments, isNotNull);
7523 expect(section.argumentList, isNotNull);
7524 }
7525
7526 void test_parseCascadeSection_ia_typeArguments() {
7527 createParser('..[i]<E>(b)');
7528 Expression expression = parser.parseCascadeSection();
7529 expectNotNullIfNoErrors(expression);
7530 listener.assertNoErrors();
7531 expect(expression, new isInstanceOf<FunctionExpressionInvocation>());
7532 FunctionExpressionInvocation section = expression;
7533 expect(section.function, new isInstanceOf<IndexExpression>());
7534 expect(section.typeArguments, isNotNull);
7535 expect(section.argumentList, isNotNull);
7536 }
7537
7538 void test_parseCascadeSection_ii() {
7539 createParser('..a(b).c(d)');
7540 Expression expression = parser.parseCascadeSection();
7541 expectNotNullIfNoErrors(expression);
7542 listener.assertNoErrors();
7543 expect(expression, new isInstanceOf<MethodInvocation>());
7544 MethodInvocation section = expression;
7545 expect(section.target, new isInstanceOf<MethodInvocation>());
7546 expect(section.operator, isNotNull);
7547 expect(section.methodName, isNotNull);
7548 expect(section.typeArguments, isNull);
7549 expect(section.argumentList, isNotNull);
7550 expect(section.argumentList.arguments, hasLength(1));
7551 }
7552
7553 void test_parseCascadeSection_ii_typeArgumentComments() {
7554 enableGenericMethodComments = true;
7555 createParser('..a/*<E>*/(b).c/*<F>*/(d)');
7556 Expression expression = parser.parseCascadeSection();
7557 expectNotNullIfNoErrors(expression);
7558 listener.assertNoErrors();
7559 expect(expression, new isInstanceOf<MethodInvocation>());
7560 MethodInvocation section = expression;
7561 expect(section.target, new isInstanceOf<MethodInvocation>());
7562 expect(section.operator, isNotNull);
7563 expect(section.methodName, isNotNull);
7564 expect(section.typeArguments, isNotNull);
7565 expect(section.argumentList, isNotNull);
7566 expect(section.argumentList.arguments, hasLength(1));
7567 }
7568
7569 void test_parseCascadeSection_ii_typeArguments() {
7570 createParser('..a<E>(b).c<F>(d)');
7571 Expression expression = parser.parseCascadeSection();
7572 expectNotNullIfNoErrors(expression);
7573 listener.assertNoErrors();
7574 expect(expression, new isInstanceOf<MethodInvocation>());
7575 MethodInvocation section = expression;
7576 expect(section.target, new isInstanceOf<MethodInvocation>());
7577 expect(section.operator, isNotNull);
7578 expect(section.methodName, isNotNull);
7579 expect(section.typeArguments, isNotNull);
7580 expect(section.argumentList, isNotNull);
7581 expect(section.argumentList.arguments, hasLength(1));
7582 }
7583
7584 void test_parseCascadeSection_p() {
7585 createParser('..a');
7586 Expression expression = parser.parseCascadeSection();
7587 expectNotNullIfNoErrors(expression);
7588 listener.assertNoErrors();
7589 expect(expression, new isInstanceOf<PropertyAccess>());
7590 PropertyAccess section = expression;
7591 expect(section.target, isNull);
7592 expect(section.operator, isNotNull);
7593 expect(section.propertyName, isNotNull);
7594 }
7595
7596 void test_parseCascadeSection_p_assign() {
7597 createParser('..a = 3');
7598 Expression expression = parser.parseCascadeSection();
7599 expectNotNullIfNoErrors(expression);
7600 listener.assertNoErrors();
7601 expect(expression, new isInstanceOf<AssignmentExpression>());
7602 AssignmentExpression section = expression;
7603 expect(section.leftHandSide, isNotNull);
7604 expect(section.operator, isNotNull);
7605 Expression rhs = section.rightHandSide;
7606 expect(rhs, isNotNull);
7607 }
7608
7609 void test_parseCascadeSection_p_assign_withCascade() {
7610 createParser('..a = 3..m()');
7611 Expression expression = parser.parseCascadeSection();
7612 expectNotNullIfNoErrors(expression);
7613 listener.assertNoErrors();
7614 expect(expression, new isInstanceOf<AssignmentExpression>());
7615 AssignmentExpression section = expression;
7616 expect(section.leftHandSide, isNotNull);
7617 expect(section.operator, isNotNull);
7618 Expression rhs = section.rightHandSide;
7619 EngineTestCase.assertInstanceOf(
7620 (obj) => obj is IntegerLiteral, IntegerLiteral, rhs);
7621 }
7622
7623 void test_parseCascadeSection_p_assign_withCascade_typeArgumentComments() {
7624 enableGenericMethodComments = true;
7625 createParser('..a = 3..m/*<E>*/()');
7626 Expression expression = parser.parseCascadeSection();
7627 expectNotNullIfNoErrors(expression);
7628 listener.assertNoErrors();
7629 expect(expression, new isInstanceOf<AssignmentExpression>());
7630 AssignmentExpression section = expression;
7631 expect(section.leftHandSide, isNotNull);
7632 expect(section.operator, isNotNull);
7633 Expression rhs = section.rightHandSide;
7634 EngineTestCase.assertInstanceOf(
7635 (obj) => obj is IntegerLiteral, IntegerLiteral, rhs);
7636 }
7637
7638 void test_parseCascadeSection_p_assign_withCascade_typeArguments() {
7639 createParser('..a = 3..m<E>()');
7640 Expression expression = parser.parseCascadeSection();
7641 expectNotNullIfNoErrors(expression);
7642 listener.assertNoErrors();
7643 expect(expression, new isInstanceOf<AssignmentExpression>());
7644 AssignmentExpression section = expression;
7645 expect(section.leftHandSide, isNotNull);
7646 expect(section.operator, isNotNull);
7647 Expression rhs = section.rightHandSide;
7648 EngineTestCase.assertInstanceOf(
7649 (obj) => obj is IntegerLiteral, IntegerLiteral, rhs);
7650 }
7651
7652 void test_parseCascadeSection_p_builtIn() {
7653 createParser('..as');
7654 Expression expression = parser.parseCascadeSection();
7655 expectNotNullIfNoErrors(expression);
7656 listener.assertNoErrors();
7657 expect(expression, new isInstanceOf<PropertyAccess>());
7658 PropertyAccess section = expression;
7659 expect(section.target, isNull);
7660 expect(section.operator, isNotNull);
7661 expect(section.propertyName, isNotNull);
7662 }
7663
7664 void test_parseCascadeSection_pa() {
7665 createParser('..a(b)');
7666 Expression expression = parser.parseCascadeSection();
7667 expectNotNullIfNoErrors(expression);
7668 listener.assertNoErrors();
7669 expect(expression, new isInstanceOf<MethodInvocation>());
7670 MethodInvocation section = expression;
7671 expect(section.target, isNull);
7672 expect(section.operator, isNotNull);
7673 expect(section.methodName, isNotNull);
7674 expect(section.typeArguments, isNull);
7675 expect(section.argumentList, isNotNull);
7676 expect(section.argumentList.arguments, hasLength(1));
7677 }
7678
7679 void test_parseCascadeSection_pa_typeArgumentComments() {
7680 enableGenericMethodComments = true;
7681 createParser('..a/*<E>*/(b)');
7682 Expression expression = parser.parseCascadeSection();
7683 expectNotNullIfNoErrors(expression);
7684 listener.assertNoErrors();
7685 expect(expression, new isInstanceOf<MethodInvocation>());
7686 MethodInvocation section = expression;
7687 expect(section.target, isNull);
7688 expect(section.operator, isNotNull);
7689 expect(section.methodName, isNotNull);
7690 expect(section.typeArguments, isNotNull);
7691 expect(section.argumentList, isNotNull);
7692 expect(section.argumentList.arguments, hasLength(1));
7693 }
7694
7695 void test_parseCascadeSection_pa_typeArguments() {
7696 createParser('..a<E>(b)');
7697 Expression expression = parser.parseCascadeSection();
7698 expectNotNullIfNoErrors(expression);
7699 listener.assertNoErrors();
7700 expect(expression, new isInstanceOf<MethodInvocation>());
7701 MethodInvocation section = expression;
7702 expect(section.target, isNull);
7703 expect(section.operator, isNotNull);
7704 expect(section.methodName, isNotNull);
7705 expect(section.typeArguments, isNotNull);
7706 expect(section.argumentList, isNotNull);
7707 expect(section.argumentList.arguments, hasLength(1));
7708 }
7709
7710 void test_parseCascadeSection_paa() {
7711 createParser('..a(b)(c)');
7712 Expression expression = parser.parseCascadeSection();
7713 expectNotNullIfNoErrors(expression);
7714 listener.assertNoErrors();
7715 expect(expression, new isInstanceOf<FunctionExpressionInvocation>());
7716 FunctionExpressionInvocation section = expression;
7717 expect(section.function, new isInstanceOf<MethodInvocation>());
7718 expect(section.typeArguments, isNull);
7719 expect(section.argumentList, isNotNull);
7720 expect(section.argumentList.arguments, hasLength(1));
7721 }
7722
7723 void test_parseCascadeSection_paa_typeArgumentComments() {
7724 enableGenericMethodComments = true;
7725 createParser('..a/*<E>*/(b)/*<F>*/(c)');
7726 Expression expression = parser.parseCascadeSection();
7727 expectNotNullIfNoErrors(expression);
7728 listener.assertNoErrors();
7729 expect(expression, new isInstanceOf<FunctionExpressionInvocation>());
7730 FunctionExpressionInvocation section = expression;
7731 expect(section.function, new isInstanceOf<MethodInvocation>());
7732 expect(section.typeArguments, isNotNull);
7733 expect(section.argumentList, isNotNull);
7734 expect(section.argumentList.arguments, hasLength(1));
7735 }
7736
7737 void test_parseCascadeSection_paa_typeArguments() {
7738 createParser('..a<E>(b)<F>(c)');
7739 Expression expression = parser.parseCascadeSection();
7740 expectNotNullIfNoErrors(expression);
7741 listener.assertNoErrors();
7742 expect(expression, new isInstanceOf<FunctionExpressionInvocation>());
7743 FunctionExpressionInvocation section = expression;
7744 expect(section.function, new isInstanceOf<MethodInvocation>());
7745 expect(section.typeArguments, isNotNull);
7746 expect(section.argumentList, isNotNull);
7747 expect(section.argumentList.arguments, hasLength(1));
7748 }
7749
7750 void test_parseCascadeSection_paapaa() {
7751 createParser('..a(b)(c).d(e)(f)');
7752 Expression expression = parser.parseCascadeSection();
7753 expectNotNullIfNoErrors(expression);
7754 listener.assertNoErrors();
7755 expect(expression, new isInstanceOf<FunctionExpressionInvocation>());
7756 FunctionExpressionInvocation section = expression;
7757 expect(section.function, new isInstanceOf<MethodInvocation>());
7758 expect(section.typeArguments, isNull);
7759 expect(section.argumentList, isNotNull);
7760 expect(section.argumentList.arguments, hasLength(1));
7761 }
7762
7763 void test_parseCascadeSection_paapaa_typeArgumentComments() {
7764 enableGenericMethodComments = true;
7765 createParser('..a/*<E>*/(b)/*<F>*/(c).d/*<G>*/(e)/*<H>*/(f)');
7766 Expression expression = parser.parseCascadeSection();
7767 expectNotNullIfNoErrors(expression);
7768 listener.assertNoErrors();
7769 expect(expression, new isInstanceOf<FunctionExpressionInvocation>());
7770 FunctionExpressionInvocation section = expression;
7771 expect(section.function, new isInstanceOf<MethodInvocation>());
7772 expect(section.typeArguments, isNotNull);
7773 expect(section.argumentList, isNotNull);
7774 expect(section.argumentList.arguments, hasLength(1));
7775 }
7776
7777 void test_parseCascadeSection_paapaa_typeArguments() {
7778 createParser('..a<E>(b)<F>(c).d<G>(e)<H>(f)');
7779 Expression expression = parser.parseCascadeSection();
7780 expectNotNullIfNoErrors(expression);
7781 listener.assertNoErrors();
7782 expect(expression, new isInstanceOf<FunctionExpressionInvocation>());
7783 FunctionExpressionInvocation section = expression;
7784 expect(section.function, new isInstanceOf<MethodInvocation>());
7785 expect(section.typeArguments, isNotNull);
7786 expect(section.argumentList, isNotNull);
7787 expect(section.argumentList.arguments, hasLength(1));
7788 }
7789
7790 void test_parseCascadeSection_pap() {
7791 createParser('..a(b).c');
7792 Expression expression = parser.parseCascadeSection();
7793 expectNotNullIfNoErrors(expression);
7794 listener.assertNoErrors();
7795 expect(expression, new isInstanceOf<PropertyAccess>());
7796 PropertyAccess section = expression;
7797 expect(section.target, isNotNull);
7798 expect(section.operator, isNotNull);
7799 expect(section.propertyName, isNotNull);
7800 }
7801
7802 void test_parseCascadeSection_pap_typeArgumentComments() {
7803 enableGenericMethodComments = true;
7804 createParser('..a/*<E>*/(b).c');
7805 Expression expression = parser.parseCascadeSection();
7806 expectNotNullIfNoErrors(expression);
7807 listener.assertNoErrors();
7808 expect(expression, new isInstanceOf<PropertyAccess>());
7809 PropertyAccess section = expression;
7810 expect(section.target, isNotNull);
7811 expect(section.operator, isNotNull);
7812 expect(section.propertyName, isNotNull);
7813 }
7814
7815 void test_parseCascadeSection_pap_typeArguments() {
7816 createParser('..a<E>(b).c');
7817 Expression expression = parser.parseCascadeSection();
7818 expectNotNullIfNoErrors(expression);
7819 listener.assertNoErrors();
7820 expect(expression, new isInstanceOf<PropertyAccess>());
7821 PropertyAccess section = expression;
7822 expect(section.target, isNotNull);
7823 expect(section.operator, isNotNull);
7824 expect(section.propertyName, isNotNull);
7825 }
7826
7827 void test_parseCombinator_hide() { 9895 void test_parseCombinator_hide() {
7828 createParser('hide a;'); 9896 createParser('hide a;');
7829 Combinator combinator = parser.parseCombinator(); 9897 Combinator combinator = parser.parseCombinator();
7830 expectNotNullIfNoErrors(combinator); 9898 expectNotNullIfNoErrors(combinator);
7831 listener.assertNoErrors(); 9899 listener.assertNoErrors();
7832 expect(combinator, new isInstanceOf<HideCombinator>()); 9900 expect(combinator, new isInstanceOf<HideCombinator>());
7833 HideCombinator hideCombinator = combinator; 9901 HideCombinator hideCombinator = combinator;
7834 expect(hideCombinator.keyword, isNotNull); 9902 expect(hideCombinator.keyword, isNotNull);
7835 expect(hideCombinator.hiddenNames, hasLength(1)); 9903 expect(hideCombinator.hiddenNames, hasLength(1));
7836 } 9904 }
(...skipping 580 matching lines...) Expand 10 before | Expand all | Expand 10 after
8417 List<CommentReference> references = parser.parseCommentReferences(tokens); 10485 List<CommentReference> references = parser.parseCommentReferences(tokens);
8418 expectNotNullIfNoErrors(references); 10486 expectNotNullIfNoErrors(references);
8419 listener.assertNoErrors(); 10487 listener.assertNoErrors();
8420 expect(references, hasLength(1)); 10488 expect(references, hasLength(1));
8421 CommentReference reference = references[0]; 10489 CommentReference reference = references[0];
8422 expect(reference, isNotNull); 10490 expect(reference, isNotNull);
8423 expect(reference.identifier, isNotNull); 10491 expect(reference.identifier, isNotNull);
8424 expect(reference.offset, 15); 10492 expect(reference.offset, 15);
8425 } 10493 }
8426 10494
8427 void test_parseConditionalExpression() {
8428 createParser('x ? y : z');
8429 ConditionalExpression expression = parser.parseConditionalExpression();
8430 expectNotNullIfNoErrors(expression);
8431 listener.assertNoErrors();
8432 expect(expression.condition, isNotNull);
8433 expect(expression.question, isNotNull);
8434 expect(expression.thenExpression, isNotNull);
8435 expect(expression.colon, isNotNull);
8436 expect(expression.elseExpression, isNotNull);
8437 }
8438
8439 void test_parseConfiguration_noOperator_dottedIdentifier() { 10495 void test_parseConfiguration_noOperator_dottedIdentifier() {
8440 createParser("if (a.b) 'c.dart'"); 10496 createParser("if (a.b) 'c.dart'");
8441 Configuration configuration = parser.parseConfiguration(); 10497 Configuration configuration = parser.parseConfiguration();
8442 expectNotNullIfNoErrors(configuration); 10498 expectNotNullIfNoErrors(configuration);
8443 listener.assertNoErrors(); 10499 listener.assertNoErrors();
8444 expect(configuration.ifKeyword, isNotNull); 10500 expect(configuration.ifKeyword, isNotNull);
8445 expect(configuration.leftParenthesis, isNotNull); 10501 expect(configuration.leftParenthesis, isNotNull);
8446 expectDottedName(configuration.name, ["a", "b"]); 10502 expectDottedName(configuration.name, ["a", "b"]);
8447 expect(configuration.equalToken, isNull); 10503 expect(configuration.equalToken, isNull);
8448 expect(configuration.value, isNull); 10504 expect(configuration.value, isNull);
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
8485 listener.assertNoErrors(); 10541 listener.assertNoErrors();
8486 expect(configuration.ifKeyword, isNotNull); 10542 expect(configuration.ifKeyword, isNotNull);
8487 expect(configuration.leftParenthesis, isNotNull); 10543 expect(configuration.leftParenthesis, isNotNull);
8488 expectDottedName(configuration.name, ["a"]); 10544 expectDottedName(configuration.name, ["a"]);
8489 expect(configuration.equalToken, isNotNull); 10545 expect(configuration.equalToken, isNotNull);
8490 expect(configuration.value, isNotNull); 10546 expect(configuration.value, isNotNull);
8491 expect(configuration.rightParenthesis, isNotNull); 10547 expect(configuration.rightParenthesis, isNotNull);
8492 expect(configuration.uri, isNotNull); 10548 expect(configuration.uri, isNotNull);
8493 } 10549 }
8494 10550
8495 void test_parseConstExpression_instanceCreation() {
8496 createParser('const A()');
8497 Expression expression = parser.parseConstExpression();
8498 expectNotNullIfNoErrors(expression);
8499 listener.assertNoErrors();
8500 expect(expression, new isInstanceOf<InstanceCreationExpression>());
8501 InstanceCreationExpression instanceCreation = expression;
8502 expect(instanceCreation.keyword, isNotNull);
8503 ConstructorName name = instanceCreation.constructorName;
8504 expect(name, isNotNull);
8505 expect(name.type, isNotNull);
8506 expect(name.period, isNull);
8507 expect(name.name, isNull);
8508 expect(instanceCreation.argumentList, isNotNull);
8509 }
8510
8511 void test_parseConstExpression_listLiteral_typed() {
8512 createParser('const <A> []');
8513 Expression expression = parser.parseConstExpression();
8514 expectNotNullIfNoErrors(expression);
8515 listener.assertNoErrors();
8516 expect(expression, new isInstanceOf<ListLiteral>());
8517 ListLiteral literal = expression;
8518 expect(literal.constKeyword, isNotNull);
8519 expect(literal.typeArguments, isNotNull);
8520 expect(literal.leftBracket, isNotNull);
8521 expect(literal.elements, hasLength(0));
8522 expect(literal.rightBracket, isNotNull);
8523 }
8524
8525 void test_parseConstExpression_listLiteral_typed_genericComment() {
8526 enableGenericMethodComments = true;
8527 createParser('const /*<A>*/ []');
8528 Expression expression = parser.parseConstExpression();
8529 expectNotNullIfNoErrors(expression);
8530 listener.assertNoErrors();
8531 expect(expression, new isInstanceOf<ListLiteral>());
8532 ListLiteral literal = expression;
8533 expect(literal.constKeyword, isNotNull);
8534 expect(literal.typeArguments, isNotNull);
8535 expect(literal.leftBracket, isNotNull);
8536 expect(literal.elements, hasLength(0));
8537 expect(literal.rightBracket, isNotNull);
8538 }
8539
8540 void test_parseConstExpression_listLiteral_untyped() {
8541 createParser('const []');
8542 Expression expression = parser.parseConstExpression();
8543 expectNotNullIfNoErrors(expression);
8544 listener.assertNoErrors();
8545 expect(expression, new isInstanceOf<ListLiteral>());
8546 ListLiteral literal = expression;
8547 expect(literal.constKeyword, isNotNull);
8548 expect(literal.typeArguments, isNull);
8549 expect(literal.leftBracket, isNotNull);
8550 expect(literal.elements, hasLength(0));
8551 expect(literal.rightBracket, isNotNull);
8552 }
8553
8554 void test_parseConstExpression_mapLiteral_typed() {
8555 createParser('const <A, B> {}');
8556 Expression expression = parser.parseConstExpression();
8557 expectNotNullIfNoErrors(expression);
8558 listener.assertNoErrors();
8559 expect(expression, new isInstanceOf<MapLiteral>());
8560 MapLiteral literal = expression;
8561 expect(literal.leftBracket, isNotNull);
8562 expect(literal.entries, hasLength(0));
8563 expect(literal.rightBracket, isNotNull);
8564 expect(literal.typeArguments, isNotNull);
8565 }
8566
8567 void test_parseConstExpression_mapLiteral_typed_genericComment() {
8568 enableGenericMethodComments = true;
8569 createParser('const /*<A, B>*/ {}');
8570 Expression expression = parser.parseConstExpression();
8571 expectNotNullIfNoErrors(expression);
8572 listener.assertNoErrors();
8573 expect(expression, new isInstanceOf<MapLiteral>());
8574 MapLiteral literal = expression;
8575 expect(literal.leftBracket, isNotNull);
8576 expect(literal.entries, hasLength(0));
8577 expect(literal.rightBracket, isNotNull);
8578 expect(literal.typeArguments, isNotNull);
8579 }
8580
8581 void test_parseConstExpression_mapLiteral_untyped() {
8582 createParser('const {}');
8583 Expression expression = parser.parseConstExpression();
8584 expectNotNullIfNoErrors(expression);
8585 listener.assertNoErrors();
8586 expect(expression, new isInstanceOf<MapLiteral>());
8587 MapLiteral literal = expression;
8588 expect(literal.leftBracket, isNotNull);
8589 expect(literal.entries, hasLength(0));
8590 expect(literal.rightBracket, isNotNull);
8591 expect(literal.typeArguments, isNull);
8592 }
8593
8594 void test_parseConstructor() { 10551 void test_parseConstructor() {
8595 // TODO(brianwilkerson) Implement tests for this method. 10552 // TODO(brianwilkerson) Implement tests for this method.
8596 } 10553 }
8597 10554
8598 void test_parseConstructorName_named_noPrefix() { 10555 void test_parseConstructorName_named_noPrefix() {
8599 createParser('A.n;'); 10556 createParser('A.n;');
8600 ConstructorName name = parser.parseConstructorName(); 10557 ConstructorName name = parser.parseConstructorName();
8601 expectNotNullIfNoErrors(name); 10558 expectNotNullIfNoErrors(name);
8602 listener.assertNoErrors(); 10559 listener.assertNoErrors();
8603 expect(name.type, isNotNull); 10560 expect(name.type, isNotNull);
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
8724 } 10681 }
8725 10682
8726 void test_parseEmptyStatement() { 10683 void test_parseEmptyStatement() {
8727 createParser(';'); 10684 createParser(';');
8728 EmptyStatement statement = parser.parseEmptyStatement(); 10685 EmptyStatement statement = parser.parseEmptyStatement();
8729 expectNotNullIfNoErrors(statement); 10686 expectNotNullIfNoErrors(statement);
8730 listener.assertNoErrors(); 10687 listener.assertNoErrors();
8731 expect(statement.semicolon, isNotNull); 10688 expect(statement.semicolon, isNotNull);
8732 } 10689 }
8733 10690
8734 void test_parseEqualityExpression_normal() {
8735 createParser('x == y');
8736 BinaryExpression expression = parser.parseEqualityExpression();
8737 expectNotNullIfNoErrors(expression);
8738 listener.assertNoErrors();
8739 expect(expression.leftOperand, isNotNull);
8740 expect(expression.operator, isNotNull);
8741 expect(expression.operator.type, TokenType.EQ_EQ);
8742 expect(expression.rightOperand, isNotNull);
8743 }
8744
8745 void test_parseEqualityExpression_super() {
8746 createParser('super == y');
8747 BinaryExpression expression = parser.parseEqualityExpression();
8748 expectNotNullIfNoErrors(expression);
8749 listener.assertNoErrors();
8750 expect(expression.leftOperand, new isInstanceOf<SuperExpression>());
8751 expect(expression.operator, isNotNull);
8752 expect(expression.operator.type, TokenType.EQ_EQ);
8753 expect(expression.rightOperand, isNotNull);
8754 }
8755
8756 void test_parseExpression_assign() {
8757 // TODO(brianwilkerson) Implement more tests for this method.
8758 Expression expression = parseExpression('x = y');
8759 expect(expression, new isInstanceOf<AssignmentExpression>());
8760 AssignmentExpression assignmentExpression = expression;
8761 expect(assignmentExpression.leftHandSide, isNotNull);
8762 expect(assignmentExpression.operator, isNotNull);
8763 expect(assignmentExpression.operator.type, TokenType.EQ);
8764 expect(assignmentExpression.rightHandSide, isNotNull);
8765 }
8766
8767 void test_parseExpression_assign_compound() {
8768 enableLazyAssignmentOperators = true;
8769 Expression expression = parseExpression('x ||= y');
8770 expect(expression, new isInstanceOf<AssignmentExpression>());
8771 AssignmentExpression assignmentExpression = expression;
8772 expect(assignmentExpression.leftHandSide, isNotNull);
8773 expect(assignmentExpression.operator, isNotNull);
8774 expect(assignmentExpression.operator.type, TokenType.BAR_BAR_EQ);
8775 expect(assignmentExpression.rightHandSide, isNotNull);
8776 }
8777
8778 void test_parseExpression_comparison() {
8779 Expression expression = parseExpression('--a.b == c');
8780 expect(expression, new isInstanceOf<BinaryExpression>());
8781 BinaryExpression binaryExpression = expression;
8782 expect(binaryExpression.leftOperand, isNotNull);
8783 expect(binaryExpression.operator, isNotNull);
8784 expect(binaryExpression.operator.type, TokenType.EQ_EQ);
8785 expect(binaryExpression.rightOperand, isNotNull);
8786 }
8787
8788 void test_parseExpression_function_async() {
8789 Expression expression = parseExpression('() async {}');
8790 expect(expression, new isInstanceOf<FunctionExpression>());
8791 FunctionExpression functionExpression = expression;
8792 expect(functionExpression.body, isNotNull);
8793 expect(functionExpression.body.isAsynchronous, isTrue);
8794 expect(functionExpression.body.isGenerator, isFalse);
8795 expect(functionExpression.parameters, isNotNull);
8796 }
8797
8798 void test_parseExpression_function_asyncStar() {
8799 Expression expression = parseExpression('() async* {}');
8800 expect(expression, new isInstanceOf<FunctionExpression>());
8801 FunctionExpression functionExpression = expression;
8802 expect(functionExpression.body, isNotNull);
8803 expect(functionExpression.body.isAsynchronous, isTrue);
8804 expect(functionExpression.body.isGenerator, isTrue);
8805 expect(functionExpression.parameters, isNotNull);
8806 }
8807
8808 void test_parseExpression_function_sync() {
8809 Expression expression = parseExpression('() {}');
8810 expect(expression, new isInstanceOf<FunctionExpression>());
8811 FunctionExpression functionExpression = expression;
8812 expect(functionExpression.body, isNotNull);
8813 expect(functionExpression.body.isAsynchronous, isFalse);
8814 expect(functionExpression.body.isGenerator, isFalse);
8815 expect(functionExpression.parameters, isNotNull);
8816 }
8817
8818 void test_parseExpression_function_syncStar() {
8819 Expression expression = parseExpression('() sync* {}');
8820 expect(expression, new isInstanceOf<FunctionExpression>());
8821 FunctionExpression functionExpression = expression;
8822 expect(functionExpression.body, isNotNull);
8823 expect(functionExpression.body.isAsynchronous, isFalse);
8824 expect(functionExpression.body.isGenerator, isTrue);
8825 expect(functionExpression.parameters, isNotNull);
8826 }
8827
8828 void test_parseExpression_invokeFunctionExpression() {
8829 Expression expression = parseExpression('(a) {return a + a;} (3)');
8830 expect(expression, new isInstanceOf<FunctionExpressionInvocation>());
8831 FunctionExpressionInvocation invocation = expression;
8832 expect(invocation.function, new isInstanceOf<FunctionExpression>());
8833 FunctionExpression functionExpression =
8834 invocation.function as FunctionExpression;
8835 expect(functionExpression.parameters, isNotNull);
8836 expect(functionExpression.body, isNotNull);
8837 expect(invocation.typeArguments, isNull);
8838 ArgumentList list = invocation.argumentList;
8839 expect(list, isNotNull);
8840 expect(list.arguments, hasLength(1));
8841 }
8842
8843 void test_parseExpression_nonAwait() {
8844 Expression expression = parseExpression('await()');
8845 expect(expression, new isInstanceOf<MethodInvocation>());
8846 MethodInvocation invocation = expression;
8847 expect(invocation.methodName.name, 'await');
8848 expect(invocation.typeArguments, isNull);
8849 expect(invocation.argumentList, isNotNull);
8850 }
8851
8852 void test_parseExpression_superMethodInvocation() {
8853 Expression expression = parseExpression('super.m()');
8854 expect(expression, new isInstanceOf<MethodInvocation>());
8855 MethodInvocation invocation = expression;
8856 expect(invocation.target, isNotNull);
8857 expect(invocation.methodName, isNotNull);
8858 expect(invocation.typeArguments, isNull);
8859 expect(invocation.argumentList, isNotNull);
8860 }
8861
8862 void test_parseExpression_superMethodInvocation_typeArgumentComments() {
8863 enableGenericMethodComments = true;
8864 Expression expression = parseExpression('super.m/*<E>*/()');
8865 expect(expression, new isInstanceOf<MethodInvocation>());
8866 MethodInvocation invocation = expression;
8867 expect(invocation.target, isNotNull);
8868 expect(invocation.methodName, isNotNull);
8869 expect(invocation.typeArguments, isNotNull);
8870 expect(invocation.argumentList, isNotNull);
8871 }
8872
8873 void test_parseExpression_superMethodInvocation_typeArguments() {
8874 Expression expression = parseExpression('super.m<E>()');
8875 expect(expression, new isInstanceOf<MethodInvocation>());
8876 MethodInvocation invocation = expression;
8877 expect(invocation.target, isNotNull);
8878 expect(invocation.methodName, isNotNull);
8879 expect(invocation.typeArguments, isNotNull);
8880 expect(invocation.argumentList, isNotNull);
8881 }
8882
8883 void test_parseExpressionList_multiple() {
8884 createParser('1, 2, 3');
8885 List<Expression> result = parser.parseExpressionList();
8886 expectNotNullIfNoErrors(result);
8887 listener.assertNoErrors();
8888 expect(result, hasLength(3));
8889 }
8890
8891 void test_parseExpressionList_single() {
8892 createParser('1');
8893 List<Expression> result = parser.parseExpressionList();
8894 expectNotNullIfNoErrors(result);
8895 listener.assertNoErrors();
8896 expect(result, hasLength(1));
8897 }
8898
8899 void test_parseExpressionWithoutCascade_assign() {
8900 // TODO(brianwilkerson) Implement more tests for this method.
8901 createParser('x = y');
8902 Expression expression = parser.parseExpressionWithoutCascade();
8903 expectNotNullIfNoErrors(expression);
8904 listener.assertNoErrors();
8905 expect(expression, new isInstanceOf<AssignmentExpression>());
8906 AssignmentExpression assignmentExpression = expression;
8907 expect(assignmentExpression.leftHandSide, isNotNull);
8908 expect(assignmentExpression.operator, isNotNull);
8909 expect(assignmentExpression.operator.type, TokenType.EQ);
8910 expect(assignmentExpression.rightHandSide, isNotNull);
8911 }
8912
8913 void test_parseExpressionWithoutCascade_comparison() {
8914 createParser('--a.b == c');
8915 Expression expression = parser.parseExpressionWithoutCascade();
8916 expectNotNullIfNoErrors(expression);
8917 listener.assertNoErrors();
8918 expect(expression, new isInstanceOf<BinaryExpression>());
8919 BinaryExpression binaryExpression = expression;
8920 expect(binaryExpression.leftOperand, isNotNull);
8921 expect(binaryExpression.operator, isNotNull);
8922 expect(binaryExpression.operator.type, TokenType.EQ_EQ);
8923 expect(binaryExpression.rightOperand, isNotNull);
8924 }
8925
8926 void test_parseExpressionWithoutCascade_superMethodInvocation() {
8927 createParser('super.m()');
8928 Expression expression = parser.parseExpressionWithoutCascade();
8929 expectNotNullIfNoErrors(expression);
8930 listener.assertNoErrors();
8931 expect(expression, new isInstanceOf<MethodInvocation>());
8932 MethodInvocation invocation = expression;
8933 expect(invocation.target, isNotNull);
8934 expect(invocation.methodName, isNotNull);
8935 expect(invocation.typeArguments, isNull);
8936 expect(invocation.argumentList, isNotNull);
8937 }
8938
8939 void
8940 test_parseExpressionWithoutCascade_superMethodInvocation_typeArgumentComme nts() {
8941 enableGenericMethodComments = true;
8942 createParser('super.m/*<E>*/()');
8943 Expression expression = parser.parseExpressionWithoutCascade();
8944 expectNotNullIfNoErrors(expression);
8945 listener.assertNoErrors();
8946 expect(expression, new isInstanceOf<MethodInvocation>());
8947 MethodInvocation invocation = expression;
8948 expect(invocation.target, isNotNull);
8949 expect(invocation.methodName, isNotNull);
8950 expect(invocation.typeArguments, isNotNull);
8951 expect(invocation.argumentList, isNotNull);
8952 }
8953
8954 void
8955 test_parseExpressionWithoutCascade_superMethodInvocation_typeArguments() {
8956 createParser('super.m<E>()');
8957 Expression expression = parser.parseExpressionWithoutCascade();
8958 expectNotNullIfNoErrors(expression);
8959 listener.assertNoErrors();
8960 expect(expression, new isInstanceOf<MethodInvocation>());
8961 MethodInvocation invocation = expression;
8962 expect(invocation.target, isNotNull);
8963 expect(invocation.methodName, isNotNull);
8964 expect(invocation.typeArguments, isNotNull);
8965 expect(invocation.argumentList, isNotNull);
8966 }
8967
8968 void test_parseExtendsClause() { 10691 void test_parseExtendsClause() {
8969 createParser('extends B'); 10692 createParser('extends B');
8970 ExtendsClause clause = parser.parseExtendsClause(); 10693 ExtendsClause clause = parser.parseExtendsClause();
8971 expectNotNullIfNoErrors(clause); 10694 expectNotNullIfNoErrors(clause);
8972 listener.assertNoErrors(); 10695 listener.assertNoErrors();
8973 expect(clause.extendsKeyword, isNotNull); 10696 expect(clause.extendsKeyword, isNotNull);
8974 expect(clause.superclass, isNotNull); 10697 expect(clause.superclass, isNotNull);
8975 expect(clause.superclass, new isInstanceOf<TypeName>()); 10698 expect(clause.superclass, new isInstanceOf<TypeName>());
8976 } 10699 }
8977 10700
(...skipping 663 matching lines...) Expand 10 before | Expand all | Expand 10 after
9641 createParser('f<E>(E p) => p * 2;'); 11364 createParser('f<E>(E p) => p * 2;');
9642 FunctionDeclarationStatement statement = 11365 FunctionDeclarationStatement statement =
9643 parser.parseFunctionDeclarationStatement(); 11366 parser.parseFunctionDeclarationStatement();
9644 expectNotNullIfNoErrors(statement); 11367 expectNotNullIfNoErrors(statement);
9645 listener.assertNoErrors(); 11368 listener.assertNoErrors();
9646 expect(statement.functionDeclaration, isNotNull); 11369 expect(statement.functionDeclaration, isNotNull);
9647 expect(statement.functionDeclaration.functionExpression.typeParameters, 11370 expect(statement.functionDeclaration.functionExpression.typeParameters,
9648 isNotNull); 11371 isNotNull);
9649 } 11372 }
9650 11373
9651 void test_parseFunctionExpression_body_inExpression() {
9652 createParser('(int i) => i++');
9653 FunctionExpression expression = parser.parseFunctionExpression();
9654 expectNotNullIfNoErrors(expression);
9655 listener.assertNoErrors();
9656 expect(expression.body, isNotNull);
9657 expect(expression.typeParameters, isNull);
9658 expect(expression.parameters, isNotNull);
9659 expect((expression.body as ExpressionFunctionBody).semicolon, isNull);
9660 }
9661
9662 void test_parseFunctionExpression_typeParameterComments() {
9663 enableGenericMethodComments = true;
9664 createParser('/*<E>*/(/*=E*/ i) => i++');
9665 FunctionExpression expression = parser.parseFunctionExpression();
9666 expectNotNullIfNoErrors(expression);
9667 listener.assertNoErrors();
9668 expect(expression.body, isNotNull);
9669 expect(expression.typeParameters, isNotNull);
9670 expect(expression.parameters, isNotNull);
9671 expect((expression.body as ExpressionFunctionBody).semicolon, isNull);
9672 SimpleFormalParameter p = expression.parameters.parameters[0];
9673 expect(p.type, isNotNull);
9674 }
9675
9676 void test_parseFunctionExpression_typeParameters() {
9677 createParser('<E>(E i) => i++');
9678 FunctionExpression expression = parser.parseFunctionExpression();
9679 expectNotNullIfNoErrors(expression);
9680 listener.assertNoErrors();
9681 expect(expression.body, isNotNull);
9682 expect(expression.typeParameters, isNotNull);
9683 expect(expression.parameters, isNotNull);
9684 expect((expression.body as ExpressionFunctionBody).semicolon, isNull);
9685 }
9686
9687 void test_parseIdentifierList_multiple() { 11374 void test_parseIdentifierList_multiple() {
9688 createParser('a, b, c'); 11375 createParser('a, b, c');
9689 List<SimpleIdentifier> list = parser.parseIdentifierList(); 11376 List<SimpleIdentifier> list = parser.parseIdentifierList();
9690 expectNotNullIfNoErrors(list); 11377 expectNotNullIfNoErrors(list);
9691 listener.assertNoErrors(); 11378 listener.assertNoErrors();
9692 expect(list, hasLength(3)); 11379 expect(list, hasLength(3));
9693 } 11380 }
9694 11381
9695 void test_parseIdentifierList_single() { 11382 void test_parseIdentifierList_single() {
9696 createParser('a'); 11383 createParser('a');
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
9767 11454
9768 void test_parseImplementsClause_single() { 11455 void test_parseImplementsClause_single() {
9769 createParser('implements A'); 11456 createParser('implements A');
9770 ImplementsClause clause = parser.parseImplementsClause(); 11457 ImplementsClause clause = parser.parseImplementsClause();
9771 expectNotNullIfNoErrors(clause); 11458 expectNotNullIfNoErrors(clause);
9772 listener.assertNoErrors(); 11459 listener.assertNoErrors();
9773 expect(clause.interfaces, hasLength(1)); 11460 expect(clause.interfaces, hasLength(1));
9774 expect(clause.implementsKeyword, isNotNull); 11461 expect(clause.implementsKeyword, isNotNull);
9775 } 11462 }
9776 11463
9777 void test_parseInstanceCreationExpression_qualifiedType() {
9778 Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
9779 createParser('A.B()');
9780 InstanceCreationExpression expression =
9781 parser.parseInstanceCreationExpression(token);
9782 expectNotNullIfNoErrors(expression);
9783 listener.assertNoErrors();
9784 expect(expression.keyword, token);
9785 ConstructorName name = expression.constructorName;
9786 expect(name, isNotNull);
9787 TypeName type = name.type;
9788 expect(type, isNotNull);
9789 expect(type.typeArguments, isNull);
9790 expect(name.period, isNull);
9791 expect(name.name, isNull);
9792 expect(expression.argumentList, isNotNull);
9793 }
9794
9795 void test_parseInstanceCreationExpression_qualifiedType_named() {
9796 Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
9797 createParser('A.B.c()');
9798 InstanceCreationExpression expression =
9799 parser.parseInstanceCreationExpression(token);
9800 expectNotNullIfNoErrors(expression);
9801 listener.assertNoErrors();
9802 expect(expression.keyword, token);
9803 ConstructorName name = expression.constructorName;
9804 expect(name, isNotNull);
9805 TypeName type = name.type;
9806 expect(type, isNotNull);
9807 expect(type.typeArguments, isNull);
9808 expect(name.period, isNotNull);
9809 expect(name.name, isNotNull);
9810 expect(expression.argumentList, isNotNull);
9811 }
9812
9813 void
9814 test_parseInstanceCreationExpression_qualifiedType_named_typeParameterComm ent() {
9815 enableGenericMethodComments = true;
9816 Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
9817 createParser('A.B/*<E>*/.c()');
9818 InstanceCreationExpression expression =
9819 parser.parseInstanceCreationExpression(token);
9820 expectNotNullIfNoErrors(expression);
9821 listener.assertNoErrors();
9822 expect(expression.keyword, token);
9823 ConstructorName name = expression.constructorName;
9824 expect(name, isNotNull);
9825 TypeName type = name.type;
9826 expect(type, isNotNull);
9827 expect(type.typeArguments.arguments, hasLength(1));
9828 expect(name.period, isNotNull);
9829 expect(name.name, isNotNull);
9830 expect(expression.argumentList, isNotNull);
9831 }
9832
9833 void
9834 test_parseInstanceCreationExpression_qualifiedType_named_typeParameters() {
9835 Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
9836 createParser('A.B<E>.c()');
9837 InstanceCreationExpression expression =
9838 parser.parseInstanceCreationExpression(token);
9839 expectNotNullIfNoErrors(expression);
9840 listener.assertNoErrors();
9841 expect(expression.keyword, token);
9842 ConstructorName name = expression.constructorName;
9843 expect(name, isNotNull);
9844 TypeName type = name.type;
9845 expect(type, isNotNull);
9846 expect(type.typeArguments.arguments, hasLength(1));
9847 expect(name.period, isNotNull);
9848 expect(name.name, isNotNull);
9849 expect(expression.argumentList, isNotNull);
9850 }
9851
9852 void
9853 test_parseInstanceCreationExpression_qualifiedType_typeParameterComment() {
9854 enableGenericMethodComments = true;
9855 Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
9856 createParser('A.B/*<E>*/()');
9857 InstanceCreationExpression expression =
9858 parser.parseInstanceCreationExpression(token);
9859 expectNotNullIfNoErrors(expression);
9860 listener.assertNoErrors();
9861 expect(expression.keyword, token);
9862 ConstructorName name = expression.constructorName;
9863 expect(name, isNotNull);
9864 TypeName type = name.type;
9865 expect(type, isNotNull);
9866 expect(type.typeArguments.arguments, hasLength(1));
9867 expect(name.period, isNull);
9868 expect(name.name, isNull);
9869 expect(expression.argumentList, isNotNull);
9870 }
9871
9872 void test_parseInstanceCreationExpression_qualifiedType_typeParameters() {
9873 Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
9874 createParser('A.B<E>()');
9875 InstanceCreationExpression expression =
9876 parser.parseInstanceCreationExpression(token);
9877 expectNotNullIfNoErrors(expression);
9878 listener.assertNoErrors();
9879 expect(expression.keyword, token);
9880 ConstructorName name = expression.constructorName;
9881 expect(name, isNotNull);
9882 TypeName type = name.type;
9883 expect(type, isNotNull);
9884 expect(type.typeArguments.arguments, hasLength(1));
9885 expect(name.period, isNull);
9886 expect(name.name, isNull);
9887 expect(expression.argumentList, isNotNull);
9888 }
9889
9890 void test_parseInstanceCreationExpression_type() {
9891 Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
9892 createParser('A()');
9893 InstanceCreationExpression expression =
9894 parser.parseInstanceCreationExpression(token);
9895 expectNotNullIfNoErrors(expression);
9896 listener.assertNoErrors();
9897 expect(expression.keyword, token);
9898 ConstructorName name = expression.constructorName;
9899 expect(name, isNotNull);
9900 TypeName type = name.type;
9901 expect(type, isNotNull);
9902 expect(type.typeArguments, isNull);
9903 expect(name.period, isNull);
9904 expect(name.name, isNull);
9905 expect(expression.argumentList, isNotNull);
9906 }
9907
9908 void test_parseInstanceCreationExpression_type_named() {
9909 enableGenericMethodComments = true;
9910 Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
9911 createParser('A.c()');
9912 InstanceCreationExpression expression =
9913 parser.parseInstanceCreationExpression(token);
9914 expectNotNullIfNoErrors(expression);
9915 listener.assertNoErrors();
9916 expect(expression.keyword, token);
9917 ConstructorName name = expression.constructorName;
9918 expect(name, isNotNull);
9919 TypeName type = name.type;
9920 expect(type, isNotNull);
9921 expect(type.typeArguments, isNull);
9922 expect(name.period, isNull);
9923 expect(name.name, isNull);
9924 expect(expression.argumentList, isNotNull);
9925 }
9926
9927 void test_parseInstanceCreationExpression_type_named_typeParameterComment() {
9928 enableGenericMethodComments = true;
9929 Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
9930 createParser('A/*<B>*/.c()');
9931 InstanceCreationExpression expression =
9932 parser.parseInstanceCreationExpression(token);
9933 expectNotNullIfNoErrors(expression);
9934 listener.assertNoErrors();
9935 expect(expression.keyword, token);
9936 ConstructorName name = expression.constructorName;
9937 expect(name, isNotNull);
9938 TypeName type = name.type;
9939 expect(type, isNotNull);
9940 expect(type.typeArguments.arguments, hasLength(1));
9941 expect(name.period, isNotNull);
9942 expect(name.name, isNotNull);
9943 expect(expression.argumentList, isNotNull);
9944 }
9945
9946 void test_parseInstanceCreationExpression_type_named_typeParameters() {
9947 Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
9948 createParser('A<B>.c()');
9949 InstanceCreationExpression expression =
9950 parser.parseInstanceCreationExpression(token);
9951 expectNotNullIfNoErrors(expression);
9952 listener.assertNoErrors();
9953 expect(expression.keyword, token);
9954 ConstructorName name = expression.constructorName;
9955 expect(name, isNotNull);
9956 TypeName type = name.type;
9957 expect(type, isNotNull);
9958 expect(type.typeArguments.arguments, hasLength(1));
9959 expect(name.period, isNotNull);
9960 expect(name.name, isNotNull);
9961 expect(expression.argumentList, isNotNull);
9962 }
9963
9964 void test_parseInstanceCreationExpression_type_typeParameterComment() {
9965 enableGenericMethodComments = true;
9966 Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
9967 createParser('A/*<B>*/()');
9968 InstanceCreationExpression expression =
9969 parser.parseInstanceCreationExpression(token);
9970 expectNotNullIfNoErrors(expression);
9971 listener.assertNoErrors();
9972 expect(expression.keyword, token);
9973 ConstructorName name = expression.constructorName;
9974 expect(name, isNotNull);
9975 TypeName type = name.type;
9976 expect(type, isNotNull);
9977 expect(type.typeArguments.arguments, hasLength(1));
9978 expect(name.period, isNull);
9979 expect(name.name, isNull);
9980 expect(expression.argumentList, isNotNull);
9981 }
9982
9983 void test_parseInstanceCreationExpression_type_typeParameters() {
9984 Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
9985 createParser('A<B>()');
9986 InstanceCreationExpression expression =
9987 parser.parseInstanceCreationExpression(token);
9988 expectNotNullIfNoErrors(expression);
9989 listener.assertNoErrors();
9990 expect(expression.keyword, token);
9991 ConstructorName name = expression.constructorName;
9992 expect(name, isNotNull);
9993 TypeName type = name.type;
9994 expect(type, isNotNull);
9995 expect(type.typeArguments.arguments, hasLength(1));
9996 expect(name.period, isNull);
9997 expect(name.name, isNull);
9998 expect(expression.argumentList, isNotNull);
9999 }
10000
10001 void test_parseInstanceCreationExpression_type_typeParameters_nullable() {
10002 enableNnbd = true;
10003 Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
10004 createParser('A<B?>()');
10005 InstanceCreationExpression expression =
10006 parser.parseInstanceCreationExpression(token);
10007 expectNotNullIfNoErrors(expression);
10008 listener.assertNoErrors();
10009 expect(expression.keyword, token);
10010 ConstructorName name = expression.constructorName;
10011 expect(name, isNotNull);
10012 TypeName type = name.type;
10013 expect(type, isNotNull);
10014 expect(name.period, isNull);
10015 expect(name.name, isNull);
10016 expect(expression.argumentList, isNotNull);
10017 NodeList<TypeAnnotation> arguments = type.typeArguments.arguments;
10018 expect(arguments, hasLength(1));
10019 expect((arguments[0] as TypeName).question, isNotNull);
10020 }
10021
10022 void test_parseLibraryIdentifier_multiple() { 11464 void test_parseLibraryIdentifier_multiple() {
10023 String name = "a.b.c"; 11465 String name = "a.b.c";
10024 createParser(name); 11466 createParser(name);
10025 LibraryIdentifier identifier = parser.parseLibraryIdentifier(); 11467 LibraryIdentifier identifier = parser.parseLibraryIdentifier();
10026 expectNotNullIfNoErrors(identifier); 11468 expectNotNullIfNoErrors(identifier);
10027 listener.assertNoErrors(); 11469 listener.assertNoErrors();
10028 expect(identifier.name, name); 11470 expect(identifier.name, name);
10029 } 11471 }
10030 11472
10031 void test_parseLibraryIdentifier_single() { 11473 void test_parseLibraryIdentifier_single() {
10032 String name = "a"; 11474 String name = "a";
10033 createParser(name); 11475 createParser(name);
10034 LibraryIdentifier identifier = parser.parseLibraryIdentifier(); 11476 LibraryIdentifier identifier = parser.parseLibraryIdentifier();
10035 expectNotNullIfNoErrors(identifier); 11477 expectNotNullIfNoErrors(identifier);
10036 listener.assertNoErrors(); 11478 listener.assertNoErrors();
10037 expect(identifier.name, name); 11479 expect(identifier.name, name);
10038 } 11480 }
10039 11481
10040 void test_parseListLiteral_empty_oneToken() {
10041 Token token = TokenFactory.tokenFromKeyword(Keyword.CONST);
10042 TypeArgumentList typeArguments = null;
10043 createParser('[]');
10044 ListLiteral literal = parser.parseListLiteral(token, typeArguments);
10045 expectNotNullIfNoErrors(literal);
10046 listener.assertNoErrors();
10047 expect(literal.constKeyword, token);
10048 expect(literal.typeArguments, typeArguments);
10049 expect(literal.leftBracket, isNotNull);
10050 expect(literal.elements, hasLength(0));
10051 expect(literal.rightBracket, isNotNull);
10052 }
10053
10054 void test_parseListLiteral_empty_oneToken_withComment() {
10055 Token token = null;
10056 TypeArgumentList typeArguments = null;
10057 createParser('/* 0 */ []');
10058 ListLiteral literal = parser.parseListLiteral(token, typeArguments);
10059 expectNotNullIfNoErrors(literal);
10060 listener.assertNoErrors();
10061 expect(literal.constKeyword, token);
10062 expect(literal.typeArguments, typeArguments);
10063 Token leftBracket = literal.leftBracket;
10064 expect(leftBracket, isNotNull);
10065 expect(leftBracket.precedingComments, isNotNull);
10066 expect(literal.elements, hasLength(0));
10067 expect(literal.rightBracket, isNotNull);
10068 }
10069
10070 void test_parseListLiteral_empty_twoTokens() {
10071 Token token = TokenFactory.tokenFromKeyword(Keyword.CONST);
10072 TypeArgumentList typeArguments = null;
10073 createParser('[ ]');
10074 ListLiteral literal = parser.parseListLiteral(token, typeArguments);
10075 expectNotNullIfNoErrors(literal);
10076 listener.assertNoErrors();
10077 expect(literal.constKeyword, token);
10078 expect(literal.typeArguments, typeArguments);
10079 expect(literal.leftBracket, isNotNull);
10080 expect(literal.elements, hasLength(0));
10081 expect(literal.rightBracket, isNotNull);
10082 }
10083
10084 void test_parseListLiteral_multiple() {
10085 createParser('[1, 2, 3]');
10086 ListLiteral literal = parser.parseListLiteral(null, null);
10087 expectNotNullIfNoErrors(literal);
10088 listener.assertNoErrors();
10089 expect(literal.constKeyword, isNull);
10090 expect(literal.typeArguments, isNull);
10091 expect(literal.leftBracket, isNotNull);
10092 expect(literal.elements, hasLength(3));
10093 expect(literal.rightBracket, isNotNull);
10094 }
10095
10096 void test_parseListLiteral_single() {
10097 createParser('[1]');
10098 ListLiteral literal = parser.parseListLiteral(null, null);
10099 expectNotNullIfNoErrors(literal);
10100 listener.assertNoErrors();
10101 expect(literal.constKeyword, isNull);
10102 expect(literal.typeArguments, isNull);
10103 expect(literal.leftBracket, isNotNull);
10104 expect(literal.elements, hasLength(1));
10105 expect(literal.rightBracket, isNotNull);
10106 }
10107
10108 void test_parseListOrMapLiteral_list_noType() {
10109 createParser('[1]');
10110 TypedLiteral literal = parser.parseListOrMapLiteral(null);
10111 expectNotNullIfNoErrors(literal);
10112 listener.assertNoErrors();
10113 expect(literal, new isInstanceOf<ListLiteral>());
10114 ListLiteral listLiteral = literal;
10115 expect(listLiteral.constKeyword, isNull);
10116 expect(listLiteral.typeArguments, isNull);
10117 expect(listLiteral.leftBracket, isNotNull);
10118 expect(listLiteral.elements, hasLength(1));
10119 expect(listLiteral.rightBracket, isNotNull);
10120 }
10121
10122 void test_parseListOrMapLiteral_list_type() {
10123 createParser('<int> [1]');
10124 TypedLiteral literal = parser.parseListOrMapLiteral(null);
10125 expectNotNullIfNoErrors(literal);
10126 listener.assertNoErrors();
10127 expect(literal, new isInstanceOf<ListLiteral>());
10128 ListLiteral listLiteral = literal;
10129 expect(listLiteral.constKeyword, isNull);
10130 expect(listLiteral.typeArguments, isNotNull);
10131 expect(listLiteral.leftBracket, isNotNull);
10132 expect(listLiteral.elements, hasLength(1));
10133 expect(listLiteral.rightBracket, isNotNull);
10134 }
10135
10136 void test_parseListOrMapLiteral_map_noType() {
10137 createParser("{'1' : 1}");
10138 TypedLiteral literal = parser.parseListOrMapLiteral(null);
10139 expectNotNullIfNoErrors(literal);
10140 listener.assertNoErrors();
10141 expect(literal, new isInstanceOf<MapLiteral>());
10142 MapLiteral mapLiteral = literal;
10143 expect(mapLiteral.constKeyword, isNull);
10144 expect(mapLiteral.typeArguments, isNull);
10145 expect(mapLiteral.leftBracket, isNotNull);
10146 expect(mapLiteral.entries, hasLength(1));
10147 expect(mapLiteral.rightBracket, isNotNull);
10148 }
10149
10150 void test_parseListOrMapLiteral_map_type() {
10151 createParser("<String, int> {'1' : 1}");
10152 TypedLiteral literal = parser.parseListOrMapLiteral(null);
10153 expectNotNullIfNoErrors(literal);
10154 listener.assertNoErrors();
10155 expect(literal, new isInstanceOf<MapLiteral>());
10156 MapLiteral mapLiteral = literal;
10157 expect(mapLiteral.constKeyword, isNull);
10158 expect(mapLiteral.typeArguments, isNotNull);
10159 expect(mapLiteral.leftBracket, isNotNull);
10160 expect(mapLiteral.entries, hasLength(1));
10161 expect(mapLiteral.rightBracket, isNotNull);
10162 }
10163
10164 void test_parseLogicalAndExpression() {
10165 createParser('x && y');
10166 Expression expression = parser.parseLogicalAndExpression();
10167 expectNotNullIfNoErrors(expression);
10168 listener.assertNoErrors();
10169 expect(expression, new isInstanceOf<BinaryExpression>());
10170 BinaryExpression binaryExpression = expression;
10171 expect(binaryExpression.leftOperand, isNotNull);
10172 expect(binaryExpression.operator, isNotNull);
10173 expect(binaryExpression.operator.type, TokenType.AMPERSAND_AMPERSAND);
10174 expect(binaryExpression.rightOperand, isNotNull);
10175 }
10176
10177 void test_parseLogicalOrExpression() {
10178 createParser('x || y');
10179 Expression expression = parser.parseLogicalOrExpression();
10180 expectNotNullIfNoErrors(expression);
10181 listener.assertNoErrors();
10182 expect(expression, new isInstanceOf<BinaryExpression>());
10183 BinaryExpression binaryExpression = expression;
10184 expect(binaryExpression.leftOperand, isNotNull);
10185 expect(binaryExpression.operator, isNotNull);
10186 expect(binaryExpression.operator.type, TokenType.BAR_BAR);
10187 expect(binaryExpression.rightOperand, isNotNull);
10188 }
10189
10190 void test_parseMapLiteral_empty() {
10191 Token token = TokenFactory.tokenFromKeyword(Keyword.CONST);
10192 TypeArgumentList typeArguments = AstTestFactory.typeArgumentList(
10193 [AstTestFactory.typeName4("String"), AstTestFactory.typeName4("int")]);
10194 createParser('{}');
10195 MapLiteral literal = parser.parseMapLiteral(token, typeArguments);
10196 expectNotNullIfNoErrors(literal);
10197 listener.assertNoErrors();
10198 expect(literal.constKeyword, token);
10199 expect(literal.typeArguments, typeArguments);
10200 expect(literal.leftBracket, isNotNull);
10201 expect(literal.entries, hasLength(0));
10202 expect(literal.rightBracket, isNotNull);
10203 }
10204
10205 void test_parseMapLiteral_multiple() {
10206 createParser("{'a' : b, 'x' : y}");
10207 MapLiteral literal = parser.parseMapLiteral(null, null);
10208 expectNotNullIfNoErrors(literal);
10209 listener.assertNoErrors();
10210 expect(literal.leftBracket, isNotNull);
10211 expect(literal.entries, hasLength(2));
10212 expect(literal.rightBracket, isNotNull);
10213 }
10214
10215 void test_parseMapLiteral_single() {
10216 createParser("{'x' : y}");
10217 MapLiteral literal = parser.parseMapLiteral(null, null);
10218 expectNotNullIfNoErrors(literal);
10219 listener.assertNoErrors();
10220 expect(literal.leftBracket, isNotNull);
10221 expect(literal.entries, hasLength(1));
10222 expect(literal.rightBracket, isNotNull);
10223 }
10224
10225 void test_parseMapLiteralEntry_complex() {
10226 createParser('2 + 2 : y');
10227 MapLiteralEntry entry = parser.parseMapLiteralEntry();
10228 expectNotNullIfNoErrors(entry);
10229 listener.assertNoErrors();
10230 expect(entry.key, isNotNull);
10231 expect(entry.separator, isNotNull);
10232 expect(entry.value, isNotNull);
10233 }
10234
10235 void test_parseMapLiteralEntry_int() {
10236 createParser('0 : y');
10237 MapLiteralEntry entry = parser.parseMapLiteralEntry();
10238 expectNotNullIfNoErrors(entry);
10239 listener.assertNoErrors();
10240 expect(entry.key, isNotNull);
10241 expect(entry.separator, isNotNull);
10242 expect(entry.value, isNotNull);
10243 }
10244
10245 void test_parseMapLiteralEntry_string() {
10246 createParser("'x' : y");
10247 MapLiteralEntry entry = parser.parseMapLiteralEntry();
10248 expectNotNullIfNoErrors(entry);
10249 listener.assertNoErrors();
10250 expect(entry.key, isNotNull);
10251 expect(entry.separator, isNotNull);
10252 expect(entry.value, isNotNull);
10253 }
10254
10255 void test_parseModifiers_abstract() { 11482 void test_parseModifiers_abstract() {
10256 createParser('abstract A'); 11483 createParser('abstract A');
10257 Modifiers modifiers = parser.parseModifiers(); 11484 Modifiers modifiers = parser.parseModifiers();
10258 expectNotNullIfNoErrors(modifiers); 11485 expectNotNullIfNoErrors(modifiers);
10259 listener.assertNoErrors(); 11486 listener.assertNoErrors();
10260 expect(modifiers.abstractKeyword, isNotNull); 11487 expect(modifiers.abstractKeyword, isNotNull);
10261 } 11488 }
10262 11489
10263 void test_parseModifiers_const() { 11490 void test_parseModifiers_const() {
10264 createParser('const A'); 11491 createParser('const A');
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
10309 } 11536 }
10310 11537
10311 void test_parseModifiers_var() { 11538 void test_parseModifiers_var() {
10312 createParser('var A'); 11539 createParser('var A');
10313 Modifiers modifiers = parser.parseModifiers(); 11540 Modifiers modifiers = parser.parseModifiers();
10314 expectNotNullIfNoErrors(modifiers); 11541 expectNotNullIfNoErrors(modifiers);
10315 listener.assertNoErrors(); 11542 listener.assertNoErrors();
10316 expect(modifiers.varKeyword, isNotNull); 11543 expect(modifiers.varKeyword, isNotNull);
10317 } 11544 }
10318 11545
10319 void test_parseMultiplicativeExpression_normal() {
10320 createParser('x * y');
10321 Expression expression = parser.parseMultiplicativeExpression();
10322 expectNotNullIfNoErrors(expression);
10323 listener.assertNoErrors();
10324 expect(expression, new isInstanceOf<BinaryExpression>());
10325 BinaryExpression binaryExpression = expression;
10326 expect(binaryExpression.leftOperand, isNotNull);
10327 expect(binaryExpression.operator, isNotNull);
10328 expect(binaryExpression.operator.type, TokenType.STAR);
10329 expect(binaryExpression.rightOperand, isNotNull);
10330 }
10331
10332 void test_parseMultiplicativeExpression_super() {
10333 createParser('super * y');
10334 Expression expression = parser.parseMultiplicativeExpression();
10335 expectNotNullIfNoErrors(expression);
10336 listener.assertNoErrors();
10337 expect(expression, new isInstanceOf<BinaryExpression>());
10338 BinaryExpression binaryExpression = expression;
10339 expect(binaryExpression.leftOperand, new isInstanceOf<SuperExpression>());
10340 expect(binaryExpression.operator, isNotNull);
10341 expect(binaryExpression.operator.type, TokenType.STAR);
10342 expect(binaryExpression.rightOperand, isNotNull);
10343 }
10344
10345 void test_parseNewExpression() {
10346 createParser('new A()');
10347 InstanceCreationExpression expression = parser.parseNewExpression();
10348 expectNotNullIfNoErrors(expression);
10349 listener.assertNoErrors();
10350 expect(expression.keyword, isNotNull);
10351 ConstructorName name = expression.constructorName;
10352 expect(name, isNotNull);
10353 expect(name.type, isNotNull);
10354 expect(name.period, isNull);
10355 expect(name.name, isNull);
10356 expect(expression.argumentList, isNotNull);
10357 }
10358
10359 void test_parseNonLabeledStatement_const_list_empty() { 11546 void test_parseNonLabeledStatement_const_list_empty() {
10360 createParser('const [];'); 11547 createParser('const [];');
10361 Statement statement = parser.parseNonLabeledStatement(); 11548 Statement statement = parser.parseNonLabeledStatement();
10362 expectNotNullIfNoErrors(statement); 11549 expectNotNullIfNoErrors(statement);
10363 listener.assertNoErrors(); 11550 listener.assertNoErrors();
10364 expect(statement, new isInstanceOf<ExpressionStatement>()); 11551 expect(statement, new isInstanceOf<ExpressionStatement>());
10365 ExpressionStatement expressionStatement = statement; 11552 ExpressionStatement expressionStatement = statement;
10366 expect(expressionStatement.expression, isNotNull); 11553 expect(expressionStatement.expression, isNotNull);
10367 } 11554 }
10368 11555
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
10536 createParser('final int Function = 0;'); 11723 createParser('final int Function = 0;');
10537 Statement statement = parser.parseNonLabeledStatement(); 11724 Statement statement = parser.parseNonLabeledStatement();
10538 expectNotNullIfNoErrors(statement); 11725 expectNotNullIfNoErrors(statement);
10539 listener.assertNoErrors(); 11726 listener.assertNoErrors();
10540 } 11727 }
10541 11728
10542 void test_parseOptionalReturnType() { 11729 void test_parseOptionalReturnType() {
10543 // TODO(brianwilkerson) Implement tests for this method. 11730 // TODO(brianwilkerson) Implement tests for this method.
10544 } 11731 }
10545 11732
10546 void test_parsePostfixExpression_decrement() {
10547 createParser('i--');
10548 Expression expression = parser.parsePostfixExpression();
10549 expectNotNullIfNoErrors(expression);
10550 listener.assertNoErrors();
10551 expect(expression, new isInstanceOf<PostfixExpression>());
10552 PostfixExpression postfixExpression = expression;
10553 expect(postfixExpression.operand, isNotNull);
10554 expect(postfixExpression.operator, isNotNull);
10555 expect(postfixExpression.operator.type, TokenType.MINUS_MINUS);
10556 }
10557
10558 void test_parsePostfixExpression_increment() {
10559 createParser('i++');
10560 Expression expression = parser.parsePostfixExpression();
10561 expectNotNullIfNoErrors(expression);
10562 listener.assertNoErrors();
10563 expect(expression, new isInstanceOf<PostfixExpression>());
10564 PostfixExpression postfixExpression = expression;
10565 expect(postfixExpression.operand, isNotNull);
10566 expect(postfixExpression.operator, isNotNull);
10567 expect(postfixExpression.operator.type, TokenType.PLUS_PLUS);
10568 }
10569
10570 void test_parsePostfixExpression_none_indexExpression() {
10571 createParser('a[0]');
10572 Expression expression = parser.parsePostfixExpression();
10573 expectNotNullIfNoErrors(expression);
10574 listener.assertNoErrors();
10575 expect(expression, new isInstanceOf<IndexExpression>());
10576 IndexExpression indexExpression = expression;
10577 expect(indexExpression.target, isNotNull);
10578 expect(indexExpression.index, isNotNull);
10579 }
10580
10581 void test_parsePostfixExpression_none_methodInvocation() {
10582 createParser('a.m()');
10583 Expression expression = parser.parsePostfixExpression();
10584 expectNotNullIfNoErrors(expression);
10585 listener.assertNoErrors();
10586 expect(expression, new isInstanceOf<MethodInvocation>());
10587 MethodInvocation methodInvocation = expression;
10588 expect(methodInvocation.target, isNotNull);
10589 expect(methodInvocation.operator.type, TokenType.PERIOD);
10590 expect(methodInvocation.methodName, isNotNull);
10591 expect(methodInvocation.typeArguments, isNull);
10592 expect(methodInvocation.argumentList, isNotNull);
10593 }
10594
10595 void test_parsePostfixExpression_none_methodInvocation_question_dot() {
10596 createParser('a?.m()');
10597 Expression expression = parser.parsePostfixExpression();
10598 expectNotNullIfNoErrors(expression);
10599 listener.assertNoErrors();
10600 expect(expression, new isInstanceOf<MethodInvocation>());
10601 MethodInvocation methodInvocation = expression;
10602 expect(methodInvocation.target, isNotNull);
10603 expect(methodInvocation.operator.type, TokenType.QUESTION_PERIOD);
10604 expect(methodInvocation.methodName, isNotNull);
10605 expect(methodInvocation.typeArguments, isNull);
10606 expect(methodInvocation.argumentList, isNotNull);
10607 }
10608
10609 void
10610 test_parsePostfixExpression_none_methodInvocation_question_dot_typeArgumen tComments() {
10611 enableGenericMethodComments = true;
10612 createParser('a?.m/*<E>*/()');
10613 Expression expression = parser.parsePostfixExpression();
10614 expectNotNullIfNoErrors(expression);
10615 listener.assertNoErrors();
10616 expect(expression, new isInstanceOf<MethodInvocation>());
10617 MethodInvocation methodInvocation = expression;
10618 expect(methodInvocation.target, isNotNull);
10619 expect(methodInvocation.operator.type, TokenType.QUESTION_PERIOD);
10620 expect(methodInvocation.methodName, isNotNull);
10621 expect(methodInvocation.typeArguments, isNotNull);
10622 expect(methodInvocation.argumentList, isNotNull);
10623 }
10624
10625 void
10626 test_parsePostfixExpression_none_methodInvocation_question_dot_typeArgumen ts() {
10627 createParser('a?.m<E>()');
10628 Expression expression = parser.parsePostfixExpression();
10629 expectNotNullIfNoErrors(expression);
10630 listener.assertNoErrors();
10631 expect(expression, new isInstanceOf<MethodInvocation>());
10632 MethodInvocation methodInvocation = expression;
10633 expect(methodInvocation.target, isNotNull);
10634 expect(methodInvocation.operator.type, TokenType.QUESTION_PERIOD);
10635 expect(methodInvocation.methodName, isNotNull);
10636 expect(methodInvocation.typeArguments, isNotNull);
10637 expect(methodInvocation.argumentList, isNotNull);
10638 }
10639
10640 void
10641 test_parsePostfixExpression_none_methodInvocation_typeArgumentComments() {
10642 enableGenericMethodComments = true;
10643 createParser('a.m/*<E>*/()');
10644 Expression expression = parser.parsePostfixExpression();
10645 expectNotNullIfNoErrors(expression);
10646 listener.assertNoErrors();
10647 expect(expression, new isInstanceOf<MethodInvocation>());
10648 MethodInvocation methodInvocation = expression;
10649 expect(methodInvocation.target, isNotNull);
10650 expect(methodInvocation.operator.type, TokenType.PERIOD);
10651 expect(methodInvocation.methodName, isNotNull);
10652 expect(methodInvocation.typeArguments, isNotNull);
10653 expect(methodInvocation.argumentList, isNotNull);
10654 }
10655
10656 void test_parsePostfixExpression_none_methodInvocation_typeArguments() {
10657 createParser('a.m<E>()');
10658 Expression expression = parser.parsePostfixExpression();
10659 expectNotNullIfNoErrors(expression);
10660 listener.assertNoErrors();
10661 expect(expression, new isInstanceOf<MethodInvocation>());
10662 MethodInvocation methodInvocation = expression;
10663 expect(methodInvocation.target, isNotNull);
10664 expect(methodInvocation.operator.type, TokenType.PERIOD);
10665 expect(methodInvocation.methodName, isNotNull);
10666 expect(methodInvocation.typeArguments, isNotNull);
10667 expect(methodInvocation.argumentList, isNotNull);
10668 }
10669
10670 void test_parsePostfixExpression_none_propertyAccess() {
10671 createParser('a.b');
10672 Expression expression = parser.parsePostfixExpression();
10673 expectNotNullIfNoErrors(expression);
10674 listener.assertNoErrors();
10675 expect(expression, new isInstanceOf<PrefixedIdentifier>());
10676 PrefixedIdentifier identifier = expression;
10677 expect(identifier.prefix, isNotNull);
10678 expect(identifier.identifier, isNotNull);
10679 }
10680
10681 void test_parsePrefixedIdentifier_noPrefix() {
10682 String lexeme = "bar";
10683 createParser(lexeme);
10684 Identifier identifier = parser.parsePrefixedIdentifier();
10685 expectNotNullIfNoErrors(identifier);
10686 listener.assertNoErrors();
10687 expect(identifier, new isInstanceOf<SimpleIdentifier>());
10688 SimpleIdentifier simpleIdentifier = identifier;
10689 expect(simpleIdentifier.token, isNotNull);
10690 expect(simpleIdentifier.name, lexeme);
10691 }
10692
10693 void test_parsePrefixedIdentifier_prefix() {
10694 String lexeme = "foo.bar";
10695 createParser(lexeme);
10696 Identifier identifier = parser.parsePrefixedIdentifier();
10697 expectNotNullIfNoErrors(identifier);
10698 listener.assertNoErrors();
10699 expect(identifier, new isInstanceOf<PrefixedIdentifier>());
10700 PrefixedIdentifier prefixedIdentifier = identifier;
10701 expect(prefixedIdentifier.prefix.name, "foo");
10702 expect(prefixedIdentifier.period, isNotNull);
10703 expect(prefixedIdentifier.identifier.name, "bar");
10704 }
10705
10706 void test_parsePrimaryExpression_const() {
10707 createParser('const A()');
10708 Expression expression = parser.parsePrimaryExpression();
10709 expectNotNullIfNoErrors(expression);
10710 listener.assertNoErrors();
10711 expect(expression, isNotNull);
10712 }
10713
10714 void test_parsePrimaryExpression_double() {
10715 String doubleLiteral = "3.2e4";
10716 createParser(doubleLiteral);
10717 Expression expression = parser.parsePrimaryExpression();
10718 expectNotNullIfNoErrors(expression);
10719 listener.assertNoErrors();
10720 expect(expression, new isInstanceOf<DoubleLiteral>());
10721 DoubleLiteral literal = expression;
10722 expect(literal.literal, isNotNull);
10723 expect(literal.value, double.parse(doubleLiteral));
10724 }
10725
10726 void test_parsePrimaryExpression_false() {
10727 createParser('false');
10728 Expression expression = parser.parsePrimaryExpression();
10729 expectNotNullIfNoErrors(expression);
10730 listener.assertNoErrors();
10731 expect(expression, new isInstanceOf<BooleanLiteral>());
10732 BooleanLiteral literal = expression;
10733 expect(literal.literal, isNotNull);
10734 expect(literal.value, isFalse);
10735 }
10736
10737 void test_parsePrimaryExpression_function_arguments() {
10738 createParser('(int i) => i + 1');
10739 Expression expression = parser.parsePrimaryExpression();
10740 expectNotNullIfNoErrors(expression);
10741 listener.assertNoErrors();
10742 expect(expression, new isInstanceOf<FunctionExpression>());
10743 FunctionExpression functionExpression = expression;
10744 expect(functionExpression.parameters, isNotNull);
10745 expect(functionExpression.body, isNotNull);
10746 }
10747
10748 void test_parsePrimaryExpression_function_noArguments() {
10749 createParser('() => 42');
10750 Expression expression = parser.parsePrimaryExpression();
10751 expectNotNullIfNoErrors(expression);
10752 listener.assertNoErrors();
10753 expect(expression, new isInstanceOf<FunctionExpression>());
10754 FunctionExpression functionExpression = expression;
10755 expect(functionExpression.parameters, isNotNull);
10756 expect(functionExpression.body, isNotNull);
10757 }
10758
10759 void test_parsePrimaryExpression_genericFunctionExpression() {
10760 createParser('<X, Y>(Map<X, Y> m, X x) => m[x]');
10761 Expression expression = parser.parsePrimaryExpression();
10762 expectNotNullIfNoErrors(expression);
10763 listener.assertNoErrors();
10764 expect(expression, new isInstanceOf<FunctionExpression>());
10765 FunctionExpression function = expression;
10766 expect(function.typeParameters, isNotNull);
10767 }
10768
10769 void test_parsePrimaryExpression_hex() {
10770 String hexLiteral = "3F";
10771 createParser('0x$hexLiteral');
10772 Expression expression = parser.parsePrimaryExpression();
10773 expectNotNullIfNoErrors(expression);
10774 listener.assertNoErrors();
10775 expect(expression, new isInstanceOf<IntegerLiteral>());
10776 IntegerLiteral literal = expression;
10777 expect(literal.literal, isNotNull);
10778 expect(literal.value, int.parse(hexLiteral, radix: 16));
10779 }
10780
10781 void test_parsePrimaryExpression_identifier() {
10782 createParser('a');
10783 Expression expression = parser.parsePrimaryExpression();
10784 expectNotNullIfNoErrors(expression);
10785 listener.assertNoErrors();
10786 expect(expression, new isInstanceOf<SimpleIdentifier>());
10787 SimpleIdentifier identifier = expression;
10788 expect(identifier, isNotNull);
10789 }
10790
10791 void test_parsePrimaryExpression_int() {
10792 String intLiteral = "472";
10793 createParser(intLiteral);
10794 Expression expression = parser.parsePrimaryExpression();
10795 expectNotNullIfNoErrors(expression);
10796 listener.assertNoErrors();
10797 expect(expression, new isInstanceOf<IntegerLiteral>());
10798 IntegerLiteral literal = expression;
10799 expect(literal.literal, isNotNull);
10800 expect(literal.value, int.parse(intLiteral));
10801 }
10802
10803 void test_parsePrimaryExpression_listLiteral() {
10804 createParser('[ ]');
10805 Expression expression = parser.parsePrimaryExpression();
10806 expectNotNullIfNoErrors(expression);
10807 listener.assertNoErrors();
10808 expect(expression, new isInstanceOf<ListLiteral>());
10809 ListLiteral literal = expression;
10810 expect(literal, isNotNull);
10811 }
10812
10813 void test_parsePrimaryExpression_listLiteral_index() {
10814 createParser('[]');
10815 Expression expression = parser.parsePrimaryExpression();
10816 expectNotNullIfNoErrors(expression);
10817 listener.assertNoErrors();
10818 expect(expression, new isInstanceOf<ListLiteral>());
10819 ListLiteral literal = expression;
10820 expect(literal, isNotNull);
10821 }
10822
10823 void test_parsePrimaryExpression_listLiteral_typed() {
10824 createParser('<A>[ ]');
10825 Expression expression = parser.parsePrimaryExpression();
10826 expectNotNullIfNoErrors(expression);
10827 listener.assertNoErrors();
10828 expect(expression, new isInstanceOf<ListLiteral>());
10829 ListLiteral literal = expression;
10830 expect(literal.typeArguments, isNotNull);
10831 expect(literal.typeArguments.arguments, hasLength(1));
10832 }
10833
10834 void test_parsePrimaryExpression_listLiteral_typed_genericComment() {
10835 enableGenericMethodComments = true;
10836 createParser('/*<A>*/[ ]');
10837 Expression expression = parser.parsePrimaryExpression();
10838 expectNotNullIfNoErrors(expression);
10839 listener.assertNoErrors();
10840 expect(expression, new isInstanceOf<ListLiteral>());
10841 ListLiteral literal = expression;
10842 expect(literal.typeArguments, isNotNull);
10843 expect(literal.typeArguments.arguments, hasLength(1));
10844 }
10845
10846 void test_parsePrimaryExpression_mapLiteral() {
10847 createParser('{}');
10848 Expression expression = parser.parsePrimaryExpression();
10849 expectNotNullIfNoErrors(expression);
10850 listener.assertNoErrors();
10851 expect(expression, new isInstanceOf<MapLiteral>());
10852 MapLiteral literal = expression;
10853 expect(literal.typeArguments, isNull);
10854 expect(literal, isNotNull);
10855 }
10856
10857 void test_parsePrimaryExpression_mapLiteral_typed() {
10858 createParser('<A, B>{}');
10859 Expression expression = parser.parsePrimaryExpression();
10860 expectNotNullIfNoErrors(expression);
10861 listener.assertNoErrors();
10862 expect(expression, new isInstanceOf<MapLiteral>());
10863 MapLiteral literal = expression;
10864 expect(literal.typeArguments, isNotNull);
10865 expect(literal.typeArguments.arguments, hasLength(2));
10866 }
10867
10868 void test_parsePrimaryExpression_mapLiteral_typed_genericComment() {
10869 enableGenericMethodComments = true;
10870 createParser('/*<A, B>*/{}');
10871 Expression expression = parser.parsePrimaryExpression();
10872 expectNotNullIfNoErrors(expression);
10873 listener.assertNoErrors();
10874 expect(expression, new isInstanceOf<MapLiteral>());
10875 MapLiteral literal = expression;
10876 expect(literal.typeArguments, isNotNull);
10877 expect(literal.typeArguments.arguments, hasLength(2));
10878 }
10879
10880 void test_parsePrimaryExpression_new() {
10881 createParser('new A()');
10882 Expression expression = parser.parsePrimaryExpression();
10883 expectNotNullIfNoErrors(expression);
10884 listener.assertNoErrors();
10885 expect(expression, new isInstanceOf<InstanceCreationExpression>());
10886 InstanceCreationExpression creation = expression;
10887 expect(creation, isNotNull);
10888 }
10889
10890 void test_parsePrimaryExpression_null() {
10891 createParser('null');
10892 Expression expression = parser.parsePrimaryExpression();
10893 expectNotNullIfNoErrors(expression);
10894 listener.assertNoErrors();
10895 expect(expression, new isInstanceOf<NullLiteral>());
10896 NullLiteral literal = expression;
10897 expect(literal.literal, isNotNull);
10898 }
10899
10900 void test_parsePrimaryExpression_parenthesized() {
10901 createParser('(x)');
10902 Expression expression = parser.parsePrimaryExpression();
10903 expectNotNullIfNoErrors(expression);
10904 listener.assertNoErrors();
10905 expect(expression, new isInstanceOf<ParenthesizedExpression>());
10906 ParenthesizedExpression parens = expression;
10907 expect(parens, isNotNull);
10908 }
10909
10910 void test_parsePrimaryExpression_string() {
10911 createParser('"string"');
10912 Expression expression = parser.parsePrimaryExpression();
10913 expectNotNullIfNoErrors(expression);
10914 listener.assertNoErrors();
10915 expect(expression, new isInstanceOf<SimpleStringLiteral>());
10916 SimpleStringLiteral literal = expression;
10917 expect(literal.isMultiline, isFalse);
10918 expect(literal.isRaw, isFalse);
10919 expect(literal.value, "string");
10920 }
10921
10922 void test_parsePrimaryExpression_string_multiline() {
10923 createParser("'''string'''");
10924 Expression expression = parser.parsePrimaryExpression();
10925 expectNotNullIfNoErrors(expression);
10926 listener.assertNoErrors();
10927 expect(expression, new isInstanceOf<SimpleStringLiteral>());
10928 SimpleStringLiteral literal = expression;
10929 expect(literal.isMultiline, isTrue);
10930 expect(literal.isRaw, isFalse);
10931 expect(literal.value, "string");
10932 }
10933
10934 void test_parsePrimaryExpression_string_raw() {
10935 createParser("r'string'");
10936 Expression expression = parser.parsePrimaryExpression();
10937 expectNotNullIfNoErrors(expression);
10938 listener.assertNoErrors();
10939 expect(expression, new isInstanceOf<SimpleStringLiteral>());
10940 SimpleStringLiteral literal = expression;
10941 expect(literal.isMultiline, isFalse);
10942 expect(literal.isRaw, isTrue);
10943 expect(literal.value, "string");
10944 }
10945
10946 void test_parsePrimaryExpression_super() {
10947 createParser('super.x');
10948 Expression expression = parser.parsePrimaryExpression();
10949 expectNotNullIfNoErrors(expression);
10950 listener.assertNoErrors();
10951 expect(expression, new isInstanceOf<PropertyAccess>());
10952 PropertyAccess propertyAccess = expression;
10953 expect(propertyAccess.target is SuperExpression, isTrue);
10954 expect(propertyAccess.operator, isNotNull);
10955 expect(propertyAccess.operator.type, TokenType.PERIOD);
10956 expect(propertyAccess.propertyName, isNotNull);
10957 }
10958
10959 void test_parsePrimaryExpression_this() {
10960 createParser('this');
10961 Expression expression = parser.parsePrimaryExpression();
10962 expectNotNullIfNoErrors(expression);
10963 listener.assertNoErrors();
10964 expect(expression, new isInstanceOf<ThisExpression>());
10965 ThisExpression thisExpression = expression;
10966 expect(thisExpression.thisKeyword, isNotNull);
10967 }
10968
10969 void test_parsePrimaryExpression_true() {
10970 createParser('true');
10971 Expression expression = parser.parsePrimaryExpression();
10972 expectNotNullIfNoErrors(expression);
10973 listener.assertNoErrors();
10974 expect(expression, new isInstanceOf<BooleanLiteral>());
10975 BooleanLiteral literal = expression;
10976 expect(literal.literal, isNotNull);
10977 expect(literal.value, isTrue);
10978 }
10979
10980 void test_Parser() { 11733 void test_Parser() {
10981 expect(new Parser(null, null), isNotNull); 11734 expect(new Parser(null, null), isNotNull);
10982 } 11735 }
10983 11736
10984 void test_parseRedirectingConstructorInvocation_named() { 11737 void test_parseRedirectingConstructorInvocation_named() {
10985 createParser('this.a()'); 11738 createParser('this.a()');
10986 RedirectingConstructorInvocation invocation = 11739 RedirectingConstructorInvocation invocation =
10987 parser.parseRedirectingConstructorInvocation(true); 11740 parser.parseRedirectingConstructorInvocation(true);
10988 expectNotNullIfNoErrors(invocation); 11741 expectNotNullIfNoErrors(invocation);
10989 listener.assertNoErrors(); 11742 listener.assertNoErrors();
10990 expect(invocation.argumentList, isNotNull); 11743 expect(invocation.argumentList, isNotNull);
10991 expect(invocation.constructorName, isNotNull); 11744 expect(invocation.constructorName, isNotNull);
10992 expect(invocation.thisKeyword, isNotNull); 11745 expect(invocation.thisKeyword, isNotNull);
10993 expect(invocation.period, isNotNull); 11746 expect(invocation.period, isNotNull);
10994 } 11747 }
10995 11748
10996 void test_parseRedirectingConstructorInvocation_unnamed() { 11749 void test_parseRedirectingConstructorInvocation_unnamed() {
10997 createParser('this()'); 11750 createParser('this()');
10998 RedirectingConstructorInvocation invocation = 11751 RedirectingConstructorInvocation invocation =
10999 parser.parseRedirectingConstructorInvocation(false); 11752 parser.parseRedirectingConstructorInvocation(false);
11000 expectNotNullIfNoErrors(invocation); 11753 expectNotNullIfNoErrors(invocation);
11001 listener.assertNoErrors(); 11754 listener.assertNoErrors();
11002 expect(invocation.argumentList, isNotNull); 11755 expect(invocation.argumentList, isNotNull);
11003 expect(invocation.constructorName, isNull); 11756 expect(invocation.constructorName, isNull);
11004 expect(invocation.thisKeyword, isNotNull); 11757 expect(invocation.thisKeyword, isNotNull);
11005 expect(invocation.period, isNull); 11758 expect(invocation.period, isNull);
11006 } 11759 }
11007 11760
11008 void test_parseRelationalExpression_as_functionType_noReturnType() {
11009 createParser('x as Function(int)');
11010 Expression expression = parser.parseRelationalExpression();
11011 expectNotNullIfNoErrors(expression);
11012 listener.assertNoErrors();
11013 expect(expression, new isInstanceOf<AsExpression>());
11014 AsExpression asExpression = expression;
11015 expect(asExpression.expression, isNotNull);
11016 expect(asExpression.asOperator, isNotNull);
11017 expect(asExpression.type, new isInstanceOf<GenericFunctionType>());
11018 }
11019
11020 void test_parseRelationalExpression_as_functionType_returnType() {
11021 createParser('x as String Function(int)');
11022 Expression expression = parser.parseRelationalExpression();
11023 expectNotNullIfNoErrors(expression);
11024 listener.assertNoErrors();
11025 expect(expression, new isInstanceOf<AsExpression>());
11026 AsExpression asExpression = expression;
11027 expect(asExpression.expression, isNotNull);
11028 expect(asExpression.asOperator, isNotNull);
11029 expect(asExpression.type, new isInstanceOf<GenericFunctionType>());
11030 }
11031
11032 void test_parseRelationalExpression_as_generic() {
11033 createParser('x as C<D>');
11034 Expression expression = parser.parseRelationalExpression();
11035 expectNotNullIfNoErrors(expression);
11036 listener.assertNoErrors();
11037 expect(expression, new isInstanceOf<AsExpression>());
11038 AsExpression asExpression = expression;
11039 expect(asExpression.expression, isNotNull);
11040 expect(asExpression.asOperator, isNotNull);
11041 expect(asExpression.type, new isInstanceOf<TypeName>());
11042 }
11043
11044 void test_parseRelationalExpression_as_nullable() {
11045 enableNnbd = true;
11046 createParser('x as Y?)');
11047 Expression expression = parser.parseRelationalExpression();
11048 expectNotNullIfNoErrors(expression);
11049 listener.assertNoErrors();
11050 expect(expression, new isInstanceOf<AsExpression>());
11051 AsExpression asExpression = expression;
11052 expect(asExpression.expression, isNotNull);
11053 expect(asExpression.asOperator, isNotNull);
11054 expect(asExpression.type, new isInstanceOf<TypeName>());
11055 }
11056
11057 void test_parseRelationalExpression_as_simple() {
11058 createParser('x as Y');
11059 Expression expression = parser.parseRelationalExpression();
11060 expectNotNullIfNoErrors(expression);
11061 listener.assertNoErrors();
11062 expect(expression, new isInstanceOf<AsExpression>());
11063 AsExpression asExpression = expression;
11064 expect(asExpression.expression, isNotNull);
11065 expect(asExpression.asOperator, isNotNull);
11066 expect(asExpression.type, new isInstanceOf<TypeName>());
11067 }
11068
11069 void test_parseRelationalExpression_as_simple_function() {
11070 createParser('x as Function');
11071 Expression expression = parser.parseRelationalExpression();
11072 expectNotNullIfNoErrors(expression);
11073 listener.assertNoErrors();
11074 expect(expression, new isInstanceOf<AsExpression>());
11075 AsExpression asExpression = expression;
11076 expect(asExpression.expression, isNotNull);
11077 expect(asExpression.asOperator, isNotNull);
11078 expect(asExpression.type, new isInstanceOf<TypeName>());
11079 }
11080
11081 void test_parseRelationalExpression_is() {
11082 createParser('x is y');
11083 Expression expression = parser.parseRelationalExpression();
11084 expectNotNullIfNoErrors(expression);
11085 listener.assertNoErrors();
11086 expect(expression, new isInstanceOf<IsExpression>());
11087 IsExpression isExpression = expression;
11088 expect(isExpression.expression, isNotNull);
11089 expect(isExpression.isOperator, isNotNull);
11090 expect(isExpression.notOperator, isNull);
11091 expect(isExpression.type, isNotNull);
11092 }
11093
11094 void test_parseRelationalExpression_is_nullable() {
11095 enableNnbd = true;
11096 createParser('x is y?)');
11097 Expression expression = parser.parseRelationalExpression();
11098 expectNotNullIfNoErrors(expression);
11099 listener.assertNoErrors();
11100 expect(expression, new isInstanceOf<IsExpression>());
11101 IsExpression isExpression = expression;
11102 expect(isExpression.expression, isNotNull);
11103 expect(isExpression.isOperator, isNotNull);
11104 expect(isExpression.notOperator, isNull);
11105 expect(isExpression.type, isNotNull);
11106 }
11107
11108 void test_parseRelationalExpression_isNot() {
11109 createParser('x is! y');
11110 Expression expression = parser.parseRelationalExpression();
11111 expectNotNullIfNoErrors(expression);
11112 listener.assertNoErrors();
11113 expect(expression, new isInstanceOf<IsExpression>());
11114 IsExpression isExpression = expression;
11115 expect(isExpression.expression, isNotNull);
11116 expect(isExpression.isOperator, isNotNull);
11117 expect(isExpression.notOperator, isNotNull);
11118 expect(isExpression.type, isNotNull);
11119 }
11120
11121 void test_parseRelationalExpression_normal() {
11122 createParser('x < y');
11123 Expression expression = parser.parseRelationalExpression();
11124 expectNotNullIfNoErrors(expression);
11125 listener.assertNoErrors();
11126 expect(expression, new isInstanceOf<BinaryExpression>());
11127 BinaryExpression binaryExpression = expression;
11128 expect(binaryExpression.leftOperand, isNotNull);
11129 expect(binaryExpression.operator, isNotNull);
11130 expect(binaryExpression.operator.type, TokenType.LT);
11131 expect(binaryExpression.rightOperand, isNotNull);
11132 }
11133
11134 void test_parseRelationalExpression_super() {
11135 createParser('super < y');
11136 Expression expression = parser.parseRelationalExpression();
11137 expectNotNullIfNoErrors(expression);
11138 listener.assertNoErrors();
11139 expect(expression, new isInstanceOf<BinaryExpression>());
11140 BinaryExpression binaryExpression = expression;
11141 expect(binaryExpression.leftOperand, isNotNull);
11142 expect(binaryExpression.operator, isNotNull);
11143 expect(binaryExpression.operator.type, TokenType.LT);
11144 expect(binaryExpression.rightOperand, isNotNull);
11145 }
11146
11147 void test_parseRethrowExpression() {
11148 createParser('rethrow;');
11149 RethrowExpression expression = parser.parseRethrowExpression();
11150 expectNotNullIfNoErrors(expression);
11151 listener.assertNoErrors();
11152 expect(expression.rethrowKeyword, isNotNull);
11153 }
11154
11155 void test_parseReturnStatement_noValue() { 11761 void test_parseReturnStatement_noValue() {
11156 createParser('return;'); 11762 createParser('return;');
11157 ReturnStatement statement = parser.parseReturnStatement(); 11763 ReturnStatement statement = parser.parseReturnStatement();
11158 expectNotNullIfNoErrors(statement); 11764 expectNotNullIfNoErrors(statement);
11159 listener.assertNoErrors(); 11765 listener.assertNoErrors();
11160 expect(statement.returnKeyword, isNotNull); 11766 expect(statement.returnKeyword, isNotNull);
11161 expect(statement.expression, isNull); 11767 expect(statement.expression, isNull);
11162 expect(statement.semicolon, isNotNull); 11768 expect(statement.semicolon, isNotNull);
11163 } 11769 }
11164 11770
(...skipping 28 matching lines...) Expand all
11193 11799
11194 void test_parseReturnType_void() { 11800 void test_parseReturnType_void() {
11195 createParser('void'); 11801 createParser('void');
11196 TypeName typeName = parser.parseReturnType(false); 11802 TypeName typeName = parser.parseReturnType(false);
11197 expectNotNullIfNoErrors(typeName); 11803 expectNotNullIfNoErrors(typeName);
11198 listener.assertNoErrors(); 11804 listener.assertNoErrors();
11199 expect(typeName.name, isNotNull); 11805 expect(typeName.name, isNotNull);
11200 expect(typeName.typeArguments, isNull); 11806 expect(typeName.typeArguments, isNull);
11201 } 11807 }
11202 11808
11203 void test_parseShiftExpression_normal() {
11204 createParser('x << y');
11205 BinaryExpression expression = parser.parseShiftExpression();
11206 expectNotNullIfNoErrors(expression);
11207 listener.assertNoErrors();
11208 expect(expression.leftOperand, isNotNull);
11209 expect(expression.operator, isNotNull);
11210 expect(expression.operator.type, TokenType.LT_LT);
11211 expect(expression.rightOperand, isNotNull);
11212 }
11213
11214 void test_parseShiftExpression_super() {
11215 createParser('super << y');
11216 BinaryExpression expression = parser.parseShiftExpression();
11217 expectNotNullIfNoErrors(expression);
11218 listener.assertNoErrors();
11219 expect(expression.leftOperand, isNotNull);
11220 expect(expression.operator, isNotNull);
11221 expect(expression.operator.type, TokenType.LT_LT);
11222 expect(expression.rightOperand, isNotNull);
11223 }
11224
11225 void test_parseSimpleIdentifier1_normalIdentifier() {
11226 // TODO(brianwilkerson) Implement tests for this method.
11227 }
11228
11229 void test_parseSimpleIdentifier_builtInIdentifier() {
11230 String lexeme = "as";
11231 createParser(lexeme);
11232 SimpleIdentifier identifier = parser.parseSimpleIdentifier();
11233 expectNotNullIfNoErrors(identifier);
11234 listener.assertNoErrors();
11235 expect(identifier.token, isNotNull);
11236 expect(identifier.name, lexeme);
11237 }
11238
11239 void test_parseSimpleIdentifier_normalIdentifier() {
11240 String lexeme = "foo";
11241 createParser(lexeme);
11242 SimpleIdentifier identifier = parser.parseSimpleIdentifier();
11243 expectNotNullIfNoErrors(identifier);
11244 listener.assertNoErrors();
11245 expect(identifier.token, isNotNull);
11246 expect(identifier.name, lexeme);
11247 }
11248
11249 void test_parseStatement_emptyTypeArgumentList() { 11809 void test_parseStatement_emptyTypeArgumentList() {
11250 createParser('C<> c;'); 11810 createParser('C<> c;');
11251 Statement statement = parser.parseStatement2(); 11811 Statement statement = parser.parseStatement2();
11252 expectNotNullIfNoErrors(statement); 11812 expectNotNullIfNoErrors(statement);
11253 listener.assertErrorsWithCodes([ParserErrorCode.EXPECTED_TYPE_NAME]); 11813 listener.assertErrorsWithCodes([ParserErrorCode.EXPECTED_TYPE_NAME]);
11254 expect(statement, new isInstanceOf<VariableDeclarationStatement>()); 11814 expect(statement, new isInstanceOf<VariableDeclarationStatement>());
11255 VariableDeclarationStatement declaration = statement; 11815 VariableDeclarationStatement declaration = statement;
11256 VariableDeclarationList variables = declaration.variables; 11816 VariableDeclarationList variables = declaration.variables;
11257 TypeName type = variables.type; 11817 TypeName type = variables.type;
11258 TypeArgumentList argumentList = type.typeArguments; 11818 TypeArgumentList argumentList = type.typeArguments;
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
11350 void test_parseStatements_multiple() { 11910 void test_parseStatements_multiple() {
11351 List<Statement> statements = parseStatements("return; return;", 2); 11911 List<Statement> statements = parseStatements("return; return;", 2);
11352 expect(statements, hasLength(2)); 11912 expect(statements, hasLength(2));
11353 } 11913 }
11354 11914
11355 void test_parseStatements_single() { 11915 void test_parseStatements_single() {
11356 List<Statement> statements = parseStatements("return;", 1); 11916 List<Statement> statements = parseStatements("return;", 1);
11357 expect(statements, hasLength(1)); 11917 expect(statements, hasLength(1));
11358 } 11918 }
11359 11919
11360 void test_parseStringLiteral_adjacent() {
11361 createParser("'a' 'b'");
11362 Expression expression = parser.parseStringLiteral();
11363 expectNotNullIfNoErrors(expression);
11364 listener.assertNoErrors();
11365 expect(expression, new isInstanceOf<AdjacentStrings>());
11366 AdjacentStrings literal = expression;
11367 NodeList<StringLiteral> strings = literal.strings;
11368 expect(strings, hasLength(2));
11369 StringLiteral firstString = strings[0];
11370 StringLiteral secondString = strings[1];
11371 expect((firstString as SimpleStringLiteral).value, "a");
11372 expect((secondString as SimpleStringLiteral).value, "b");
11373 }
11374
11375 void test_parseStringLiteral_endsWithInterpolation() {
11376 createParser(r"'x$y'");
11377 Expression expression = parser.parseStringLiteral();
11378 expectNotNullIfNoErrors(expression);
11379 listener.assertNoErrors();
11380 expect(expression, new isInstanceOf<StringInterpolation>());
11381 StringInterpolation interpolation = expression;
11382 expect(interpolation.elements, hasLength(3));
11383 expect(interpolation.elements[0], new isInstanceOf<InterpolationString>());
11384 InterpolationString element0 = interpolation.elements[0];
11385 expect(element0.value, 'x');
11386 expect(
11387 interpolation.elements[1], new isInstanceOf<InterpolationExpression>());
11388 InterpolationExpression element1 = interpolation.elements[1];
11389 expect(element1.expression, new isInstanceOf<SimpleIdentifier>());
11390 expect(interpolation.elements[2], new isInstanceOf<InterpolationString>());
11391 InterpolationString element2 = interpolation.elements[2];
11392 expect(element2.value, '');
11393 }
11394
11395 void test_parseStringLiteral_interpolated() {
11396 createParser("'a \${b} c \$this d'");
11397 Expression expression = parser.parseStringLiteral();
11398 expectNotNullIfNoErrors(expression);
11399 listener.assertNoErrors();
11400 expect(expression, new isInstanceOf<StringInterpolation>());
11401 StringInterpolation literal = expression;
11402 NodeList<InterpolationElement> elements = literal.elements;
11403 expect(elements, hasLength(5));
11404 expect(elements[0] is InterpolationString, isTrue);
11405 expect(elements[1] is InterpolationExpression, isTrue);
11406 expect(elements[2] is InterpolationString, isTrue);
11407 expect(elements[3] is InterpolationExpression, isTrue);
11408 expect(elements[4] is InterpolationString, isTrue);
11409 }
11410
11411 void test_parseStringLiteral_multiline_encodedSpace() {
11412 createParser("'''\\x20\na'''");
11413 Expression expression = parser.parseStringLiteral();
11414 expectNotNullIfNoErrors(expression);
11415 listener.assertNoErrors();
11416 expect(expression, new isInstanceOf<SimpleStringLiteral>());
11417 SimpleStringLiteral literal = expression;
11418 expect(literal.literal, isNotNull);
11419 expect(literal.value, " \na");
11420 }
11421
11422 void test_parseStringLiteral_multiline_endsWithInterpolation() {
11423 createParser(r"'''x$y'''");
11424 Expression expression = parser.parseStringLiteral();
11425 expectNotNullIfNoErrors(expression);
11426 listener.assertNoErrors();
11427 expect(expression, new isInstanceOf<StringInterpolation>());
11428 StringInterpolation interpolation = expression;
11429 expect(interpolation.elements, hasLength(3));
11430 expect(interpolation.elements[0], new isInstanceOf<InterpolationString>());
11431 InterpolationString element0 = interpolation.elements[0];
11432 expect(element0.value, 'x');
11433 expect(
11434 interpolation.elements[1], new isInstanceOf<InterpolationExpression>());
11435 InterpolationExpression element1 = interpolation.elements[1];
11436 expect(element1.expression, new isInstanceOf<SimpleIdentifier>());
11437 expect(interpolation.elements[2], new isInstanceOf<InterpolationString>());
11438 InterpolationString element2 = interpolation.elements[2];
11439 expect(element2.value, '');
11440 }
11441
11442 void test_parseStringLiteral_multiline_escapedBackslash() {
11443 createParser("'''\\\\\na'''");
11444 Expression expression = parser.parseStringLiteral();
11445 expectNotNullIfNoErrors(expression);
11446 listener.assertNoErrors();
11447 expect(expression, new isInstanceOf<SimpleStringLiteral>());
11448 SimpleStringLiteral literal = expression;
11449 expect(literal.literal, isNotNull);
11450 expect(literal.value, "\\\na");
11451 }
11452
11453 void test_parseStringLiteral_multiline_escapedBackslash_raw() {
11454 createParser("r'''\\\\\na'''");
11455 Expression expression = parser.parseStringLiteral();
11456 expectNotNullIfNoErrors(expression);
11457 listener.assertNoErrors();
11458 expect(expression, new isInstanceOf<SimpleStringLiteral>());
11459 SimpleStringLiteral literal = expression;
11460 expect(literal.literal, isNotNull);
11461 expect(literal.value, "\\\\\na");
11462 }
11463
11464 void test_parseStringLiteral_multiline_escapedEolMarker() {
11465 createParser("'''\\\na'''");
11466 Expression expression = parser.parseStringLiteral();
11467 expectNotNullIfNoErrors(expression);
11468 listener.assertNoErrors();
11469 expect(expression, new isInstanceOf<SimpleStringLiteral>());
11470 SimpleStringLiteral literal = expression;
11471 expect(literal.literal, isNotNull);
11472 expect(literal.value, "a");
11473 }
11474
11475 void test_parseStringLiteral_multiline_escapedEolMarker_raw() {
11476 createParser("r'''\\\na'''");
11477 Expression expression = parser.parseStringLiteral();
11478 expectNotNullIfNoErrors(expression);
11479 listener.assertNoErrors();
11480 expect(expression, new isInstanceOf<SimpleStringLiteral>());
11481 SimpleStringLiteral literal = expression;
11482 expect(literal.literal, isNotNull);
11483 expect(literal.value, "a");
11484 }
11485
11486 void test_parseStringLiteral_multiline_escapedSpaceAndEolMarker() {
11487 createParser("'''\\ \\\na'''");
11488 Expression expression = parser.parseStringLiteral();
11489 expectNotNullIfNoErrors(expression);
11490 listener.assertNoErrors();
11491 expect(expression, new isInstanceOf<SimpleStringLiteral>());
11492 SimpleStringLiteral literal = expression;
11493 expect(literal.literal, isNotNull);
11494 expect(literal.value, "a");
11495 }
11496
11497 void test_parseStringLiteral_multiline_escapedSpaceAndEolMarker_raw() {
11498 createParser("r'''\\ \\\na'''");
11499 Expression expression = parser.parseStringLiteral();
11500 expectNotNullIfNoErrors(expression);
11501 listener.assertNoErrors();
11502 expect(expression, new isInstanceOf<SimpleStringLiteral>());
11503 SimpleStringLiteral literal = expression;
11504 expect(literal.literal, isNotNull);
11505 expect(literal.value, "a");
11506 }
11507
11508 void test_parseStringLiteral_multiline_escapedTab() {
11509 createParser("'''\\t\na'''");
11510 Expression expression = parser.parseStringLiteral();
11511 expectNotNullIfNoErrors(expression);
11512 listener.assertNoErrors();
11513 expect(expression, new isInstanceOf<SimpleStringLiteral>());
11514 SimpleStringLiteral literal = expression;
11515 expect(literal.literal, isNotNull);
11516 expect(literal.value, "\t\na");
11517 }
11518
11519 void test_parseStringLiteral_multiline_escapedTab_raw() {
11520 createParser("r'''\\t\na'''");
11521 Expression expression = parser.parseStringLiteral();
11522 expectNotNullIfNoErrors(expression);
11523 listener.assertNoErrors();
11524 expect(expression, new isInstanceOf<SimpleStringLiteral>());
11525 SimpleStringLiteral literal = expression;
11526 expect(literal.literal, isNotNull);
11527 expect(literal.value, "\\t\na");
11528 }
11529
11530 void test_parseStringLiteral_multiline_quoteAfterInterpolation() {
11531 createParser(r"""'''$x'y'''""");
11532 Expression expression = parser.parseStringLiteral();
11533 expectNotNullIfNoErrors(expression);
11534 listener.assertNoErrors();
11535 expect(expression, new isInstanceOf<StringInterpolation>());
11536 StringInterpolation interpolation = expression;
11537 expect(interpolation.elements, hasLength(3));
11538 expect(interpolation.elements[0], new isInstanceOf<InterpolationString>());
11539 InterpolationString element0 = interpolation.elements[0];
11540 expect(element0.value, '');
11541 expect(
11542 interpolation.elements[1], new isInstanceOf<InterpolationExpression>());
11543 InterpolationExpression element1 = interpolation.elements[1];
11544 expect(element1.expression, new isInstanceOf<SimpleIdentifier>());
11545 expect(interpolation.elements[2], new isInstanceOf<InterpolationString>());
11546 InterpolationString element2 = interpolation.elements[2];
11547 expect(element2.value, "'y");
11548 }
11549
11550 void test_parseStringLiteral_multiline_startsWithInterpolation() {
11551 createParser(r"'''${x}y'''");
11552 Expression expression = parser.parseStringLiteral();
11553 expectNotNullIfNoErrors(expression);
11554 listener.assertNoErrors();
11555 expect(expression, new isInstanceOf<StringInterpolation>());
11556 StringInterpolation interpolation = expression;
11557 expect(interpolation.elements, hasLength(3));
11558 expect(interpolation.elements[0], new isInstanceOf<InterpolationString>());
11559 InterpolationString element0 = interpolation.elements[0];
11560 expect(element0.value, '');
11561 expect(
11562 interpolation.elements[1], new isInstanceOf<InterpolationExpression>());
11563 InterpolationExpression element1 = interpolation.elements[1];
11564 expect(element1.expression, new isInstanceOf<SimpleIdentifier>());
11565 expect(interpolation.elements[2], new isInstanceOf<InterpolationString>());
11566 InterpolationString element2 = interpolation.elements[2];
11567 expect(element2.value, 'y');
11568 }
11569
11570 void test_parseStringLiteral_multiline_twoSpaces() {
11571 createParser("''' \na'''");
11572 Expression expression = parser.parseStringLiteral();
11573 expectNotNullIfNoErrors(expression);
11574 listener.assertNoErrors();
11575 expect(expression, new isInstanceOf<SimpleStringLiteral>());
11576 SimpleStringLiteral literal = expression;
11577 expect(literal.literal, isNotNull);
11578 expect(literal.value, "a");
11579 }
11580
11581 void test_parseStringLiteral_multiline_twoSpaces_raw() {
11582 createParser("r''' \na'''");
11583 Expression expression = parser.parseStringLiteral();
11584 expectNotNullIfNoErrors(expression);
11585 listener.assertNoErrors();
11586 expect(expression, new isInstanceOf<SimpleStringLiteral>());
11587 SimpleStringLiteral literal = expression;
11588 expect(literal.literal, isNotNull);
11589 expect(literal.value, "a");
11590 }
11591
11592 void test_parseStringLiteral_multiline_untrimmed() {
11593 createParser("''' a\nb'''");
11594 Expression expression = parser.parseStringLiteral();
11595 expectNotNullIfNoErrors(expression);
11596 listener.assertNoErrors();
11597 expect(expression, new isInstanceOf<SimpleStringLiteral>());
11598 SimpleStringLiteral literal = expression;
11599 expect(literal.literal, isNotNull);
11600 expect(literal.value, " a\nb");
11601 }
11602
11603 void test_parseStringLiteral_quoteAfterInterpolation() {
11604 createParser(r"""'$x"'""");
11605 Expression expression = parser.parseStringLiteral();
11606 expectNotNullIfNoErrors(expression);
11607 listener.assertNoErrors();
11608 expect(expression, new isInstanceOf<StringInterpolation>());
11609 StringInterpolation interpolation = expression;
11610 expect(interpolation.elements, hasLength(3));
11611 expect(interpolation.elements[0], new isInstanceOf<InterpolationString>());
11612 InterpolationString element0 = interpolation.elements[0];
11613 expect(element0.value, '');
11614 expect(
11615 interpolation.elements[1], new isInstanceOf<InterpolationExpression>());
11616 InterpolationExpression element1 = interpolation.elements[1];
11617 expect(element1.expression, new isInstanceOf<SimpleIdentifier>());
11618 expect(interpolation.elements[2], new isInstanceOf<InterpolationString>());
11619 InterpolationString element2 = interpolation.elements[2];
11620 expect(element2.value, '"');
11621 }
11622
11623 void test_parseStringLiteral_single() {
11624 createParser("'a'");
11625 Expression expression = parser.parseStringLiteral();
11626 expectNotNullIfNoErrors(expression);
11627 listener.assertNoErrors();
11628 expect(expression, new isInstanceOf<SimpleStringLiteral>());
11629 SimpleStringLiteral literal = expression;
11630 expect(literal.literal, isNotNull);
11631 expect(literal.value, "a");
11632 }
11633
11634 void test_parseStringLiteral_startsWithInterpolation() {
11635 createParser(r"'${x}y'");
11636 Expression expression = parser.parseStringLiteral();
11637 expectNotNullIfNoErrors(expression);
11638 listener.assertNoErrors();
11639 expect(expression, new isInstanceOf<StringInterpolation>());
11640 StringInterpolation interpolation = expression;
11641 expect(interpolation.elements, hasLength(3));
11642 expect(interpolation.elements[0], new isInstanceOf<InterpolationString>());
11643 InterpolationString element0 = interpolation.elements[0];
11644 expect(element0.value, '');
11645 expect(
11646 interpolation.elements[1], new isInstanceOf<InterpolationExpression>());
11647 InterpolationExpression element1 = interpolation.elements[1];
11648 expect(element1.expression, new isInstanceOf<SimpleIdentifier>());
11649 expect(interpolation.elements[2], new isInstanceOf<InterpolationString>());
11650 InterpolationString element2 = interpolation.elements[2];
11651 expect(element2.value, 'y');
11652 }
11653
11654 void test_parseSuperConstructorInvocation_named() {
11655 createParser('super.a()');
11656 SuperConstructorInvocation invocation =
11657 parser.parseSuperConstructorInvocation();
11658 expectNotNullIfNoErrors(invocation);
11659 listener.assertNoErrors();
11660 expect(invocation.argumentList, isNotNull);
11661 expect(invocation.constructorName, isNotNull);
11662 expect(invocation.superKeyword, isNotNull);
11663 expect(invocation.period, isNotNull);
11664 }
11665
11666 void test_parseSuperConstructorInvocation_unnamed() {
11667 createParser('super()');
11668 SuperConstructorInvocation invocation =
11669 parser.parseSuperConstructorInvocation();
11670 expectNotNullIfNoErrors(invocation);
11671 listener.assertNoErrors();
11672 expect(invocation.argumentList, isNotNull);
11673 expect(invocation.constructorName, isNull);
11674 expect(invocation.superKeyword, isNotNull);
11675 expect(invocation.period, isNull);
11676 }
11677
11678 void test_parseSwitchStatement_case() { 11920 void test_parseSwitchStatement_case() {
11679 createParser('switch (a) {case 1: return "I";}'); 11921 createParser('switch (a) {case 1: return "I";}');
11680 SwitchStatement statement = parser.parseSwitchStatement(); 11922 SwitchStatement statement = parser.parseSwitchStatement();
11681 expectNotNullIfNoErrors(statement); 11923 expectNotNullIfNoErrors(statement);
11682 listener.assertNoErrors(); 11924 listener.assertNoErrors();
11683 expect(statement.switchKeyword, isNotNull); 11925 expect(statement.switchKeyword, isNotNull);
11684 expect(statement.leftParenthesis, isNotNull); 11926 expect(statement.leftParenthesis, isNotNull);
11685 expect(statement.expression, isNotNull); 11927 expect(statement.expression, isNotNull);
11686 expect(statement.rightParenthesis, isNotNull); 11928 expect(statement.rightParenthesis, isNotNull);
11687 expect(statement.leftBracket, isNotNull); 11929 expect(statement.leftBracket, isNotNull);
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
11753 expect(statement.switchKeyword, isNotNull); 11995 expect(statement.switchKeyword, isNotNull);
11754 expect(statement.leftParenthesis, isNotNull); 11996 expect(statement.leftParenthesis, isNotNull);
11755 expect(statement.expression, isNotNull); 11997 expect(statement.expression, isNotNull);
11756 expect(statement.rightParenthesis, isNotNull); 11998 expect(statement.rightParenthesis, isNotNull);
11757 expect(statement.leftBracket, isNotNull); 11999 expect(statement.leftBracket, isNotNull);
11758 expect(statement.members, hasLength(1)); 12000 expect(statement.members, hasLength(1));
11759 expect(statement.members[0].statements, hasLength(3)); 12001 expect(statement.members[0].statements, hasLength(3));
11760 expect(statement.rightBracket, isNotNull); 12002 expect(statement.rightBracket, isNotNull);
11761 } 12003 }
11762 12004
11763 void test_parseSymbolLiteral_builtInIdentifier() {
11764 createParser('#dynamic.static.abstract');
11765 SymbolLiteral literal = parser.parseSymbolLiteral();
11766 expectNotNullIfNoErrors(literal);
11767 listener.assertNoErrors();
11768 expect(literal.poundSign, isNotNull);
11769 List<Token> components = literal.components;
11770 expect(components, hasLength(3));
11771 expect(components[0].lexeme, "dynamic");
11772 expect(components[1].lexeme, "static");
11773 expect(components[2].lexeme, "abstract");
11774 }
11775
11776 void test_parseSymbolLiteral_multiple() {
11777 createParser('#a.b.c');
11778 SymbolLiteral literal = parser.parseSymbolLiteral();
11779 expectNotNullIfNoErrors(literal);
11780 listener.assertNoErrors();
11781 expect(literal.poundSign, isNotNull);
11782 List<Token> components = literal.components;
11783 expect(components, hasLength(3));
11784 expect(components[0].lexeme, "a");
11785 expect(components[1].lexeme, "b");
11786 expect(components[2].lexeme, "c");
11787 }
11788
11789 void test_parseSymbolLiteral_operator() {
11790 createParser('#==');
11791 SymbolLiteral literal = parser.parseSymbolLiteral();
11792 expectNotNullIfNoErrors(literal);
11793 listener.assertNoErrors();
11794 expect(literal.poundSign, isNotNull);
11795 List<Token> components = literal.components;
11796 expect(components, hasLength(1));
11797 expect(components[0].lexeme, "==");
11798 }
11799
11800 void test_parseSymbolLiteral_single() {
11801 createParser('#a');
11802 SymbolLiteral literal = parser.parseSymbolLiteral();
11803 expectNotNullIfNoErrors(literal);
11804 listener.assertNoErrors();
11805 expect(literal.poundSign, isNotNull);
11806 List<Token> components = literal.components;
11807 expect(components, hasLength(1));
11808 expect(components[0].lexeme, "a");
11809 }
11810
11811 void test_parseSymbolLiteral_void() {
11812 createParser('#void');
11813 SymbolLiteral literal = parser.parseSymbolLiteral();
11814 expectNotNullIfNoErrors(literal);
11815 listener.assertNoErrors();
11816 expect(literal.poundSign, isNotNull);
11817 List<Token> components = literal.components;
11818 expect(components, hasLength(1));
11819 expect(components[0].lexeme, "void");
11820 }
11821
11822 void test_parseThrowExpression() {
11823 createParser('throw x;');
11824 Expression expression = parser.parseThrowExpression();
11825 expectNotNullIfNoErrors(expression);
11826 listener.assertNoErrors();
11827 expect(expression, new isInstanceOf<ThrowExpression>());
11828 ThrowExpression throwExpression = expression;
11829 expect(throwExpression.throwKeyword, isNotNull);
11830 expect(throwExpression.expression, isNotNull);
11831 }
11832
11833 void test_parseThrowExpressionWithoutCascade() {
11834 createParser('throw x;');
11835 Expression expression = parser.parseThrowExpressionWithoutCascade();
11836 expectNotNullIfNoErrors(expression);
11837 listener.assertNoErrors();
11838 expect(expression, new isInstanceOf<ThrowExpression>());
11839 ThrowExpression throwExpression = expression;
11840 expect(throwExpression.throwKeyword, isNotNull);
11841 expect(throwExpression.expression, isNotNull);
11842 }
11843
11844 void test_parseTryStatement_catch() { 12005 void test_parseTryStatement_catch() {
11845 createParser('try {} catch (e) {}'); 12006 createParser('try {} catch (e) {}');
11846 TryStatement statement = parser.parseTryStatement(); 12007 TryStatement statement = parser.parseTryStatement();
11847 expectNotNullIfNoErrors(statement); 12008 expectNotNullIfNoErrors(statement);
11848 listener.assertNoErrors(); 12009 listener.assertNoErrors();
11849 expect(statement.tryKeyword, isNotNull); 12010 expect(statement.tryKeyword, isNotNull);
11850 expect(statement.body, isNotNull); 12011 expect(statement.body, isNotNull);
11851 NodeList<CatchClause> catchClauses = statement.catchClauses; 12012 NodeList<CatchClause> catchClauses = statement.catchClauses;
11852 expect(catchClauses, hasLength(1)); 12013 expect(catchClauses, hasLength(1));
11853 CatchClause clause = catchClauses[0]; 12014 CatchClause clause = catchClauses[0];
(...skipping 529 matching lines...) Expand 10 before | Expand all | Expand 10 after
12383 void test_parseTypeParameterList_withTrailingEquals() { 12544 void test_parseTypeParameterList_withTrailingEquals() {
12384 createParser('<A>='); 12545 createParser('<A>=');
12385 TypeParameterList parameterList = parser.parseTypeParameterList(); 12546 TypeParameterList parameterList = parser.parseTypeParameterList();
12386 expectNotNullIfNoErrors(parameterList); 12547 expectNotNullIfNoErrors(parameterList);
12387 listener.assertNoErrors(); 12548 listener.assertNoErrors();
12388 expect(parameterList.leftBracket, isNotNull); 12549 expect(parameterList.leftBracket, isNotNull);
12389 expect(parameterList.rightBracket, isNotNull); 12550 expect(parameterList.rightBracket, isNotNull);
12390 expect(parameterList.typeParameters, hasLength(1)); 12551 expect(parameterList.typeParameters, hasLength(1));
12391 } 12552 }
12392 12553
12393 void test_parseUnaryExpression_decrement_normal() {
12394 createParser('--x');
12395 PrefixExpression expression = parser.parseUnaryExpression();
12396 expectNotNullIfNoErrors(expression);
12397 listener.assertNoErrors();
12398 expect(expression.operator, isNotNull);
12399 expect(expression.operator.type, TokenType.MINUS_MINUS);
12400 expect(expression.operand, isNotNull);
12401 }
12402
12403 void test_parseUnaryExpression_decrement_super() {
12404 createParser('--super');
12405 PrefixExpression expression = parser.parseUnaryExpression();
12406 expectNotNullIfNoErrors(expression);
12407 listener.assertNoErrors();
12408 expect(expression.operator, isNotNull);
12409 expect(expression.operator.type, TokenType.MINUS);
12410 Expression innerExpression = expression.operand;
12411 expect(innerExpression, isNotNull);
12412 expect(innerExpression is PrefixExpression, isTrue);
12413 PrefixExpression operand = innerExpression as PrefixExpression;
12414 expect(operand.operator, isNotNull);
12415 expect(operand.operator.type, TokenType.MINUS);
12416 expect(operand.operand, isNotNull);
12417 }
12418
12419 void test_parseUnaryExpression_decrement_super_propertyAccess() {
12420 createParser('--super.x');
12421 PrefixExpression expression = parser.parseUnaryExpression();
12422 expectNotNullIfNoErrors(expression);
12423 listener.assertNoErrors();
12424 expect(expression.operator, isNotNull);
12425 expect(expression.operator.type, TokenType.MINUS_MINUS);
12426 expect(expression.operand, isNotNull);
12427 PropertyAccess operand = expression.operand as PropertyAccess;
12428 expect(operand.target is SuperExpression, isTrue);
12429 expect(operand.propertyName.name, "x");
12430 }
12431
12432 void test_parseUnaryExpression_decrement_super_withComment() {
12433 createParser('/* 0 */ --super');
12434 PrefixExpression expression = parser.parseUnaryExpression();
12435 expectNotNullIfNoErrors(expression);
12436 listener.assertNoErrors();
12437 expect(expression.operator, isNotNull);
12438 expect(expression.operator.type, TokenType.MINUS);
12439 expect(expression.operator.precedingComments, isNotNull);
12440 Expression innerExpression = expression.operand;
12441 expect(innerExpression, isNotNull);
12442 expect(innerExpression is PrefixExpression, isTrue);
12443 PrefixExpression operand = innerExpression as PrefixExpression;
12444 expect(operand.operator, isNotNull);
12445 expect(operand.operator.type, TokenType.MINUS);
12446 expect(operand.operand, isNotNull);
12447 }
12448
12449 void test_parseUnaryExpression_increment_normal() {
12450 createParser('++x');
12451 PrefixExpression expression = parser.parseUnaryExpression();
12452 expectNotNullIfNoErrors(expression);
12453 listener.assertNoErrors();
12454 expect(expression.operator, isNotNull);
12455 expect(expression.operator.type, TokenType.PLUS_PLUS);
12456 expect(expression.operand, isNotNull);
12457 }
12458
12459 void test_parseUnaryExpression_increment_super_index() {
12460 createParser('++super[0]');
12461 PrefixExpression expression = parser.parseUnaryExpression();
12462 expectNotNullIfNoErrors(expression);
12463 listener.assertNoErrors();
12464 expect(expression.operator, isNotNull);
12465 expect(expression.operator.type, TokenType.PLUS_PLUS);
12466 expect(expression.operand, isNotNull);
12467 IndexExpression operand = expression.operand as IndexExpression;
12468 expect(operand.realTarget is SuperExpression, isTrue);
12469 expect(operand.index is IntegerLiteral, isTrue);
12470 }
12471
12472 void test_parseUnaryExpression_increment_super_propertyAccess() {
12473 createParser('++super.x');
12474 PrefixExpression expression = parser.parseUnaryExpression();
12475 expectNotNullIfNoErrors(expression);
12476 listener.assertNoErrors();
12477 expect(expression.operator, isNotNull);
12478 expect(expression.operator.type, TokenType.PLUS_PLUS);
12479 expect(expression.operand, isNotNull);
12480 PropertyAccess operand = expression.operand as PropertyAccess;
12481 expect(operand.target is SuperExpression, isTrue);
12482 expect(operand.propertyName.name, "x");
12483 }
12484
12485 void test_parseUnaryExpression_minus_normal() {
12486 createParser('-x');
12487 PrefixExpression expression = parser.parseUnaryExpression();
12488 expectNotNullIfNoErrors(expression);
12489 listener.assertNoErrors();
12490 expect(expression.operator, isNotNull);
12491 expect(expression.operator.type, TokenType.MINUS);
12492 expect(expression.operand, isNotNull);
12493 }
12494
12495 void test_parseUnaryExpression_minus_super() {
12496 createParser('-super');
12497 PrefixExpression expression = parser.parseUnaryExpression();
12498 expectNotNullIfNoErrors(expression);
12499 listener.assertNoErrors();
12500 expect(expression.operator, isNotNull);
12501 expect(expression.operator.type, TokenType.MINUS);
12502 expect(expression.operand, isNotNull);
12503 }
12504
12505 void test_parseUnaryExpression_not_normal() {
12506 createParser('!x');
12507 PrefixExpression expression = parser.parseUnaryExpression();
12508 expectNotNullIfNoErrors(expression);
12509 listener.assertNoErrors();
12510 expect(expression.operator, isNotNull);
12511 expect(expression.operator.type, TokenType.BANG);
12512 expect(expression.operand, isNotNull);
12513 }
12514
12515 void test_parseUnaryExpression_not_super() {
12516 createParser('!super');
12517 PrefixExpression expression = parser.parseUnaryExpression();
12518 expectNotNullIfNoErrors(expression);
12519 listener.assertNoErrors();
12520 expect(expression.operator, isNotNull);
12521 expect(expression.operator.type, TokenType.BANG);
12522 expect(expression.operand, isNotNull);
12523 }
12524
12525 void test_parseUnaryExpression_tilda_normal() {
12526 createParser('~x');
12527 PrefixExpression expression = parser.parseUnaryExpression();
12528 expectNotNullIfNoErrors(expression);
12529 listener.assertNoErrors();
12530 expect(expression.operator, isNotNull);
12531 expect(expression.operator.type, TokenType.TILDE);
12532 expect(expression.operand, isNotNull);
12533 }
12534
12535 void test_parseUnaryExpression_tilda_super() {
12536 createParser('~super');
12537 PrefixExpression expression = parser.parseUnaryExpression();
12538 expectNotNullIfNoErrors(expression);
12539 listener.assertNoErrors();
12540 expect(expression.operator, isNotNull);
12541 expect(expression.operator.type, TokenType.TILDE);
12542 expect(expression.operand, isNotNull);
12543 }
12544
12545 void test_parseVariableDeclaration_equals() { 12554 void test_parseVariableDeclaration_equals() {
12546 createParser('a = b'); 12555 createParser('a = b');
12547 VariableDeclaration declaration = parser.parseVariableDeclaration(); 12556 VariableDeclaration declaration = parser.parseVariableDeclaration();
12548 expectNotNullIfNoErrors(declaration); 12557 expectNotNullIfNoErrors(declaration);
12549 listener.assertNoErrors(); 12558 listener.assertNoErrors();
12550 expect(declaration.name, isNotNull); 12559 expect(declaration.name, isNotNull);
12551 expect(declaration.equals, isNotNull); 12560 expect(declaration.equals, isNotNull);
12552 expect(declaration.initializer, isNotNull); 12561 expect(declaration.initializer, isNotNull);
12553 } 12562 }
12554 12563
(...skipping 2030 matching lines...) Expand 10 before | Expand all | Expand 10 after
14585 expect(typeAlias.name, isNotNull); 14594 expect(typeAlias.name, isNotNull);
14586 expect(typeAlias.typeParameters, isNull); 14595 expect(typeAlias.typeParameters, isNull);
14587 expect(typeAlias.semicolon, isNotNull); 14596 expect(typeAlias.semicolon, isNotNull);
14588 GenericFunctionType functionType = typeAlias.functionType; 14597 GenericFunctionType functionType = typeAlias.functionType;
14589 expect(functionType, isNotNull); 14598 expect(functionType, isNotNull);
14590 expect(functionType.parameters, isNotNull); 14599 expect(functionType.parameters, isNotNull);
14591 expect(functionType.returnType, isNotNull); 14600 expect(functionType.returnType, isNotNull);
14592 expect(functionType.typeParameters, isNull); 14601 expect(functionType.typeParameters, isNull);
14593 } 14602 }
14594 } 14603 }
OLDNEW
« no previous file with comments | « pkg/analyzer/test/generated/parser_fasta_test.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698