Integrate mainline
[p5sagit/p5-mst-13.2.git] / t / op / sysio-compat.t
1 #!./perl -w
2
3 BEGIN {
4     chdir 't' if -d 't';
5     @INC = '../lib' if -f '../lib/Carp.pm';
6 }
7
8 if ($^O =~ /^(MSWin32|os2|NetWare|dos)$/) {
9     print "1..25\n";
10 }
11 else {
12     print "1..0 # skipped: not a dosish system\n";
13     exit 0;
14 }
15
16 use Fcntl qw(:DEFAULT :seek);
17 my $tmpf = "sysioc.tmp";
18 my $n;
19 my $v;
20 END { unlink $tmpf }
21
22 # default read/write modes should be text
23 {
24     sysopen(my $F, $tmpf, O_CREAT|O_RDWR|O_TRUNC) or die "Can't open $tmpf: $!";
25     $n = syswrite($F, "zyx\n");
26     print "not " unless $n == 4;
27     print "ok 1\n";
28 }
29 # must be flushed and closed here
30 print "not " if (-s $tmpf) != 5;  # should be "zyx\r\n"
31 print "ok 2\n";
32
33 {
34     sysopen(my $F, $tmpf, O_RDONLY) or die "Can't open $tmpf: $!";
35     $n = sysread($F, $v, 4);
36     print "not " unless $n == 4;
37     print "ok 3\n";
38     print "not " unless $v eq "zyx\n";
39     print "ok 4\n";
40     $n = sysread($F, $v, 10);
41     print "not " unless $n == 0; # eof
42     print "ok 5\n";
43     $n = sysseek($F, 0, SEEK_SET);
44     print "not " unless $n == 0;
45     print "ok 6\n";
46     $n = sysread($F, $v, 10);
47     print "not " unless $n == 4; # short read
48     print "ok 7\n";
49     print "not " unless $v eq "zyx\n";
50     print "ok 8\n";
51 }
52
53 # reading in binmode should see real contents
54 {
55     sysopen(my $F, $tmpf, O_RDONLY|O_BINARY) or die "Can't open $tmpf: $!";
56     $n = sysread($F, $v, 5);
57     print "not " unless $n == 5;
58     print "ok 9\n";
59     print "not " unless $v eq "zyx\r\n";
60     print "ok 10\n";
61     $n = sysread($F, $v, 10);
62     print "not " unless $n == 0; # eof
63     print "ok 11\n";
64     $n = sysseek($F, 0, SEEK_SET);
65     print "not " unless $n == 0;
66     print "ok 12\n";
67     $n = sysread($F, $v, 10);
68     print "not " unless $n == 5; # short read
69     print "ok 13\n";
70     print "not " unless $v eq "zyx\r\n";
71     print "ok 14\n";
72 }
73
74 # ^Z handling
75 {
76     sysopen(my $F, $tmpf, O_CREAT|O_RDWR|O_TRUNC|O_BINARY) or die "Can't open $tmpf: $!";
77     $n = syswrite($F, "zyx\r\n\cZpqr");
78     print "not " unless $n == 9;
79     print "ok 15\n";
80 }
81 # must be flushed and closed here
82 print "not " if (-s $tmpf) != 9;  # should be "zyx\r\n\cZpqr"
83 print "ok 16\n";
84
85 {
86     sysopen(my $F, $tmpf, O_RDONLY) or die "Can't open $tmpf: $!";
87     $n = sysread($F, $v, 4);
88     print "not " unless $n == 4;
89     print "ok 17\n";
90     print "not " unless $v eq "zyx\n";
91     print "ok 18\n";
92     $n = sysread($F, $v, 10); # eof
93     print "not " unless $n == 0;
94     print "ok 19\n";
95     $n = sysseek($F, 0, SEEK_SET);
96     print "not " unless $n == 0;
97     print "ok 20\n";
98     $n = sysread($F, $v, 10);
99     print "not " unless $n == 4; # short read
100     print "ok 21\n";
101     print "not " unless $v eq "zyx\n";
102     print "ok 22\n";
103     $n = sysread($F, $v, 10); # eof
104     print "not " unless $n == 0;
105     print "ok 23\n";
106 }
107
108 # reading in binmode should see real contents
109 {
110     sysopen(my $F, $tmpf, O_RDONLY|O_BINARY) or die "Can't open $tmpf: $!";
111     $n = sysread($F, $v, 9);
112     print "not " unless $n == 9;
113     print "ok 24\n";
114     print "not " unless $v eq "zyx\r\n\cZpqr";
115     print "ok 25\n";
116 }