This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Add Rafael's 5.10 roadmap to perltodo.
[perl5.git] / t / op / filetest.t
CommitLineData
42e55ab1
JH
1#!./perl
2
3# There are few filetest operators that are portable enough to test.
4# See pod/perlport.pod for details.
5
6BEGIN {
7 chdir 't' if -d 't';
20822f61 8 @INC = '../lib';
fbb0b3b3 9 require './test.pl';
42e55ab1
JH
10}
11
eb57363f 12use Config;
fbb0b3b3 13plan(tests => 22);
42e55ab1 14
fbb0b3b3
RGS
15ok( -d 'op' );
16ok( -f 'TEST' );
17ok( !-f 'op' );
18ok( !-d 'TEST' );
19ok( -r 'TEST' );
42e55ab1 20
22c35a8c 21# make sure TEST is r-x
ff2be7ed
NC
22eval { chmod 0555, 'TEST' or die "chmod 0555, 'TEST' failed: $!" };
23chomp ($bad_chmod = $@);
846f25a3
GW
24
25$oldeuid = $>; # root can read and write anything
26eval '$> = 1'; # so switch uid (may not be implemented)
27
28print "# oldeuid = $oldeuid, euid = $>\n";
29
fbb0b3b3
RGS
30SKIP: {
31 if (!$Config{d_seteuid}) {
32 skip('no seteuid');
33 }
34 elsif ($Config{config_args} =~/Dmksymlinks/) {
35 skip('we cannot chmod symlinks');
36 }
37 elsif ($bad_chmod) {
ff2be7ed 38 skip( $bad_chmod );
fbb0b3b3
RGS
39 }
40 else {
41 ok( !-w 'TEST' );
42 }
22c35a8c 43}
42e55ab1 44
846f25a3 45# Scripts are not -x everywhere so cannot test that.
42e55ab1 46
fd1e013e
F
47eval '$> = $oldeuid'; # switch uid back (may not be implemented)
48
49# this would fail for the euid 1
50# (unless we have unpacked the source code as uid 1...)
fbb0b3b3 51ok( -r 'op' );
42e55ab1 52
846f25a3
GW
53# this would fail for the euid 1
54# (unless we have unpacked the source code as uid 1...)
fbb0b3b3
RGS
55SKIP: {
56 if ($Config{d_seteuid}) {
57 ok( -w 'op' );
58 } else {
59 skip('no seteuid');
60 }
3eeba6fb 61}
42e55ab1 62
fbb0b3b3
RGS
63ok( -x 'op' ); # Hohum. Are directories -x everywhere?
64
65is( "@{[grep -r, qw(foo io noo op zoo)]}", "io op" );
66
67# Test stackability of filetest operators
42e55ab1 68
fbb0b3b3
RGS
69ok( defined( -f -d 'TEST' ) && ! -f -d _ );
70ok( !defined( -e 'zoo' ) );
71ok( !defined( -e -d 'zoo' ) );
72ok( !defined( -f -e 'zoo' ) );
73ok( -f -e 'TEST' );
74ok( -e -f 'TEST' );
75ok( defined(-d -e 'TEST') );
76ok( defined(-e -d 'TEST') );
77ok( ! -f -d 'op' );
78ok( -x -d -x 'op' );
79ok( (-s -f 'TEST' > 1), "-s returns real size" );
80ok( -f -s 'TEST' == 1 );