X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Fop%2Fread.t;h=8235bc20724b442f24ba8bb21858af465cef6467;hb=1db36481d13cc744ff50a6e79d19885d5071f098;hp=f343c0d114454e37cdfab5a26228964d005b003f;hpb=69938bbac29d5bcb76b80f6eccb27c5ff84cee37;p=p5sagit%2Fp5-mst-13.2.git diff --git a/t/op/read.t b/t/op/read.t index f343c0d..8235bc2 100755 --- a/t/op/read.t +++ b/t/op/read.t @@ -1,7 +1,5 @@ #!./perl -# $RCSfile: read.t,v $$Revision: 4.1 $$Date: 92/08/07 18:28:17 $ - BEGIN { chdir 't'; @INC = '../lib'; @@ -9,7 +7,7 @@ BEGIN { } use strict; -plan tests => 516; +plan tests => 2564; open(FOO,'op/read.t') || open(FOO,'t/op/read.t') || open(FOO,':op:read.t') || die "Can't open op.read"; seek(FOO,4,0) or die "Seek failed: $!"; @@ -25,16 +23,26 @@ $got = read(FOO,$buf,4); is ($got, 0); is ($buf, ""); +# This is true if Config is not built, or if PerlIO is enabled +# ie assume that PerlIO is present, unless we know for sure otherwise. +my $has_perlio = !eval { + no warnings; + require Config; + !$Config::Config{useperlio} +}; + my $tmpfile = 'Op_read.tmp'; -1 while unlink $tmpfile; +END { 1 while unlink $tmpfile } my (@values, @buffers) = ('', ''); -foreach (65, 161) { # , 253, 9786) { +foreach (65, 161, 253, 9786) { push @values, join "", map {chr $_} $_ .. $_ + 4; push @buffers, join "", map {chr $_} $_ + 5 .. $_ + 20; } +my @offsets = (0, 3, 7, 22, -1, -3, -5, -7); +my @lengths = (0, 2, 5, 10); foreach my $value (@values) { foreach my $initial_buffer (@buffers) { @@ -43,39 +51,47 @@ foreach my $value (@values) { # It's all 8 bit unshift @utf8, 0; } - # foreach my $utf8 (@utf8) { - 1 while unlink $tmpfile; - open FH, ">$tmpfile" or die "Can't open $tmpfile: $!"; - print FH $value; - close FH; - foreach my $offset (0, 3, 7, 22, -1, -3, -5, -7) { - foreach my $length (0, 2, 5, 10) { - # Will read the lesser of the length of the file and the read - # length - my $will_read = $value; - if ($length < length $will_read) { - substr ($will_read, $length) = ''; - } - # Going to trash this so need a copy - my $buffer = $initial_buffer; - - my $expect = $buffer; - if ($offset > 0) { - # Right pad with NUL bytes - $expect .= "\0" x $offset; - substr ($expect, $offset) = ''; + SKIP: + foreach my $utf8 (@utf8) { + skip "Needs :utf8 layer but no perlio", 2 * @offsets * @lengths + if $utf8 and !$has_perlio; + + 1 while unlink $tmpfile; + open FH, ">$tmpfile" or die "Can't open $tmpfile: $!"; + binmode FH, "utf8" if $utf8; + print FH $value; + close FH; + foreach my $offset (@offsets) { + foreach my $length (@lengths) { + # Will read the lesser of the length of the file and the + # read length + my $will_read = $value; + if ($length < length $will_read) { + substr ($will_read, $length) = ''; + } + # Going to trash this so need a copy + my $buffer = $initial_buffer; + + my $expect = $buffer; + if ($offset > 0) { + # Right pad with NUL bytes + $expect .= "\0" x $offset; + substr ($expect, $offset) = ''; + } + substr ($expect, $offset) = $will_read; + + open FH, $tmpfile or die "Can't open $tmpfile: $!"; + binmode FH, "utf8" if $utf8; + my $what = sprintf "%d into %d l $length o $offset", + ord $value, ord $buffer; + $what .= ' u' if $utf8; + $got = read (FH, $buffer, $length, $offset); + is ($got, length $will_read, "got $what"); + is ($buffer, $expect, "buffer $what"); + close FH; } - substr ($expect, $offset) = $will_read; - - open FH, $tmpfile or die "Can't open $tmpfile: $!"; - printf "# %d into %d l $length o $offset\n", - ord $value, ord $buffer; - $got = read (FH, $buffer, $length, $offset); - is ($got, length $will_read); - is ($buffer, $expect); } } - # } } }