[antlr-interest] gUnit: Test of a parser rule always fail
Alan D. Cabrera
list at toolazydogs.com
Tue May 24 06:20:58 PDT 2011
I invite you to take a look at AUnit, an ANTLR v3 JUnit testing extension:
https://github.com/maguro/aunit
I would be interested in hearing your comments and suggestions.
Regards,
Alan
On May 24, 2011, at 6:16 AM, Simon Marchi wrote:
> Hmm that's true.
>
> I first tried adding this to remove whitespaces:
>
> WHITESPACE: (SPACE | LF | TAB) {$channel = HIDDEN;};
> fragment SPACE: ' ';
> fragment LF: '\n';
> fragment TAB: '\t';
>
> but that did not fix the problem. I also tried with {Skip();} with the
> same results. I then changed my parser rule to a simpler one, having
> only one token, no whitespace:
> fullName: FIRSTNAME;
>
> and changed the test accordingly:
> fullName:
> "SIMON" OK
>
> But it still fails the test.
>
> I tried to do a little bit of debug in the gUnit code, and it appears
> that the gUnitExecutor always enters this condition:
> /** Invalid input */
> if ( tokens.index()!=tokens.size() ) {
> //throw new InvalidInputException();
> ps2.print("Invalid input");
> }
>
> In my last example (with fullname: FIRSTNAME;), tokens.index() returns
> 1 while tokens.size() returns 2. It appears tokens.size() returns the
> number of tokens read by the lexer, which is contains the tokens
> "SIMON" and "<EOF>". Also, if I understand,correctly, tokens.index()
> indicates the index of the next token to be read, which is also the
> number of tokens consumed. Comparing both should tell if we consumed
> all the tokens present in the input with our grammar rule, is it
> correct ?
>
> If you have any tip or explanation that could help me, thank you in advance !
>
> Simon
>
>
> On Sat, May 21, 2011 at 16:49, Jim Idle <jimi at temporal-wave.com> wrote:
>> Your lexer does not cater for spaces.
>>
>> Jim
>>
>>> -----Original Message-----
>>> From: antlr-interest-bounces at antlr.org [mailto:antlr-interest-
>>> bounces at antlr.org] On Behalf Of Simon Marchi
>>> Sent: Friday, May 20, 2011 3:33 PM
>>> To: antlr-interest at antlr.org
>>> Subject: [antlr-interest] gUnit: Test of a parser rule always fail
>>>
>>> Hello !
>>>
>>> I a trying to automatize the testing of my grammar using gUnit, but I
>>> ran into the following problem: when I try to test a parser rule, the
>>> input string is never recognized. The lexer rules can be tested without
>>> problem. I made a simple example to illustrate:
>>>
>>> Grammar file Cool.g:
>>> grammar Cool;
>>>
>>> options {language = Java;}
>>> @lexer::header {package a.b.c;}
>>> @header {package a.b.c;}
>>>
>>> // Parser rule
>>> fullName: FIRSTNAME LASTNAME;
>>>
>>> // Lexer tokens
>>> FIRSTNAME: 'SIMON';
>>> LASTNAME: 'MARCHI';
>>>
>>> gUnit file Cool.gunit:
>>> gunit Cool;
>>>
>>> @header {package a.b.c;}
>>>
>>> // The test case
>>> fullName:
>>> "SIMON MARCHI" OK
>>>
>>> Normally, the test case should pass, since the input is part of the
>>> grammar. I use the ANTLR plugin inside Eclipse, and pasting the input
>>> ("SIMON MARCHI") in the interactive interpreter tells me that it is
>>> accepted by the rule fullName. However, the test fails. If I change
>>> from OK to FAIL, then the test passes (obviously).
>>>
>>> Is there anything I am doing wrong here ?
>>>
>>> Thank you,
>>>
>>> Simon
>>>
>>> List: http://www.antlr.org/mailman/listinfo/antlr-interest
>>> Unsubscribe: http://www.antlr.org/mailman/options/antlr-interest/your-
>>> email-address
>>
>> List: http://www.antlr.org/mailman/listinfo/antlr-interest
>> Unsubscribe: http://www.antlr.org/mailman/options/antlr-interest/your-email-address
>>
>
> List: http://www.antlr.org/mailman/listinfo/antlr-interest
> Unsubscribe: http://www.antlr.org/mailman/options/antlr-interest/your-email-address
More information about the antlr-interest
mailing list