Hack to remove insecure directories from PATH so test will run.
[p5sagit/p5-mst-13.2.git] / t / lib / cwd.t
CommitLineData
ed4a5f99 1#!./perl
2
3BEGIN {
4 chdir 't' if -d 't';
5 @INC = '../lib';
6}
7
8use Config;
9use Cwd;
10use strict;
11use warnings;
12
da3f15f4 13print "1..14\n";
ed4a5f99 14
15# check imports
16print +(defined(&cwd) &&
17 defined(&getcwd) &&
18 defined(&fastcwd) &&
19 defined(&fastgetcwd) ?
20 "" : "not "), "ok 1\n";
21print +(!defined(&chdir) &&
22 !defined(&abs_path) &&
23 !defined(&fast_abs_path) ?
24 "" : "not "), "ok 2\n";
25
0d2079fa 26# XXX force Cwd to bootsrap its XSUBs since we have set @INC = "../lib"
27# XXX and subsequent chdir()s can make them impossible to find
28eval { fastcwd };
29
da3f15f4 30# Must find an external pwd (or equivalent) command.
31
32my $pwd_cmd =
14107c42 33 ($^O eq "MSWin32") ? "cd" : (grep { -x && -f } map { "$_/pwd" }
da3f15f4 34 split m/$Config{path_sep}/, $ENV{PATH})[0];
35
2390ecbc 36if ($^O eq 'VMS') { $pwd_cmd = 'SHOW DEFAULT'; }
37
da3f15f4 38if (defined $pwd_cmd) {
39 chomp(my $start = `$pwd_cmd`);
14107c42 40 # Win32's cd returns native C:\ style
41 $start =~ s,\\,/,g if $^O eq 'MSWin32';
2390ecbc 42 # DCL SHOW DEFAULT has leading spaces
43 $start =~ s/^\s+// if $^O eq 'VMS';
da3f15f4 44 if ($?) {
45 for (3..6) {
46 print "ok $_ # Skip: '$pwd_cmd' failed\n";
47 }
48 } else {
49 my $cwd = cwd;
50 my $getcwd = getcwd;
51 my $fastcwd = fastcwd;
52 my $fastgetcwd = fastgetcwd;
53 print +($cwd eq $start ? "" : "not "), "ok 3\n";
54 print +($getcwd eq $start ? "" : "not "), "ok 4\n";
55 print +($fastcwd eq $start ? "" : "not "), "ok 5\n";
56 print +($fastgetcwd eq $start ? "" : "not "), "ok 6\n";
57 }
58} else {
59 for (3..6) {
60 print "ok $_ # Skip: no pwd command found\n";
61 }
62}
63
ed4a5f99 64mkdir "pteerslt", 0777;
65mkdir "pteerslt/path", 0777;
66mkdir "pteerslt/path/to", 0777;
67mkdir "pteerslt/path/to/a", 0777;
68mkdir "pteerslt/path/to/a/dir", 0777;
69Cwd::chdir "pteerslt/path/to/a/dir";
70my $cwd = cwd;
71my $getcwd = getcwd;
72my $fastcwd = fastcwd;
73my $fastgetcwd = fastgetcwd;
74my $want = "t/pteerslt/path/to/a/dir";
d39e9359 75print "# cwd = '$cwd'\n";
76print "# getcwd = '$getcwd'\n";
77print "# fastcwd = '$fastcwd'\n";
78print "# fastgetcwd = '$fastgetcwd'\n";
2390ecbc 79# This checked out OK on ODS-2 and ODS-5:
507efa3c 80$want = "T\.PTEERSLT\.PATH\.TO\.A\.DIR\]" if $^O eq 'VMS';
da3f15f4 81print +($cwd =~ m|$want$| ? "" : "not "), "ok 7\n";
82print +($getcwd =~ m|$want$| ? "" : "not "), "ok 8\n";
83print +($fastcwd =~ m|$want$| ? "" : "not "), "ok 9\n";
84print +($fastgetcwd =~ m|$want$| ? "" : "not "), "ok 10\n";
ed4a5f99 85
86# Cwd::chdir should also update $ENV{PWD}
14107c42 87print "#$ENV{PWD}\n";
da3f15f4 88print +($ENV{PWD} =~ m|$want$| ? "" : "not "), "ok 11\n";
ed4a5f99 89Cwd::chdir ".."; rmdir "dir";
14107c42 90print "#$ENV{PWD}\n";
ed4a5f99 91Cwd::chdir ".."; rmdir "a";
14107c42 92print "#$ENV{PWD}\n";
ed4a5f99 93Cwd::chdir ".."; rmdir "to";
14107c42 94print "#$ENV{PWD}\n";
ed4a5f99 95Cwd::chdir ".."; rmdir "path";
14107c42 96print "#$ENV{PWD}\n";
ed4a5f99 97Cwd::chdir ".."; rmdir "pteerslt";
14107c42 98print "#$ENV{PWD}\n";
2390ecbc 99if ($^O eq 'VMS') {
100 # This checked out OK on ODS-2 and ODS-5:
101 print +($ENV{PWD} =~ m|\bT\]$| ? "" : "not "), "ok 12\n";
102}
103else {
104 print +($ENV{PWD} =~ m|\bt$| ? "" : "not "), "ok 12\n";
105}
ed4a5f99 106
d084a483 107if ($Config{d_symlink}) {
7040f5d5 108 mkdir "pteerslt", 0777;
109 mkdir "pteerslt/path", 0777;
110 mkdir "pteerslt/path/to", 0777;
111 mkdir "pteerslt/path/to/a", 0777;
112 mkdir "pteerslt/path/to/a/dir", 0777;
113 symlink "pteerslt/path/to/a/dir" => "linktest";
114
115 my $abs_path = Cwd::abs_path("linktest");
116 my $fast_abs_path = Cwd::fast_abs_path("linktest");
117 my $want = "t/pteerslt/path/to/a/dir";
118
119 print "# abs_path $abs_path\n";
120 print "# fast_abs_path $fast_abs_path\n";
121 print "# want $want\n";
122 print +($abs_path =~ m|$want$| ? "" : "not "), "ok 13\n";
123 print +($fast_abs_path =~ m|$want$| ? "" : "not "), "ok 14\n";
124
125 rmdir "pteerslt/path/to/a/dir";
126 rmdir "pteerslt/path/to/a";
127 rmdir "pteerslt/path/to";
128 rmdir "pteerslt/path";
129 rmdir "pteerslt";
130 unlink "linktest";
ed4a5f99 131} else {
da3f15f4 132 print "ok 13 # skipped\n";
133 print "ok 14 # skipped\n";
ed4a5f99 134}