Fix several failing tests
R=danrubel@google.com
Review-Url: https://codereview.chromium.org/3011643002 .
diff --git a/pkg/analyzer/lib/src/fasta/ast_builder.dart b/pkg/analyzer/lib/src/fasta/ast_builder.dart
index c6f57ce..524b1fd 100644
--- a/pkg/analyzer/lib/src/fasta/ast_builder.dart
+++ b/pkg/analyzer/lib/src/fasta/ast_builder.dart
@@ -1226,9 +1226,6 @@
void endConditionalUri(Token ifKeyword, Token equalitySign) {
debugEvent("ConditionalUri");
StringLiteral libraryUri = pop();
- // TODO(paulberry,ahe): the parser should report the right paren token to
- // the listener.
- Token rightParen = null;
StringLiteral value;
if (equalitySign != null) {
value = pop();
@@ -1239,6 +1236,9 @@
// recovery and then report both the ifKeyword and leftParen tokens to the
// listener.
Token leftParen = ifKeyword.next;
+ // TODO(paulberry,ahe): the parser should report the right paren token to
+ // the listener.
+ Token rightParen = name.endToken.next;
push(ast.configuration(ifKeyword, leftParen, name, equalitySign, value,
rightParen, libraryUri));
}
diff --git a/pkg/analyzer/test/generated/parser_fasta_test.dart b/pkg/analyzer/test/generated/parser_fasta_test.dart
index 31f1ce3..339bb27 100644
--- a/pkg/analyzer/test/generated/parser_fasta_test.dart
+++ b/pkg/analyzer/test/generated/parser_fasta_test.dart
@@ -10,6 +10,7 @@
import 'package:analyzer/src/dart/scanner/scanner.dart';
import 'package:analyzer/src/fasta/ast_builder.dart';
import 'package:analyzer/src/generated/parser.dart' as analyzer;
+import 'package:analyzer/src/generated/parser.dart' show CommentAndMetadata;
import 'package:analyzer/src/generated/utilities_dart.dart';
import 'package:analyzer/src/string_source.dart';
import 'package:front_end/src/fasta/fasta_codes.dart' show Message;
@@ -19,6 +20,7 @@
import 'package:front_end/src/fasta/parser.dart' as fasta;
import 'package:front_end/src/fasta/scanner/string_scanner.dart';
import 'package:front_end/src/fasta/scanner/token.dart' as fasta;
+import 'package:front_end/src/fasta/source/stack_listener.dart';
import 'package:test/test.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -2808,6 +2810,24 @@
}
@override
+ CommentAndMetadata parseCommentAndMetadata() {
+ List commentAndMetadata =
+ _run((parser) => parser.parseMetadataStar, nodeCount: -1);
+ expect(commentAndMetadata, hasLength(2));
+ Object comment = commentAndMetadata[0];
+ Object metadata = commentAndMetadata[1];
+ if (comment == NullValue.Comments) {
+ comment = null;
+ }
+ if (metadata == NullValue.Metadata) {
+ metadata = null;
+ } else {
+ metadata = new List<Annotation>.from(metadata);
+ }
+ return new CommentAndMetadata(comment, metadata);
+ }
+
+ @override
CompilationUnit parseCompilationUnit2() {
var result = _run(null) as CompilationUnit;
_eventListener.expectEmpty();
@@ -2849,9 +2869,13 @@
}
/**
- * Runs a single parser function, and returns the result as an analyzer AST.
+ * Runs a single parser function (returned by [getParseFunction]), and returns
+ * the result as an analyzer AST. It checks that the parse consumed all of the
+ * tokens and that there were [nodeCount] AST nodes created (unless the node
+ * count is negative).
*/
- Object _run(ParseFunction getParseFunction(fasta.Parser parser)) {
+ Object _run(ParseFunction getParseFunction(fasta.Parser parser),
+ {int nodeCount: 1}) {
ParseFunction parseFunction;
if (getParseFunction != null) {
parseFunction = getParseFunction(_fastaParser);
@@ -2862,7 +2886,12 @@
}
_currentFastaToken = parseFunction(_currentFastaToken);
expect(_currentFastaToken.isEof, isTrue);
- expect(_astBuilder.stack, hasLength(1));
+ if (nodeCount >= 0) {
+ expect(_astBuilder.stack, hasLength(nodeCount));
+ }
+ if (nodeCount != 1) {
+ return _astBuilder.stack.values;
+ }
return _astBuilder.pop();
}
}
@@ -3813,7 +3842,6 @@
@override
@failingTest
void test_parseCombinator_hide() {
- // TODO(brianwilkerson) exception:
// Uninteresting. Covered by the test_parseCombinators_* methods.
super.test_parseCombinator_hide();
}
@@ -3821,149 +3849,26 @@
@override
@failingTest
void test_parseCombinator_show() {
- // TODO(brianwilkerson) exception:
// Uninteresting. Covered by the test_parseCombinators_* methods.
super.test_parseCombinator_show();
}
@override
@failingTest
- void test_parseCombinators_h() {
- // TODO(brianwilkerson) Failed to use all tokens.
- super.test_parseCombinators_h();
- }
-
- @override
- @failingTest
- void test_parseCombinators_hs() {
- // TODO(brianwilkerson) Failed to use all tokens.
- super.test_parseCombinators_hs();
- }
-
- @override
- @failingTest
- void test_parseCombinators_hshs() {
- // TODO(brianwilkerson) Failed to use all tokens.
- super.test_parseCombinators_hshs();
- }
-
- @override
- @failingTest
- void test_parseCombinators_s() {
- // TODO(brianwilkerson) Failed to use all tokens.
- super.test_parseCombinators_s();
- }
-
- @override
- @failingTest
- void test_parseCommentAndMetadata_c() {
- // TODO(brianwilkerson) exception:
- // NoSuchMethodError: Class 'ParserProxy' has no instance method 'parseCommentAndMetadata'.
- super.test_parseCommentAndMetadata_c();
- }
-
- @override
- @failingTest
- void test_parseCommentAndMetadata_cmc() {
- // TODO(brianwilkerson) exception:
- // NoSuchMethodError: Class 'ParserProxy' has no instance method 'parseCommentAndMetadata'.
- super.test_parseCommentAndMetadata_cmc();
- }
-
- @override
- @failingTest
- void test_parseCommentAndMetadata_cmcm() {
- // TODO(brianwilkerson) exception:
- // NoSuchMethodError: Class 'ParserProxy' has no instance method 'parseCommentAndMetadata'.
- super.test_parseCommentAndMetadata_cmcm();
- }
-
- @override
- @failingTest
- void test_parseCommentAndMetadata_cmm() {
- // TODO(brianwilkerson) exception:
- // NoSuchMethodError: Class 'ParserProxy' has no instance method 'parseCommentAndMetadata'.
- super.test_parseCommentAndMetadata_cmm();
- }
-
- @override
- @failingTest
- void test_parseCommentAndMetadata_m() {
- // TODO(brianwilkerson) exception:
- // NoSuchMethodError: Class 'ParserProxy' has no instance method 'parseCommentAndMetadata'.
- super.test_parseCommentAndMetadata_m();
- }
-
- @override
- @failingTest
void test_parseCommentAndMetadata_mcm() {
- // TODO(brianwilkerson) exception:
- // NoSuchMethodError: Class 'ParserProxy' has no instance method 'parseCommentAndMetadata'.
+ // TODO(brianwilkerson) Does not find comment if not before first annotation
super.test_parseCommentAndMetadata_mcm();
}
@override
@failingTest
void test_parseCommentAndMetadata_mcmc() {
- // TODO(brianwilkerson) exception:
- // NoSuchMethodError: Class 'ParserProxy' has no instance method 'parseCommentAndMetadata'.
+ // TODO(brianwilkerson) Does not find comment if not before first annotation
super.test_parseCommentAndMetadata_mcmc();
}
@override
@failingTest
- void test_parseCommentAndMetadata_mm() {
- // TODO(brianwilkerson) exception:
- // NoSuchMethodError: Class 'ParserProxy' has no instance method 'parseCommentAndMetadata'.
- super.test_parseCommentAndMetadata_mm();
- }
-
- @override
- @failingTest
- void test_parseCommentAndMetadata_none() {
- // TODO(brianwilkerson) exception:
- // NoSuchMethodError: Class 'ParserProxy' has no instance method 'parseCommentAndMetadata'.
- super.test_parseCommentAndMetadata_none();
- }
-
- @override
- @failingTest
- void test_parseCommentAndMetadata_singleLine() {
- // TODO(brianwilkerson) exception:
- // NoSuchMethodError: Class 'ParserProxy' has no instance method 'parseCommentAndMetadata'.
- super.test_parseCommentAndMetadata_singleLine();
- }
-
- @override
- @failingTest
- void test_parseConfiguration_noOperator_dottedIdentifier() {
- // TODO(brianwilkerson) Missing right parenthesis.
- super.test_parseConfiguration_noOperator_dottedIdentifier();
- }
-
- @override
- @failingTest
- void test_parseConfiguration_noOperator_simpleIdentifier() {
- // TODO(brianwilkerson) Missing right parenthesis.
- super.test_parseConfiguration_noOperator_simpleIdentifier();
- }
-
- @override
- @failingTest
- void test_parseConfiguration_operator_dottedIdentifier() {
- // TODO(brianwilkerson) Missing right parenthesis.
- super.test_parseConfiguration_operator_dottedIdentifier();
- }
-
- @override
- @failingTest
- void test_parseConfiguration_operator_simpleIdentifier() {
- // TODO(brianwilkerson) Missing right parenthesis.
- super.test_parseConfiguration_operator_simpleIdentifier();
- }
-
- @override
- @failingTest
void test_parseConstructorName_named_noPrefix() {
// TODO(brianwilkerson) exception:
// NoSuchMethodError: Class 'ParserProxy' has no instance method 'parseConstructorName'.
@@ -4397,55 +4302,6 @@
@override
@failingTest
- void test_parseTypeAnnotation_function_noReturnType_noParameters() {
- // TODO(brianwilkerson) Failed to use all tokens.
- super.test_parseTypeAnnotation_function_noReturnType_noParameters();
- }
-
- @override
- @failingTest
- void test_parseTypeAnnotation_function_noReturnType_parameters() {
- // TODO(brianwilkerson) Failed to use all tokens.
- super.test_parseTypeAnnotation_function_noReturnType_parameters();
- }
-
- @override
- @failingTest
- void test_parseTypeAnnotation_function_returnType_classFunction() {
- // TODO(brianwilkerson) Failed to use all tokens.
- super.test_parseTypeAnnotation_function_returnType_classFunction();
- }
-
- @override
- @failingTest
- void test_parseTypeAnnotation_function_returnType_function() {
- // TODO(brianwilkerson) Failed to use all tokens.
- super.test_parseTypeAnnotation_function_returnType_function();
- }
-
- @override
- @failingTest
- void test_parseTypeAnnotation_function_returnType_simple() {
- // TODO(brianwilkerson) Failed to use all tokens.
- super.test_parseTypeAnnotation_function_returnType_simple();
- }
-
- @override
- @failingTest
- void test_parseTypeAnnotation_function_returnType_withArguments() {
- // TODO(brianwilkerson) Failed to use all tokens.
- super.test_parseTypeAnnotation_function_returnType_withArguments();
- }
-
- @override
- @failingTest
- void test_parseTypeAnnotation_named() {
- // TODO(brianwilkerson) Failed to use all tokens.
- super.test_parseTypeAnnotation_named();
- }
-
- @override
- @failingTest
void test_parseTypeArgumentList_empty() {
// TODO(brianwilkerson) reportUnrecoverableErrorWithToken
super.test_parseTypeArgumentList_empty();
diff --git a/pkg/analyzer/test/generated/parser_test.dart b/pkg/analyzer/test/generated/parser_test.dart
index fa2e143..420eda0 100644
--- a/pkg/analyzer/test/generated/parser_test.dart
+++ b/pkg/analyzer/test/generated/parser_test.dart
@@ -11137,7 +11137,7 @@
}
void test_parseCombinator_hide() {
- createParser('hide a;');
+ createParser('hide a');
Combinator combinator = parser.parseCombinator();
expectNotNullIfNoErrors(combinator);
listener.assertNoErrors();
@@ -11148,7 +11148,7 @@
}
void test_parseCombinator_show() {
- createParser('show a;');
+ createParser('show a');
Combinator combinator = parser.parseCombinator();
expectNotNullIfNoErrors(combinator);
listener.assertNoErrors();
@@ -11159,7 +11159,7 @@
}
void test_parseCombinators_h() {
- createParser('hide a;');
+ createParser('hide a');
List<Combinator> combinators = parser.parseCombinators();
expectNotNullIfNoErrors(combinators);
listener.assertNoErrors();
@@ -11171,7 +11171,7 @@
}
void test_parseCombinators_hs() {
- createParser('hide a show b;');
+ createParser('hide a show b');
List<Combinator> combinators = parser.parseCombinators();
expectNotNullIfNoErrors(combinators);
listener.assertNoErrors();
@@ -11187,7 +11187,7 @@
}
void test_parseCombinators_hshs() {
- createParser('hide a show b hide c show d;');
+ createParser('hide a show b hide c show d');
List<Combinator> combinators = parser.parseCombinators();
expectNotNullIfNoErrors(combinators);
listener.assertNoErrors();
@@ -11195,7 +11195,7 @@
}
void test_parseCombinators_s() {
- createParser('show a;');
+ createParser('show a');
List<Combinator> combinators = parser.parseCombinators();
expectNotNullIfNoErrors(combinators);
listener.assertNoErrors();
@@ -11207,7 +11207,7 @@
}
void test_parseCommentAndMetadata_c() {
- createParser('/** 1 */ void');
+ createParser('/** 1 */');
CommentAndMetadata commentAndMetadata = parser.parseCommentAndMetadata();
expectNotNullIfNoErrors(commentAndMetadata);
listener.assertNoErrors();
@@ -11216,7 +11216,7 @@
}
void test_parseCommentAndMetadata_cmc() {
- createParser('/** 1 */ @A /** 2 */ void');
+ createParser('/** 1 */ @A /** 2 */');
CommentAndMetadata commentAndMetadata = parser.parseCommentAndMetadata();
expectNotNullIfNoErrors(commentAndMetadata);
listener.assertNoErrors();
@@ -11225,7 +11225,7 @@
}
void test_parseCommentAndMetadata_cmcm() {
- createParser('/** 1 */ @A /** 2 */ @B void');
+ createParser('/** 1 */ @A /** 2 */ @B');
CommentAndMetadata commentAndMetadata = parser.parseCommentAndMetadata();
expectNotNullIfNoErrors(commentAndMetadata);
listener.assertNoErrors();
@@ -11234,7 +11234,7 @@
}
void test_parseCommentAndMetadata_cmm() {
- createParser('/** 1 */ @A @B void');
+ createParser('/** 1 */ @A @B');
CommentAndMetadata commentAndMetadata = parser.parseCommentAndMetadata();
expectNotNullIfNoErrors(commentAndMetadata);
listener.assertNoErrors();
@@ -11243,7 +11243,7 @@
}
void test_parseCommentAndMetadata_m() {
- createParser('@A void');
+ createParser('@A');
CommentAndMetadata commentAndMetadata = parser.parseCommentAndMetadata();
expectNotNullIfNoErrors(commentAndMetadata);
listener.assertNoErrors();
@@ -11252,7 +11252,7 @@
}
void test_parseCommentAndMetadata_mcm() {
- createParser('@A /** 1 */ @B void');
+ createParser('@A /** 1 */ @B');
CommentAndMetadata commentAndMetadata = parser.parseCommentAndMetadata();
expectNotNullIfNoErrors(commentAndMetadata);
listener.assertNoErrors();
@@ -11261,7 +11261,7 @@
}
void test_parseCommentAndMetadata_mcmc() {
- createParser('@A /** 1 */ @B /** 2 */ void');
+ createParser('@A /** 1 */ @B /** 2 */');
CommentAndMetadata commentAndMetadata = parser.parseCommentAndMetadata();
expectNotNullIfNoErrors(commentAndMetadata);
listener.assertNoErrors();
@@ -11270,7 +11270,7 @@
}
void test_parseCommentAndMetadata_mm() {
- createParser('@A @B(x) void');
+ createParser('@A @B(x)');
CommentAndMetadata commentAndMetadata = parser.parseCommentAndMetadata();
expectNotNullIfNoErrors(commentAndMetadata);
listener.assertNoErrors();
@@ -11279,7 +11279,7 @@
}
void test_parseCommentAndMetadata_none() {
- createParser('void');
+ createParser('');
CommentAndMetadata commentAndMetadata = parser.parseCommentAndMetadata();
expectNotNullIfNoErrors(commentAndMetadata);
listener.assertNoErrors();
@@ -11291,7 +11291,7 @@
createParser(r'''
/// 1
/// 2
-void''');
+''');
CommentAndMetadata commentAndMetadata = parser.parseCommentAndMetadata();
expectNotNullIfNoErrors(commentAndMetadata);
listener.assertNoErrors();
@@ -11983,7 +11983,7 @@
}
void test_parseTypeAnnotation_function_noReturnType_noParameters() {
- createParser('Function() v');
+ createParser('Function()');
GenericFunctionType functionType = parser.parseTypeAnnotation(false);
expectNotNullIfNoErrors(functionType);
listener.assertNoErrors();
@@ -11996,7 +11996,7 @@
}
void test_parseTypeAnnotation_function_noReturnType_parameters() {
- createParser('Function(int, int) v');
+ createParser('Function(int, int)');
GenericFunctionType functionType = parser.parseTypeAnnotation(false);
expectNotNullIfNoErrors(functionType);
listener.assertNoErrors();
@@ -12053,14 +12053,14 @@
}
void test_parseTypeAnnotation_function_returnType_classFunction() {
- createParser('Function v');
+ createParser('Function');
TypeName functionType = parser.parseTypeAnnotation(false);
expectNotNullIfNoErrors(functionType);
listener.assertNoErrors();
}
void test_parseTypeAnnotation_function_returnType_function() {
- createParser('A Function(B, C) Function(D) v');
+ createParser('A Function(B, C) Function(D)');
// TODO(scheglov) improve the test to verify also the node properties
var functionType = parser.parseTypeAnnotation(false) as GenericFunctionType;
expectNotNullIfNoErrors(functionType);
@@ -12109,7 +12109,7 @@
}
void test_parseTypeAnnotation_function_returnType_simple() {
- createParser('A Function(B, C) v');
+ createParser('A Function(B, C)');
// TODO(scheglov) improve the test to verify also the node properties
var functionType = parser.parseTypeAnnotation(false) as GenericFunctionType;
expectNotNullIfNoErrors(functionType);
@@ -12148,7 +12148,7 @@
}
void test_parseTypeAnnotation_function_returnType_withArguments() {
- createParser('A<B> Function(C) v');
+ createParser('A<B> Function(C)');
// TODO(scheglov) improve this test to verify also the node properties
var functionType = parser.parseTypeAnnotation(false) as GenericFunctionType;
expectNotNullIfNoErrors(functionType);
@@ -12156,7 +12156,7 @@
}
void test_parseTypeAnnotation_named() {
- createParser('A<B> v');
+ createParser('A<B>');
TypeName typeName = parser.parseTypeAnnotation(false);
expectNotNullIfNoErrors(typeName);
listener.assertNoErrors();