1#!perl 2use strict; 3use warnings; 4use Test::More tests => 21; 5 6use FindBin qw($Bin); 7use File::Spec; 8BEGIN{ 9 eval 'use Fcntl;1' or *O_RDWR = sub(){ 2 }; 10} 11 12use Fatal qw(unlink); 13 14#use subs 'open'; 15#sub open(*;$@){ 16# my($fh, $layers, @arg) = @_; 17# no strict 'refs'; 18# my $st = CORE::open(*$fh, $layers, @arg); 19# if(!$st){ 20# diag "open failed: $!"; 21# } 22# return $st; 23#} 24 25my $file = File::Spec->join($Bin, 'util', 'creat'); 26 27ok !-e $file, "before open: the file doesn't exist"; 28 29my $in; 30ok open($in, "<:creat", $file), "open with :creat"; 31 32ok -e $file, "after open: the file does exist"; 33 34 35close $in; 36unlink $file; 37ok open($in, "<:utf8 :creat", $file), "open with :utf8 :creat -> failure"; 38ok scalar(grep { $_ eq 'utf8' } $in->get_layers()), 'utf8 on'; 39ok -e $file, "... not exist"; 40 41ok open($in, "<:creat :utf8", $file), "open with :creat :utf8"; 42ok -e $file, "... exist"; 43 44close $in; 45unlink $file; 46ok open($in, "<:raw :creat", $file), "open with :raw :creat"; 47ok -e $file, "... exist"; 48 49 50close $in; 51unlink $file; 52ok open($in, "<:unix :creat", $file), "open with :unix :creat"; 53ok -e $file, "... exist"; 54 55 56close $in; 57unlink $file; 58ok open($in, "<:crlf :creat", $file), "open with :crlf :creat"; 59ok -e $file, "... exist"; 60 61close $in; 62unlink $file; 63ok open($in, "<:creat :crlf", $file), "open with :creat :crlf"; 64ok -e $file, "... exist"; 65 66 67 68my @layers = $in->get_layers(); 69 70ok scalar( grep{ $_ eq 'crlf' } @layers ), "has other layers (in [@layers])"; 71 72close $in; 73unlink $file; 74 75{ 76 use open IO => ':creat'; 77 78 ok sysopen($in, $file, O_RDWR), "sysopen with :creat"; 79 80 ok -e $file, "... exist"; 81 82} 83 84eval{ 85 use warnings FATAL => 'layer'; 86 binmode $in, ":creat"; 87}; 88 89like $@, qr/Too late/, "Useless use of :creat"; 90 91ok close($in), "close"; 92 93 94END{ 95 unlink $file if defined($file) and -e $file; 96}