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

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

Issue 3010043002: Characterize more test failures (Closed)
Patch Set: Created 3 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « pkg/analyzer/test/generated/parser_fasta_test.dart ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 import 'package:analyzer/dart/ast/ast.dart'; 5 import 'package:analyzer/dart/ast/ast.dart';
6 import 'package:analyzer/dart/ast/standard_ast_factory.dart'; 6 import 'package:analyzer/dart/ast/standard_ast_factory.dart';
7 import 'package:analyzer/dart/ast/token.dart'; 7 import 'package:analyzer/dart/ast/token.dart';
8 import 'package:analyzer/dart/ast/visitor.dart'; 8 import 'package:analyzer/dart/ast/visitor.dart';
9 import 'package:analyzer/error/error.dart'; 9 import 'package:analyzer/error/error.dart';
10 import 'package:analyzer/error/listener.dart'; 10 import 'package:analyzer/error/listener.dart';
(...skipping 2046 matching lines...) Expand 10 before | Expand all | Expand 10 after
2057 } 2057 }
2058 } 2058 }
2059 2059
2060 /** 2060 /**
2061 * The class `ErrorParserTest` defines parser tests that test the parsing 2061 * The class `ErrorParserTest` defines parser tests that test the parsing
2062 * of code to ensure that errors are correctly reported, 2062 * of code to ensure that errors are correctly reported,
2063 * and in some cases, not reported. 2063 * and in some cases, not reported.
2064 */ 2064 */
2065 @reflectiveTest 2065 @reflectiveTest
2066 class ErrorParserTest extends ParserTestCase with ErrorParserTestMixin { 2066 class ErrorParserTest extends ParserTestCase with ErrorParserTestMixin {
2067 void test_missingIdentifier_number() {
2068 createParser('1');
2069 SimpleIdentifier expression = parser.parseSimpleIdentifier();
2070 expectNotNullIfNoErrors(expression);
2071 listener.assertErrorsWithCodes([ParserErrorCode.MISSING_IDENTIFIER]);
2072 expect(expression.isSynthetic, isTrue);
2073 }
2074
2067 void test_nullableTypeInExtends() { 2075 void test_nullableTypeInExtends() {
2068 enableNnbd = true; 2076 enableNnbd = true;
2069 createParser('extends B?'); 2077 createParser('extends B?');
2070 ExtendsClause clause = parser.parseExtendsClause(); 2078 ExtendsClause clause = parser.parseExtendsClause();
2071 expectNotNullIfNoErrors(clause); 2079 expectNotNullIfNoErrors(clause);
2072 listener.assertErrorsWithCodes([ParserErrorCode.NULLABLE_TYPE_IN_EXTENDS]); 2080 listener.assertErrorsWithCodes([ParserErrorCode.NULLABLE_TYPE_IN_EXTENDS]);
2073 } 2081 }
2074 2082
2075 void test_nullableTypeInImplements() { 2083 void test_nullableTypeInImplements() {
2076 enableNnbd = true; 2084 enableNnbd = true;
(...skipping 433 matching lines...) Expand 10 before | Expand all | Expand 10 after
2510 } 2518 }
2511 2519
2512 void test_duplicatedModifier_var() { 2520 void test_duplicatedModifier_var() {
2513 createParser('var var m;'); 2521 createParser('var var m;');
2514 ClassMember member = parser.parseClassMember('C'); 2522 ClassMember member = parser.parseClassMember('C');
2515 expectNotNullIfNoErrors(member); 2523 expectNotNullIfNoErrors(member);
2516 listener.assertErrorsWithCodes([ParserErrorCode.DUPLICATED_MODIFIER]); 2524 listener.assertErrorsWithCodes([ParserErrorCode.DUPLICATED_MODIFIER]);
2517 } 2525 }
2518 2526
2519 void test_duplicateLabelInSwitchStatement() { 2527 void test_duplicateLabelInSwitchStatement() {
2520 createParser('switch (e) {l1: case 0: break; l1: case 1: break;}'); 2528 SwitchStatement statement =
2521 SwitchStatement statement = parser.parseSwitchStatement(); 2529 parseStatement('switch (e) {l1: case 0: break; l1: case 1: break;}');
2522 expectNotNullIfNoErrors(statement); 2530 expectNotNullIfNoErrors(statement);
2523 listener.assertErrorsWithCodes( 2531 listener.assertErrorsWithCodes(
2524 [ParserErrorCode.DUPLICATE_LABEL_IN_SWITCH_STATEMENT]); 2532 [ParserErrorCode.DUPLICATE_LABEL_IN_SWITCH_STATEMENT]);
2525 } 2533 }
2526 2534
2527 void test_emptyEnumBody() { 2535 void test_emptyEnumBody() {
2528 createParser('enum E {}'); 2536 createParser('enum E {}');
2529 EnumDeclaration declaration = parseFullCompilationUnitMember(); 2537 EnumDeclaration declaration = parseFullCompilationUnitMember();
2530 expectNotNullIfNoErrors(declaration); 2538 expectNotNullIfNoErrors(declaration);
2531 listener.assertErrorsWithCodes([ParserErrorCode.EMPTY_ENUM_BODY]); 2539 listener.assertErrorsWithCodes([ParserErrorCode.EMPTY_ENUM_BODY]);
(...skipping 18 matching lines...) Expand all
2550 parseExpression( 2558 parseExpression(
2551 "1 == 2 != 3", [ParserErrorCode.EQUALITY_CANNOT_BE_EQUALITY_OPERAND]); 2559 "1 == 2 != 3", [ParserErrorCode.EQUALITY_CANNOT_BE_EQUALITY_OPERAND]);
2552 } 2560 }
2553 2561
2554 void test_equalityCannotBeEqualityOperand_neq_eq() { 2562 void test_equalityCannotBeEqualityOperand_neq_eq() {
2555 parseExpression( 2563 parseExpression(
2556 "1 != 2 == 3", [ParserErrorCode.EQUALITY_CANNOT_BE_EQUALITY_OPERAND]); 2564 "1 != 2 == 3", [ParserErrorCode.EQUALITY_CANNOT_BE_EQUALITY_OPERAND]);
2557 } 2565 }
2558 2566
2559 void test_expectedCaseOrDefault() { 2567 void test_expectedCaseOrDefault() {
2560 createParser('switch (e) {break;}'); 2568 SwitchStatement statement = parseStatement('switch (e) {break;}');
2561 SwitchStatement statement = parser.parseSwitchStatement();
2562 expectNotNullIfNoErrors(statement); 2569 expectNotNullIfNoErrors(statement);
2563 listener.assertErrorsWithCodes([ParserErrorCode.EXPECTED_CASE_OR_DEFAULT]); 2570 listener.assertErrorsWithCodes([ParserErrorCode.EXPECTED_CASE_OR_DEFAULT]);
2564 } 2571 }
2565 2572
2566 void test_expectedClassMember_inClass_afterType() { 2573 void test_expectedClassMember_inClass_afterType() {
2567 createParser('heart 2 heart'); 2574 createParser('heart 2 heart');
2568 ClassMember member = parser.parseClassMember('C'); 2575 ClassMember member = parser.parseClassMember('C');
2569 expectNotNullIfNoErrors(member); 2576 expectNotNullIfNoErrors(member);
2570 listener.assertErrorsWithCodes([ParserErrorCode.EXPECTED_CLASS_MEMBER]); 2577 listener.assertErrorsWithCodes([ParserErrorCode.EXPECTED_CLASS_MEMBER]);
2571 } 2578 }
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
2607 2614
2608 void test_expectedExecutable_topLevel_eof() { 2615 void test_expectedExecutable_topLevel_eof() {
2609 createParser('x'); 2616 createParser('x');
2610 CompilationUnitMember member = parseFullCompilationUnitMember(); 2617 CompilationUnitMember member = parseFullCompilationUnitMember();
2611 expectNotNullIfNoErrors(member); 2618 expectNotNullIfNoErrors(member);
2612 listener.assertErrors( 2619 listener.assertErrors(
2613 [new AnalysisError(null, 0, 1, ParserErrorCode.EXPECTED_EXECUTABLE)]); 2620 [new AnalysisError(null, 0, 1, ParserErrorCode.EXPECTED_EXECUTABLE)]);
2614 } 2621 }
2615 2622
2616 void test_expectedInterpolationIdentifier() { 2623 void test_expectedInterpolationIdentifier() {
2617 createParser("'\$x\$'"); 2624 StringLiteral literal = parseExpression("'\$x\$'", [
2618 StringLiteral literal = parser.parseStringLiteral();
2619 expectNotNullIfNoErrors(literal);
2620 listener.assertErrorsWithCodes([
2621 fe.Scanner.useFasta 2625 fe.Scanner.useFasta
2622 ? ScannerErrorCode.MISSING_IDENTIFIER 2626 ? ScannerErrorCode.MISSING_IDENTIFIER
2623 : ParserErrorCode.MISSING_IDENTIFIER 2627 : ParserErrorCode.MISSING_IDENTIFIER
2624 ]); 2628 ]);
2629 expectNotNullIfNoErrors(literal);
2625 } 2630 }
2626 2631
2627 void test_expectedInterpolationIdentifier_emptyString() { 2632 void test_expectedInterpolationIdentifier_emptyString() {
2628 // The scanner inserts an empty string token between the two $'s; we need to 2633 // The scanner inserts an empty string token between the two $'s; we need to
2629 // make sure that the MISSING_IDENTIFIER error that is generated has a 2634 // make sure that the MISSING_IDENTIFIER error that is generated has a
2630 // nonzero width so that it will show up in the editor UI. 2635 // nonzero width so that it will show up in the editor UI.
2631 createParser("'\$\$foo'"); 2636 StringLiteral literal = parseExpression(
2632 StringLiteral literal = parser.parseStringLiteral(); 2637 "'\$\$foo'",
2638 fe.Scanner.useFasta
2639 ? [ScannerErrorCode.MISSING_IDENTIFIER]
2640 : [ParserErrorCode.MISSING_IDENTIFIER]);
2633 expectNotNullIfNoErrors(literal); 2641 expectNotNullIfNoErrors(literal);
2634 listener.assertErrors(fe.Scanner.useFasta
2635 ? [new AnalysisError(null, 2, 1, ScannerErrorCode.MISSING_IDENTIFIER)]
2636 : [new AnalysisError(null, 2, 1, ParserErrorCode.MISSING_IDENTIFIER)]);
2637 } 2642 }
2638 2643
2639 @failingTest 2644 @failingTest
2640 void test_expectedListOrMapLiteral() { 2645 void test_expectedListOrMapLiteral() {
2641 // It isn't clear that this test can ever pass. The parser is currently 2646 // It isn't clear that this test can ever pass. The parser is currently
2642 // create a synthetic list literal in this case, but isSynthetic() isn't 2647 // create a synthetic list literal in this case, but isSynthetic() isn't
2643 // overridden for ListLiteral. The problem is that the synthetic list 2648 // overridden for ListLiteral. The problem is that the synthetic list
2644 // literals that are being created are not always zero length (because they 2649 // literals that are being created are not always zero length (because they
2645 // could have type parameters), which violates the contract of 2650 // could have type parameters), which violates the contract of
2646 // isSynthetic(). 2651 // isSynthetic().
2647 TypedLiteral literal = parseListOrMapLiteral(null, '1'); 2652 TypedLiteral literal = parseListOrMapLiteral(null, '1');
2648 expectNotNullIfNoErrors(literal); 2653 expectNotNullIfNoErrors(literal);
2649 listener 2654 listener
2650 .assertErrorsWithCodes([ParserErrorCode.EXPECTED_LIST_OR_MAP_LITERAL]); 2655 .assertErrorsWithCodes([ParserErrorCode.EXPECTED_LIST_OR_MAP_LITERAL]);
2651 expect(literal.isSynthetic, isTrue); 2656 expect(literal.isSynthetic, isTrue);
2652 } 2657 }
2653 2658
2654 void test_expectedStringLiteral() { 2659 void test_expectedStringLiteral() {
2655 createParser('1'); 2660 StringLiteral literal = parseStringLiteral('1');
2656 StringLiteral literal = parser.parseStringLiteral();
2657 expectNotNullIfNoErrors(literal); 2661 expectNotNullIfNoErrors(literal);
2658 listener.assertErrorsWithCodes([ParserErrorCode.EXPECTED_STRING_LITERAL]); 2662 listener.assertErrorsWithCodes([ParserErrorCode.EXPECTED_STRING_LITERAL]);
2659 expect(literal.isSynthetic, isTrue); 2663 expect(literal.isSynthetic, isTrue);
2660 } 2664 }
2661 2665
2662 void test_expectedToken_commaMissingInArgumentList() { 2666 void test_expectedToken_commaMissingInArgumentList() {
2663 createParser('(x, y z)'); 2667 createParser('(x, y z)');
2664 ArgumentList list = parser.parseArgumentList(); 2668 ArgumentList list = parser.parseArgumentList();
2665 expectNotNullIfNoErrors(list); 2669 expectNotNullIfNoErrors(list);
2666 listener.assertErrorsWithCodes([ParserErrorCode.EXPECTED_TOKEN]); 2670 listener.assertErrorsWithCodes([ParserErrorCode.EXPECTED_TOKEN]);
(...skipping 429 matching lines...) Expand 10 before | Expand all | Expand 10 after
3096 parseCompilationUnit("class A extends B implements C with D {}", 3100 parseCompilationUnit("class A extends B implements C with D {}",
3097 [ParserErrorCode.IMPLEMENTS_BEFORE_WITH]); 3101 [ParserErrorCode.IMPLEMENTS_BEFORE_WITH]);
3098 } 3102 }
3099 3103
3100 void test_importDirectiveAfterPartDirective() { 3104 void test_importDirectiveAfterPartDirective() {
3101 parseCompilationUnit("part 'a.dart'; import 'b.dart';", 3105 parseCompilationUnit("part 'a.dart'; import 'b.dart';",
3102 [ParserErrorCode.IMPORT_DIRECTIVE_AFTER_PART_DIRECTIVE]); 3106 [ParserErrorCode.IMPORT_DIRECTIVE_AFTER_PART_DIRECTIVE]);
3103 } 3107 }
3104 3108
3105 void test_initializedVariableInForEach() { 3109 void test_initializedVariableInForEach() {
3106 createParser('for (int a = 0 in foo) {}'); 3110 Statement statement = parseStatement('for (int a = 0 in foo) {}');
3107 Statement statement = parser.parseForStatement();
3108 expectNotNullIfNoErrors(statement); 3111 expectNotNullIfNoErrors(statement);
3109 listener.assertErrorsWithCodes( 3112 listener.assertErrorsWithCodes(
3110 [ParserErrorCode.INITIALIZED_VARIABLE_IN_FOR_EACH]); 3113 [ParserErrorCode.INITIALIZED_VARIABLE_IN_FOR_EACH]);
3111 } 3114 }
3112 3115
3113 void test_invalidAwaitInFor() { 3116 void test_invalidAwaitInFor() {
3114 createParser('await for (; ;) {}'); 3117 Statement statement = parseStatement('await for (; ;) {}');
3115 Statement statement = parser.parseForStatement();
3116 expectNotNullIfNoErrors(statement); 3118 expectNotNullIfNoErrors(statement);
3117 listener.assertErrorsWithCodes([ParserErrorCode.INVALID_AWAIT_IN_FOR]); 3119 listener.assertErrorsWithCodes([ParserErrorCode.INVALID_AWAIT_IN_FOR]);
3118 } 3120 }
3119 3121
3120 void test_invalidCodePoint() { 3122 void test_invalidCodePoint() {
3121 createParser("'\\u{110000}'"); 3123 StringLiteral literal =
3122 StringLiteral literal = parser.parseStringLiteral(); 3124 parseExpression("'\\u{110000}'", [ParserErrorCode.INVALID_CODE_POINT]);
3123 expectNotNullIfNoErrors(literal); 3125 expectNotNullIfNoErrors(literal);
3124 listener.assertErrorsWithCodes([ParserErrorCode.INVALID_CODE_POINT]);
3125 } 3126 }
3126 3127
3127 @failingTest 3128 @failingTest
3128 void test_invalidCommentReference__new_nonIdentifier() { 3129 void test_invalidCommentReference__new_nonIdentifier() {
3129 // This test fails because the method parseCommentReference returns null. 3130 // This test fails because the method parseCommentReference returns null.
3130 createParser(''); 3131 createParser('');
3131 CommentReference reference = parser.parseCommentReference('new 42', 0); 3132 CommentReference reference = parser.parseCommentReference('new 42', 0);
3132 expectNotNullIfNoErrors(reference); 3133 expectNotNullIfNoErrors(reference);
3133 listener.assertErrorsWithCodes([ParserErrorCode.INVALID_COMMENT_REFERENCE]); 3134 listener.assertErrorsWithCodes([ParserErrorCode.INVALID_COMMENT_REFERENCE]);
3134 } 3135 }
(...skipping 24 matching lines...) Expand all
3159 } 3160 }
3160 3161
3161 void test_invalidConstructorName_with() { 3162 void test_invalidConstructorName_with() {
3162 createParser("C.with();"); 3163 createParser("C.with();");
3163 ClassMember member = parser.parseClassMember('C'); 3164 ClassMember member = parser.parseClassMember('C');
3164 expectNotNullIfNoErrors(member); 3165 expectNotNullIfNoErrors(member);
3165 listener.assertErrorsWithCodes([ParserErrorCode.INVALID_CONSTRUCTOR_NAME]); 3166 listener.assertErrorsWithCodes([ParserErrorCode.INVALID_CONSTRUCTOR_NAME]);
3166 } 3167 }
3167 3168
3168 void test_invalidHexEscape_invalidDigit() { 3169 void test_invalidHexEscape_invalidDigit() {
3169 createParser("'\\x0 a'"); 3170 StringLiteral literal =
3170 StringLiteral literal = parser.parseStringLiteral(); 3171 parseExpression("'\\x0 a'", [ParserErrorCode.INVALID_HEX_ESCAPE]);
3171 expectNotNullIfNoErrors(literal); 3172 expectNotNullIfNoErrors(literal);
3172 listener.assertErrorsWithCodes([ParserErrorCode.INVALID_HEX_ESCAPE]);
3173 } 3173 }
3174 3174
3175 void test_invalidHexEscape_tooFewDigits() { 3175 void test_invalidHexEscape_tooFewDigits() {
3176 createParser("'\\x0'"); 3176 StringLiteral literal =
3177 StringLiteral literal = parser.parseStringLiteral(); 3177 parseExpression("'\\x0'", [ParserErrorCode.INVALID_HEX_ESCAPE]);
3178 expectNotNullIfNoErrors(literal); 3178 expectNotNullIfNoErrors(literal);
3179 listener.assertErrorsWithCodes([ParserErrorCode.INVALID_HEX_ESCAPE]);
3180 } 3179 }
3181 3180
3182 void test_invalidInterpolationIdentifier_startWithDigit() { 3181 void test_invalidInterpolationIdentifier_startWithDigit() {
3183 createParser("'\$1'"); 3182 StringLiteral literal = parseExpression("'\$1'", [
3184 StringLiteral literal = parser.parseStringLiteral();
3185 expectNotNullIfNoErrors(literal);
3186 listener.assertErrorsWithCodes([
3187 fe.Scanner.useFasta 3183 fe.Scanner.useFasta
3188 ? ScannerErrorCode.MISSING_IDENTIFIER 3184 ? ScannerErrorCode.MISSING_IDENTIFIER
3189 : ParserErrorCode.MISSING_IDENTIFIER 3185 : ParserErrorCode.MISSING_IDENTIFIER
3190 ]); 3186 ]);
3187 expectNotNullIfNoErrors(literal);
3191 } 3188 }
3192 3189
3193 void test_invalidLiteralInConfiguration() { 3190 void test_invalidLiteralInConfiguration() {
3194 createParser("if (a == 'x \$y z') 'a.dart'"); 3191 createParser("if (a == 'x \$y z') 'a.dart'");
3195 Configuration configuration = parser.parseConfiguration(); 3192 Configuration configuration = parser.parseConfiguration();
3196 expectNotNullIfNoErrors(configuration); 3193 expectNotNullIfNoErrors(configuration);
3197 listener.assertErrorsWithCodes( 3194 listener.assertErrorsWithCodes(
3198 [ParserErrorCode.INVALID_LITERAL_IN_CONFIGURATION]); 3195 [ParserErrorCode.INVALID_LITERAL_IN_CONFIGURATION]);
3199 } 3196 }
3200 3197
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after
3431 3428
3432 void test_missingAssignableSelector_prefix_plusPlus_literal() { 3429 void test_missingAssignableSelector_prefix_plusPlus_literal() {
3433 parseExpression("++0", [ParserErrorCode.MISSING_ASSIGNABLE_SELECTOR]); 3430 parseExpression("++0", [ParserErrorCode.MISSING_ASSIGNABLE_SELECTOR]);
3434 } 3431 }
3435 3432
3436 void test_missingAssignableSelector_selector() { 3433 void test_missingAssignableSelector_selector() {
3437 parseExpression("x(y)(z).a++"); 3434 parseExpression("x(y)(z).a++");
3438 } 3435 }
3439 3436
3440 void test_missingAssignableSelector_superPrimaryExpression() { 3437 void test_missingAssignableSelector_superPrimaryExpression() {
3441 createParser('super'); 3438 Expression expression =
3442 Expression expression = parser.parsePrimaryExpression(); 3439 parseExpression('super', [ParserErrorCode.MISSING_ASSIGNABLE_SELECTOR]);
3443 expectNotNullIfNoErrors(expression); 3440 expectNotNullIfNoErrors(expression);
3444 listener
3445 .assertErrorsWithCodes([ParserErrorCode.MISSING_ASSIGNABLE_SELECTOR]);
3446 expect(expression, new isInstanceOf<SuperExpression>()); 3441 expect(expression, new isInstanceOf<SuperExpression>());
3447 SuperExpression superExpression = expression; 3442 SuperExpression superExpression = expression;
3448 expect(superExpression.superKeyword, isNotNull); 3443 expect(superExpression.superKeyword, isNotNull);
3449 } 3444 }
3450 3445
3451 void test_missingAssignableSelector_superPropertyAccessAssigned() { 3446 void test_missingAssignableSelector_superPropertyAccessAssigned() {
3452 parseExpression("super.x = x;"); 3447 parseExpression("super.x = x;");
3453 } 3448 }
3454 3449
3455 void test_missingCatchOrFinally() { 3450 void test_missingCatchOrFinally() {
3456 createParser('try {}'); 3451 TryStatement statement = parseStatement('try {}');
3457 TryStatement statement = parser.parseTryStatement();
3458 expectNotNullIfNoErrors(statement); 3452 expectNotNullIfNoErrors(statement);
3459 listener.assertErrorsWithCodes([ParserErrorCode.MISSING_CATCH_OR_FINALLY]); 3453 listener.assertErrorsWithCodes([ParserErrorCode.MISSING_CATCH_OR_FINALLY]);
3460 expect(statement, isNotNull); 3454 expect(statement, isNotNull);
3461 } 3455 }
3462 3456
3463 void test_missingClassBody() { 3457 void test_missingClassBody() {
3464 parseCompilationUnit( 3458 parseCompilationUnit(
3465 "class A class B {}", [ParserErrorCode.MISSING_CLASS_BODY]); 3459 "class A class B {}", [ParserErrorCode.MISSING_CLASS_BODY]);
3466 } 3460 }
3467 3461
(...skipping 25 matching lines...) Expand all
3493 [ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE]); 3487 [ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE]);
3494 } 3488 }
3495 3489
3496 void test_missingEnumBody() { 3490 void test_missingEnumBody() {
3497 createParser('enum E;'); 3491 createParser('enum E;');
3498 EnumDeclaration declaration = parseFullCompilationUnitMember(); 3492 EnumDeclaration declaration = parseFullCompilationUnitMember();
3499 expectNotNullIfNoErrors(declaration); 3493 expectNotNullIfNoErrors(declaration);
3500 listener.assertErrorsWithCodes([ParserErrorCode.MISSING_ENUM_BODY]); 3494 listener.assertErrorsWithCodes([ParserErrorCode.MISSING_ENUM_BODY]);
3501 } 3495 }
3502 3496
3503 void test_missingExpressionInThrow_withCascade() { 3497 void test_missingExpressionInThrow() {
3504 createParser('throw;'); 3498 ThrowExpression expression =
3505 ThrowExpression expression = parser.parseThrowExpression(); 3499 (parseStatement('throw;') as ExpressionStatement).expression;
3506 expectNotNullIfNoErrors(expression); 3500 expectNotNullIfNoErrors(expression);
3507 listener 3501 listener
3508 .assertErrorsWithCodes([ParserErrorCode.MISSING_EXPRESSION_IN_THROW]); 3502 .assertErrorsWithCodes([ParserErrorCode.MISSING_EXPRESSION_IN_THROW]);
3509 }
3510
3511 void test_missingExpressionInThrow_withoutCascade() {
3512 createParser('throw;');
3513 ThrowExpression expression = parser.parseThrowExpressionWithoutCascade();
3514 expectNotNullIfNoErrors(expression);
3515 listener
3516 .assertErrorsWithCodes([ParserErrorCode.MISSING_EXPRESSION_IN_THROW]);
3517 } 3503 }
3518 3504
3519 void test_missingFunctionBody_emptyNotAllowed() { 3505 void test_missingFunctionBody_emptyNotAllowed() {
3520 createParser(';'); 3506 createParser(';');
3521 FunctionBody functionBody = parser.parseFunctionBody( 3507 FunctionBody functionBody = parser.parseFunctionBody(
3522 false, ParserErrorCode.MISSING_FUNCTION_BODY, false); 3508 false, ParserErrorCode.MISSING_FUNCTION_BODY, false);
3523 expectNotNullIfNoErrors(functionBody); 3509 expectNotNullIfNoErrors(functionBody);
3524 listener.assertErrorsWithCodes([ParserErrorCode.MISSING_FUNCTION_BODY]); 3510 listener.assertErrorsWithCodes([ParserErrorCode.MISSING_FUNCTION_BODY]);
3525 } 3511 }
3526 3512
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
3611 expectNotNullIfNoErrors(literal); 3597 expectNotNullIfNoErrors(literal);
3612 listener.assertErrorsWithCodes([ParserErrorCode.MISSING_IDENTIFIER]); 3598 listener.assertErrorsWithCodes([ParserErrorCode.MISSING_IDENTIFIER]);
3613 } 3599 }
3614 3600
3615 void test_missingIdentifier_inSymbol_first() { 3601 void test_missingIdentifier_inSymbol_first() {
3616 SymbolLiteral literal = parseSymbolLiteral('#'); 3602 SymbolLiteral literal = parseSymbolLiteral('#');
3617 expectNotNullIfNoErrors(literal); 3603 expectNotNullIfNoErrors(literal);
3618 listener.assertErrorsWithCodes([ParserErrorCode.MISSING_IDENTIFIER]); 3604 listener.assertErrorsWithCodes([ParserErrorCode.MISSING_IDENTIFIER]);
3619 } 3605 }
3620 3606
3621 void test_missingIdentifier_number() {
3622 createParser('1');
3623 SimpleIdentifier expression = parser.parseSimpleIdentifier();
3624 expectNotNullIfNoErrors(expression);
3625 listener.assertErrorsWithCodes([ParserErrorCode.MISSING_IDENTIFIER]);
3626 expect(expression.isSynthetic, isTrue);
3627 }
3628
3629 void test_missingIdentifierForParameterGroup() { 3607 void test_missingIdentifierForParameterGroup() {
3630 createParser('(,)'); 3608 createParser('(,)');
3631 FormalParameterList list = parser.parseFormalParameterList(); 3609 FormalParameterList list = parser.parseFormalParameterList();
3632 expectNotNullIfNoErrors(list); 3610 expectNotNullIfNoErrors(list);
3633 listener.assertErrorsWithCodes([ParserErrorCode.MISSING_IDENTIFIER]); 3611 listener.assertErrorsWithCodes([ParserErrorCode.MISSING_IDENTIFIER]);
3634 } 3612 }
3635 3613
3636 void test_missingKeywordOperator() { 3614 void test_missingKeywordOperator() {
3637 createParser('+(x) {}'); 3615 createParser('+(x) {}');
3638 MethodDeclaration method = parser.parseClassMember('C'); 3616 MethodDeclaration method = parser.parseClassMember('C');
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
3672 } 3650 }
3673 3651
3674 void test_missingMethodParameters_void_expression() { 3652 void test_missingMethodParameters_void_expression() {
3675 createParser('void m => null; }'); 3653 createParser('void m => null; }');
3676 ClassMember member = parser.parseClassMember('C'); 3654 ClassMember member = parser.parseClassMember('C');
3677 expectNotNullIfNoErrors(member); 3655 expectNotNullIfNoErrors(member);
3678 listener.assertErrorsWithCodes([ParserErrorCode.MISSING_METHOD_PARAMETERS]); 3656 listener.assertErrorsWithCodes([ParserErrorCode.MISSING_METHOD_PARAMETERS]);
3679 } 3657 }
3680 3658
3681 void test_missingNameForNamedParameter_colon() { 3659 void test_missingNameForNamedParameter_colon() {
3682 createParser('int : 0'); 3660 createParser('({int : 0})');
3683 FormalParameter parameter = 3661 FormalParameter parameter =
3684 parser.parseFormalParameter(ParameterKind.NAMED, inFunctionType: true); 3662 parser.parseFormalParameterList(inFunctionType: true).parameters[0];
3685 expectNotNullIfNoErrors(parameter); 3663 expectNotNullIfNoErrors(parameter);
3686 listener.assertErrorsWithCodes([ 3664 listener.assertErrorsWithCodes([
3687 ParserErrorCode.DEFAULT_VALUE_IN_FUNCTION_TYPE, 3665 ParserErrorCode.DEFAULT_VALUE_IN_FUNCTION_TYPE,
3688 ParserErrorCode.MISSING_NAME_FOR_NAMED_PARAMETER 3666 ParserErrorCode.MISSING_NAME_FOR_NAMED_PARAMETER
3689 ]); 3667 ]);
3690 expect(parameter.identifier, isNotNull); 3668 expect(parameter.identifier, isNotNull);
3691 } 3669 }
3692 3670
3693 void test_missingNameForNamedParameter_equals() { 3671 void test_missingNameForNamedParameter_equals() {
3694 createParser('int = 0'); 3672 createParser('({int = 0})');
3695 FormalParameter parameter = 3673 FormalParameter parameter =
3696 parser.parseFormalParameter(ParameterKind.NAMED, inFunctionType: true); 3674 parser.parseFormalParameterList(inFunctionType: true).parameters[0];
3697 expectNotNullIfNoErrors(parameter); 3675 expectNotNullIfNoErrors(parameter);
3698 listener.assertErrorsWithCodes([ 3676 listener.assertErrorsWithCodes([
3699 ParserErrorCode.DEFAULT_VALUE_IN_FUNCTION_TYPE, 3677 ParserErrorCode.DEFAULT_VALUE_IN_FUNCTION_TYPE,
3700 ParserErrorCode.MISSING_NAME_FOR_NAMED_PARAMETER 3678 ParserErrorCode.MISSING_NAME_FOR_NAMED_PARAMETER
3701 ]); 3679 ]);
3702 expect(parameter.identifier, isNotNull); 3680 expect(parameter.identifier, isNotNull);
3703 } 3681 }
3704 3682
3705 void test_missingNameForNamedParameter_noDefault() { 3683 void test_missingNameForNamedParameter_noDefault() {
3706 createParser('int'); 3684 createParser('({int})');
3707 FormalParameter parameter = 3685 FormalParameter parameter =
3708 parser.parseFormalParameter(ParameterKind.NAMED, inFunctionType: true); 3686 parser.parseFormalParameterList(inFunctionType: true).parameters[0];
3709 expectNotNullIfNoErrors(parameter); 3687 expectNotNullIfNoErrors(parameter);
3710 listener.assertErrorsWithCodes( 3688 listener.assertErrorsWithCodes(
3711 [ParserErrorCode.MISSING_NAME_FOR_NAMED_PARAMETER]); 3689 [ParserErrorCode.MISSING_NAME_FOR_NAMED_PARAMETER]);
3712 expect(parameter.identifier, isNotNull); 3690 expect(parameter.identifier, isNotNull);
3713 } 3691 }
3714 3692
3715 void test_missingNameInLibraryDirective() { 3693 void test_missingNameInLibraryDirective() {
3716 CompilationUnit unit = parseCompilationUnit( 3694 CompilationUnit unit = parseCompilationUnit(
3717 "library;", [ParserErrorCode.MISSING_NAME_IN_LIBRARY_DIRECTIVE]); 3695 "library;", [ParserErrorCode.MISSING_NAME_IN_LIBRARY_DIRECTIVE]);
3718 expect(unit, isNotNull); 3696 expect(unit, isNotNull);
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
3777 parseCompilationUnit( 3755 parseCompilationUnit(
3778 "typedef F<E>;", [ParserErrorCode.MISSING_TYPEDEF_PARAMETERS]); 3756 "typedef F<E>;", [ParserErrorCode.MISSING_TYPEDEF_PARAMETERS]);
3779 } 3757 }
3780 3758
3781 void test_missingTypedefParameters_void() { 3759 void test_missingTypedefParameters_void() {
3782 parseCompilationUnit( 3760 parseCompilationUnit(
3783 "typedef void F;", [ParserErrorCode.MISSING_TYPEDEF_PARAMETERS]); 3761 "typedef void F;", [ParserErrorCode.MISSING_TYPEDEF_PARAMETERS]);
3784 } 3762 }
3785 3763
3786 void test_missingVariableInForEach() { 3764 void test_missingVariableInForEach() {
3787 createParser('for (a < b in foo) {}'); 3765 Statement statement = parseStatement('for (a < b in foo) {}');
3788 Statement statement = parser.parseForStatement();
3789 expectNotNullIfNoErrors(statement); 3766 expectNotNullIfNoErrors(statement);
3790 listener 3767 listener
3791 .assertErrorsWithCodes([ParserErrorCode.MISSING_VARIABLE_IN_FOR_EACH]); 3768 .assertErrorsWithCodes([ParserErrorCode.MISSING_VARIABLE_IN_FOR_EACH]);
3792 } 3769 }
3793 3770
3794 void test_mixedParameterGroups_namedPositional() { 3771 void test_mixedParameterGroups_namedPositional() {
3795 createParser('(a, {b}, [c])'); 3772 createParser('(a, {b}, [c])');
3796 FormalParameterList list = parser.parseFormalParameterList(); 3773 FormalParameterList list = parser.parseFormalParameterList();
3797 expectNotNullIfNoErrors(list); 3774 expectNotNullIfNoErrors(list);
3798 listener.assertErrorsWithCodes([ParserErrorCode.MIXED_PARAMETER_GROUPS]); 3775 listener.assertErrorsWithCodes([ParserErrorCode.MIXED_PARAMETER_GROUPS]);
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
3839 3816
3840 void test_multiplePositionalParameterGroups() { 3817 void test_multiplePositionalParameterGroups() {
3841 createParser('(a, [b], [c])'); 3818 createParser('(a, [b], [c])');
3842 FormalParameterList list = parser.parseFormalParameterList(); 3819 FormalParameterList list = parser.parseFormalParameterList();
3843 expectNotNullIfNoErrors(list); 3820 expectNotNullIfNoErrors(list);
3844 listener.assertErrorsWithCodes( 3821 listener.assertErrorsWithCodes(
3845 [ParserErrorCode.MULTIPLE_POSITIONAL_PARAMETER_GROUPS]); 3822 [ParserErrorCode.MULTIPLE_POSITIONAL_PARAMETER_GROUPS]);
3846 } 3823 }
3847 3824
3848 void test_multipleVariablesInForEach() { 3825 void test_multipleVariablesInForEach() {
3849 createParser('for (int a, b in foo) {}'); 3826 Statement statement = parseStatement('for (int a, b in foo) {}');
3850 Statement statement = parser.parseForStatement();
3851 expectNotNullIfNoErrors(statement); 3827 expectNotNullIfNoErrors(statement);
3852 listener.assertErrorsWithCodes( 3828 listener.assertErrorsWithCodes(
3853 [ParserErrorCode.MULTIPLE_VARIABLES_IN_FOR_EACH]); 3829 [ParserErrorCode.MULTIPLE_VARIABLES_IN_FOR_EACH]);
3854 } 3830 }
3855 3831
3856 void test_multipleWithClauses() { 3832 void test_multipleWithClauses() {
3857 parseCompilationUnit("class A extends B with C with D {}", 3833 parseCompilationUnit("class A extends B with C with D {}",
3858 [ParserErrorCode.MULTIPLE_WITH_CLAUSES]); 3834 [ParserErrorCode.MULTIPLE_WITH_CLAUSES]);
3859 } 3835 }
3860 3836
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after
4114 ParserErrorCode.EXPECTED_TOKEN, 4090 ParserErrorCode.EXPECTED_TOKEN,
4115 ParserErrorCode.EXPECTED_TOKEN, 4091 ParserErrorCode.EXPECTED_TOKEN,
4116 ParserErrorCode.EXPECTED_TOKEN, 4092 ParserErrorCode.EXPECTED_TOKEN,
4117 ParserErrorCode.EXPECTED_TOKEN, 4093 ParserErrorCode.EXPECTED_TOKEN,
4118 ParserErrorCode.EXPECTED_TOKEN, 4094 ParserErrorCode.EXPECTED_TOKEN,
4119 ParserErrorCode.EXPECTED_TOKEN, 4095 ParserErrorCode.EXPECTED_TOKEN,
4120 ]); 4096 ]);
4121 } 4097 }
4122 4098
4123 void test_switchHasCaseAfterDefaultCase() { 4099 void test_switchHasCaseAfterDefaultCase() {
4124 createParser('switch (a) {default: return 0; case 1: return 1;}'); 4100 SwitchStatement statement =
4125 SwitchStatement statement = parser.parseSwitchStatement(); 4101 parseStatement('switch (a) {default: return 0; case 1: return 1;}');
4126 expectNotNullIfNoErrors(statement); 4102 expectNotNullIfNoErrors(statement);
4127 listener.assertErrorsWithCodes( 4103 listener.assertErrorsWithCodes(
4128 [ParserErrorCode.SWITCH_HAS_CASE_AFTER_DEFAULT_CASE]); 4104 [ParserErrorCode.SWITCH_HAS_CASE_AFTER_DEFAULT_CASE]);
4129 } 4105 }
4130 4106
4131 void test_switchHasCaseAfterDefaultCase_repeated() { 4107 void test_switchHasCaseAfterDefaultCase_repeated() {
4132 createParser( 4108 SwitchStatement statement = parseStatement(
4133 'switch (a) {default: return 0; case 1: return 1; case 2: return 2;}'); 4109 'switch (a) {default: return 0; case 1: return 1; case 2: return 2;}');
4134 SwitchStatement statement = parser.parseSwitchStatement();
4135 expectNotNullIfNoErrors(statement); 4110 expectNotNullIfNoErrors(statement);
4136 listener.assertErrorsWithCodes([ 4111 listener.assertErrorsWithCodes([
4137 ParserErrorCode.SWITCH_HAS_CASE_AFTER_DEFAULT_CASE, 4112 ParserErrorCode.SWITCH_HAS_CASE_AFTER_DEFAULT_CASE,
4138 ParserErrorCode.SWITCH_HAS_CASE_AFTER_DEFAULT_CASE 4113 ParserErrorCode.SWITCH_HAS_CASE_AFTER_DEFAULT_CASE
4139 ]); 4114 ]);
4140 } 4115 }
4141 4116
4142 void test_switchHasMultipleDefaultCases() { 4117 void test_switchHasMultipleDefaultCases() {
4143 createParser('switch (a) {default: return 0; default: return 1;}'); 4118 SwitchStatement statement =
4144 SwitchStatement statement = parser.parseSwitchStatement(); 4119 parseStatement('switch (a) {default: return 0; default: return 1;}');
4145 expectNotNullIfNoErrors(statement); 4120 expectNotNullIfNoErrors(statement);
4146 listener.assertErrorsWithCodes( 4121 listener.assertErrorsWithCodes(
4147 [ParserErrorCode.SWITCH_HAS_MULTIPLE_DEFAULT_CASES]); 4122 [ParserErrorCode.SWITCH_HAS_MULTIPLE_DEFAULT_CASES]);
4148 } 4123 }
4149 4124
4150 void test_switchHasMultipleDefaultCases_repeated() { 4125 void test_switchHasMultipleDefaultCases_repeated() {
4151 createParser( 4126 SwitchStatement statement = parseStatement(
4152 'switch (a) {default: return 0; default: return 1; default: return 2;}') ; 4127 'switch (a) {default: return 0; default: return 1; default: return 2;}') ;
4153 SwitchStatement statement = parser.parseSwitchStatement();
4154 expectNotNullIfNoErrors(statement); 4128 expectNotNullIfNoErrors(statement);
4155 listener.assertErrorsWithCodes([ 4129 listener.assertErrorsWithCodes([
4156 ParserErrorCode.SWITCH_HAS_MULTIPLE_DEFAULT_CASES, 4130 ParserErrorCode.SWITCH_HAS_MULTIPLE_DEFAULT_CASES,
4157 ParserErrorCode.SWITCH_HAS_MULTIPLE_DEFAULT_CASES 4131 ParserErrorCode.SWITCH_HAS_MULTIPLE_DEFAULT_CASES
4158 ]); 4132 ]);
4159 } 4133 }
4160 4134
4161 void test_topLevel_getter() { 4135 void test_topLevel_getter() {
4162 createParser('get x => 7;'); 4136 createParser('get x => 7;');
4163 CompilationUnitMember member = parseFullCompilationUnitMember(); 4137 CompilationUnitMember member = parseFullCompilationUnitMember();
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after
4404 ClassMember member = parser.parseClassMember('C'); 4378 ClassMember member = parser.parseClassMember('C');
4405 expectNotNullIfNoErrors(member); 4379 expectNotNullIfNoErrors(member);
4406 listener.assertErrorsWithCodes([ParserErrorCode.VAR_RETURN_TYPE]); 4380 listener.assertErrorsWithCodes([ParserErrorCode.VAR_RETURN_TYPE]);
4407 } 4381 }
4408 4382
4409 void test_varTypedef() { 4383 void test_varTypedef() {
4410 parseCompilationUnit("var typedef F();", [ParserErrorCode.VAR_TYPEDEF]); 4384 parseCompilationUnit("var typedef F();", [ParserErrorCode.VAR_TYPEDEF]);
4411 } 4385 }
4412 4386
4413 void test_voidParameter() { 4387 void test_voidParameter() {
4414 createParser('void a)'); 4388 NormalFormalParameter parameter =
4415 NormalFormalParameter parameter = parser.parseNormalFormalParameter(); 4389 parseFormalParameterList('(void a)').parameters[0];
4416 expectNotNullIfNoErrors(parameter); 4390 expectNotNullIfNoErrors(parameter);
4417 listener.assertNoErrors(); 4391 listener.assertNoErrors();
4418 } 4392 }
4419 4393
4420 void test_voidVariable_parseClassMember_initializer() { 4394 void test_voidVariable_parseClassMember_initializer() {
4421 createParser('void x = 0;'); 4395 createParser('void x = 0;');
4422 ClassMember member = parser.parseClassMember('C'); 4396 ClassMember member = parser.parseClassMember('C');
4423 expectNotNullIfNoErrors(member); 4397 expectNotNullIfNoErrors(member);
4424 listener.assertNoErrors(); 4398 listener.assertNoErrors();
4425 } 4399 }
(...skipping 10992 matching lines...) Expand 10 before | Expand all | Expand 10 after
15418 expectCommentText(typeVariable.documentationComment, '/// Doc'); 15392 expectCommentText(typeVariable.documentationComment, '/// Doc');
15419 } 15393 }
15420 15394
15421 /** 15395 /**
15422 * Assert that the given [name] is in declaration context. 15396 * Assert that the given [name] is in declaration context.
15423 */ 15397 */
15424 void _assertIsDeclarationName(SimpleIdentifier name) { 15398 void _assertIsDeclarationName(SimpleIdentifier name) {
15425 expect(name.inDeclarationContext(), isTrue); 15399 expect(name.inDeclarationContext(), isTrue);
15426 } 15400 }
15427 } 15401 }
OLDNEW
« no previous file with comments | « pkg/analyzer/test/generated/parser_fasta_test.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698