source: trunk/essentials/dev-lang/perl/t/io/dup.t@ 3406

Last change on this file since 3406 was 3181, checked in by bird, 19 years ago

perl 5.8.8

File size: 2.8 KB
Line 
1#!./perl
2
3BEGIN {
4 chdir 't' if -d 't';
5 @INC = qw(. ../lib);
6 require "./test.pl";
7}
8
9use Config;
10no warnings 'once';
11
12my $test = 1;
13print "1..26\n";
14print "ok 1\n";
15
16open(DUPOUT,">&STDOUT");
17open(DUPERR,">&STDERR");
18
19open(STDOUT,">Io.dup") || die "Can't open stdout";
20open(STDERR,">&STDOUT") || die "Can't open stderr";
21
22select(STDERR); $| = 1;
23select(STDOUT); $| = 1;
24
25print STDOUT "ok 2\n";
26print STDERR "ok 3\n";
27
28# Since some systems don't have echo, we use Perl.
29$echo = qq{$^X -le "print q(ok %d)"};
30
31$cmd = sprintf $echo, 4;
32print `$cmd`;
33
34$cmd = sprintf "$echo 1>&2", 5;
35$cmd = sprintf $echo, 5 if $^O eq 'MacOS'; # don't know if we can do this ...
36print `$cmd`;
37
38# KNOWN BUG system() does not honor STDOUT redirections on VMS.
39if( $^O eq 'VMS' ) {
40 print "not ok $_ # TODO system() not honoring STDOUT redirect on VMS\n"
41 for 6..7;
42}
43else {
44 system sprintf $echo, 6;
45 if ($^O eq 'MacOS') {
46 system sprintf $echo, 7;
47 }
48 else {
49 system sprintf "$echo 1>&2", 7;
50 }
51}
52
53close(STDOUT) or die "Could not close: $!";
54close(STDERR) or die "Could not close: $!";
55
56open(STDOUT,">&DUPOUT") or die "Could not open: $!";
57open(STDERR,">&DUPERR") or die "Could not open: $!";
58
59if (($^O eq 'MSWin32') || ($^O eq 'NetWare') || ($^O eq 'VMS')) { print `type Io.dup` }
60elsif ($^O eq 'MacOS') { system 'catenate Io.dup' }
61else { system 'cat Io.dup' }
62unlink 'Io.dup';
63
64print STDOUT "ok 8\n";
65
66open(F,">&",1) or die "Cannot dup to numeric 1: $!";
67print F "ok 9\n";
68close(F);
69
70open(F,">&",'1') or die "Cannot dup to string '1': $!";
71print F "ok 10\n";
72close(F);
73
74open(F,">&=",1) or die "Cannot dup to numeric 1: $!";
75print F "ok 11\n";
76close(F);
77
78if ($Config{useperlio}) {
79 open(F,">&=",'1') or die "Cannot dup to string '1': $!";
80 print F "ok 12\n";
81 close(F);
82} else {
83 open(F, ">&DUPOUT") or die "Cannot dup stdout back: $!";
84 print F "ok 12\n";
85 close(F);
86}