| 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 engine.parser_test; | 5 library engine.parser_test; |
| 6 | 6 |
| 7 import 'package:analyzer/src/generated/ast.dart'; | 7 import 'package:analyzer/src/generated/ast.dart'; |
| 8 import 'package:analyzer/src/generated/element.dart'; | 8 import 'package:analyzer/src/generated/element.dart'; |
| 9 import 'package:analyzer/src/generated/error.dart'; | 9 import 'package:analyzer/src/generated/error.dart'; |
| 10 import 'package:analyzer/src/generated/incremental_scanner.dart'; | 10 import 'package:analyzer/src/generated/incremental_scanner.dart'; |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 116 } | 116 } |
| 117 } | 117 } |
| 118 | 118 |
| 119 /** | 119 /** |
| 120 * The class `ComplexParserTest` defines parser tests that test the parsing of m
ore complex | 120 * The class `ComplexParserTest` defines parser tests that test the parsing of m
ore complex |
| 121 * code fragments or the interactions between multiple parsing methods. For exam
ple, tests to ensure | 121 * code fragments or the interactions between multiple parsing methods. For exam
ple, tests to ensure |
| 122 * that the precedence of operations is being handled correctly should be define
d in this class. | 122 * that the precedence of operations is being handled correctly should be define
d in this class. |
| 123 * | 123 * |
| 124 * Simpler tests should be defined in the class [SimpleParserTest]. | 124 * Simpler tests should be defined in the class [SimpleParserTest]. |
| 125 */ | 125 */ |
| 126 @ReflectiveTestCase() | 126 @reflectiveTest |
| 127 class ComplexParserTest extends ParserTestCase { | 127 class ComplexParserTest extends ParserTestCase { |
| 128 void test_additiveExpression_normal() { | 128 void test_additiveExpression_normal() { |
| 129 BinaryExpression expression = ParserTestCase.parseExpression("x + y - z"); | 129 BinaryExpression expression = ParserTestCase.parseExpression("x + y - z"); |
| 130 EngineTestCase.assertInstanceOf( | 130 EngineTestCase.assertInstanceOf( |
| 131 (obj) => obj is BinaryExpression, | 131 (obj) => obj is BinaryExpression, |
| 132 BinaryExpression, | 132 BinaryExpression, |
| 133 expression.leftOperand); | 133 expression.leftOperand); |
| 134 } | 134 } |
| 135 | 135 |
| 136 void test_additiveExpression_noSpaces() { | 136 void test_additiveExpression_noSpaces() { |
| (...skipping 440 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 577 | 577 |
| 578 void test_topLevelVariable_withMetadata() { | 578 void test_topLevelVariable_withMetadata() { |
| 579 ParserTestCase.parseCompilationUnit("String @A string;"); | 579 ParserTestCase.parseCompilationUnit("String @A string;"); |
| 580 } | 580 } |
| 581 } | 581 } |
| 582 | 582 |
| 583 /** | 583 /** |
| 584 * The class `ErrorParserTest` defines parser tests that test the parsing of cod
e to ensure | 584 * The class `ErrorParserTest` defines parser tests that test the parsing of cod
e to ensure |
| 585 * that errors are correctly reported, and in some cases, not reported. | 585 * that errors are correctly reported, and in some cases, not reported. |
| 586 */ | 586 */ |
| 587 @ReflectiveTestCase() | 587 @reflectiveTest |
| 588 class ErrorParserTest extends ParserTestCase { | 588 class ErrorParserTest extends ParserTestCase { |
| 589 void fail_expectedListOrMapLiteral() { | 589 void fail_expectedListOrMapLiteral() { |
| 590 // It isn't clear that this test can ever pass. The parser is currently | 590 // It isn't clear that this test can ever pass. The parser is currently |
| 591 // create a synthetic list literal in this case, but isSynthetic() isn't | 591 // create a synthetic list literal in this case, but isSynthetic() isn't |
| 592 // overridden for ListLiteral. The problem is that the synthetic list | 592 // overridden for ListLiteral. The problem is that the synthetic list |
| 593 // literals that are being created are not always zero length (because they | 593 // literals that are being created are not always zero length (because they |
| 594 // could have type parameters), which violates the contract of | 594 // could have type parameters), which violates the contract of |
| 595 // isSynthetic(). | 595 // isSynthetic(). |
| 596 TypedLiteral literal = ParserTestCase.parse3( | 596 TypedLiteral literal = ParserTestCase.parse3( |
| 597 "parseListOrMapLiteral", | 597 "parseListOrMapLiteral", |
| (...skipping 1973 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2571 } | 2571 } |
| 2572 | 2572 |
| 2573 void test_wrongTerminatorForParameterGroup_optional() { | 2573 void test_wrongTerminatorForParameterGroup_optional() { |
| 2574 ParserTestCase.parse4( | 2574 ParserTestCase.parse4( |
| 2575 "parseFormalParameterList", | 2575 "parseFormalParameterList", |
| 2576 "(a, [b, c})", | 2576 "(a, [b, c})", |
| 2577 [ParserErrorCode.WRONG_TERMINATOR_FOR_PARAMETER_GROUP]); | 2577 [ParserErrorCode.WRONG_TERMINATOR_FOR_PARAMETER_GROUP]); |
| 2578 } | 2578 } |
| 2579 } | 2579 } |
| 2580 | 2580 |
| 2581 @ReflectiveTestCase() | 2581 @reflectiveTest |
| 2582 class IncrementalParserTest extends EngineTestCase { | 2582 class IncrementalParserTest extends EngineTestCase { |
| 2583 void fail_replace_identifier_with_functionLiteral_in_initializer_interp() { | 2583 void fail_replace_identifier_with_functionLiteral_in_initializer_interp() { |
| 2584 // TODO(paulberry, brianwilkerson): broken due to incremental scanning bugs | 2584 // TODO(paulberry, brianwilkerson): broken due to incremental scanning bugs |
| 2585 | 2585 |
| 2586 // Function literals are allowed inside interpolation expressions in | 2586 // Function literals are allowed inside interpolation expressions in |
| 2587 // initializers. | 2587 // initializers. |
| 2588 // | 2588 // |
| 2589 // 'class A { var a; A(b) : a = "${b}";' | 2589 // 'class A { var a; A(b) : a = "${b}";' |
| 2590 // 'class A { var a; A(b) : a = "${() {}}";' | 2590 // 'class A { var a; A(b) : a = "${() {}}";' |
| 2591 _assertParse(r'class A { var a; A(b) : a = "${', 'b', '() {}', '}";'); | 2591 _assertParse(r'class A { var a; A(b) : a = "${', 'b', '() {}', '}";'); |
| (...skipping 370 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2962 expect(incrementalUnit, isNotNull); | 2962 expect(incrementalUnit, isNotNull); |
| 2963 // | 2963 // |
| 2964 // Validate that the results of the incremental parse are the same as the | 2964 // Validate that the results of the incremental parse are the same as the |
| 2965 // full parse of the modified source. | 2965 // full parse of the modified source. |
| 2966 // | 2966 // |
| 2967 expect(AstComparator.equalNodes(modifiedUnit, incrementalUnit), isTrue); | 2967 expect(AstComparator.equalNodes(modifiedUnit, incrementalUnit), isTrue); |
| 2968 // TODO(brianwilkerson) Verify that the errors are correct? | 2968 // TODO(brianwilkerson) Verify that the errors are correct? |
| 2969 } | 2969 } |
| 2970 } | 2970 } |
| 2971 | 2971 |
| 2972 @ReflectiveTestCase() | 2972 @reflectiveTest |
| 2973 class NonErrorParserTest extends ParserTestCase { | 2973 class NonErrorParserTest extends ParserTestCase { |
| 2974 void test_constFactory_external() { | 2974 void test_constFactory_external() { |
| 2975 ParserTestCase.parse( | 2975 ParserTestCase.parse( |
| 2976 "parseClassMember", | 2976 "parseClassMember", |
| 2977 <Object>["C"], | 2977 <Object>["C"], |
| 2978 "external const factory C();"); | 2978 "external const factory C();"); |
| 2979 } | 2979 } |
| 2980 } | 2980 } |
| 2981 | 2981 |
| 2982 class ParserTestCase extends EngineTestCase { | 2982 class ParserTestCase extends EngineTestCase { |
| (...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3260 expect(statements, hasLength(expectedCount)); | 3260 expect(statements, hasLength(expectedCount)); |
| 3261 listener.assertErrorsWithCodes(errorCodes); | 3261 listener.assertErrorsWithCodes(errorCodes); |
| 3262 return statements; | 3262 return statements; |
| 3263 } | 3263 } |
| 3264 } | 3264 } |
| 3265 | 3265 |
| 3266 /** | 3266 /** |
| 3267 * The class `RecoveryParserTest` defines parser tests that test the parsing of
invalid code | 3267 * The class `RecoveryParserTest` defines parser tests that test the parsing of
invalid code |
| 3268 * sequences to ensure that the correct recovery steps are taken in the parser. | 3268 * sequences to ensure that the correct recovery steps are taken in the parser. |
| 3269 */ | 3269 */ |
| 3270 @ReflectiveTestCase() | 3270 @reflectiveTest |
| 3271 class RecoveryParserTest extends ParserTestCase { | 3271 class RecoveryParserTest extends ParserTestCase { |
| 3272 void fail_incomplete_returnType() { | 3272 void fail_incomplete_returnType() { |
| 3273 ParserTestCase.parseCompilationUnit(r''' | 3273 ParserTestCase.parseCompilationUnit(r''' |
| 3274 Map<Symbol, convertStringToSymbolMap(Map<String, dynamic> map) { | 3274 Map<Symbol, convertStringToSymbolMap(Map<String, dynamic> map) { |
| 3275 if (map == null) return null; | 3275 if (map == null) return null; |
| 3276 Map<Symbol, dynamic> result = new Map<Symbol, dynamic>(); | 3276 Map<Symbol, dynamic> result = new Map<Symbol, dynamic>(); |
| 3277 map.forEach((name, value) { | 3277 map.forEach((name, value) { |
| 3278 result[new Symbol(name)] = value; | 3278 result[new Symbol(name)] = value; |
| 3279 }); | 3279 }); |
| 3280 return result; | 3280 return result; |
| (...skipping 1225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4506 (obj) => obj is FunctionTypeAlias, | 4506 (obj) => obj is FunctionTypeAlias, |
| 4507 FunctionTypeAlias, | 4507 FunctionTypeAlias, |
| 4508 member); | 4508 member); |
| 4509 } | 4509 } |
| 4510 | 4510 |
| 4511 void test_unaryPlus() { | 4511 void test_unaryPlus() { |
| 4512 ParserTestCase.parseExpression("+2", [ParserErrorCode.MISSING_IDENTIFIER]); | 4512 ParserTestCase.parseExpression("+2", [ParserErrorCode.MISSING_IDENTIFIER]); |
| 4513 } | 4513 } |
| 4514 } | 4514 } |
| 4515 | 4515 |
| 4516 @ReflectiveTestCase() | 4516 @reflectiveTest |
| 4517 class ResolutionCopierTest extends EngineTestCase { | 4517 class ResolutionCopierTest extends EngineTestCase { |
| 4518 void test_visitAnnotation() { | 4518 void test_visitAnnotation() { |
| 4519 String annotationName = "proxy"; | 4519 String annotationName = "proxy"; |
| 4520 Annotation fromNode = | 4520 Annotation fromNode = |
| 4521 AstFactory.annotation(AstFactory.identifier3(annotationName)); | 4521 AstFactory.annotation(AstFactory.identifier3(annotationName)); |
| 4522 Element element = ElementFactory.topLevelVariableElement2(annotationName); | 4522 Element element = ElementFactory.topLevelVariableElement2(annotationName); |
| 4523 fromNode.element = element; | 4523 fromNode.element = element; |
| 4524 Annotation toNode = | 4524 Annotation toNode = |
| 4525 AstFactory.annotation(AstFactory.identifier3(annotationName)); | 4525 AstFactory.annotation(AstFactory.identifier3(annotationName)); |
| 4526 ResolutionCopier.copyResolutionData(fromNode, toNode); | 4526 ResolutionCopier.copyResolutionData(fromNode, toNode); |
| (...skipping 629 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5156 } | 5156 } |
| 5157 } | 5157 } |
| 5158 | 5158 |
| 5159 /** | 5159 /** |
| 5160 * The class `SimpleParserTest` defines parser tests that test individual parsin
g method. The | 5160 * The class `SimpleParserTest` defines parser tests that test individual parsin
g method. The |
| 5161 * code fragments should be as minimal as possible in order to test the method,
but should not test | 5161 * code fragments should be as minimal as possible in order to test the method,
but should not test |
| 5162 * the interactions between the method under test and other methods. | 5162 * the interactions between the method under test and other methods. |
| 5163 * | 5163 * |
| 5164 * More complex tests should be defined in the class [ComplexParserTest]. | 5164 * More complex tests should be defined in the class [ComplexParserTest]. |
| 5165 */ | 5165 */ |
| 5166 @ReflectiveTestCase() | 5166 @reflectiveTest |
| 5167 class SimpleParserTest extends ParserTestCase { | 5167 class SimpleParserTest extends ParserTestCase { |
| 5168 void fail_parseCommentReference_this() { | 5168 void fail_parseCommentReference_this() { |
| 5169 // This fails because we are returning null from the method and asserting | 5169 // This fails because we are returning null from the method and asserting |
| 5170 // that the return value is not null. | 5170 // that the return value is not null. |
| 5171 CommentReference reference = | 5171 CommentReference reference = |
| 5172 ParserTestCase.parse("parseCommentReference", <Object>["this", 5], ""); | 5172 ParserTestCase.parse("parseCommentReference", <Object>["this", 5], ""); |
| 5173 SimpleIdentifier identifier = EngineTestCase.assertInstanceOf( | 5173 SimpleIdentifier identifier = EngineTestCase.assertInstanceOf( |
| 5174 (obj) => obj is SimpleIdentifier, | 5174 (obj) => obj is SimpleIdentifier, |
| 5175 SimpleIdentifier, | 5175 SimpleIdentifier, |
| 5176 reference.identifier); | 5176 reference.identifier); |
| (...skipping 5804 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10981 // Parse the source. | 10981 // Parse the source. |
| 10982 // | 10982 // |
| 10983 Parser parser = new Parser(null, listener); | 10983 Parser parser = new Parser(null, listener); |
| 10984 return invokeParserMethodImpl( | 10984 return invokeParserMethodImpl( |
| 10985 parser, | 10985 parser, |
| 10986 methodName, | 10986 methodName, |
| 10987 <Object>[tokenStream], | 10987 <Object>[tokenStream], |
| 10988 tokenStream) as Token; | 10988 tokenStream) as Token; |
| 10989 } | 10989 } |
| 10990 } | 10990 } |
| OLD | NEW |