OLD | NEW |
---|---|
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 } |
OLD | NEW |