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: