BEGIN {
chdir 't' if -d 't';
- @INC = qw(. ../lib);
+ require "./test.pl";
+ set_up_inc('../lib');
+ require "./charset_tools.pl";
+ skip_all_without_perlio();
}
use Config;
-require "test.pl";
my $file = tempfile();
+my $crlf = uni_to_native("\015\012");
+my $crcr = uni_to_native("\x0d\x0d");
-if (find PerlIO::Layer 'perlio') {
- plan(tests => 16);
+my $ungetc_count = 8200; # Somewhat over the likely buffer size
+
+{
+ plan(tests => 16 + 2 * $ungetc_count);
ok(open(FOO,">:crlf",$file));
ok(print FOO 'a'.((('a' x 14).qq{\n}) x 2000) || close(FOO));
ok(open(FOO,"<:crlf",$file));
my $text;
{ local $/; $text = <FOO> }
- is(count_chars($text, "\015\012"), 0);
+ is(count_chars($text, $crlf), 0);
is(count_chars($text, "\n"), 2000);
binmode(FOO);
seek(FOO,0,0);
{ local $/; $text = <FOO> }
- is(count_chars($text, "\015\012"), 2000);
+ is(count_chars($text, $crlf), 2000);
SKIP:
{
- skip_if_miniperl("miniperl can't rely on loading PerlIO::scalar");
- skip("no PerlIO::scalar") unless $Config{extensions} =~ m!\bPerlIO/scalar\b!;
+ skip_if_miniperl("miniperl can't rely on loading PerlIO::scalar",
+ 2 * $ungetc_count + 1);
+ skip("no PerlIO::scalar", 2 * $ungetc_count + 1)
+ unless $Config{extensions} =~ m!\bPerlIO/scalar\b!;
require PerlIO::scalar;
- my $fcontents = join "", map {"$_\015\012"} "a".."zzz";
+ my $fcontents = join "", map {"$_$crlf"} "a".."zzz";
open my $fh, "<:crlf", \$fcontents;
local $/ = "xxx";
local $_ = <$fh>;
$/ = "\n";
$s = <$fh>.<$fh>;
is($s, "\nxxy\n");
+
+ for my $i (0 .. $ungetc_count - 1) {
+ my $j = $i % 256;
+ is($fh->ungetc($j), $j, "ungetc of $j returns itself");
+ }
+
+ for (my $i = $ungetc_count - 1; $i >= 0; $i--) {
+ my $j = $i % 256;
+ is(ord($fh->getc()), $j, "getc gets back $j");
+ }
}
ok(close(FOO));
close FOO;
print join(" ", "#", map { sprintf("%02x", $_) } unpack("C*", $foo)),
"\n";
- like($foo, qr/\x0d\x0a$/);
- unlike($foo, qr/\x0d\x0d/);
+ like($foo, qr/$crlf$/);
+ unlike($foo, qr/$crcr/);
}
}
}
-else {
- skip_all("No perlio, so no :crlf");
-}
sub count_chars {
my($text, $chars) = @_;