fasta listener assert enclosing event

The fasta parser generates begin/end event pairs such as
[beginCompilationUnit] and [endCompilationUnit].
Each event should be generated "within" a "higher level" begin/end event pair,
except for [beginCompilationUnit] and [endCompilationUnit],
which should not be generated within any begin/end event pair.

This CL updates the fasta test listener and associated test code to assert that
[endTopLevelDeclaration] is generated within or is enclosed by
a begin/end "CompilationUnit" event pair, and that the [beginCompilationUnit]
and [endCompilationUnit] events are not enclosed by any begin/end event pairs.

R=paulberry@google.com

Review-Url: https://codereview.chromium.org/2993833002 .
This commit is contained in:
Dan Rubel 2017-08-07 14:20:08 -04:00
parent 907fbcd694
commit 6e4f00a27c
2 changed files with 216 additions and 178 deletions

File diff suppressed because it is too large Load diff

View file

@ -467,12 +467,12 @@ class FastaParserTestCase extends Object
@override
CompilationUnitMember parseFullCompilationUnitMember() {
return _parserProxy._run((parser) => parser.parseTopLevelDeclaration);
return _parserProxy.parseTopLevelDeclaration();
}
@override
Directive parseFullDirective() {
return _parserProxy._run((parser) => parser.parseTopLevelDeclaration);
return _parserProxy.parseTopLevelDeclaration();
}
@override
@ -792,6 +792,8 @@ class ParserProxy implements analyzer.Parser {
*/
final GatheringErrorListener _errorListener;
final ForwardingTestListener _eventListener;
/**
* Creates a [ParserProxy] which is prepared to begin parsing at the given
* Fasta token.
@ -807,28 +809,40 @@ class ParserProxy implements analyzer.Parser {
var astBuilder =
new AstBuilder(errorReporter, library, member, scope, true);
astBuilder.parseGenericMethodComments = enableGenericMethodComments;
var fastaParser = new fasta.Parser(new ForwardingTestListener(astBuilder));
var eventListener = new ForwardingTestListener(astBuilder);
var fastaParser = new fasta.Parser(eventListener);
astBuilder.parser = fastaParser;
return new ParserProxy._(
startingToken, fastaParser, astBuilder, errorListener);
startingToken, fastaParser, astBuilder, errorListener, eventListener);
}
ParserProxy._(this._currentFastaToken, this._fastaParser, this._astBuilder,
this._errorListener);
this._errorListener, this._eventListener);
noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
@override
ClassMember parseClassMember(String className) {
_astBuilder.className = className;
_eventListener.begin('CompilationUnit');
var result = _run((parser) => parser.parseMember) as ClassMember;
_eventListener.end('CompilationUnit');
_astBuilder.className = null;
return result;
}
@override
CompilationUnit parseCompilationUnit2() {
return _run((parser) => parser.parseUnit) as CompilationUnit;
var result = _run((parser) => parser.parseUnit) as CompilationUnit;
_eventListener.expectEmpty();
return result;
}
AnnotatedNode parseTopLevelDeclaration() {
_eventListener.begin('CompilationUnit');
var result = _run((parser) => parser.parseTopLevelDeclaration);
_eventListener.end('CompilationUnit');
return result;
}
/**