Hi all,
I'm going to be heading out town tonight and will be gone for the next two
days, but don't take my silence to mean that I've dropped this. I have started
on the TAP::Parser module and have the lexer *mostly* working. There are a
couple of extra tests I need to write for it and it will be done. Also,
because the grammar itself will be context-free, much of the "awareness" of the
parser is being pushed into the lexer (for example, it croaks if it finds more
than one plan).
Because we're discarding anything which does not look like a plan or a test
line, the following:
TAP version 1
1..3
ok 1 - This is a test.
... and bogus info
ok 2 - This is only a test
# this will be discarded
!!! More garbage!
not ok 3 - Had this been an actual emergency ...
# Failed test 'Had this been an actual emergency ...'
# in foo.t at line 5.
# got: '42'
# expected: 'answer'
Gets reduced down to the following:
1..3
ok 1 - This is a test.
ok 2 - This is only a test
not ok 3 - Had this been an actual emergency ...
Currently there are some assumptions I'm making, some of which I think are
wrong.
1. The lexer croaks() if the planned tests and the actual tests don't match.
I assume this behavior should be handled elsewhere?
2. Croaks if numbered and non-numbered tests are mixed:
ok 1 - This is a test.
ok This is only a test
not ok 3 - Had this been an actual emergency ...
ok still don't have a number
3. Croaks if the tests are numbered but the numbers are out of sequence.
4. Croaks if planned tests are a test number are less than one.
Questions:
1. Are non-integers allowed for test numbers? I know this has been proposed
for groups of tests.
2. Is there a plan at some point to allow for test failure output to be
officially incorporated in TAP? I know we discard that *now*, but in the
future, people with a GUI are going to want to click on a failure and see:
not ok 3 - Had this been an actual emergency ...
# Failed test 'Had this been an actual emergency ...'
# in foo.t at line 5.
# got: '42'
# expected: 'answer'
Instead of:
not ok 3 - No more info, sucks to be you.
Next, what interface do you want? I'm thinking something like this:
my $parser = TAP::Parser->new({
newlines => 1, # add newlines to output
version => $optional_version_number
});
$parser->parse($tap); # croaks if it can't
print $parser->plan;
foreach my $line ( $parser->test_lines ) {
print $line;
}
I'm sure there's more information I can capture and provide for you, so tell me
what you want (if I can easily provide it, I will).
Cheers,
Ovid
-- If this message is a response to a question on a mailing list, please send
follow up questions to the list.
Web Programming with Perl -- http://users.easystreet.com/ovid/cgi_course/