You are viewing a plain text version of this content. The canonical link for it is here.
Posted to modperl-cvs@perl.apache.org by st...@apache.org on 2003/03/05 10:13:18 UTC

cvs commit: modperl-2.0/t/filter/TestFilter out_str_reverse.pm

stas        2003/03/05 01:13:18

  Modified:    t/filter out_str_reverse.t
               t/filter/TestFilter out_str_reverse.pm
  Log:
  the reverse filter is now resistant to upstream filters splitting the data
  in multiply chunks. (the test now exercises f->ctx and can be used as a
  good example)
  
  Revision  Changes    Path
  1.2       +2 -1      modperl-2.0/t/filter/out_str_reverse.t
  
  Index: out_str_reverse.t
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/t/filter/out_str_reverse.t,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- out_str_reverse.t	15 Jan 2003 06:47:15 -0000	1.1
  +++ out_str_reverse.t	5 Mar 2003 09:13:18 -0000	1.2
  @@ -10,9 +10,10 @@
   my @data = (join('', 'a'..'z'), join('', 0..9));
   
   my $reversed_data = join '', map { scalar(reverse $_) . "\n" } @data;
  +my $normal_data   = join '', map { $_                 . "\n" } @data;
   #t_debug($reversed_data);
   my $sig = "Reversed by mod_perl 2.0\n";
  -my $expected = join "\n", @data, $sig;
  +my $expected = $normal_data . $sig;
   
   {
       # test the filtering of the mod_perl response handler
  
  
  
  1.2       +26 -9     modperl-2.0/t/filter/TestFilter/out_str_reverse.pm
  
  Index: out_str_reverse.pm
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/t/filter/TestFilter/out_str_reverse.pm,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- out_str_reverse.pm	15 Jan 2003 06:47:15 -0000	1.1
  +++ out_str_reverse.pm	5 Mar 2003 09:13:18 -0000	1.2
  @@ -1,5 +1,9 @@
   package TestFilter::out_str_reverse;
   
  +# this filter tests how the data can be set-aside between filter
  +# invocations. here we collect a single line (which terminates with a
  +# new line) before we apply the reversing transformation.
  +
   use strict;
   use warnings FATAL => 'all';
   
  @@ -9,18 +13,29 @@
   
   use Apache::Const -compile => qw(OK M_POST);
   
  +use constant BUFF_LEN => 2;
  +
   sub handler {
  -    my $filter = shift;
  +    my $f = shift;
  +    #warn "called\n";
   
  -    while ($filter->read(my $buffer, 1024)) {
  -        for (split "\n", $buffer) {
  -            $filter->print(scalar reverse $_);
  -            $filter->print("\n");
  +    my $leftover = $f->ctx;
  +    while ($f->read(my $buffer, BUFF_LEN)) {
  +        #warn "buffer: [$buffer]\n";
  +        $buffer = $leftover . $buffer if defined $leftover;
  +        $leftover = undef;
  +        while ($buffer =~ /([^\r\n]*)([\r\n]*)/g) {
  +            $leftover = $1, last unless $2;
  +            $f->print(scalar(reverse $1), $2);
           }
       }
   
  -    if ($filter->seen_eos) {
  -        $filter->print("Reversed by mod_perl 2.0\n");
  +    if ($f->seen_eos) {
  +        $f->print(scalar reverse $leftover) if defined $leftover;
  +        $f->print("Reversed by mod_perl 2.0\n");
  +    }
  +    else {
  +        $f->ctx($leftover) if defined $leftover;
       }
   
       return Apache::OK;
  @@ -31,9 +46,11 @@
   
       $r->content_type('text/plain');
   
  +    # unbuffer stdout, so we get the data split across several bbs
  +    local $_ = 1; 
       if ($r->method_number == Apache::M_POST) {
  -        my $data = ModPerl::Test::read_post($r);
  -        $r->puts($data);
  +        my $data = ModPerl::Test::read_post($r); 
  +        $r->print($_) for grep length $_, split /(.{5})/, $data;
       }
   
       return Apache::OK;