#!/usr/bin/perl -w
# Test that open still honors the open pragma.
use strict;
use warnings;
use autodie;
use Fcntl;
use File::Temp;
use Test::More;
if( $] < '5.01000' ) {
plan skip_all => "autodie does not honor the open pragma before 5.10";
}
else {
plan "no_plan";
}
# Test with an open pragma on
{
use open IN => ':encoding(utf8)', OUT => ':utf8';
# Test the standard handles and all newly opened handles are utf8
my $file = File::Temp->new;
my $txt = "autodie is MËTÁŁ";
# open for writing
{
open my $fh, ">", $file;
my @layers = PerlIO::get_layers($fh);
ok( (grep { $_ eq 'utf8' } @layers), "open write honors open pragma" ) or diag join ", ", @layers;
print $fh $txt;
close $fh;
}
# open for reading, explicit
{
open my $fh, "<", $file;
my @layers = PerlIO::get_layers($fh);
ok( (grep { $_ eq 'encoding(utf8)' } @layers), "open read honors open pragma" ) or diag join ", ", @layers;
is join("\n", <$fh>), $txt;
}
# open for reading, implicit
{
open my($fh), $file;
my @layers = PerlIO::get_layers($fh);
ok( (grep { $_ eq 'encoding(utf8)' } @layers), "open implicit read honors open pragma" ) or diag join ", ", @layers;
is join("\n", <$fh>), $txt;
}
# open for read/write
{
open my $fh, "+>", $file;
my @layers = PerlIO::get_layers($fh);
ok( (grep { $_ eq 'utf8' } @layers), "open implicit read honors open pragma" ) or diag join ", ", @layers;
}
# open for append
{
open my $fh, ">>", $file;
my @layers = PerlIO::get_layers($fh);
ok( (grep { $_ eq 'utf8' } @layers), "open implicit read honors open pragma" ) or diag join ", ", @layers;
}
# raw
{
open my $fh, ">:raw", $file;
my @layers = PerlIO::get_layers($fh);
ok( !(grep { $_ eq 'utf8' } @layers), 'open pragma is not used if raw is specified' ) or diag join ", ", @layers;
}
}
# Test without open pragma
{
my $file = File::Temp->new;
open my $fh, ">", $file;
my @layers = PerlIO::get_layers($fh);
ok( grep(!/utf8/, @layers), "open pragma remains lexical" ) or diag join ", ", @layers;
}
# sysopen
{
use open IN => ':encoding(utf8)', OUT => ':utf8';
# Test the standard handles and all newly opened handles are utf8
my $file = File::Temp->new;
my $txt = "autodie is MËTÁŁ";
# open for writing only
{
sysopen my $fh, $file, O_CREAT|O_TRUNC|O_WRONLY;
my @layers = PerlIO::get_layers($fh);
ok( (grep { $_ eq 'utf8' } @layers), "open write honors open pragma" ) or diag join ", ", @layers;
print $fh $txt;
close $fh;
}
# open for reading only
{
sysopen my $fh, $file, O_RDONLY;
my @layers = PerlIO::get_layers($fh);
ok( (grep { $_ eq 'encoding(utf8)' } @layers), "open read honors open pragma" ) or diag join ", ", @layers;
is join("\n", <$fh>), $txt;
}
# open for reading and writing
{
sysopen my $fh, $file, O_RDWR;
my @layers = PerlIO::get_layers($fh);
ok( (grep { $_ eq 'utf8' } @layers), "open read/write honors open write pragma" ) or diag join ", ", @layers;
is join("\n", <$fh>), $txt;
}
}