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}