source: vendor/perl/5.8.8/lib/File/Basename.t

Last change on this file was 3181, checked in by bird, 18 years ago

perl 5.8.8

File size: 4.7 KB
Line 
1#!./perl -Tw
2
3BEGIN {
4 chdir 't' if -d 't';
5 @INC = '../lib';
6}
7
8use Test::More tests => 64;
9
10BEGIN { use_ok 'File::Basename' }
11
12# import correctly?
13can_ok( __PACKAGE__, qw( basename fileparse dirname fileparse_set_fstype ) );
14
15### Testing Unix
16{
17 ok length fileparse_set_fstype('unix'), 'set fstype to unix';
18 is( fileparse_set_fstype(), 'Unix', 'get fstype' );
19
20 my($base,$path,$type) = fileparse('/virgil/aeneid/draft.book7',
21 qr'\.book\d+');
22 is($base, 'draft');
23 is($path, '/virgil/aeneid/');
24 is($type, '.book7');
25
26 is(basename('/arma/virumque.cano'), 'virumque.cano');
27 is(dirname ('/arma/virumque.cano'), '/arma');
28 is(dirname('arma/'), '.');
29}
30
31
32### Testing VMS
33{
34 is(fileparse_set_fstype('VMS'), 'Unix', 'set fstype to VMS');
35
36 my($base,$path,$type) = fileparse('virgil:[aeneid]draft.book7',
37 qr{\.book\d+});
38 is($base, 'draft');
39 is($path, 'virgil:[aeneid]');
40 is($type, '.book7');
41
42 is(basename('arma:[virumque]cano.trojae'), 'cano.trojae');
43 is(dirname('arma:[virumque]cano.trojae'), 'arma:[virumque]');
44 is(dirname('arma:<virumque>cano.trojae'), 'arma:<virumque>');
45 is(dirname('arma:virumque.cano'), 'arma:');
46
47 {
48 local $ENV{DEFAULT} = '' unless exists $ENV{DEFAULT};
49 is(dirname('virumque.cano'), $ENV{DEFAULT});
50 is(dirname('arma/'), '.');
51 }
52}
53
54
55### Testing DOS
56{
57 is(fileparse_set_fstype('DOS'), 'VMS', 'set fstype to DOS');
58
59 my($base,$path,$type) = fileparse('C:\\virgil\\aeneid\\draft.book7',
60 '\.book\d+');
61 is($base, 'draft');
62 is($path, 'C:\\virgil\\aeneid\\');
63 is($type, '.book7');
64
65 is(basename('A:virumque\\cano.trojae'), 'cano.trojae');
66 is(dirname('A:\\virumque\\cano.trojae'), 'A:\\virumque');
67 is(dirname('A:\\'), 'A:\\');
68 is(dirname('arma\\'), '.');
69
70 # Yes "/" is a legal path separator under DOS
71 is(basename("lib/File/Basename.pm"), "Basename.pm");
72
73 # $^O for DOS is "dos" not "MSDOS" but "MSDOS" is left in for
74 # backward bug compat.
75 is(fileparse_set_fstype('MSDOS'), 'DOS');
76 is( dirname("\\foo\\bar\\baz"), "\\foo\\bar" );
77}
78
79
80### Testing MacOS
81{
82 is(fileparse_set_fstype('MacOS'), 'MSDOS', 'set fstype to MacOS');
83
84 my($base,$path,$type) = fileparse('virgil:aeneid:draft.book7',
85 '\.book\d+');
86 is($base, 'draft');
87 is($path, 'virgil:aeneid:');
88 is($type, '.book7');
89
90 is(basename(':arma:virumque:cano.trojae'), 'cano.trojae');
91 is(dirname(':arma:virumque:cano.trojae'), ':arma:virumque:');
92 is(dirname(':arma:virumque:'), ':arma:');
93 is(dirname(':arma:virumque'), ':arma:');
94 is(dirname(':arma:'), ':');
95 is(dirname(':arma'), ':');
96 is(dirname('arma:'), 'arma:');
97 is(dirname('arma'), ':');
98 is(dirname(':'), ':');
99
100
101 # Check quoting of metacharacters in suffix arg by basename()
102 is(basename(':arma:virumque:cano.trojae','.trojae'), 'cano');
103 is(basename(':arma:virumque:cano_trojae','.trojae'), 'cano_trojae');
104}
105
106
107### extra tests for a few specific bugs
108{
109 fileparse_set_fstype 'DOS';
110 # perl5.003_18 gives C:/perl/.\
111 is((fileparse 'C:/perl/lib')[1], 'C:/perl/');
112 # perl5.003_18 gives C:\perl\
113 is(dirname('C:\\perl\\lib\\'), 'C:\\perl');
114
115 fileparse_set_fstype 'UNIX';
116 # perl5.003_18 gives '.'
117 is(dirname('/perl/'), '/');
118 # perl5.003_18 gives '/perl/lib'
119 is(dirname('/perl/lib//'), '/perl');
120}
121
122### rt.perl.org 22236
123{
124 is(basename('a/'), 'a');
125 is(basename('/usr/lib//'), 'lib');
126
127 fileparse_set_fstype 'MSWin32';
128 is(basename('a\\'), 'a');
129 is(basename('\\usr\\lib\\\\'), 'lib');
130}
131
132
133### rt.cpan.org 36477
134{
135 fileparse_set_fstype('Unix');
136 is(dirname('/'), '/');
137 is(basename('/'), '/');
138
139 fileparse_set_fstype('DOS');
140 is(dirname('\\'), '\\');
141 is(basename('\\'), '\\');
142}
143
144
145### basename(1) sez: "The suffix is not stripped if it is identical to the
146### remaining characters in string"
147{
148 fileparse_set_fstype('Unix');
149 is(basename('.foo'), '.foo');
150 is(basename('.foo', '.foo'), '.foo');
151 is(basename('.foo.bar', '.foo'), '.foo.bar');
152 is(basename('.foo.bar', '.bar'), '.foo');
153}
154
155
156### Test tainting
157{
158 # The empty tainted value, for tainting strings
159 my $TAINT = substr($^X, 0, 0);
160
161 # How to identify taint when you see it
162 sub any_tainted (@) {
163 return ! eval { eval("#" . substr(join("", @_), 0, 0)); 1 };
164 }
165
166 sub tainted ($) {
167 any_tainted @_;
168 }
169
170 sub all_tainted (@) {
171 for (@_) { return 0 unless tainted $_ }
172 1;
173 }
174
175 fileparse_set_fstype 'Unix';
176 ok tainted(dirname($TAINT.'/perl/lib//'));
177 ok all_tainted(fileparse($TAINT.'/dir/draft.book7','\.book\d+'));
178}
Note: See TracBrowser for help on using the repository browser.