# = HISTORY SECTION ===================================================================== # --------------------------------------------------------------------------------------- # version | date | author | changes # --------------------------------------------------------------------------------------- # 0.02 |< 14.04.02| JSTENZEL | adapted to headline shortcuts; # |15.04.2002| JSTENZEL | adapted to chapter docstream hints; # 0.01 |16.08.2001| JSTENZEL | new. # --------------------------------------------------------------------------------------- # PerlPoint test script # pragmata use strict; # load modules use Carp; use Test::More qw(no_plan); use PerlPoint::Backend 0.10; use PerlPoint::Parser 0.36; use PerlPoint::Constants 0.15 qw(:DEFAULT :stream); # declare variables my (@streamData, @results, $toggle); # build parser my ($parser)=new PerlPoint::Parser; # and call it $parser->run( stream => \@streamData, files => ['t/backend-modes.pp'], safe => undef, trace => TRACE_NOTHING, display => DISPLAY_NOINFO+DISPLAY_NOWARN, ); # build a backend my $backend=new PerlPoint::Backend( name => 'installation test: backend modes', trace => TRACE_NOTHING, display => DISPLAY_NOINFO, ); # register a complete set of backend handlers $backend->register($_, \&handler) foreach ( DIRECTIVE_BLOCK, DIRECTIVE_COMMENT, DIRECTIVE_DOCUMENT, DIRECTIVE_DPOINT, DIRECTIVE_HEADLINE, DIRECTIVE_LIST_LSHIFT, DIRECTIVE_LIST_RSHIFT, DIRECTIVE_OPOINT, DIRECTIVE_TAG, DIRECTIVE_TEXT, DIRECTIVE_UPOINT, DIRECTIVE_VERBATIM, DIRECTIVE_SIMPLE, ); # check number of headlines $backend->bind(\@streamData); is($backend->headlineNr, 3); # now run the backend $backend->run(\@streamData); # perform checks: 1st turn (token mode) is(shift(@results), $_) foreach (DIRECTIVE_DOCUMENT, DIRECTIVE_START, 'backend-modes.pp'); is(shift(@results), $_) foreach (DIRECTIVE_HEADLINE, DIRECTIVE_START, 1, 'A new chapter', ''); { my $docstreams=shift(@results); is(ref($docstreams), 'ARRAY'); is(join(' ', @$docstreams), ''); } is(shift(@results), $_) foreach (DIRECTIVE_SIMPLE, DIRECTIVE_START, 'A new chapter'); is(shift(@results), $_) foreach (DIRECTIVE_HEADLINE, DIRECTIVE_COMPLETE, 1); is(shift(@results), $_) foreach (DIRECTIVE_TEXT, DIRECTIVE_START); is(shift(@results), $_) foreach (DIRECTIVE_SIMPLE, DIRECTIVE_START, 'It comes with text.'); is(shift(@results), $_) foreach (DIRECTIVE_TEXT, DIRECTIVE_COMPLETE); is(shift(@results), $_) foreach (DIRECTIVE_HEADLINE, DIRECTIVE_START, 2, 'And a subchapter', ''); { my $docstreams=shift(@results); is(ref($docstreams), 'ARRAY'); is(join(' ', @$docstreams), ''); } is(shift(@results), $_) foreach (DIRECTIVE_SIMPLE, DIRECTIVE_START, 'And a subchapter'); is(shift(@results), $_) foreach (DIRECTIVE_HEADLINE, DIRECTIVE_COMPLETE, 2); is(shift(@results), $_) foreach (DIRECTIVE_TEXT, DIRECTIVE_START); is(shift(@results), $_) foreach (DIRECTIVE_SIMPLE, DIRECTIVE_START, 'with more text.'); is(shift(@results), $_) foreach (DIRECTIVE_TEXT, DIRECTIVE_COMPLETE); is(shift(@results), $_) foreach (DIRECTIVE_HEADLINE, DIRECTIVE_START, 1, 'OK for today', ''); { my $docstreams=shift(@results); is(ref($docstreams), 'ARRAY'); is(join(' ', @$docstreams), ''); } is(shift(@results), $_) foreach (DIRECTIVE_SIMPLE, DIRECTIVE_START, 'OK for today'); is(shift(@results), $_) foreach (DIRECTIVE_HEADLINE, DIRECTIVE_COMPLETE, 1); is(shift(@results), $_) foreach (DIRECTIVE_TEXT, DIRECTIVE_START); is(shift(@results), $_) foreach (DIRECTIVE_SIMPLE, DIRECTIVE_START, 'This might be sufficient.'); is(shift(@results), $_) foreach (DIRECTIVE_TEXT, DIRECTIVE_COMPLETE); is(shift(@results), $_) foreach (DIRECTIVE_DOCUMENT, DIRECTIVE_COMPLETE, 'backend-modes.pp'); # rerun backend in headline mode $backend->mode(STREAM_HEADLINES); $backend->run(\@streamData); # 2nd turn perform headline mode tests is(shift(@results), $_) foreach (DIRECTIVE_HEADLINE, DIRECTIVE_START, 1, 'A new chapter', ''); { my $docstreams=shift(@results); is(ref($docstreams), 'ARRAY'); is(join(' ', @$docstreams), ''); } is(shift(@results), $_) foreach (DIRECTIVE_SIMPLE, DIRECTIVE_START, 'A new chapter'); is(shift(@results), $_) foreach (DIRECTIVE_HEADLINE, DIRECTIVE_COMPLETE, 1); is(shift(@results), $_) foreach (DIRECTIVE_HEADLINE, DIRECTIVE_START, 2, 'And a subchapter', ''); { my $docstreams=shift(@results); is(ref($docstreams), 'ARRAY'); is(join(' ', @$docstreams), ''); } is(shift(@results), $_) foreach (DIRECTIVE_SIMPLE, DIRECTIVE_START, 'And a subchapter'); is(shift(@results), $_) foreach (DIRECTIVE_HEADLINE, DIRECTIVE_COMPLETE, 2); is(shift(@results), $_) foreach (DIRECTIVE_HEADLINE, DIRECTIVE_START, 1, 'OK for today', ''); { my $docstreams=shift(@results); is(ref($docstreams), 'ARRAY'); is(join(' ', @$docstreams), ''); } is(shift(@results), $_) foreach (DIRECTIVE_SIMPLE, DIRECTIVE_START, 'OK for today'); is(shift(@results), $_) foreach (DIRECTIVE_HEADLINE, DIRECTIVE_COMPLETE, 1); # rerun backend in token mode, but with a handler which switches the # mode while the stream is processed (right after each headline) $toggle=STREAM_HEADLINES; $backend->mode(STREAM_TOKENS); $backend->run(\@streamData); # perform checks: 3rd turn (mixed mode) is(shift(@results), $_) foreach (DIRECTIVE_DOCUMENT, DIRECTIVE_START, 'backend-modes.pp'); is(shift(@results), $_) foreach (DIRECTIVE_HEADLINE, DIRECTIVE_START, 1, 'A new chapter', ''); { my $docstreams=shift(@results); is(ref($docstreams), 'ARRAY'); is(join(' ', @$docstreams), ''); } is(shift(@results), $_) foreach (DIRECTIVE_SIMPLE, DIRECTIVE_START, 'A new chapter'); is(shift(@results), $_) foreach (DIRECTIVE_HEADLINE, DIRECTIVE_COMPLETE, 1); is(shift(@results), $_) foreach (DIRECTIVE_HEADLINE, DIRECTIVE_START, 2, 'And a subchapter', ''); { my $docstreams=shift(@results); is(ref($docstreams), 'ARRAY'); is(join(' ', @$docstreams), ''); } is(shift(@results), $_) foreach (DIRECTIVE_SIMPLE, DIRECTIVE_START, 'And a subchapter'); is(shift(@results), $_) foreach (DIRECTIVE_HEADLINE, DIRECTIVE_COMPLETE, 2); is(shift(@results), $_) foreach (DIRECTIVE_TEXT, DIRECTIVE_START); is(shift(@results), $_) foreach (DIRECTIVE_SIMPLE, DIRECTIVE_START, 'with more text.'); is(shift(@results), $_) foreach (DIRECTIVE_TEXT, DIRECTIVE_COMPLETE); is(shift(@results), $_) foreach (DIRECTIVE_HEADLINE, DIRECTIVE_START, 1, 'OK for today', ''); { my $docstreams=shift(@results); is(ref($docstreams), 'ARRAY'); is(join(' ', @$docstreams), ''); } is(shift(@results), $_) foreach (DIRECTIVE_SIMPLE, DIRECTIVE_START, 'OK for today'); is(shift(@results), $_) foreach (DIRECTIVE_HEADLINE, DIRECTIVE_COMPLETE, 1); # results should be checked completely now is(scalar(@results), 0); # SUBROUTINES ############################################################################### # headline handler: store what you found sub handler { # simply store what you received push(@results, @_); # switch backend mode after a headline, if necessary if (defined($toggle) and $_[0]==DIRECTIVE_HEADLINE and $_[1]==DIRECTIVE_COMPLETE) { $backend->mode($toggle); $toggle=($toggle==STREAM_HEADLINES) ? STREAM_TOKENS : STREAM_HEADLINES; } }