2 // System.IO.Path Test Cases
5 // Marcin Szczepanski (marcins@zipworld.com.au)
6 // Gonzalo Paniagua Javier (gonzalo@ximian.com)
7 // Ben Maurer (bmaurer@users.sf.net)
8 // Gilles Freart (gfr@skynet.be)
9 // Atsushi Enomoto (atsushi@ximian.com)
10 // Sebastien Pouliot <sebastien@ximian.com>
12 // (c) Marcin Szczepanski
13 // (c) 2002 Ximian, Inc. (http://www.ximian.com)
14 // (c) 2003 Ben Maurer
15 // (c) 2003 Gilles Freart
16 // Copyright (C) 2005 Novell, Inc (http://www.novell.com)
19 using NUnit.Framework;
24 namespace MonoTests.System.IO
39 static char DSC = Path.DirectorySeparatorChar;
46 path1 = "/foo/test.txt";
49 } else if ('\\' == DSC) {
51 path1 = "c:\\foo\\test.txt";
52 path2 = Environment.GetEnvironmentVariable ("SYSTEMROOT");
56 //FIXME: For Mac. figure this out when we need it
57 path1 = "foo:test.txt";
66 return OS == OsType.Windows;
73 return OS == OsType.Unix;
80 return OS == OsType.Mac;
85 public void ChangeExtension ()
87 string [] files = new string [3];
88 files [(int) OsType.Unix] = "/foo/test.doc";
89 files [(int) OsType.Windows] = "c:\\foo\\test.doc";
90 files [(int) OsType.Mac] = "foo:test.doc";
92 string testPath = Path.ChangeExtension (path1, "doc");
93 Assert.AreEqual (files [(int) OS], testPath, "ChangeExtension #01");
95 testPath = Path.ChangeExtension (String.Empty, ".extension");
96 Assert.AreEqual (String.Empty, testPath, "ChangeExtension #02");
98 testPath = Path.ChangeExtension (null, ".extension");
99 Assert.AreEqual (null, testPath, "ChangeExtension #03");
101 testPath = Path.ChangeExtension ("path", null);
102 Assert.AreEqual ("path", testPath, "ChangeExtension #04");
104 testPath = Path.ChangeExtension ("path.ext", "doc");
105 Assert.AreEqual ("path.doc", testPath, "ChangeExtension #05");
107 testPath = Path.ChangeExtension ("path.ext1.ext2", "doc");
108 Assert.AreEqual ("path.ext1.doc", testPath, "ChangeExtension #06");
110 testPath = Path.ChangeExtension ("hogehoge.xml", ".xsl");
111 Assert.AreEqual ("hogehoge.xsl", testPath, "ChangeExtension #07");
112 testPath = Path.ChangeExtension ("hogehoge", ".xsl");
113 Assert.AreEqual ("hogehoge.xsl", testPath, "ChangeExtension #08");
114 testPath = Path.ChangeExtension ("hogehoge.xml", "xsl");
115 Assert.AreEqual ("hogehoge.xsl", testPath, "ChangeExtension #09");
116 testPath = Path.ChangeExtension ("hogehoge", "xsl");
117 Assert.AreEqual ("hogehoge.xsl", testPath, "ChangeExtension #10");
118 testPath = Path.ChangeExtension ("hogehoge.xml", String.Empty);
119 Assert.AreEqual ("hogehoge.", testPath, "ChangeExtension #11");
120 testPath = Path.ChangeExtension ("hogehoge", String.Empty);
121 Assert.AreEqual ("hogehoge.", testPath, "ChangeExtension #12");
122 testPath = Path.ChangeExtension ("hogehoge.", null);
123 Assert.AreEqual ("hogehoge", testPath, "ChangeExtension #13");
124 testPath = Path.ChangeExtension ("hogehoge", null);
125 Assert.AreEqual ("hogehoge", testPath, "ChangeExtension #14");
126 testPath = Path.ChangeExtension (String.Empty, null);
127 Assert.AreEqual (String.Empty, testPath, "ChangeExtension #15");
128 testPath = Path.ChangeExtension (String.Empty, "bashrc");
129 Assert.AreEqual (String.Empty, testPath, "ChangeExtension #16");
130 testPath = Path.ChangeExtension (String.Empty, ".bashrc");
131 Assert.AreEqual (String.Empty, testPath, "ChangeExtension #17");
132 testPath = Path.ChangeExtension (null, null);
133 Assert.IsNull (testPath, "ChangeExtension #18");
137 public void ChangeExtension_Extension_InvalidPathChars ()
139 string fn = Path.ChangeExtension ("file.ext", "<");
140 Assert.AreEqual ("file.<", fn, "Invalid filename");
144 public void ChangeExtension_Path_InvalidPathChars ()
147 Path.ChangeExtension ("fi\0le.ext", ".extension");
149 } catch (ArgumentException ex) {
150 // Illegal characters in path
151 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
152 Assert.IsNull (ex.InnerException, "#3");
153 Assert.IsNotNull (ex.Message, "#4");
154 Assert.IsNull (ex.ParamName, "#5");
159 public void Combine ()
161 string [] files = new string [3];
162 files [(int) OsType.Unix] = "/etc/init.d";
163 files [(int) OsType.Windows] = Environment.GetEnvironmentVariable ("SYSTEMROOT") + @"\system32";
164 files [(int) OsType.Mac] = "foo:bar";
166 string testPath = Path.Combine (path2, path3);
167 Assert.AreEqual (files [(int) OS], testPath, "Combine #01");
169 testPath = Path.Combine ("one", String.Empty);
170 Assert.AreEqual ("one", testPath, "Combine #02");
172 testPath = Path.Combine (String.Empty, "one");
173 Assert.AreEqual ("one", testPath, "Combine #03");
175 string current = Directory.GetCurrentDirectory ();
176 testPath = Path.Combine (current, "one");
178 string expected = current + DSC + "one";
179 Assert.AreEqual (expected, testPath, "Combine #04");
181 testPath = Path.Combine ("one", current);
182 // LAMESPEC noted in Path.cs
183 Assert.AreEqual (current, testPath, "Combine #05");
185 testPath = Path.Combine (current, expected);
186 Assert.AreEqual (expected, testPath, "Combine #06");
188 testPath = DSC + "one";
189 testPath = Path.Combine (testPath, "two" + DSC);
190 expected = DSC + "one" + DSC + "two" + DSC;
191 Assert.AreEqual (expected, testPath, "Combine #06");
193 testPath = "one" + DSC;
194 testPath = Path.Combine (testPath, DSC + "two");
195 expected = DSC + "two";
196 Assert.AreEqual (expected, testPath, "Combine #06");
198 testPath = "one" + DSC;
199 testPath = Path.Combine (testPath, "two" + DSC);
200 expected = "one" + DSC + "two" + DSC;
201 Assert.AreEqual (expected, testPath, "Combine #07");
204 Assert.AreEqual ("a", Path.Combine (new [] { "a", "" }), "Combine #08");
209 public void Combine_Path1_InvalidPathChars ()
212 Path.Combine ("a\0", "one");
214 } catch (ArgumentException ex) {
215 // Illegal characters in path
216 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
217 Assert.IsNull (ex.InnerException, "#3");
218 Assert.IsNotNull (ex.Message, "#4");
219 Assert.IsNull (ex.ParamName, "#5");
224 public void Combine_Path1_Null ()
227 Path.Combine (null, "one");
229 } catch (ArgumentNullException ex) {
230 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
231 Assert.IsNull (ex.InnerException, "#3");
232 Assert.IsNotNull (ex.Message, "#4");
233 Assert.AreEqual ("path1", ex.ParamName, "#5");
238 public void Combine_Path2_InvalidPathChars ()
241 Path.Combine ("one", "a\0");
243 } catch (ArgumentException ex) {
244 // Illegal characters in path
245 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
246 Assert.IsNull (ex.InnerException, "#3");
247 Assert.IsNotNull (ex.Message, "#4");
248 Assert.IsNull (ex.ParamName, "#5");
253 public void Combine_Path2_Null ()
256 Path.Combine ("one", null);
258 } catch (ArgumentNullException ex) {
259 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
260 Assert.IsNull (ex.InnerException, "#3");
261 Assert.IsNotNull (ex.Message, "#4");
262 Assert.AreEqual ("path2", ex.ParamName, "#5");
267 public void GetDirectoryName ()
269 string [] files = new string [3];
270 files [(int) OsType.Unix] = "/foo";
271 files [(int) OsType.Windows] = "c:\\foo";
272 files [(int) OsType.Mac] = "foo";
274 string testDirName = Path.GetDirectoryName (path1);
275 Assert.AreEqual (files [(int) OS], testDirName, "#A1");
276 testDirName = Path.GetDirectoryName (files [(int) OS] + DSC);
277 Assert.AreEqual (files [(int) OS], testDirName, "#A2");
280 Assert.AreEqual ("C:\\foo", Path.GetDirectoryName ("C:\\foo\\foo.txt"), "#B1");
281 Assert.AreEqual (null, Path.GetDirectoryName ("C:"), "#B2");
282 Assert.AreEqual (null, Path.GetDirectoryName (@"C:\"), "#B3");
283 Assert.AreEqual (@"C:\", Path.GetDirectoryName (@"C:\dir"), "#B4");
284 Assert.AreEqual (@"C:\dir", Path.GetDirectoryName (@"C:\dir\"), "#B5");
285 Assert.AreEqual (@"C:\dir", Path.GetDirectoryName (@"C:\dir\dir"), "#B6");
286 Assert.AreEqual (@"C:\dir\dir", Path.GetDirectoryName (@"C:\dir\dir\"), "#B7");
287 Assert.AreEqual (@"C:", Path.GetDirectoryName (@"C:foo.txt"), "#B8");
288 Assert.AreEqual (@"C:dir", Path.GetDirectoryName (@"C:dir\"), "#B9");
290 Assert.AreEqual ("\\foo\\bar", Path.GetDirectoryName ("/foo//bar/dingus"), "#C1");
291 Assert.AreEqual ("foo\\bar", Path.GetDirectoryName ("foo/bar/"), "#C2");
292 Assert.AreEqual ("foo\\bar", Path.GetDirectoryName ("foo/bar\\xxx"), "#C3");
293 Assert.AreEqual ("\\\\host\\dir\\dir2", Path.GetDirectoryName ("\\\\host\\dir\\\\dir2\\path"), "#C4");
296 Assert.AreEqual (null, Path.GetDirectoryName (@"\\"), "#D1");
297 Assert.AreEqual (null, Path.GetDirectoryName (@"\\server"), "#D2");
298 Assert.AreEqual (null, Path.GetDirectoryName (@"\\server\share"), "#D3");
299 Assert.AreEqual (@"\\server\share", Path.GetDirectoryName (@"\\server\share\"), "#D4");
300 Assert.AreEqual (@"\\server\share", Path.GetDirectoryName (@"\\server\share\dir"), "#D5");
301 Assert.AreEqual (@"\\server\share\dir", Path.GetDirectoryName (@"\\server\share\dir\subdir"), "#D6");
303 Assert.AreEqual ("/etc", Path.GetDirectoryName ("/etc/hostname"), "#B1");
304 Assert.AreEqual ("/foo/bar", Path.GetDirectoryName ("/foo//bar/dingus"), "#B2");
305 Assert.AreEqual ("foo/bar", Path.GetDirectoryName ("foo/bar/"), "#B3");
306 Assert.AreEqual ("/", Path.GetDirectoryName ("/tmp"), "#B4");
307 Assert.IsNull (Path.GetDirectoryName ("/"), "#B5");
308 Assert.AreEqual ("a", Path.GetDirectoryName ("a//b"), "#B6");
313 public void GetDirectoryName_Path_Empty ()
316 Path.GetDirectoryName (String.Empty);
318 } catch (ArgumentException ex) {
319 // The path is not of a legal form
320 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
321 Assert.IsNull (ex.InnerException, "#3");
322 Assert.IsNotNull (ex.Message, "#4");
323 Assert.IsNull (ex.ParamName, "#5");
328 public void GetDirectoryName_Path_InvalidPathChars ()
331 Path.GetDirectoryName ("hi\0world");
333 } catch (ArgumentException ex) {
334 // Illegal characters in path
335 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
336 Assert.IsNull (ex.InnerException, "#3");
337 Assert.IsNotNull (ex.Message, "#4");
338 Assert.IsNull (ex.ParamName, "#5");
343 public void GetDirectoryName_Path_Null ()
345 Assert.IsNull (Path.GetDirectoryName (null));
349 public void GetDirectoryName_Path_Whitespace ()
352 Path.GetDirectoryName (" ");
354 } catch (ArgumentException ex) {
355 // The path is not of a legal form
356 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
357 Assert.IsNull (ex.InnerException, "#3");
358 Assert.IsNotNull (ex.Message, "#4");
359 Assert.IsNull (ex.ParamName, "#5");
364 public void GetExtension ()
366 string testExtn = Path.GetExtension (path1);
368 Assert.AreEqual (".txt", testExtn, "GetExtension #01");
370 testExtn = Path.GetExtension (path2);
371 Assert.AreEqual (String.Empty, testExtn, "GetExtension #02");
373 testExtn = Path.GetExtension (String.Empty);
374 Assert.AreEqual (String.Empty, testExtn, "GetExtension #03");
376 testExtn = Path.GetExtension (null);
377 Assert.AreEqual (null, testExtn, "GetExtension #04");
379 testExtn = Path.GetExtension (" ");
380 Assert.AreEqual (String.Empty, testExtn, "GetExtension #05");
382 testExtn = Path.GetExtension (path1 + ".doc");
383 Assert.AreEqual (".doc", testExtn, "GetExtension #06");
385 testExtn = Path.GetExtension (path1 + ".doc" + DSC + "a.txt");
386 Assert.AreEqual (".txt", testExtn, "GetExtension #07");
388 testExtn = Path.GetExtension (".");
389 Assert.AreEqual (String.Empty, testExtn, "GetExtension #08");
391 testExtn = Path.GetExtension ("end.");
392 Assert.AreEqual (String.Empty, testExtn, "GetExtension #09");
394 testExtn = Path.GetExtension (".start");
395 Assert.AreEqual (".start", testExtn, "GetExtension #10");
397 testExtn = Path.GetExtension (".a");
398 Assert.AreEqual (".a", testExtn, "GetExtension #11");
400 testExtn = Path.GetExtension ("a.");
401 Assert.AreEqual (String.Empty, testExtn, "GetExtension #12");
403 testExtn = Path.GetExtension ("a");
404 Assert.AreEqual (String.Empty, testExtn, "GetExtension #13");
406 testExtn = Path.GetExtension ("makefile");
407 Assert.AreEqual (String.Empty, testExtn, "GetExtension #14");
411 public void GetExtension_Path_InvalidPathChars ()
414 Path.GetExtension ("hi\0world.txt");
416 } catch (ArgumentException ex) {
417 // Illegal characters in path.
418 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
419 Assert.IsNull (ex.InnerException, "#3");
420 Assert.IsNotNull (ex.Message, "#4");
421 Assert.IsNull (ex.ParamName, "#5");
426 public void GetFileName ()
428 string testFileName = Path.GetFileName (path1);
430 Assert.AreEqual ("test.txt", testFileName, "#1");
431 testFileName = Path.GetFileName (null);
432 Assert.AreEqual (null, testFileName, "#2");
433 testFileName = Path.GetFileName (String.Empty);
434 Assert.AreEqual (String.Empty, testFileName, "#3");
435 testFileName = Path.GetFileName (" ");
436 Assert.AreEqual (" ", testFileName, "#4");
440 public void GetFileName_Path_InvalidPathChars ()
443 Path.GetFileName ("hi\0world");
445 } catch (ArgumentException ex) {
446 // Illegal characters in path
447 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
448 Assert.IsNull (ex.InnerException, "#3");
449 Assert.IsNotNull (ex.Message, "#4");
450 Assert.IsNull (ex.ParamName, "#5");
455 public void GetFileNameWithoutExtension ()
457 string testFileName = Path.GetFileNameWithoutExtension (path1);
459 Assert.AreEqual ("test", testFileName, "GetFileNameWithoutExtension #01");
461 testFileName = Path.GetFileNameWithoutExtension (null);
462 Assert.AreEqual (null, testFileName, "GetFileNameWithoutExtension #02");
464 testFileName = Path.GetFileNameWithoutExtension (String.Empty);
465 Assert.AreEqual (String.Empty, testFileName, "GetFileNameWithoutExtension #03");
469 public void GetFileNameWithoutExtension_Path_InvalidPathChars ()
472 Path.GetFileNameWithoutExtension ("hi\0world");
474 } catch (ArgumentException ex) {
475 // Illegal characters in path
476 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
477 Assert.IsNull (ex.InnerException, "#3");
478 Assert.IsNotNull (ex.Message, "#4");
479 Assert.IsNull (ex.ParamName, "#5");
484 public void GetFullPath ()
486 string current = Directory.GetCurrentDirectory ();
488 string testFullPath = Path.GetFullPath ("foo.txt");
489 string expected = current + DSC + "foo.txt";
490 Assert.AreEqual (expected, testFullPath, "GetFullPath #01");
492 testFullPath = Path.GetFullPath ("a//./.././foo.txt");
493 Assert.AreEqual (expected, testFullPath, "GetFullPath #02");
496 Assert.AreEqual ("/bin/bash", Path.GetFullPath ("/../bin/bash"));
502 public void GetFullPath_Unix ()
505 Assert.Ignore ("Running on Windows.");
508 string [,] test = new string [,] {
509 {"root////././././././../root/././../root", "root"},
511 {"root/./", "root/"},
512 {"root/./", "root/"},
513 {"root/../", String.Empty},
514 {"root/../", String.Empty},
515 {"root/../..", String.Empty},
516 {"root/.hiddenfile", "root/.hiddenfile"},
517 {"root/. /", "root/. /"},
518 {"root/.. /", "root/.. /"},
519 {"root/..weirdname", "root/..weirdname"},
520 {"root/..", String.Empty},
521 {"root/../a/b/../../..", String.Empty},
522 {"root/./..", String.Empty},
523 {"..", String.Empty},
525 {"root//dir", "root/dir"},
526 {"root/. /", "root/. /"},
527 {"root/.. /", "root/.. /"},
528 {"root/ . /", "root/ . /"},
529 {"root/ .. /", "root/ .. /"},
530 {"root/./", "root/"},
531 //ERROR! Paths are trimmed
532 // I don't understand this comment^^.
533 // No trimming occurs but the paths are not equal. That's why the test fails. Commented out.
534 //{"root/.. /", "root/.. /"},
535 {".//", String.Empty}
538 for (int i = 0; i < test.GetUpperBound (0); i++) {
539 Assert.AreEqual (root + test [i, 1], Path.GetFullPath (root + test [i, 0]),
540 String.Format ("GetFullPathUnix #{0}", i));
543 Assert.AreEqual ("/", Path.GetFullPath ("/"), "#01");
544 Assert.AreEqual ("/hey", Path.GetFullPath ("/hey"), "#02");
545 Assert.AreEqual (Environment.CurrentDirectory, Path.GetFullPath ("."), "#03");
546 Assert.AreEqual (Path.Combine (Environment.CurrentDirectory, "hey"),
547 Path.GetFullPath ("hey"), "#04");
548 Assert.AreEqual ("/", Path.GetFullPath ("/"), "#01");
550 string curdir = Directory.GetCurrentDirectory ();
552 Directory.SetCurrentDirectory ("/");
553 Assert.AreEqual ("/test.txt", Path.GetFullPath ("test.txt"), "xambug #833");
556 Directory.SetCurrentDirectory (curdir);
561 public void GetFullPath_Windows ()
564 Assert.Ignore ("Not running on Windows.");
566 string root = "C:\\";
567 string [,] test = new string [,] {
568 {"root////././././././../root/././../root", "root"},
570 {"root/./", "root\\"},
571 {"root/./", "root\\"},
575 {"root/.hiddenfile", "root\\.hiddenfile"},
576 {"root/. /", "root\\"},
578 {"root/..weirdname", "root\\..weirdname"},
580 {"root/../a/b/../../..", ""},
584 {"root//dir", "root\\dir"},
585 {"root/. /", "root\\"},
587 {"root/./", "root\\"},
592 for (int i = 0; i < test.GetUpperBound (0); i++) {
594 Assert.AreEqual (root + test [i, 1], Path.GetFullPath (root + test [i, 0]),
595 String.Format ("GetFullPathWindows #{0}", i));
596 } catch (Exception ex) {
597 Assert.Fail (String.Format ("GetFullPathWindows #{0} (\"{1}\") failed: {2}",
598 i, root + test [i, 0], ex.GetType ()));
603 string root2 = @"\\server\share";
604 root = @"\\server\share\";
605 test = new string [,] {
606 {"root////././././././../root/././../root", "root"},
608 {"root/./", "root\\"},
609 {"root/./", "root\\"},
612 {"root/../..", null},
613 {"root/.hiddenfile", "root\\.hiddenfile"},
614 {"root/. /", "root\\"},
616 {"root/..weirdname", "root\\..weirdname"},
618 {"root/../a/b/../../..", null},
622 {"root//dir", "root\\dir"},
623 {"root/. /", "root\\"},
625 {"root/./", "root\\"},
630 for (int i = 0; i < test.GetUpperBound (0); i++) {
631 // "null" means we have to compare against "root2"
632 string res = test [i, 1] != null
636 Assert.AreEqual (res, Path.GetFullPath (root + test [i, 0]),
637 String.Format ("GetFullPathWindows UNC #{0}", i));
638 } catch (AssertionException) {
640 } catch (Exception ex) {
641 Assert.Fail (String.Format ("GetFullPathWindows UNC #{0} (\"{1}\") failed: {2}",
642 i, root + test [i, 0], ex.GetType ()));
646 test = new string [,] {
647 {"root////././././././../root/././../root", "root"},
649 {"root/./", "root\\"},
650 {"root/./", "root\\"},
653 {"root/../..", null},
654 {"root/.hiddenfile", "root\\.hiddenfile"},
655 {"root/. /", "root\\"},
657 {"root/..weirdname", "root\\..weirdname"},
659 {"root/../a/b/../../..", null},
663 {"root//dir", "root\\dir"},
664 {"root/. /", "root\\"},
666 {"root/./", "root\\"},
671 string root3 = @"//server/share";
672 root = @"//server/share/";
673 bool needSlashConvert = Path.DirectorySeparatorChar != '/';
675 for (int i = 0; i < test.GetUpperBound (0); i++) {
676 // "null" means we have to compare against "root2"
677 string res = test [i, 1] != null
680 if (needSlashConvert)
681 res = res.Replace ('/', Path.DirectorySeparatorChar);
683 Assert.AreEqual (res, Path.GetFullPath (root + test [i, 0]),
684 String.Format ("GetFullPathWindows UNC[2] #{0}", i));
685 } catch (AssertionException) {
687 } catch (Exception ex) {
688 Assert.Fail (String.Format ("GetFullPathWindows UNC[2] #{0} (\"{1}\") failed: {2}",
689 i, root + test [i, 0], ex.GetType ()));
695 public void GetFullPath_Path_Empty ()
698 Path.GetFullPath (String.Empty);
700 } catch (ArgumentException ex) {
701 // The path is not of a legal form
702 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
703 Assert.IsNull (ex.InnerException, "#3");
704 Assert.IsNotNull (ex.Message, "#4");
705 Assert.IsNull (ex.ParamName, "#5");
710 public void GetFullPath_Path_EndingSeparator ()
712 string fp = Path.GetFullPath ("something/");
713 char end = fp [fp.Length - 1];
714 Assert.IsTrue (end == Path.DirectorySeparatorChar);
718 public void GetFullPath_Path_InvalidPathChars ()
721 Path.GetFullPath ("hi\0world");
723 } catch (ArgumentException ex) {
724 // Illegal characters in path
725 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
726 Assert.IsNull (ex.InnerException, "#3");
727 Assert.IsNotNull (ex.Message, "#4");
728 Assert.IsNull (ex.ParamName, "#5");
733 public void GetFullPath_Path_Null ()
736 Path.GetFullPath (null);
738 } catch (ArgumentNullException ex) {
739 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
740 Assert.IsNull (ex.InnerException, "#3");
741 Assert.IsNotNull (ex.Message, "#4");
742 Assert.AreEqual ("path", ex.ParamName, "#5");
747 public void GetFullPath_Path_Whitespace ()
750 Path.GetFullPath (" ");
752 } catch (ArgumentException ex) {
753 // The path is not of a legal form
754 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
755 Assert.IsNull (ex.InnerException, "#3");
756 Assert.IsNotNull (ex.Message, "#4");
757 Assert.IsNull (ex.ParamName, "#5");
762 public void GetFullPath2 ()
765 Assert.AreEqual (@"Z:\", Path.GetFullPath ("Z:"), "GetFullPath w#01");
766 Assert.AreEqual (@"c:\abc\def", Path.GetFullPath (@"c:\abc\def"), "GetFullPath w#02");
767 Assert.IsTrue (Path.GetFullPath (@"\").EndsWith (@"\"), "GetFullPath w#03");
768 // "\\\\" is not allowed
769 Assert.IsTrue (Path.GetFullPath ("/").EndsWith (@"\"), "GetFullPath w#05");
770 // "//" is not allowed
771 Assert.IsTrue (Path.GetFullPath ("readme.txt").EndsWith (@"\readme.txt"), "GetFullPath w#07");
772 Assert.IsTrue (Path.GetFullPath ("c").EndsWith (@"\c"), "GetFullPath w#08");
773 Assert.IsTrue (Path.GetFullPath (@"abc\def").EndsWith (@"abc\def"), "GetFullPath w#09");
774 Assert.IsTrue (Path.GetFullPath (@"\abc\def").EndsWith (@"\abc\def"), "GetFullPath w#10");
775 Assert.AreEqual (@"\\abc\def", Path.GetFullPath (@"\\abc\def"), "GetFullPath w#11");
776 Assert.AreEqual (Directory.GetCurrentDirectory () + @"\abc\def", Path.GetFullPath (@"abc//def"), "GetFullPath w#12");
777 Assert.AreEqual (Directory.GetCurrentDirectory ().Substring (0, 2) + @"\abc\def", Path.GetFullPath ("/abc/def"), "GetFullPath w#13");
778 Assert.AreEqual (@"\\abc\def", Path.GetFullPath ("//abc/def"), "GetFullPath w#14");
780 Assert.AreEqual ("/", Path.GetFullPath ("/"), "#01");
781 Assert.AreEqual ("/hey", Path.GetFullPath ("/hey"), "#02");
782 Assert.AreEqual (Environment.CurrentDirectory, Path.GetFullPath ("."), "#03");
783 Assert.AreEqual (Path.Combine (Environment.CurrentDirectory, "hey"),
784 Path.GetFullPath ("hey"), "#04");
789 public void GetPathRoot ()
794 current = Directory.GetCurrentDirectory ();
795 expected = current [0].ToString ();
797 current = @"J:\Some\Strange Directory\Name";
801 string pathRoot = Path.GetPathRoot (current);
802 Assert.AreEqual (expected, pathRoot, "GetPathRoot #01");
806 public void GetPathRoot2 ()
808 // note: this method doesn't call Directory.GetCurrentDirectory so it can be
809 // reused for partial trust unit tests in PathCas.cs
813 pathRoot = Path.GetPathRoot ("hola");
814 Assert.AreEqual (String.Empty, pathRoot, "#A1");
815 pathRoot = Path.GetPathRoot (null);
816 Assert.AreEqual (null, pathRoot, "#A2");
819 Assert.AreEqual ("z:", Path.GetPathRoot ("z:"), "GetPathRoot w#01");
820 Assert.AreEqual ("c:\\", Path.GetPathRoot ("c:\\abc\\def"), "GetPathRoot w#02");
821 Assert.AreEqual ("\\", Path.GetPathRoot ("\\"), "GetPathRoot w#03");
822 Assert.AreEqual ("\\\\", Path.GetPathRoot ("\\\\"), "GetPathRoot w#04");
823 Assert.AreEqual ("\\", Path.GetPathRoot ("/"), "GetPathRoot w#05");
824 Assert.AreEqual ("\\\\", Path.GetPathRoot ("//"), "GetPathRoot w#06");
825 Assert.AreEqual (String.Empty, Path.GetPathRoot ("readme.txt"), "GetPathRoot w#07");
826 Assert.AreEqual (String.Empty, Path.GetPathRoot ("c"), "GetPathRoot w#08");
827 Assert.AreEqual (String.Empty, Path.GetPathRoot ("abc\\def"), "GetPathRoot w#09");
828 Assert.AreEqual ("\\", Path.GetPathRoot ("\\abc\\def"), "GetPathRoot w#10");
829 Assert.AreEqual ("\\\\abc\\def", Path.GetPathRoot ("\\\\abc\\def"), "GetPathRoot w#11");
830 Assert.AreEqual (String.Empty, Path.GetPathRoot ("abc//def"), "GetPathRoot w#12");
831 Assert.AreEqual ("\\", Path.GetPathRoot ("/abc/def"), "GetPathRoot w#13");
832 Assert.AreEqual ("\\\\abc\\def", Path.GetPathRoot ("//abc/def"), "GetPathRoot w#14");
833 Assert.AreEqual (@"C:\", Path.GetPathRoot (@"C:\"), "GetPathRoot w#15");
834 Assert.AreEqual (@"C:\", Path.GetPathRoot (@"C:\\"), "GetPathRoot w#16");
835 Assert.AreEqual ("\\\\abc\\def", Path.GetPathRoot ("\\\\abc\\def\\ghi"), "GetPathRoot w#17");
837 // TODO: Same tests for Unix.
842 public void GetPathRoot_Path_Empty ()
845 Path.GetPathRoot (String.Empty);
847 } catch (ArgumentException ex) {
848 // The path is not of a legal form
849 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
850 Assert.IsNull (ex.InnerException, "#3");
851 Assert.IsNotNull (ex.Message, "#4");
852 Assert.IsNull (ex.ParamName, "#5");
857 public void GetPathRoot_Path_InvalidPathChars ()
860 Path.GetPathRoot ("hi\0world");
862 } catch (ArgumentException ex) {
863 // Illegal characters in path
864 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
865 Assert.IsNull (ex.InnerException, "#3");
866 Assert.IsNotNull (ex.Message, "#4");
867 Assert.IsNull (ex.ParamName, "#5");
872 public void GetPathRoot_Path_Whitespace ()
875 Path.GetPathRoot (" ");
877 } catch (ArgumentException ex) {
878 // The path is not of a legal form
879 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
880 Assert.IsNull (ex.InnerException, "#3");
881 Assert.IsNotNull (ex.Message, "#4");
882 Assert.IsNull (ex.ParamName, "#5");
887 public void GetTempPath ()
889 string getTempPath = Path.GetTempPath ();
890 Assert.IsTrue (getTempPath != String.Empty, "GetTempPath #01");
891 Assert.IsTrue (Path.IsPathRooted (getTempPath), "GetTempPath #02");
892 Assert.AreEqual (Path.DirectorySeparatorChar, getTempPath [getTempPath.Length - 1], "GetTempPath #03");
896 public void GetTempFileName ()
898 string getTempFileName = null;
900 getTempFileName = Path.GetTempFileName ();
901 Assert.IsTrue (getTempFileName != String.Empty, "GetTempFileName #01");
902 Assert.IsTrue (File.Exists (getTempFileName), "GetTempFileName #02");
904 if (getTempFileName != null && getTempFileName != String.Empty){
905 File.Delete (getTempFileName);
911 public void HasExtension ()
913 Assert.AreEqual (true, Path.HasExtension ("foo.txt"), "HasExtension #01");
914 Assert.AreEqual (false, Path.HasExtension ("foo"), "HasExtension #02");
915 Assert.AreEqual (true, Path.HasExtension (path1), "HasExtension #03");
916 Assert.AreEqual (false, Path.HasExtension (path2), "HasExtension #04");
917 Assert.AreEqual (false, Path.HasExtension (null), "HasExtension #05");
918 Assert.AreEqual (false, Path.HasExtension (String.Empty), "HasExtension #06");
919 Assert.AreEqual (false, Path.HasExtension (" "), "HasExtension #07");
920 Assert.AreEqual (false, Path.HasExtension ("."), "HasExtension #08");
921 Assert.AreEqual (false, Path.HasExtension ("end."), "HasExtension #09");
922 Assert.AreEqual (true, Path.HasExtension (".start"), "HasExtension #10");
923 Assert.AreEqual (true, Path.HasExtension (".a"), "HasExtension #11");
924 Assert.AreEqual (false, Path.HasExtension ("a."), "HasExtension #12");
925 Assert.AreEqual (false, Path.HasExtension ("Makefile"), "HasExtension #13");
929 public void HasExtension_Path_InvalidPathChars ()
932 Path.HasExtension ("hi\0world.txt");
934 } catch (ArgumentException ex) {
935 // Illegal characters in path
936 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
937 Assert.IsNull (ex.InnerException, "#3");
938 Assert.IsNotNull (ex.Message, "#4");
939 Assert.IsNull (ex.ParamName, "#5");
944 public void IsPathRooted ()
946 Assert.IsTrue (Path.IsPathRooted (path2), "IsPathRooted #01");
947 Assert.IsTrue (!Path.IsPathRooted (path3), "IsPathRooted #02");
948 Assert.IsTrue (!Path.IsPathRooted (null), "IsPathRooted #03");
949 Assert.IsTrue (!Path.IsPathRooted (String.Empty), "IsPathRooted #04");
950 Assert.IsTrue (!Path.IsPathRooted (" "), "IsPathRooted #05");
951 Assert.IsTrue (Path.IsPathRooted ("/"), "IsPathRooted #06");
952 Assert.IsTrue (Path.IsPathRooted ("//"), "IsPathRooted #07");
953 Assert.IsTrue (!Path.IsPathRooted (":"), "IsPathRooted #08");
956 Assert.IsTrue (Path.IsPathRooted ("\\"), "IsPathRooted #09");
957 Assert.IsTrue (Path.IsPathRooted ("\\\\"), "IsPathRooted #10");
958 Assert.IsTrue (Path.IsPathRooted ("z:"), "IsPathRooted #11");
959 Assert.IsTrue (Path.IsPathRooted ("z:\\"), "IsPathRooted #12");
960 Assert.IsTrue (Path.IsPathRooted ("z:\\topdir"), "IsPathRooted #13");
961 // This looks MS BUG. It is treated as absolute path
962 Assert.IsTrue (Path.IsPathRooted ("z:curdir"), "IsPathRooted #14");
963 Assert.IsTrue (Path.IsPathRooted ("\\abc\\def"), "IsPathRooted #15");
965 if (Environment.GetEnvironmentVariable ("MONO_IOMAP") == "all"){
966 Assert.IsTrue (Path.IsPathRooted ("\\"), "IsPathRooted #16");
967 Assert.IsTrue (Path.IsPathRooted ("\\\\"), "IsPathRooted #17");
969 Assert.IsTrue (!Path.IsPathRooted ("\\"), "IsPathRooted #09");
970 Assert.IsTrue (!Path.IsPathRooted ("\\\\"), "IsPathRooted #10");
971 Assert.IsTrue (!Path.IsPathRooted ("z:"), "IsPathRooted #11");
977 public void IsPathRooted_Path_Empty ()
979 Assert.IsTrue (!Path.IsPathRooted (String.Empty));
983 public void IsPathRooted_Path_InvalidPathChars ()
986 Path.IsPathRooted ("hi\0world");
988 } catch (ArgumentException ex) {
989 // Illegal characters in path.
990 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
991 Assert.IsNull (ex.InnerException, "#3");
992 Assert.IsNotNull (ex.Message, "#4");
993 Assert.IsNull (ex.ParamName, "#5");
998 public void IsPathRooted_Path_Null ()
1000 Assert.IsTrue (!Path.IsPathRooted (null));
1004 public void IsPathRooted_Path_Whitespace ()
1006 Assert.IsTrue (!Path.IsPathRooted (" "));
1010 public void CanonicalizeDots ()
1012 string current = Path.GetFullPath (".");
1013 Assert.IsTrue (!current.EndsWith ("."), "TestCanonicalizeDotst #01");
1014 string parent = Path.GetFullPath ("..");
1015 Assert.IsTrue (!current.EndsWith (".."), "TestCanonicalizeDotst #02");
1019 public void WindowsSystem32_76191 ()
1021 // check for Unix platforms - see FAQ for more details
1022 // http://www.mono-project.com/FAQ:_Technical#How_to_detect_the_execution_platform_.3F
1023 int platform = (int) Environment.OSVersion.Platform;
1024 if ((platform == 4) || (platform == 128) || (platform == 6))
1025 Assert.Ignore ("Running on Unix.");
1027 string curdir = Directory.GetCurrentDirectory ();
1029 string system = Environment.SystemDirectory;
1030 Directory.SetCurrentDirectory (system);
1031 string drive = system.Substring (0, 2);
1032 Assert.AreEqual (system, Path.GetFullPath (drive), "current dir");
1035 Directory.SetCurrentDirectory (curdir);
1040 public void WindowsSystem32_77007 ()
1042 // check for Unix platforms - see FAQ for more details
1043 // http://www.mono-project.com/FAQ:_Technical#How_to_detect_the_execution_platform_.3F
1044 int platform = (int) Environment.OSVersion.Platform;
1045 if ((platform == 4) || (platform == 128) || (platform == 6))
1046 Assert.Ignore ("Running on Unix.");
1048 string curdir = Directory.GetCurrentDirectory ();
1050 string system = Environment.SystemDirectory;
1051 Directory.SetCurrentDirectory (system);
1052 // e.g. C:dir (no backslash) will return CurrentDirectory + dir
1053 string dir = system.Substring (0, 2) + "dir";
1054 Assert.AreEqual (Path.Combine (system, "dir"), Path.GetFullPath (dir), "current dir");
1057 Directory.SetCurrentDirectory (curdir);
1062 public void WindowsDriveC14N_77058 ()
1064 // check for Unix platforms - see FAQ for more details
1065 // http://www.mono-project.com/FAQ:_Technical#How_to_detect_the_execution_platform_.3F
1066 int platform = (int) Environment.OSVersion.Platform;
1067 if ((platform == 4) || (platform == 128) || (platform == 6))
1068 Assert.Ignore ("Running on Unix.");
1070 Assert.AreEqual (@"C:\Windows\dir", Path.GetFullPath (@"C:\Windows\System32\..\dir"), "1");
1071 Assert.AreEqual (@"C:\dir", Path.GetFullPath (@"C:\Windows\System32\..\..\dir"), "2");
1072 Assert.AreEqual (@"C:\dir", Path.GetFullPath (@"C:\Windows\System32\..\..\..\dir"), "3");
1073 Assert.AreEqual (@"C:\dir", Path.GetFullPath (@"C:\Windows\System32\..\..\..\..\dir"), "4");
1074 Assert.AreEqual (@"C:\dir\", Path.GetFullPath (@"C:\Windows\System32\..\.\..\.\..\dir\"), "5");
1078 public void InvalidPathChars_Values ()
1080 char[] invalid = Path.InvalidPathChars;
1082 Assert.AreEqual (36, invalid.Length, "Length");
1084 foreach (char c in invalid) {
1090 // in both 1.1 SP1 and 2.0
1091 if ((i == 34) || (i == 60) || (i == 62) || (i == 124))
1093 Assert.Fail (String.Format ("'{0}' (#{1}) is invalid", c, i));
1096 foreach (char c in invalid) {
1100 Assert.Fail (String.Format ("'{0}' (#{1}) is invalid", c, i));
1106 public void InvalidPathChars_Modify ()
1108 char[] expected = Path.InvalidPathChars;
1109 char[] invalid = Path.InvalidPathChars;
1110 char original = invalid[0];
1114 Assert.IsTrue (expected[0] == 'a', "expected");
1115 Assert.AreEqual (expected[0], Path.InvalidPathChars[0], "readonly");
1117 invalid[0] = original;
1122 public void GetInvalidFileNameChars_Values ()
1124 char[] invalid = Path.GetInvalidFileNameChars ();
1126 Assert.AreEqual (41, invalid.Length);
1127 foreach (char c in invalid) {
1131 if ((i == 34) || (i == 60) || (i == 62) || (i == 124))
1133 // ':', '*', '?', '\', '/'
1134 if ((i == 58) || (i == 42) || (i == 63) || (i == 92) || (i == 47))
1136 Assert.Fail (String.Format ("'{0}' (#{1}) is invalid", c, i));
1139 foreach (char c in invalid) {
1142 if ((i == 0) || (i == 47))
1144 Assert.Fail (String.Format ("'{0}' (#{1}) is invalid", c, i));
1150 public void GetInvalidFileNameChars_Modify ()
1152 char[] expected = Path.GetInvalidFileNameChars ();
1153 char[] invalid = Path.GetInvalidFileNameChars ();
1155 Assert.IsTrue (expected[0] != 'a', "expected");
1156 Assert.AreEqual (expected[0], Path.GetInvalidFileNameChars ()[0], "readonly");
1160 public void GetInvalidPathChars_Values ()
1162 char[] invalid = Path.GetInvalidPathChars ();
1164 Assert.AreEqual (36, invalid.Length);
1165 foreach (char c in invalid) {
1169 if ((i == 34) || (i == 60) || (i == 62) || (i == 124))
1171 Assert.Fail (String.Format ("'{0}' (#{1}) is invalid", c, i));
1174 foreach (char c in invalid) {
1178 Assert.Fail (String.Format ("'{0}' (#{1}) is invalid", c, i));
1184 public void GetInvalidPathChars_Order ()
1187 char [] invalid = Path.GetInvalidPathChars ();
1188 char [] expected = new char [36] { '\x22', '\x3C', '\x3E', '\x7C', '\x00', '\x01', '\x02',
1189 '\x03', '\x04', '\x05', '\x06', '\x07', '\x08', '\x09', '\x0A', '\x0B', '\x0C', '\x0D',
1190 '\x0E', '\x0F', '\x10', '\x11', '\x12', '\x13', '\x14', '\x15', '\x16', '\x17', '\x18',
1191 '\x19', '\x1A', '\x1B', '\x1C', '\x1D', '\x1E', '\x1F' };
1192 Assert.AreEqual (expected.Length, invalid.Length);
1193 for (int i = 0; i < expected.Length; i++ ) {
1194 Assert.AreEqual (expected [i], invalid [i], "Character at position " + i);
1200 public void GetInvalidPathChars_Modify ()
1202 char[] expected = Path.GetInvalidPathChars ();
1203 char[] invalid = Path.GetInvalidPathChars ();
1205 Assert.IsTrue (expected[0] != 'a', "expected");
1206 Assert.AreEqual (expected[0], Path.GetInvalidPathChars ()[0], "readonly");
1210 public void GetRandomFileName ()
1212 string s = Path.GetRandomFileName ();
1213 Assert.AreEqual (12, s.Length, "Length");
1214 char[] invalid = Path.GetInvalidFileNameChars ();
1215 for (int i=0; i < s.Length; i++) {
1217 Assert.AreEqual ('.', s[i], "8");
1219 Assert.IsTrue (Array.IndexOf (invalid, s[i]) == -1, i.ToString ());
1224 public void GetRandomFileNameIsAlphaNumerical ()
1226 string [] names = new string [1000];
1227 for (int i = 0; i < names.Length; i++)
1228 names [i] = Path.GetRandomFileName ();
1230 foreach (string name in names) {
1231 Assert.AreEqual (12, name.Length);
1232 Assert.AreEqual ('.', name [8]);
1234 for (int i = 0; i < 12; i++) {
1239 Assert.IsTrue (('a' <= c && c <= 'z') || ('0' <= c && c <= '9'));
1245 string Concat (string sep, params string [] parms)
1247 return String.Join (sep, parms);
1251 public void Combine_3Params ()
1253 string sep = Path.DirectorySeparatorChar.ToString ();
1256 Path.Combine (null, "two", "three");
1257 Assert.Fail ("#A1-1");
1263 Path.Combine ("one", null, "three");
1264 Assert.Fail ("#A1-2");
1270 Path.Combine ("one", "two", null);
1271 Assert.Fail ("#A1-3");
1276 Assert.AreEqual (Concat (sep, "one", "two", "three"), Path.Combine ("one", "two", "three"), "#A2-1");
1277 Assert.AreEqual (Concat (sep, sep + "one", "two", "three"), Path.Combine (sep + "one", "two", "three"), "#A2-2");
1278 Assert.AreEqual (Concat (sep, sep + "one", "two", "three"), Path.Combine (sep + "one" + sep, "two", "three"), "#A2-3");
1279 Assert.AreEqual (Concat (sep, sep + "two", "three"), Path.Combine (sep + "one" + sep, sep + "two", "three"), "#A2-4");
1280 Assert.AreEqual (Concat (sep, sep + "three"), Path.Combine (sep + "one" + sep, sep + "two", sep + "three"), "#A2-5");
1282 Assert.AreEqual (Concat (sep, sep + "one" + sep, "two", "three"), Path.Combine (sep + "one" + sep + sep, "two", "three"), "#A3");
1284 Assert.AreEqual ("", Path.Combine ("", "", ""), "#A4");
1288 public void Combine_4Params ()
1290 string sep = Path.DirectorySeparatorChar.ToString ();
1293 Path.Combine (null, "two", "three", "four");
1294 Assert.Fail ("#A1-1");
1300 Path.Combine ("one", null, "three", "four");
1301 Assert.Fail ("#A1-2");
1307 Path.Combine ("one", "two", null, "four");
1308 Assert.Fail ("#A1-3");
1314 Path.Combine ("one", "two", "three", null);
1315 Assert.Fail ("#A1-4");
1320 Assert.AreEqual (Concat (sep, "one", "two", "three", "four"), Path.Combine ("one", "two", "three", "four"), "#A2-1");
1321 Assert.AreEqual (Concat (sep, sep + "one", "two", "three", "four"), Path.Combine (sep + "one", "two", "three", "four"), "#A2-2");
1322 Assert.AreEqual (Concat (sep, sep + "one", "two", "three", "four"), Path.Combine (sep + "one" + sep, "two", "three", "four"), "#A2-3");
1323 Assert.AreEqual (Concat (sep, sep + "two", "three", "four"), Path.Combine (sep + "one" + sep, sep + "two", "three", "four"), "#A2-4");
1324 Assert.AreEqual (Concat (sep, sep + "three", "four"), Path.Combine (sep + "one" + sep, sep + "two", sep + "three", "four"), "#A2-5");
1325 Assert.AreEqual (Concat (sep, sep + "four"), Path.Combine (sep + "one" + sep, sep + "two", sep + "three", sep + "four"), "#A2-6");
1327 Assert.AreEqual (Concat (sep, sep + "one" + sep, "two", "three", "four"), Path.Combine (sep + "one" + sep + sep, "two", "three", "four"), "#A3");
1329 Assert.AreEqual ("", Path.Combine ("", "", "", ""), "#A4");
1333 public void Combine_ManyParams ()
1335 string sep = Path.DirectorySeparatorChar.ToString ();
1338 Path.Combine (null, "two", "three", "four", "five");
1339 Assert.Fail ("#A1-1");
1345 Path.Combine ("one", null, "three", "four", "five");
1346 Assert.Fail ("#A1-2");
1352 Path.Combine ("one", "two", null, "four", "five");
1353 Assert.Fail ("#A1-3");
1359 Path.Combine ("one", "two", "three", null, "five");
1360 Assert.Fail ("#A1-4");
1366 Path.Combine ("one", "two", "three", "four", null);
1367 Assert.Fail ("#A1-5");
1372 Assert.AreEqual (Concat (sep, "one", "two", "three", "four", "five"), Path.Combine ("one", "two", "three", "four", "five"), "#A2-1");
1373 Assert.AreEqual (Concat (sep, sep + "one", "two", "three", "four", "five"), Path.Combine (sep + "one", "two", "three", "four", "five"), "#A2-2");
1374 Assert.AreEqual (Concat (sep, sep + "one", "two", "three", "four", "five"), Path.Combine (sep + "one" + sep, "two", "three", "four", "five"), "#A2-3");
1375 Assert.AreEqual (Concat (sep, sep + "two", "three", "four", "five"), Path.Combine (sep + "one" + sep, sep + "two", "three", "four", "five"), "#A2-4");
1376 Assert.AreEqual (Concat (sep, sep + "three", "four", "five"), Path.Combine (sep + "one" + sep, sep + "two", sep + "three", "four", "five"), "#A2-5");
1377 Assert.AreEqual (Concat (sep, sep + "four", "five"), Path.Combine (sep + "one" + sep, sep + "two", sep + "three", sep + "four", "five"), "#A2-6");
1378 Assert.AreEqual (Concat (sep, sep + "five"), Path.Combine (sep + "one" + sep, sep + "two", sep + "three", sep + "four", sep + "five"), "#A2-6");
1380 Assert.AreEqual (Concat (sep, sep + "one" + sep, "two", "three", "four", "five"), Path.Combine (sep + "one" + sep + sep, "two", "three", "four", "five"), "#A3");
1382 Assert.AreEqual ("", Path.Combine ("", "", "", "", ""), "#A4");