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

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

Issue 2856463004: New tests and improvements for generics in comments parsing. (Closed)
Patch Set: Created 3 years, 8 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
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 86365562680d20790d277a5a6be489ae93ed53ef..19b767dba7b90bdab46c12c5b0711d06370778bb 100644
--- a/pkg/analyzer/test/generated/parser_test.dart
+++ b/pkg/analyzer/test/generated/parser_test.dart
@@ -640,6 +640,28 @@ 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.name, isNotNull);
+ expect(method.operatorKeyword, isNull);
+ expect(method.typeParameters, isNotNull);
+ expect(method.parameters, isNotNull);
+ 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);
@@ -648,6 +670,64 @@ Function(int, String) v;
expect(method.body, isNotNull);
}
+ void test_parseClassMember_method_generic_comment_returnType_complex() {
+ enableGenericMethodComments = true;
+ createParser('dynamic /*=Map<int, T>*/ m/*<T>*/() => null;');
+ 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);
+
+ {
+ 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.name, isNotNull);
+ expect(method.operatorKeyword, isNull);
+ expect(method.typeParameters, isNotNull);
+ expect(method.parameters, isNotNull);
+ expect(method.body, isNotNull);
+ }
+
+ void test_parseClassMember_method_generic_comment_parameterType() {
+ enableGenericMethodComments = true;
+ createParser('m/*<T>*/(dynamic /*=T*/ p) => null;');
+ 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, 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');
+
+ expect(method.body, isNotNull);
+ }
+
void test_parseClassMember_method_generic_comment_returnType_bound() {
enableGenericMethodComments = true;
createParser('num/*=T*/ m/*<T extends num>*/() {}');
@@ -14487,6 +14567,24 @@ enum E {
expect(declaration.propertyKeyword, isNotNull);
}
+ void test_parseFunctionDeclaration_getter_generic_comment_returnType() {
+ enableGenericMethodComments = true;
+ createParser('/*=T*/ f/*<S, T>*/(/*=S*/ s) => null;');
+ var member = parseFullCompilationUnitMember();
+ expect(member, isNotNull);
+ assertNoErrors();
+ var functionDeclaration = member as FunctionDeclaration;
+ var functionExpression = functionDeclaration.functionExpression;
+ expect(functionDeclaration.documentationComment, isNull);
+ expect(functionDeclaration.externalKeyword, isNull);
+ expect(functionDeclaration.propertyKeyword, isNull);
+ expect((functionDeclaration.returnType as TypeName).name.name, 'T');
+ expect(functionDeclaration.name, isNotNull);
+ expect(functionExpression.typeParameters, isNotNull);
+ expect(functionExpression.parameters, isNotNull);
+ expect(functionExpression.body, isNotNull);
+ }
+
@failingTest
void test_parseGenericTypeAlias_noTypeParameters() {
createParser('F = int Function(int);');

Powered by Google App Engine
This is Rietveld 408576698