stas        02/01/04 01:30:45

  Modified:    t/response/TestAPR perlio.pm
  Log:
  + extend PerlIO tests
  + cleanups
  
  Revision  Changes    Path
  1.6       +92 -28    modperl-2.0/t/response/TestAPR/perlio.pm
  
  Index: perlio.pm
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/t/response/TestAPR/perlio.pm,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- perlio.pm 18 Dec 2001 06:02:29 -0000      1.5
  +++ perlio.pm 4 Jan 2002 09:30:45 -0000       1.6
  @@ -23,74 +23,116 @@
           return Apache::OK;
       }
   
  -    plan $r, tests => 9, have_perl 'iolayers';
  +    plan $r, tests => 14, have_perl 'iolayers';
   
       my $vars = Apache::Test::config()->{vars};
       my $dir  = catfile $vars->{documentroot}, "perlio";
   
       t_mkdir($dir);
   
  +    my $sep = "-- sep --\n";
  +    my @lines = ("This is a test: $$\n", "test line --sep two\n");
  +    my $expected = $lines[0];
  +    my $expected_all = join $sep, @lines;
  +
       # write file
       my $file = catfile $dir, "test";
  -    t_debug "open file $file";
  +    t_debug "open file $file for writing";
       my $foo = "bar";
       open my $fh, ">:APR", $file, $r
           or die "Cannot open $file for writing: $!";
       ok ref($fh) eq 'GLOB';
   
  -    my $expected = "This is a test: $$";
  -    t_debug "write to a file: $expected";
  -    print $fh $expected;
  +    t_debug "write to a file:\n$expected";
  +    print $fh $expected_all;
       close $fh;
   
  -    # open() other tests
  +    # open() failure test
       {
           # non-existant file
           my $file = "/this/file/does/not/exist";
  -        t_write_file("/tmp/testing", "some stuff");
           if (open my $fh, "<:APR", $file, $r) {
               t_debug "must not be able to open $file!";
               ok 0;
               close $fh;
           }
           else {
  -            t_debug "good! cannot open/doesn't exist: $!";
  -            ok 1;
  +            ok t_cmp('No such file or directory',
  +                     "$!",
  +                     "expected failure");
           }
       }
   
  -    # read() test
  -    {
  -        open my $fh, "<:APR", $file, $r
  -            or die "Cannot open $file for reading: $!";
  -        ok ref($fh) eq 'GLOB';
  -
  -        my $received = <$fh>;
  -        close $fh;
  -
  -        ok t_cmp($expected,
  -                 $received,
  -                 "read/write file");
  -    }
  -
       # seek/tell() tests
       {
           open my $fh, "<:APR", $file, $r 
               or die "Cannot open $file for reading: $!";
   
  -        my $pos = 3;
  -        seek $fh, $pos, Fcntl::SEEK_SET();
  +        # read the whole file so we can test the buffer flushed
  +        # correctly on seek.
  +        my $dummy = join '', <$fh>;
   
  +        # Fcntl::SEEK_SET()
  +        my $pos = 3; # rewinds after reading 6 chars above
  +        seek $fh, $pos, Fcntl::SEEK_SET();
           my $got = tell($fh);
           ok t_cmp($pos,
                    $got,
  -                 "seek/tell the file");
  +                 "seek/tell the file Fcntl::SEEK_SET");
  +
  +        # Fcntl::SEEK_CUR()
  +        my $step = 10;
  +        $pos = tell($fh) + $step;
  +        seek $fh, $step, Fcntl::SEEK_CUR();
  +        $got = tell($fh);
  +        ok t_cmp($pos,
  +                 $got,
  +                 "seek/tell the file Fcntl::SEEK_CUR");
  +
  +        # Fcntl::SEEK_END()
  +        $pos = -s $file;
  +        seek $fh, 0, Fcntl::SEEK_END();
  +        $got = tell($fh);
  +        ok t_cmp($pos,
  +                 $got,
  +                 "seek/tell the file Fcntl::SEEK_END");
   
  -        # XXX: test Fcntl::SEEK_CUR() Fcntl::SEEK_END()
           close $fh;
  +    }
  +
  +    # read() tests
  +    {
  +        open my $fh, "<:APR", $file, $r
  +            or die "Cannot open $file for reading: $!";
   
  +        # basic open test
  +        ok ref($fh) eq 'GLOB';
  +
  +        # basic single line read
  +        ok t_cmp($expected,
  +                 scalar(<$fh>),
  +                 "single line read");
  +
  +        # slurp mode
  +        seek $fh, 0, Fcntl::SEEK_SET(); # rewind to the start
  +        local $/;
  +        ok t_cmp($expected_all,
  +                 scalar(<$fh>),
  +                 "slurp file");
  +
  +        # test ungetc (a long sep requires read ahead)
  +        seek $fh, 0, Fcntl::SEEK_SET(); # rewind to the start
  +        local $/ = $sep;
  +        my @got_lines = <$fh>;
  +        my @expect = ($lines[0] . $sep, $lines[1]);
  +        ok t_cmp(\@expect,
  +                 \@got_lines,
  +                 "adjusted input record sep read");
  +
  +        close $fh;
       }
   
  +
       # eof() tests
       {
           open my $fh, "<:APR", $file, $r 
  @@ -103,6 +145,7 @@
           seek $fh, 0, Fcntl::SEEK_END();
           my $received = <$fh>;
   
  +        t_debug($received);
           ok t_cmp(1,
                    eof($fh),
                    "end of file");
  @@ -127,9 +170,30 @@
                    "read/write a dupped file");
       }
   
  +    # unbuffered write
  +    {
  +        open my $wfh, ">:APR", $file, $r
  +            or die "Cannot open $file for writing: $!";
  +
  +        my $expected = "This is an un buffering write test";
  +        # unbuffer
  +        my $oldfh = select($wfh); $| = 1; select($oldfh);
  +        print $wfh $expected; # must be flushed to disk immediately
  +
  +        open my $rfh,  "<:APR", $file, $r
  +            or die "Cannot open $file for reading: $!";
  +        ok t_cmp($expected,
  +                 scalar(<$rfh>),
  +                 "file unbuffered write");
  +
  +        close $wfh;
  +        close $rfh;
  +
  +    }
  +
  +
       # XXX: need tests 
       # - for stdin/out/err as they are handled specially
  -    # - unbuffered read $|=1?
   
       # XXX: tmpfile is missing:
       # consider to use 5.8's syntax: 
  
  
  


Reply via email to