File: mode.t

package info (click to toggle)
perl 5.14.2-21%2Bdeb7u3
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 89,728 kB
  • sloc: perl: 421,086; ansic: 195,186; sh: 37,852; pascal: 8,746; cpp: 3,893; makefile: 2,346; xml: 1,972; yacc: 1,602
file content (92 lines) | stat: -rw-r--r-- 2,079 bytes parent folder | download | duplicates (9)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#!./perl -w

use Test::More;

use File::Temp;
use File::Spec;

use Fcntl qw(:mode);

my $tmpfile = File::Temp->new;
my @tests = (
	     ['REG', 'tmpfile', (stat "$tmpfile")[2]],
	     ['DIR', 'dir', (stat '.')[2]]
	    );

$devnull = File::Spec->devnull();
if (-c $devnull) {
    push @tests, ['CHR', $devnull, (stat $devnull)[2]];
}

plan(tests => 34 + 6 + 9 * @tests);
foreach (@tests) {
    my ($type, $name, $mode) = @$_;

    if ($type eq 'REG') {
	ok( S_ISREG($mode), " S_ISREG $name");
    } else {
	ok(!S_ISREG($mode), "!S_ISREG $name");
    }

    if ($type eq 'DIR') {
	ok( S_ISDIR($mode), " S_ISDIR $name");
    } else {
	ok(!S_ISDIR($mode), "!S_ISDIR $name");
    }

 SKIP: {
	skip 'No S_IFCHR', 1 unless defined eval {S_IFCHR};
	if ($type eq 'CHR') {
	    ok( S_ISCHR($mode), " S_ISCHR $name");
	} else {
	    ok(!S_ISCHR($mode), "!S_ISCHR $name");
	}
    }

 SKIP: {
	skip 'No S_IFLNK', 1 unless defined eval {S_IFLNK};
	ok(!S_ISLNK($mode), "!S_ISLNK $name");
    }
 SKIP: {
	skip 'No S_IFSOCK', 1 unless defined eval {S_IFSOCK};
	ok(!S_ISSOCK($mode), "!S_ISSOCK $name");
    }
 SKIP: {
	skip 'No S_IFBLK', 1 unless defined eval {S_IFBLK};
	ok(!S_ISBLK($mode), "!S_ISBLK $name");
    }
 SKIP: {
	skip 'No S_IFFIFO', 1 unless defined eval {S_IFFIFO};
	ok(!S_ISFIFO($mode), "!S_ISFIFO $name");
    }
 SKIP: {
	skip 'No S_IFWHT', 1 unless defined eval {S_IFWHT};
	ok(!S_ISWHT($mode), "!S_ISWHT $name");
    }
 SKIP: {
	skip 'No S_ENFMT', 1 unless defined eval {S_ENFMT};
	ok(!S_ISENFMT($mode), "!S_ISENFMT $name");
    }
}

foreach ([S_ISREG => \&S_ISREG],
	 [S_IMODE => \&S_IMODE],
	) {
    my ($name, $func) = @$_;
    my @warnings;
    my $ret;

    {
	local $SIG{__WARN__} = sub { push @warnings, "@_" };
	$ret = &$func();
    }
    ok(!$ret, "$name() is false");
    is(scalar @warnings, 1, '1 warning');
    like($warnings[0], qr/^Use of uninitialized value/, 'expected warning');
}

is (S_IFMT(), _S_IFMT(), 'S_IFMT()');
is (S_IFMT(0), 0, 'S_IFMT(0)');
for my $shift (0..31) {
    is (S_IFMT(1 << $shift), ((1 << $shift) & _S_IFMT()), "S_IFMT(1 << $shift)");
}