Next wave of _63 VMS patches
[p5sagit/p5-mst-13.2.git] / vms / ext / filespec.t
1 #!./perl
2
3 BEGIN { unshift(@INC,'../lib') if -d '../lib'; }
4
5 use VMS::Filespec;
6
7 foreach (<DATA>) {
8   chomp;
9   s/\s*#.*//;
10   next if /^\s*$/;
11   push(@tests,$_);
12 }
13 print '1..',scalar(@tests)+6,"\n";
14
15 foreach $test (@tests) {
16   ($arg,$func,$expect) = split(/\t+/,$test);
17   $idx++;
18   $rslt = eval "$func('$arg')";
19   if ($@) { print "not ok $idx  : eval error: $@\n"; next; }
20   else {
21     if ($rslt ne $expect) {
22       print "not ok $idx  : $func('$arg') expected |$expect|, got |$rslt|\n";
23     }
24     else { print "ok $idx\n"; }
25   }
26 }
27
28 $defwarn = <<'EOW';
29 # Note: This failure may have occurred because your default device
30 # was set using a non-concealed logical name.  If this is the case,
31 # you will need to determine by inspection that the two resultant
32 # file specifications shwn above are in fact equivalent.
33 EOW
34
35 if (rmsexpand('[]') eq "\U$ENV{DEFAULT}") { print 'ok ',++$idx,"\n"; }
36 else {
37   print 'not ok ', ++$idx, ": rmsexpand('[]') = |", rmsexpand('[]'),
38         "|, \$ENV{DEFAULT} = |\U$ENV{DEFAULT}|\n$defwarn";
39 }
40 if (rmsexpand('from.here') eq "\L$ENV{DEFAULT}from.here") {
41    print 'ok ', ++$idx, "\n";
42 }
43 else {
44   print 'not ok ', ++$idx, ": rmsexpand('from.here') = |",
45         rmsexpand('from.here'),
46         "|, \$ENV{DEFAULT}from.here = |\L$ENV{DEFAULT}from.here|\n$defwarn";
47 }
48 if (rmsexpand('from') eq "\L$ENV{DEFAULT}from") {
49    print 'ok ', ++$idx, "\n";
50 }
51 else {
52   print 'not ok ', ++$idx, ": rmsexpand('from') = |",
53         rmsexpand('from'),
54         "|, \$ENV{DEFAULT}from = |\L$ENV{DEFAULT}from|\n$defwarn";
55 }
56 if (rmsexpand('from.here','cant:[get.there];2') eq
57     'cant:[get.there]from.here;2')                 { print 'ok ',++$idx,"\n"; }
58 else {
59   print 'not ok ', ++$idx, ': expected |cant:[get.there]from.here;2|, got |',
60         rmsexpand('from.here','cant:[get.there];2'),"|\n";
61 }
62
63 # Make sure we're using redirected mkdir, which strips trailing '/', since
64 # the CRTL's mkdir can't handle this.
65 print +(mkdir('testdir/',0777) ? 'ok ' : 'not ok '),++$idx,"\n";
66 print +(rmdir('testdir/') ? 'ok ' : 'not ok '),++$idx,"\n";
67
68 __DATA__
69
70 # Basic VMS to Unix filespecs
71 some:[where.over]the.rainbow    unixify /some/where/over/the.rainbow
72 [.some.where.over]the.rainbow   unixify some/where/over/the.rainbow
73 [-.some.where.over]the.rainbow  unixify ../some/where/over/the.rainbow
74 [.some.--.where.over]the.rainbow        unixify some/../../where/over/the.rainbow
75 [.some...where.over]the.rainbow unixify some/.../where/over/the.rainbow
76 [...some.where.over]the.rainbow unixify .../some/where/over/the.rainbow
77 [.some.where.over...]the.rainbow        unixify some/where/over/.../the.rainbow
78 [.some.where.over...]   unixify some/where/over/.../
79 [.some.where.over.-]    unixify some/where/over/../
80 []      unixify         ./
81 [-]     unixify         ../
82 [--]    unixify         ../../
83 [...]   unixify         .../
84
85 # and back again
86 /some/where/over/the.rainbow    vmsify  some:[where.over]the.rainbow
87 some/where/over/the.rainbow     vmsify  [.some.where.over]the.rainbow
88 ../some/where/over/the.rainbow  vmsify  [-.some.where.over]the.rainbow
89 some/../../where/over/the.rainbow       vmsify  [-.where.over]the.rainbow
90 .../some/where/over/the.rainbow vmsify  [...some.where.over]the.rainbow
91 some/.../where/over/the.rainbow vmsify  [.some...where.over]the.rainbow
92 /some/.../where/over/the.rainbow        vmsify  some:[...where.over]the.rainbow
93 some/where/...  vmsify  [.some.where...]
94 /where/...      vmsify  where:[...]
95 .       vmsify  []
96 ..      vmsify  [-]
97 ../..   vmsify  [--]
98 .../    vmsify  [...]
99
100 # Fileifying directory specs
101 down:[the.garden.path]  fileify down:[the.garden]path.dir;1
102 [.down.the.garden.path] fileify [.down.the.garden]path.dir;1
103 /down/the/garden/path   fileify /down/the/garden/path.dir;1
104 /down/the/garden/path/  fileify /down/the/garden/path.dir;1
105 down/the/garden/path    fileify down/the/garden/path.dir;1
106 down:[the.garden]path   fileify down:[the.garden]path.dir;1
107 down:[the.garden]path.  fileify # N.B. trailing . ==> null type
108 down:[the]garden.path   fileify 
109 /down/the/garden/path.  fileify # N.B. trailing . ==> null type
110 /down/the/garden.path   fileify 
111
112 # and pathifying them
113 down:[the.garden]path.dir;1     pathify down:[the.garden.path]
114 [.down.the.garden]path.dir      pathify [.down.the.garden.path]
115 /down/the/garden/path.dir       pathify /down/the/garden/path/
116 down/the/garden/path.dir        pathify down/the/garden/path/
117 down:[the.garden]path   pathify down:[the.garden.path]
118 down:[the.garden]path.  pathify # N.B. trailing . ==> null type
119 down:[the]garden.path   pathify 
120 /down/the/garden/path.  pathify # N.B. trailing . ==> null type
121 /down/the/garden.path   pathify 
122 down:[the.garden]path.dir;2     pathify #N.B. ;2
123 path    pathify path/
124 /down/the/garden/.      pathify /down/the/garden/./
125 /down/the/garden/..     pathify /down/the/garden/../
126 /down/the/garden/...    pathify /down/the/garden/.../
127 path.notdir     pathify 
128
129 # Both VMS/Unix and file/path conversions
130 down:[the.garden]path.dir;1     unixpath        /down/the/garden/path/
131 /down/the/garden/path   vmspath down:[the.garden.path]
132 down:[the.garden.path]  unixpath        /down/the/garden/path/
133 down:[the.garden.path...]       unixpath        /down/the/garden/path/.../
134 /down/the/garden/path.dir       vmspath down:[the.garden.path]
135 [.down.the.garden]path.dir      unixpath        down/the/garden/path/
136 down/the/garden/path    vmspath [.down.the.garden.path]
137 path    vmspath [.path]
138
139 # Redundant characters in Unix paths
140 //some/where//over/../the.rainbow       vmsify  some:[where]the.rainbow
141 /some/where//over/./the.rainbow vmsify  some:[where.over]the.rainbow
142 ..//../ vmspath [--]
143 ./././  vmspath []
144 ./../.  vmsify  [-]
145