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

Unified Diff: pkg/analyzer/test/generated/parser_test.dart

Issue 2895743002: Fix parser bug found while trying to reproduce a different bug (Closed)
Patch Set: Created 3 years, 7 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/analyzer/lib/src/generated/parser.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/analyzer/test/generated/parser_test.dart
diff --git a/pkg/analyzer/test/generated/parser_test.dart b/pkg/analyzer/test/generated/parser_test.dart
index 19b767dba7b90bdab46c12c5b0711d06370778bb..61ccf2207d4b460a35c8dd956ff6b3b00840e6c7 100644
--- a/pkg/analyzer/test/generated/parser_test.dart
+++ b/pkg/analyzer/test/generated/parser_test.dart
@@ -2,8 +2,6 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-library analyzer.test.generated.parser_test;
-
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/standard_ast_factory.dart';
import 'package:analyzer/dart/ast/token.dart';
@@ -628,9 +626,9 @@ Function(int, String) v;
expect(method.body, isNotNull);
}
- void test_parseClassMember_method_generic_comment_returnType() {
+ void test_parseClassMember_method_generic_comment_parameterType() {
enableGenericMethodComments = true;
- createParser('/*=T*/ m/*<T>*/() {}');
+ createParser('m/*<T>*/(dynamic /*=T*/ p) => null;');
ClassMember member = parser.parseClassMember('C');
expect(member, isNotNull);
assertNoErrors();
@@ -640,18 +638,24 @@ Function(int, String) v;
expect(method.externalKeyword, isNull);
expect(method.modifierKeyword, isNull);
expect(method.propertyKeyword, isNull);
- expect(method.returnType, isNotNull);
- expect((method.returnType as TypeName).name.name, 'T');
+ expect(method.returnType, isNull);
expect(method.name, isNotNull);
expect(method.operatorKeyword, isNull);
expect(method.typeParameters, isNotNull);
- expect(method.parameters, isNotNull);
+
+ FormalParameterList parameters = method.parameters;
+ expect(parameters, isNotNull);
+ expect(parameters.parameters, hasLength(1));
+ var parameter = parameters.parameters[0] as SimpleFormalParameter;
+ var parameterType = parameter.type as TypeName;
+ expect(parameterType.name.name, 'T');
+
expect(method.body, isNotNull);
}
- void test_parseClassMember_method_static_generic_comment_returnType() {
+ void test_parseClassMember_method_generic_comment_returnType() {
enableGenericMethodComments = true;
- createParser('static /*=T*/ m/*<T>*/() {}');
+ createParser('/*=T*/ m/*<T>*/() {}');
ClassMember member = parser.parseClassMember('C');
expect(member, isNotNull);
assertNoErrors();
@@ -659,7 +663,7 @@ Function(int, String) v;
MethodDeclaration method = member;
expect(method.documentationComment, isNull);
expect(method.externalKeyword, isNull);
- expect(method.modifierKeyword, isNotNull);
+ expect(method.modifierKeyword, isNull);
expect(method.propertyKeyword, isNull);
expect(method.returnType, isNotNull);
expect((method.returnType as TypeName).name.name, 'T');
@@ -670,9 +674,9 @@ Function(int, String) v;
expect(method.body, isNotNull);
}
- void test_parseClassMember_method_generic_comment_returnType_complex() {
+ void test_parseClassMember_method_generic_comment_returnType_bound() {
enableGenericMethodComments = true;
- createParser('dynamic /*=Map<int, T>*/ m/*<T>*/() => null;');
+ createParser('num/*=T*/ m/*<T extends num>*/() {}');
ClassMember member = parser.parseClassMember('C');
expect(member, isNotNull);
assertNoErrors();
@@ -682,28 +686,21 @@ Function(int, String) v;
expect(method.externalKeyword, isNull);
expect(method.modifierKeyword, isNull);
expect(method.propertyKeyword, isNull);
-
- {
- var returnType = method.returnType as TypeName;
- expect(returnType, isNotNull);
- expect(returnType.name.name, 'Map');
-
- List<TypeAnnotation> typeArguments = returnType.typeArguments.arguments;
- expect(typeArguments, hasLength(2));
- expect((typeArguments[0] as TypeName).name.name, 'int');
- expect((typeArguments[1] as TypeName).name.name, 'T');
- }
-
+ expect((method.returnType as TypeName).name.name, 'T');
expect(method.name, isNotNull);
expect(method.operatorKeyword, isNull);
expect(method.typeParameters, isNotNull);
+ TypeParameter tp = method.typeParameters.typeParameters[0];
+ expect(tp.name.name, 'T');
+ expect(tp.extendsKeyword, isNotNull);
+ expect((tp.bound as TypeName).name.name, 'num');
expect(method.parameters, isNotNull);
expect(method.body, isNotNull);
}
- void test_parseClassMember_method_generic_comment_parameterType() {
+ void test_parseClassMember_method_generic_comment_returnType_complex() {
enableGenericMethodComments = true;
- createParser('m/*<T>*/(dynamic /*=T*/ p) => null;');
+ createParser('dynamic /*=Map<int, T>*/ m/*<T>*/() => null;');
ClassMember member = parser.parseClassMember('C');
expect(member, isNotNull);
assertNoErrors();
@@ -713,41 +710,21 @@ Function(int, String) v;
expect(method.externalKeyword, isNull);
expect(method.modifierKeyword, isNull);
expect(method.propertyKeyword, isNull);
- expect(method.returnType, isNull);
- expect(method.name, isNotNull);
- expect(method.operatorKeyword, isNull);
- expect(method.typeParameters, isNotNull);
- FormalParameterList parameters = method.parameters;
- expect(parameters, isNotNull);
- expect(parameters.parameters, hasLength(1));
- var parameter = parameters.parameters[0] as SimpleFormalParameter;
- var parameterType = parameter.type as TypeName;
- expect(parameterType.name.name, 'T');
+ {
+ var returnType = method.returnType as TypeName;
+ expect(returnType, isNotNull);
+ expect(returnType.name.name, 'Map');
- expect(method.body, isNotNull);
- }
+ List<TypeAnnotation> typeArguments = returnType.typeArguments.arguments;
+ expect(typeArguments, hasLength(2));
+ expect((typeArguments[0] as TypeName).name.name, 'int');
+ expect((typeArguments[1] as TypeName).name.name, 'T');
+ }
- void test_parseClassMember_method_generic_comment_returnType_bound() {
- enableGenericMethodComments = true;
- createParser('num/*=T*/ m/*<T extends num>*/() {}');
- ClassMember member = parser.parseClassMember('C');
- expect(member, isNotNull);
- assertNoErrors();
- expect(member, new isInstanceOf<MethodDeclaration>());
- MethodDeclaration method = member;
- expect(method.documentationComment, isNull);
- expect(method.externalKeyword, isNull);
- expect(method.modifierKeyword, isNull);
- expect(method.propertyKeyword, isNull);
- expect((method.returnType as TypeName).name.name, 'T');
expect(method.name, isNotNull);
expect(method.operatorKeyword, isNull);
expect(method.typeParameters, isNotNull);
- TypeParameter tp = method.typeParameters.typeParameters[0];
- expect(tp.name.name, 'T');
- expect(tp.extendsKeyword, isNotNull);
- expect((tp.bound as TypeName).name.name, 'num');
expect(method.parameters, isNotNull);
expect(method.body, isNotNull);
}
@@ -1072,6 +1049,27 @@ void Function<A>(core.List<core.int> x) m() => null;
expect(method.body, isNotNull);
}
+ void test_parseClassMember_method_static_generic_comment_returnType() {
+ enableGenericMethodComments = true;
+ createParser('static /*=T*/ m/*<T>*/() {}');
+ ClassMember member = parser.parseClassMember('C');
+ expect(member, isNotNull);
+ assertNoErrors();
+ expect(member, new isInstanceOf<MethodDeclaration>());
+ MethodDeclaration method = member;
+ expect(method.documentationComment, isNull);
+ expect(method.externalKeyword, isNull);
+ expect(method.modifierKeyword, isNotNull);
+ expect(method.propertyKeyword, isNull);
+ expect(method.returnType, isNotNull);
+ expect((method.returnType as TypeName).name.name, 'T');
+ expect(method.name, isNotNull);
+ expect(method.operatorKeyword, isNull);
+ expect(method.typeParameters, isNotNull);
+ expect(method.parameters, isNotNull);
+ expect(method.body, isNotNull);
+ }
+
void test_parseClassMember_method_trailing_commas() {
createParser('void f(int x, int y,) {}');
ClassMember member = parser.parseClassMember('C');
@@ -2861,6 +2859,18 @@ class Foo {
"void f(final x()) {}", [ParserErrorCode.FUNCTION_TYPED_PARAMETER_VAR]);
}
+ void test_functionTypedParameter_incomplete1() {
+ // This caused an exception at one point.
+ parseCompilationUnit("void f(int Function(", [
+ ParserErrorCode.MISSING_FUNCTION_BODY,
+ ParserErrorCode.MISSING_CLOSING_PARENTHESIS,
+ ParserErrorCode.EXPECTED_EXECUTABLE,
+ ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE,
+ ParserErrorCode.EXPECTED_TOKEN,
+ ParserErrorCode.EXPECTED_TOKEN
+ ]);
+ }
+
void test_functionTypedParameter_var() {
parseCompilationUnit(
"void f(var x()) {}", [ParserErrorCode.FUNCTION_TYPED_PARAMETER_VAR]);
@@ -14551,22 +14561,6 @@ enum E {
expect(declaration.propertyKeyword, isNotNull);
}
- void test_parseFunctionDeclaration_setter() {
- createParser('/// Doc\nT set p(v) {}');
- FunctionDeclaration declaration = parseFullCompilationUnitMember();
- expect(declaration, isNotNull);
- assertNoErrors();
- expectCommentText(declaration.documentationComment, '/// Doc');
- expect((declaration.returnType as TypeName).name.name, 'T');
- expect(declaration.name, isNotNull);
- FunctionExpression expression = declaration.functionExpression;
- expect(expression, isNotNull);
- expect(expression.body, isNotNull);
- expect(expression.typeParameters, isNull);
- expect(expression.parameters, isNotNull);
- expect(declaration.propertyKeyword, isNotNull);
- }
-
void test_parseFunctionDeclaration_getter_generic_comment_returnType() {
enableGenericMethodComments = true;
createParser('/*=T*/ f/*<S, T>*/(/*=S*/ s) => null;');
@@ -14585,6 +14579,22 @@ enum E {
expect(functionExpression.body, isNotNull);
}
+ void test_parseFunctionDeclaration_setter() {
+ createParser('/// Doc\nT set p(v) {}');
+ FunctionDeclaration declaration = parseFullCompilationUnitMember();
+ expect(declaration, isNotNull);
+ assertNoErrors();
+ expectCommentText(declaration.documentationComment, '/// Doc');
+ expect((declaration.returnType as TypeName).name.name, 'T');
+ expect(declaration.name, isNotNull);
+ FunctionExpression expression = declaration.functionExpression;
+ expect(expression, isNotNull);
+ expect(expression.body, isNotNull);
+ expect(expression.typeParameters, isNull);
+ expect(expression.parameters, isNotNull);
+ expect(declaration.propertyKeyword, isNotNull);
+ }
+
@failingTest
void test_parseGenericTypeAlias_noTypeParameters() {
createParser('F = int Function(int);');
« no previous file with comments | « pkg/analyzer/lib/src/generated/parser.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698