This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
readdir() reports file type on VMS, even if zero length.
[perl5.git] / t / op / while_readdir.t
1 #!./perl
2
3 BEGIN {
4     chdir 't' if -d 't';
5     @INC = '../lib';
6     require './test.pl';
7 }
8
9 use strict;
10 use warnings;
11
12 open my $fh, ">", "0" or die "Can't open '0' for writing: $!\n";
13 print $fh <<'FILE0';
14 This file is here for testing
15
16 while(readdir $dir){...}
17 ... while readdir $dir
18
19 etc
20 FILE0
21 close $fh;
22
23 plan 10;
24
25 ok(-f '0', "'0' file is here");
26
27 opendir my $dirhandle, '.'
28     or die "Failed test: unable to open directory: $!\n";
29
30 my @dir = readdir $dirhandle;
31 rewinddir $dirhandle;
32
33 {
34     my @list;
35     while(readdir $dirhandle){
36         push @list, $_;
37     }
38     ok( eq_array( \@dir, \@list ), 'while(readdir){push}' );
39     rewinddir $dirhandle;
40 }
41
42 {
43     my @list;
44     push @list, $_ while readdir $dirhandle;
45     ok( eq_array( \@dir, \@list ), 'push while readdir' );
46     rewinddir $dirhandle;
47 }
48
49 {
50     my $tmp;
51     my @list;
52     push @list, $tmp while $tmp = readdir $dirhandle;
53     ok( eq_array( \@dir, \@list ), 'push $dir while $dir = readdir' );
54     rewinddir $dirhandle;
55 }
56
57 {
58     my @list;
59     while( my $dir = readdir $dirhandle){
60         push @list, $dir;
61     }
62     ok( eq_array( \@dir, \@list ), 'while($dir=readdir){push}' );
63     rewinddir $dirhandle;
64 }
65
66
67 {
68     my @list;
69     my $sub = sub{
70         push @list, $_;
71     };
72     $sub->($_) while readdir $dirhandle;
73     ok( eq_array( \@dir, \@list ), '$sub->($_) while readdir' );
74     rewinddir $dirhandle;
75 }
76
77 {
78     my $works = 0;
79     while(readdir $dirhandle){
80         $_ =~ s/\.$// if defined $_ && $^O eq 'VMS'; # may have zero-length extension
81         if( defined $_ && $_ eq '0'){
82             $works = 1;
83             last;
84         }
85     }
86     ok( $works, 'while(readdir){} with file named "0"' );
87     rewinddir $dirhandle;
88 }
89
90 {
91     my $works = 0;
92     my $sub = sub{
93         $_ =~ s/\.$// if defined $_ && $^O eq 'VMS'; # may have zero-length extension
94         if( defined $_ && $_ eq '0' ){
95             $works = 1;
96         }
97     };
98     $sub->($_) while readdir $dirhandle;
99     ok( $works, '$sub->($_) while readdir; with file named "0"' );
100     rewinddir $dirhandle;
101 }
102
103 {
104     my $works = 0;
105     while( my $dir = readdir $dirhandle ){
106         $dir =~ s/\.$// if defined $dir && $^O eq 'VMS'; # may have zero-length extension
107         if( defined $dir && $dir eq '0'){
108             $works = 1;
109             last;
110         }
111     }
112     ok( $works, 'while($dir=readdir){} with file named "0"');
113     rewinddir $dirhandle;
114 }
115
116 {
117     my $tmp;
118     my $ok;
119     my @list;
120     while( $tmp = readdir $dirhandle ){
121         $tmp =~ s/\.$// if defined $tmp && $^O eq 'VMS'; # may have zero-length extension
122         last if defined($tmp)&& !$tmp && ($ok=1) 
123     }
124     ok( $ok, '$dir while $dir = readdir; with file named "0"'  );
125     rewinddir $dirhandle;
126 }
127
128 closedir $dirhandle;
129
130 END { 1 while unlink "0" }