source: filezilla/trunk/fuentes/tests/serverpathtest.cpp @ 130

Last change on this file since 130 was 130, checked in by jrpelegrina, 3 years ago

First release to xenial

File size: 23.4 KB
Line 
1#include <filezilla.h>
2#include "directorylistingparser.h"
3#include <cppunit/extensions/HelperMacros.h>
4#include <list>
5
6/*
7 * This testsuite asserts the correctness of the CServerPath class.
8 */
9
10class CServerPathTest : public CppUnit::TestFixture
11{
12        CPPUNIT_TEST_SUITE(CServerPathTest);
13        CPPUNIT_TEST(testGetPath);
14        CPPUNIT_TEST(testHasParent);
15        CPPUNIT_TEST(testGetParent);
16        CPPUNIT_TEST(testFormatSubdir);
17        CPPUNIT_TEST(testGetCommonParent);
18        CPPUNIT_TEST(testFormatFilename);
19        CPPUNIT_TEST(testChangePath);
20        CPPUNIT_TEST_SUITE_END();
21
22public:
23        void setUp() {}
24        void tearDown() {}
25
26        void testGetPath();
27        void testHasParent();
28        void testGetParent();
29        void testFormatSubdir();
30        void testGetCommonParent();
31        void testFormatFilename();
32        void testChangePath();
33
34protected:
35};
36
37CPPUNIT_TEST_SUITE_REGISTRATION(CServerPathTest);
38
39void CServerPathTest::testGetPath()
40{
41        const CServerPath unix1(_T("/"));
42        CPPUNIT_ASSERT(unix1.GetPath() == _T("/"));
43
44        const CServerPath unix2(_T("/foo"));
45        CPPUNIT_ASSERT(unix2.GetPath() == _T("/foo"));
46
47        const CServerPath unix3(_T("/foo/bar"));
48        CPPUNIT_ASSERT(unix3.GetPath() == _T("/foo/bar"));
49
50
51        const CServerPath vms1(_T("FOO:[BAR]"));
52        CPPUNIT_ASSERT(vms1.GetPath() == _T("FOO:[BAR]"));
53
54        const CServerPath vms2(_T("FOO:[BAR.TEST]"));
55        CPPUNIT_ASSERT(vms2.GetPath() == _T("FOO:[BAR.TEST]"));
56
57        const CServerPath vms3(_T("FOO:[BAR^.TEST]"));
58        CPPUNIT_ASSERT(vms3.GetPath() == _T("FOO:[BAR^.TEST]"));
59
60        const CServerPath vms4(_T("FOO:[BAR^.TEST.SOMETHING]"));
61        CPPUNIT_ASSERT(vms4.GetPath() == _T("FOO:[BAR^.TEST.SOMETHING]"));
62
63
64        const CServerPath dos1(_T("C:\\"));
65        CPPUNIT_ASSERT(dos1.GetPath() == _T("C:\\"));
66
67        const CServerPath dos2(_T("C:\\FOO"));
68        CPPUNIT_ASSERT(dos2.GetPath() == _T("C:\\FOO"));
69
70        const CServerPath dos3(_T("md:\\"), DOS);
71        CPPUNIT_ASSERT(dos3.GetPath() == _T("md:\\"));
72
73        const CServerPath dos4(_T("C:"), DOS);
74        CPPUNIT_ASSERT(dos4.GetPath() == _T("C:\\"));
75
76        const CServerPath dos5(_T("C:\\FOO\\"));
77        CPPUNIT_ASSERT(dos5.GetPath() == _T("C:\\FOO"));
78
79
80        const CServerPath mvs1(_T("'FOO'"), MVS);
81        CPPUNIT_ASSERT(mvs1.GetPath() == _T("'FOO'"));
82
83        const CServerPath mvs2(_T("'FOO.'"), MVS);
84        CPPUNIT_ASSERT(mvs2.GetPath() == _T("'FOO.'"));
85
86        const CServerPath mvs3(_T("'FOO.BAR'"), MVS);
87        CPPUNIT_ASSERT(mvs3.GetPath() == _T("'FOO.BAR'"));
88
89        const CServerPath mvs4(_T("'FOO.BAR.'"), MVS);
90        CPPUNIT_ASSERT(mvs4.GetPath() == _T("'FOO.BAR.'"));
91
92        const CServerPath vxworks1(_T(":foo:"));
93        CPPUNIT_ASSERT(vxworks1.GetPath() == _T(":foo:"));
94
95        const CServerPath vxworks2(_T(":foo:bar"));
96        CPPUNIT_ASSERT(vxworks2.GetPath() == _T(":foo:bar"));
97
98        const CServerPath vxworks3(_T(":foo:bar/test"));
99        CPPUNIT_ASSERT(vxworks3.GetPath() == _T(":foo:bar/test"));
100
101        // ZVM is same as Unix, only makes difference in directory
102        // listing parser.
103        const CServerPath zvm1(_T("/"), ZVM);
104        CPPUNIT_ASSERT(zvm1.GetPath() == _T("/"));
105
106        const CServerPath zvm2(_T("/foo"), ZVM);
107        CPPUNIT_ASSERT(zvm2.GetPath() == _T("/foo"));
108
109        const CServerPath zvm3(_T("/foo/bar"), ZVM);
110        CPPUNIT_ASSERT(zvm3.GetPath() == _T("/foo/bar"));
111
112        const CServerPath hpnonstop1(_T("\\mysys"), HPNONSTOP);
113        CPPUNIT_ASSERT(hpnonstop1.GetPath() == _T("\\mysys"));
114
115        const CServerPath hpnonstop2(_T("\\mysys.$myvol"), HPNONSTOP);
116        CPPUNIT_ASSERT(hpnonstop2.GetPath() == _T("\\mysys.$myvol"));
117
118        const CServerPath hpnonstop3(_T("\\mysys.$myvol.mysubvol"), HPNONSTOP);
119        CPPUNIT_ASSERT(hpnonstop3.GetPath() == _T("\\mysys.$myvol.mysubvol"));
120
121        const CServerPath dos_virtual1(_T("\\"));
122        CPPUNIT_ASSERT(dos_virtual1.GetPath() == _T("\\"));
123
124        const CServerPath dos_virtual2(_T("\\foo"));
125        CPPUNIT_ASSERT(dos_virtual2.GetPath() == _T("\\foo"));
126
127        const CServerPath dos_virtual3(_T("\\foo\\bar"));
128        CPPUNIT_ASSERT(dos_virtual3.GetPath() == _T("\\foo\\bar"));
129
130        const CServerPath cygwin1(_T("/"), CYGWIN);
131        CPPUNIT_ASSERT(cygwin1.GetPath() == _T("/"));
132
133        const CServerPath cygwin2(_T("/foo"), CYGWIN);
134        CPPUNIT_ASSERT(cygwin2.GetPath() == _T("/foo"));
135
136        const CServerPath cygwin3(_T("//"), CYGWIN);
137        CPPUNIT_ASSERT(cygwin3.GetPath() == _T("//"));
138
139        const CServerPath cygwin4(_T("//foo"), CYGWIN);
140        CPPUNIT_ASSERT(cygwin4.GetPath() == _T("//foo"));
141}
142
143void CServerPathTest::testHasParent()
144{
145        const CServerPath unix1(_T("/"));
146        CPPUNIT_ASSERT(!unix1.HasParent());
147
148        const CServerPath unix2(_T("/foo"));
149        CPPUNIT_ASSERT(unix2.HasParent());
150
151        const CServerPath unix3(_T("/foo/bar"));
152        CPPUNIT_ASSERT(unix3.HasParent());
153
154        const CServerPath vms1(_T("FOO:[BAR]"));
155        CPPUNIT_ASSERT(!vms1.HasParent());
156
157        const CServerPath vms2(_T("FOO:[BAR.TEST]"));
158        CPPUNIT_ASSERT(vms2.HasParent());
159
160        const CServerPath vms3(_T("FOO:[BAR^.TEST]"));
161        CPPUNIT_ASSERT(!vms3.HasParent());
162
163        const CServerPath vms4(_T("FOO:[BAR^.TEST.SOMETHING]"));
164        CPPUNIT_ASSERT(vms4.HasParent());
165
166        const CServerPath dos1(_T("C:\\"));
167        CPPUNIT_ASSERT(!dos1.HasParent());
168
169        const CServerPath dos2(_T("C:\\FOO"));
170        CPPUNIT_ASSERT(dos2.HasParent());
171
172        const CServerPath mvs1(_T("'FOO'"), MVS);
173        CPPUNIT_ASSERT(!mvs1.HasParent());
174
175        const CServerPath mvs2(_T("'FOO.'"), MVS);
176        CPPUNIT_ASSERT(!mvs2.HasParent());
177
178        const CServerPath mvs3(_T("'FOO.BAR'"), MVS);
179        CPPUNIT_ASSERT(mvs3.HasParent());
180
181        const CServerPath mvs4(_T("'FOO.BAR.'"), MVS);
182        CPPUNIT_ASSERT(mvs4.HasParent());
183
184        const CServerPath vxworks1(_T(":foo:"));
185        CPPUNIT_ASSERT(!vxworks1.HasParent());
186
187        const CServerPath vxworks2(_T(":foo:bar"));
188        CPPUNIT_ASSERT(vxworks2.HasParent());
189
190        const CServerPath vxworks3(_T(":foo:bar/test"));
191        CPPUNIT_ASSERT(vxworks3.HasParent());
192
193        // ZVM is same as Unix, only makes difference in directory
194        // listing parser.
195        const CServerPath zvm1(_T("/"), ZVM);
196        CPPUNIT_ASSERT(!zvm1.HasParent());
197
198        const CServerPath zvm2(_T("/foo"), ZVM);
199        CPPUNIT_ASSERT(zvm2.HasParent());
200
201        const CServerPath zvm3(_T("/foo/bar"), ZVM);
202        CPPUNIT_ASSERT(zvm3.HasParent());
203
204        const CServerPath hpnonstop1(_T("\\mysys"), HPNONSTOP);
205        CPPUNIT_ASSERT(!hpnonstop1.HasParent());
206
207        const CServerPath hpnonstop2(_T("\\mysys.$myvol"), HPNONSTOP);
208        CPPUNIT_ASSERT(hpnonstop2.HasParent());
209
210        const CServerPath hpnonstop3(_T("\\mysys.$myvol.mysubvol"), HPNONSTOP);
211        CPPUNIT_ASSERT(hpnonstop3.HasParent());
212
213        const CServerPath dos_virtual1(_T("\\"));
214        CPPUNIT_ASSERT(!dos_virtual1.HasParent());
215
216        const CServerPath dos_virtual2(_T("\\foo"));
217        CPPUNIT_ASSERT(dos_virtual2.HasParent());
218
219        const CServerPath dos_virtual3(_T("\\foo\\bar"));
220        CPPUNIT_ASSERT(dos_virtual3.HasParent());
221
222        const CServerPath cygwin1(_T("/"), CYGWIN);
223        CPPUNIT_ASSERT(!cygwin1.HasParent());
224
225        const CServerPath cygwin2(_T("/foo"), CYGWIN);
226        CPPUNIT_ASSERT(cygwin2.HasParent());
227
228        const CServerPath cygwin3(_T("/foo/bar"), CYGWIN);
229        CPPUNIT_ASSERT(cygwin3.HasParent());
230
231        const CServerPath cygwin4(_T("//"), CYGWIN);
232        CPPUNIT_ASSERT(!cygwin4.HasParent());
233
234        const CServerPath cygwin5(_T("//foo"), CYGWIN);
235        CPPUNIT_ASSERT(cygwin5.HasParent());
236
237        const CServerPath cygwin6(_T("//foo/bar"), CYGWIN);
238        CPPUNIT_ASSERT(cygwin6.HasParent());
239}
240
241void CServerPathTest::testGetParent()
242{
243        const CServerPath unix1(_T("/"));
244        const CServerPath unix2(_T("/foo"));
245        const CServerPath unix3(_T("/foo/bar"));
246        CPPUNIT_ASSERT(unix2.GetParent() == unix1);
247        CPPUNIT_ASSERT(unix3.GetParent() == unix2);
248
249        const CServerPath vms1(_T("FOO:[BAR]"));
250        const CServerPath vms2(_T("FOO:[BAR.TEST]"));
251        const CServerPath vms3(_T("FOO:[BAR^.TEST]"));
252        const CServerPath vms4(_T("FOO:[BAR^.TEST.SOMETHING]"));
253        CPPUNIT_ASSERT(vms2.GetParent() == vms1);
254        CPPUNIT_ASSERT(vms4.GetParent() == vms3);
255
256        const CServerPath dos1(_T("C:\\"));
257        const CServerPath dos2(_T("C:\\FOO"));
258        CPPUNIT_ASSERT(dos2.GetParent() == dos1);
259
260        const CServerPath mvs1(_T("'FOO'"), MVS);
261        const CServerPath mvs2(_T("'FOO.'"), MVS);
262        const CServerPath mvs3(_T("'FOO.BAR'"), MVS);
263        const CServerPath mvs4(_T("'FOO.BAR.'"), MVS);
264        CPPUNIT_ASSERT(mvs3.GetParent() == mvs2);
265        CPPUNIT_ASSERT(mvs4.GetParent() == mvs2);
266
267        const CServerPath vxworks1(_T(":foo:"));
268        const CServerPath vxworks2(_T(":foo:bar"));
269        const CServerPath vxworks3(_T(":foo:bar/test"));
270        CPPUNIT_ASSERT(vxworks2.GetParent() == vxworks1);
271        CPPUNIT_ASSERT(vxworks3.GetParent() == vxworks2);
272
273        // ZVM is same as Unix, only makes difference in directory
274        // listing parser.
275        const CServerPath zvm1(_T("/"), ZVM);
276        const CServerPath zvm2(_T("/foo"), ZVM);
277        const CServerPath zvm3(_T("/foo/bar"), ZVM);
278        CPPUNIT_ASSERT(zvm2.GetParent() == zvm1);
279        CPPUNIT_ASSERT(zvm3.GetParent() == zvm2);
280
281        const CServerPath hpnonstop1(_T("\\mysys"), HPNONSTOP);
282        const CServerPath hpnonstop2(_T("\\mysys.$myvol"), HPNONSTOP);
283        const CServerPath hpnonstop3(_T("\\mysys.$myvol.mysubvol"), HPNONSTOP);
284        CPPUNIT_ASSERT(hpnonstop2.GetParent() == hpnonstop1);
285        CPPUNIT_ASSERT(hpnonstop3.GetParent() == hpnonstop2);
286
287        const CServerPath dos_virtual1(_T("\\"));
288        const CServerPath dos_virtual2(_T("\\foo"));
289        const CServerPath dos_virtual3(_T("\\foo\\bar"));
290        CPPUNIT_ASSERT(dos_virtual2.GetParent() == dos_virtual1);
291        CPPUNIT_ASSERT(dos_virtual3.GetParent() == dos_virtual2);
292
293        const CServerPath cygwin1(_T("/"), CYGWIN);
294        const CServerPath cygwin2(_T("/foo"), CYGWIN);
295        const CServerPath cygwin3(_T("/foo/bar"), CYGWIN);
296        const CServerPath cygwin4(_T("//"), CYGWIN);
297        const CServerPath cygwin5(_T("//foo"), CYGWIN);
298        const CServerPath cygwin6(_T("//foo/bar"), CYGWIN);
299        CPPUNIT_ASSERT(cygwin2.GetParent() == cygwin1);
300        CPPUNIT_ASSERT(cygwin3.GetParent() == cygwin2);
301        CPPUNIT_ASSERT(cygwin5.GetParent() == cygwin4);
302        CPPUNIT_ASSERT(cygwin6.GetParent() == cygwin5);
303}
304
305void CServerPathTest::testFormatSubdir()
306{
307        CServerPath path;
308        path.SetType(VMS);
309
310        CPPUNIT_ASSERT(path.FormatSubdir(_T("FOO.BAR")) == _T("FOO^.BAR"));
311}
312
313void CServerPathTest::testGetCommonParent()
314{
315        const CServerPath unix1(_T("/foo"));
316        const CServerPath unix2(_T("/foo/baz"));
317        const CServerPath unix3(_T("/foo/bar"));
318        CPPUNIT_ASSERT(unix2.GetCommonParent(unix3) == unix1);
319        CPPUNIT_ASSERT(unix1.GetCommonParent(unix1) == unix1);
320        CPPUNIT_ASSERT(unix1.GetCommonParent(unix3) == unix1);
321
322        const CServerPath vms1(_T("FOO:[BAR]"));
323        const CServerPath vms2(_T("FOO:[BAR.TEST]"));
324        const CServerPath vms3(_T("GOO:[BAR"));
325        const CServerPath vms4(_T("GOO:[BAR^.TEST.SOMETHING]"));
326        CPPUNIT_ASSERT(vms2.GetCommonParent(vms1) == vms1);
327        CPPUNIT_ASSERT(vms3.GetCommonParent(vms1) == CServerPath());
328
329        const CServerPath dos1(_T("C:\\"));
330        const CServerPath dos2(_T("C:\\FOO"));
331        const CServerPath dos3(_T("D:\\FOO"));
332        CPPUNIT_ASSERT(dos1.GetCommonParent(dos2) == dos1);
333        CPPUNIT_ASSERT(dos2.GetCommonParent(dos3) == CServerPath());
334
335        const CServerPath mvs1(_T("'FOO'"), MVS);
336        const CServerPath mvs2(_T("'FOO.'"), MVS);
337        const CServerPath mvs3(_T("'FOO.BAR'"), MVS);
338        const CServerPath mvs4(_T("'FOO.BAR.'"), MVS);
339        const CServerPath mvs5(_T("'BAR.'"), MVS);
340        const CServerPath mvs6(_T("'FOO.BAR.BAZ'"), MVS);
341        CPPUNIT_ASSERT(mvs1.GetCommonParent(mvs2) == CServerPath());
342        CPPUNIT_ASSERT(mvs3.GetCommonParent(mvs1) == CServerPath());
343        CPPUNIT_ASSERT(mvs4.GetCommonParent(mvs3) == mvs2);
344        CPPUNIT_ASSERT(mvs3.GetCommonParent(mvs4) == mvs2);
345        CPPUNIT_ASSERT(mvs3.GetCommonParent(mvs2) == mvs2);
346        CPPUNIT_ASSERT(mvs4.GetCommonParent(mvs2) == mvs2);
347        CPPUNIT_ASSERT(mvs5.GetCommonParent(mvs2) == CServerPath());
348        CPPUNIT_ASSERT(mvs6.GetCommonParent(mvs4) == mvs4);
349        CPPUNIT_ASSERT(mvs6.GetCommonParent(mvs3) == mvs2);
350
351        const CServerPath vxworks1(_T(":foo:"));
352        const CServerPath vxworks2(_T(":foo:bar"));
353        const CServerPath vxworks3(_T(":foo:baz"));
354        const CServerPath vxworks4(_T(":baz:bar"));
355        CPPUNIT_ASSERT(vxworks1.GetCommonParent(vxworks2) == vxworks1);
356        CPPUNIT_ASSERT(vxworks2.GetCommonParent(vxworks3) == vxworks1);
357        CPPUNIT_ASSERT(vxworks4.GetCommonParent(vxworks2) == CServerPath());
358
359        // ZVM is same as Unix, only makes difference in directory
360        // listing parser.
361        const CServerPath zvm1(_T("/foo"), ZVM);
362        const CServerPath zvm2(_T("/foo/baz"), ZVM);
363        const CServerPath zvm3(_T("/foo/bar"), ZVM);
364        CPPUNIT_ASSERT(zvm2.GetCommonParent(zvm3) == zvm1);
365        CPPUNIT_ASSERT(zvm1.GetCommonParent(zvm1) == zvm1);
366
367        CServerPath hpnonstop1(_T("\\mysys"), HPNONSTOP);
368        CServerPath hpnonstop2(_T("\\mysys.$myvol"), HPNONSTOP);
369        CServerPath hpnonstop3(_T("\\mysys.$theirvol"), HPNONSTOP);
370        CServerPath hpnonstop4(_T("\\theirsys.$myvol"), HPNONSTOP);
371        CPPUNIT_ASSERT(hpnonstop2.GetCommonParent(hpnonstop3) == hpnonstop1);
372        CPPUNIT_ASSERT(hpnonstop1.GetCommonParent(hpnonstop1) == hpnonstop1);
373        CPPUNIT_ASSERT(hpnonstop2.GetCommonParent(hpnonstop4) == CServerPath());
374
375        const CServerPath dos_virtual1(_T("\\foo"));
376        const CServerPath dos_virtual2(_T("\\foo\\baz"));
377        const CServerPath dos_virtual3(_T("\\foo\\bar"));
378        CPPUNIT_ASSERT(dos_virtual2.GetCommonParent(dos_virtual3) == dos_virtual1);
379        CPPUNIT_ASSERT(dos_virtual1.GetCommonParent(dos_virtual1) == dos_virtual1);
380
381        const CServerPath cygwin1(_T("/foo"), CYGWIN);
382        const CServerPath cygwin2(_T("/foo/baz"), CYGWIN);
383        const CServerPath cygwin3(_T("/foo/bar"), CYGWIN);
384        const CServerPath cygwin4(_T("//foo"), CYGWIN);
385        const CServerPath cygwin5(_T("//foo/baz"), CYGWIN);
386        const CServerPath cygwin6(_T("//foo/bar"), CYGWIN);
387        CPPUNIT_ASSERT(cygwin2.GetCommonParent(cygwin3) == cygwin1);
388        CPPUNIT_ASSERT(cygwin1.GetCommonParent(cygwin1) == cygwin1);
389        CPPUNIT_ASSERT(cygwin1.GetCommonParent(cygwin3) == cygwin1);
390        CPPUNIT_ASSERT(cygwin5.GetCommonParent(cygwin6) == cygwin4);
391        CPPUNIT_ASSERT(cygwin4.GetCommonParent(cygwin4) == cygwin4);
392        CPPUNIT_ASSERT(cygwin4.GetCommonParent(cygwin6) == cygwin4);
393        CPPUNIT_ASSERT(cygwin4.GetCommonParent(cygwin1) == CServerPath());
394}
395
396void CServerPathTest::testFormatFilename()
397{
398        const CServerPath unix1(_T("/"));
399        const CServerPath unix2(_T("/foo"));
400        CPPUNIT_ASSERT(unix1.FormatFilename(_T("bar"), false) == _T("/bar"));
401        CPPUNIT_ASSERT(unix2.FormatFilename(_T("bar"), false) == _T("/foo/bar"));
402
403        const CServerPath vms1(_T("FOO:[BAR]"));
404        CPPUNIT_ASSERT(vms1.FormatFilename(_T("BAZ"), false) == _T("FOO:[BAR]BAZ"));
405
406        const CServerPath dos1(_T("C:\\"));
407        const CServerPath dos2(_T("C:\\foo"));
408        CPPUNIT_ASSERT(dos1.FormatFilename(_T("bar"), false) == _T("C:\\bar"));
409        CPPUNIT_ASSERT(dos2.FormatFilename(_T("bar"), false) == _T("C:\\foo\\bar"));
410
411        const CServerPath mvs1(_T("'FOO.BAR'"), MVS);
412        const CServerPath mvs2(_T("'FOO.BAR.'"), MVS);
413        CPPUNIT_ASSERT(mvs1.FormatFilename(_T("BAZ"), false) == _T("'FOO.BAR(BAZ)'"));
414        CPPUNIT_ASSERT(mvs2.FormatFilename(_T("BAZ"), false) == _T("'FOO.BAR.BAZ'"));
415
416        const CServerPath vxworks1(_T(":foo:"));
417        const CServerPath vxworks2(_T(":foo:bar"));
418        const CServerPath vxworks3(_T(":foo:bar/test"));
419        CPPUNIT_ASSERT(vxworks1.FormatFilename(_T("baz"), false) == _T(":foo:baz"));
420        CPPUNIT_ASSERT(vxworks2.FormatFilename(_T("baz"), false) == _T(":foo:bar/baz"));
421        CPPUNIT_ASSERT(vxworks3.FormatFilename(_T("baz"), false) == _T(":foo:bar/test/baz"));
422
423        // ZVM is same as Unix, only makes difference in directory
424        // listing parser.
425        const CServerPath zvm1(_T("/"), ZVM);
426        const CServerPath zvm2(_T("/foo"), ZVM);
427        CPPUNIT_ASSERT(zvm1.FormatFilename(_T("bar"), false) == _T("/bar"));
428        CPPUNIT_ASSERT(zvm2.FormatFilename(_T("bar"), false) == _T("/foo/bar"));
429
430        const CServerPath hpnonstop1(_T("\\mysys"), HPNONSTOP);
431        const CServerPath hpnonstop2(_T("\\mysys.$myvol"), HPNONSTOP);
432        const CServerPath hpnonstop3(_T("\\mysys.$myvol.mysubvol"), HPNONSTOP);
433        CPPUNIT_ASSERT(hpnonstop1.FormatFilename(_T("foo"), false) == _T("\\mysys.foo"));
434        CPPUNIT_ASSERT(hpnonstop2.FormatFilename(_T("foo"), false) == _T("\\mysys.$myvol.foo"));
435        CPPUNIT_ASSERT(hpnonstop3.FormatFilename(_T("foo"), false) == _T("\\mysys.$myvol.mysubvol.foo"));
436
437        const CServerPath dos_virtual1(_T("/"));
438        const CServerPath dos_virtual2(_T("/foo"));
439        CPPUNIT_ASSERT(dos_virtual1.FormatFilename(_T("bar"), false) == _T("/bar"));
440        CPPUNIT_ASSERT(dos_virtual2.FormatFilename(_T("bar"), false) == _T("/foo/bar"));
441
442        const CServerPath cygwin1(_T("/"), CYGWIN);
443        const CServerPath cygwin2(_T("/foo"), CYGWIN);
444        const CServerPath cygwin3(_T("//"), CYGWIN);
445        const CServerPath cygwin4(_T("//foo"), CYGWIN);
446        CPPUNIT_ASSERT(cygwin1.FormatFilename(_T("bar"), false) == _T("/bar"));
447        CPPUNIT_ASSERT(cygwin2.FormatFilename(_T("bar"), false) == _T("/foo/bar"));
448        CPPUNIT_ASSERT(cygwin3.FormatFilename(_T("bar"), false) == _T("//bar"));
449        CPPUNIT_ASSERT(cygwin4.FormatFilename(_T("bar"), false) == _T("//foo/bar"));
450}
451
452void CServerPathTest::testChangePath()
453{
454        CServerPath unix1(_T("/foo/bar"));
455        CServerPath unix2(_T("/foo/bar/baz"));
456        CServerPath unix3(_T("/foo/baz"));
457        CServerPath unix4(_T("/foo/bar/baz"));
458        CServerPath unix5(_T("/foo"));
459        CPPUNIT_ASSERT(unix1.ChangePath(_T("baz")) && unix1 == unix2);
460        CPPUNIT_ASSERT(unix2.ChangePath(_T("../../baz")) && unix2 == unix3);
461        CPPUNIT_ASSERT(unix3.ChangePath(_T("/foo/bar/baz")) && unix3 == unix4);
462        CPPUNIT_ASSERT(unix3.ChangePath(_T(".")) && unix3 == unix4);
463        wxString sub = _T("../../bar");
464        CPPUNIT_ASSERT(unix4.ChangePath(sub, true) && unix4 == unix5 && sub == _T("bar"));
465        sub = _T("bar/");
466        CPPUNIT_ASSERT(!unix4.ChangePath(sub, true));
467
468        const CServerPath vms1(_T("FOO:[BAR]"));
469        CServerPath vms2(_T("FOO:[BAR]"));
470        CServerPath vms3(_T("FOO:[BAR.BAZ]"));
471        CServerPath vms4(_T("FOO:[BAR]"));
472        CServerPath vms5(_T("FOO:[BAR.BAZ.BAR]"));
473        CServerPath vms6(_T("FOO:[BAR]"));
474        CServerPath vms7(_T("FOO:[BAR]"));
475        CServerPath vms8(_T("FOO:[BAR]"));
476        CServerPath vms9(_T("FOO:[BAZ.BAR]"));
477        CServerPath vms10(_T("DOO:[BAZ.BAR]"));
478        CPPUNIT_ASSERT(vms2.ChangePath(_T("BAZ")) && vms2 == vms3);
479        CPPUNIT_ASSERT(vms4.ChangePath(_T("BAZ.BAR")) && vms4 == vms5);
480        sub = _T("BAZ.BAR");
481        CPPUNIT_ASSERT(vms6.ChangePath(sub, true) && vms6 == vms1 && sub == _T("BAZ.BAR"));
482        sub = _T("[BAZ.BAR]FOO");
483        CPPUNIT_ASSERT(!vms7.ChangePath(sub, false));
484        CPPUNIT_ASSERT(vms8.ChangePath(sub, true) && vms8 == vms9 && sub == _T("FOO"));
485        CPPUNIT_ASSERT(vms10.ChangePath(_T("FOO:[BAR]")) && vms10 == vms1);
486
487        const CServerPath dos1(_T("c:\\bar"));
488        CServerPath dos2(_T("c:\\bar"));
489        CServerPath dos3(_T("c:\\bar\\baz"));
490        CServerPath dos4(_T("c:\\bar"));
491        CServerPath dos5(_T("c:\\bar\\baz\\bar"));
492        CServerPath dos6(_T("c:\\bar\\baz\\"));
493        CServerPath dos7(_T("d:\\bar"));
494        CServerPath dos8(_T("c:\\bar\\baz"));
495        CServerPath dos9(_T("c:\\bar\\"));
496        CServerPath dos10(_T("md:\\bar\\"), DOS);
497        CPPUNIT_ASSERT(dos2.ChangePath(_T("baz")) && dos2 == dos3);
498        CPPUNIT_ASSERT(dos4.ChangePath(_T("baz\\bar")) && dos4 == dos5);
499        CPPUNIT_ASSERT(dos5.ChangePath(_T("\\bar\\")) && dos5 == dos1);
500        CPPUNIT_ASSERT(dos6.ChangePath(_T("..\\..\\.\\foo\\..\\bar")) && dos6 == dos1);
501        CPPUNIT_ASSERT(dos7.ChangePath(_T("c:\\bar")) && dos7 == dos1);
502        sub = _T("\\bar\\foo");
503        CPPUNIT_ASSERT(dos8.ChangePath(sub, true) && dos8 == dos1 && sub == _T("foo"));
504        sub = _T("baz\\foo");
505        CPPUNIT_ASSERT(dos9.ChangePath(sub, true) && dos9 == dos3 && sub == _T("foo"));
506        CPPUNIT_ASSERT(dos9.ChangePath(_T("md:\\bar\\")) && dos9 == dos10);
507
508        const CServerPath mvs1(_T("'BAR.'"), MVS);
509        CServerPath mvs2(_T("'BAR.'"), MVS);
510        CServerPath mvs3(_T("'BAR.BAZ.'"), MVS);
511        CServerPath mvs4(_T("'BAR.'"), MVS);
512        CServerPath mvs5(_T("'BAR.BAZ.BAR'"), MVS);
513        CServerPath mvs6(_T("'BAR.'"), MVS);
514        CServerPath mvs7(_T("'BAR.'"), MVS);
515        CServerPath mvs8(_T("'BAR.'"), MVS);
516        CServerPath mvs9(_T("'BAR.BAZ'"), MVS);
517        CServerPath mvs10(_T("'BAR.BAZ.'"), MVS);
518        CServerPath mvs11(_T("'BAR.BAZ'"), MVS);
519        CServerPath mvs12(_T("'BAR.BAZ'"), MVS);
520        CPPUNIT_ASSERT(mvs2.ChangePath(_T("BAZ.")) && mvs2 == mvs3);
521        CPPUNIT_ASSERT(mvs4.ChangePath(_T("BAZ.BAR")) && mvs4 == mvs5);
522        sub = _T("BAZ.BAR");
523        CPPUNIT_ASSERT(mvs6.ChangePath(sub, true) && mvs6 == mvs3 && sub == _T("BAR"));
524        sub = _T("BAZ.BAR.");
525        CPPUNIT_ASSERT(!mvs7.ChangePath(sub, true));
526        sub = _T("BAZ(BAR)");
527        CPPUNIT_ASSERT(mvs8.ChangePath(sub, true) && mvs8 == mvs9 && sub == _T("BAR"));
528        CPPUNIT_ASSERT(!mvs5.ChangePath(_T("(FOO)")));
529        CPPUNIT_ASSERT(!mvs9.ChangePath(_T("FOO")));
530        sub = _T("(FOO)");
531        CPPUNIT_ASSERT(!mvs10.ChangePath(sub));
532        sub = _T("(FOO)");
533        CPPUNIT_ASSERT(mvs11.ChangePath(sub, true) && mvs11 == mvs12 && sub == _T("FOO"));
534
535        const CServerPath vxworks1(_T(":foo:bar"));
536        CServerPath vxworks2(_T(":foo:bar"));
537        CServerPath vxworks3(_T(":foo:bar/baz"));
538        CServerPath vxworks4(_T(":foo:bar"));
539        CServerPath vxworks5(_T(":foo:bar/baz/bar"));
540        CServerPath vxworks6(_T(":foo:bar/baz/"));
541        CServerPath vxworks7(_T(":bar:bar"));
542        CServerPath vxworks8(_T(":foo:bar/baz"));
543        CServerPath vxworks9(_T(":foo:bar/baz/bar"));
544        CPPUNIT_ASSERT(vxworks2.ChangePath(_T("baz")) && vxworks2 == vxworks3);
545        CPPUNIT_ASSERT(vxworks4.ChangePath(_T("baz/bar")) && vxworks4 == vxworks5);
546        CPPUNIT_ASSERT(vxworks6.ChangePath(_T("../.././foo/../bar")) && vxworks6 == vxworks1);
547        CPPUNIT_ASSERT(vxworks7.ChangePath(_T(":foo:bar")) && vxworks7 == vxworks1);
548        sub = _T("bar/foo");
549        CPPUNIT_ASSERT(vxworks8.ChangePath(sub, true) && vxworks8 == vxworks9 && sub == _T("foo"));
550
551        // ZVM is same as Unix, only makes difference in directory
552        // listing parser.
553        CServerPath zvm1(_T("/foo/bar"), ZVM);
554        CServerPath zvm2(_T("/foo/bar/baz"), ZVM);
555        CServerPath zvm3(_T("/foo/baz"), ZVM);
556        CServerPath zvm4(_T("/foo/bar/baz"), ZVM);
557        CServerPath zvm5(_T("/foo"), ZVM);
558        CPPUNIT_ASSERT(zvm1.ChangePath(_T("baz")) && zvm1 == zvm2);
559        CPPUNIT_ASSERT(zvm2.ChangePath(_T("../../baz")) && zvm2 == zvm3);
560        CPPUNIT_ASSERT(zvm3.ChangePath(_T("/foo/bar/baz")) && zvm3 == zvm4);
561        CPPUNIT_ASSERT(zvm3.ChangePath(_T(".")) && zvm3 == zvm4);
562        sub = _T("../../bar");
563        CPPUNIT_ASSERT(zvm4.ChangePath(sub, true) && zvm4 == zvm5 && sub == _T("bar"));
564        sub = _T("bar/");
565        CPPUNIT_ASSERT(!zvm4.ChangePath(sub, true));
566
567        CServerPath hpnonstop1(_T("\\mysys.$myvol"), HPNONSTOP);
568        CServerPath hpnonstop2(_T("\\mysys.$myvol.mysubvol"), HPNONSTOP);
569        CServerPath hpnonstop3(_T("\\mysys.$myvol2"), HPNONSTOP);
570        CServerPath hpnonstop4(_T("\\mysys.$myvol.mysubvol"), HPNONSTOP);
571        CServerPath hpnonstop5(_T("\\mysys"), HPNONSTOP);
572        CPPUNIT_ASSERT(hpnonstop1.ChangePath(_T("mysubvol")) && hpnonstop1 == hpnonstop2);
573        CPPUNIT_ASSERT(hpnonstop3.ChangePath(_T("\\mysys.$myvol.mysubvol")) && hpnonstop3 == hpnonstop4);
574        sub = _T("bar");
575        CPPUNIT_ASSERT(hpnonstop2.ChangePath(sub, true) && hpnonstop2 == hpnonstop4 && sub == _T("bar"));
576        sub = _T("$myvol.mysubvol.bar");
577        CPPUNIT_ASSERT(hpnonstop5.ChangePath(sub, true) && hpnonstop5 == hpnonstop4 && sub == _T("bar"));
578        sub = _T("bar.");
579        CPPUNIT_ASSERT(!hpnonstop4.ChangePath(sub, true));
580
581        CServerPath dos_virtual1(_T("\\foo\\bar"));
582        CServerPath dos_virtual2(_T("\\foo\\bar\\baz"));
583        CServerPath dos_virtual3(_T("\\foo\\baz"));
584        CServerPath dos_virtual4(_T("\\foo\\bar\\baz"));
585        CServerPath dos_virtual5(_T("\\foo"));
586        CPPUNIT_ASSERT(dos_virtual1.ChangePath(_T("baz")) && dos_virtual1 == dos_virtual2);
587        CPPUNIT_ASSERT(dos_virtual2.ChangePath(_T("..\\..\\baz")) && dos_virtual2 == dos_virtual3);
588        CPPUNIT_ASSERT(dos_virtual3.ChangePath(_T("\\foo\\bar\\baz")) && dos_virtual3 == dos_virtual4);
589        CPPUNIT_ASSERT(dos_virtual3.ChangePath(_T(".")) && dos_virtual3 == dos_virtual4);
590        sub = _T("..\\..\\bar");
591        CPPUNIT_ASSERT(dos_virtual4.ChangePath(sub, true) && dos_virtual4 == dos_virtual5 && sub == _T("bar"));
592        sub = _T("bar\\");
593        CPPUNIT_ASSERT(!dos_virtual4.ChangePath(sub, true));
594
595        CServerPath cygwin1(_T("/foo/bar"), CYGWIN);
596        CServerPath cygwin2(_T("/foo/bar/baz"), CYGWIN);
597        CServerPath cygwin3(_T("/foo/baz"), CYGWIN);
598        CServerPath cygwin4(_T("/foo/bar/baz"), CYGWIN);
599        CServerPath cygwin5(_T("/foo"), CYGWIN);
600        CServerPath cygwin6(_T("//foo"), CYGWIN);
601        CServerPath cygwin7(_T("//"), CYGWIN);
602        CPPUNIT_ASSERT(cygwin1.ChangePath(_T("baz")) && cygwin1 == cygwin2);
603        CPPUNIT_ASSERT(cygwin2.ChangePath(_T("../../baz")) && cygwin2 == cygwin3);
604        CPPUNIT_ASSERT(cygwin3.ChangePath(_T("/foo/bar/baz")) && cygwin3 == cygwin4);
605        CPPUNIT_ASSERT(cygwin3.ChangePath(_T(".")) && cygwin3 == cygwin4);
606        sub = _T("../../bar");
607        CPPUNIT_ASSERT(cygwin4.ChangePath(sub, true) && cygwin4 == cygwin5 && sub == _T("bar"));
608        sub = _T("bar/");
609        CPPUNIT_ASSERT(!cygwin4.ChangePath(sub, true));
610        CPPUNIT_ASSERT(cygwin5.ChangePath(_T("//foo")) && cygwin5 == cygwin6);
611        sub = _T("//foo");
612        CPPUNIT_ASSERT(cygwin1.ChangePath(sub, true) && cygwin1 == cygwin7 && sub == _T("foo"));
613}
Note: See TracBrowser for help on using the repository browser.