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\\"},
588 {"root/ . /", "root\\"},
591 {"root/./", "root\\"},
596 for (int i = 0; i < test.GetUpperBound (0); i++) {
598 Assert.AreEqual (root + test [i, 1], Path.GetFullPath (root + test [i, 0]),
599 String.Format ("GetFullPathWindows #{0}", i));
600 } catch (Exception ex) {
601 Assert.Fail (String.Format ("GetFullPathWindows #{0} (\"{1}\") failed: {2}",
602 i, root + test [i, 0], ex.GetType ()));
607 string root2 = @"\\server\share";
608 root = @"\\server\share\";
609 test = new string [,] {
610 {"root////././././././../root/././../root", "root"},
612 {"root/./", "root\\"},
613 {"root/./", "root\\"},
616 {"root/../..", null},
617 {"root/.hiddenfile", "root\\.hiddenfile"},
618 {"root/. /", "root\\"},
620 {"root/..weirdname", "root\\..weirdname"},
622 {"root/../a/b/../../..", null},
626 {"root//dir", "root\\dir"},
627 {"root/. /", "root\\"},
630 {"root/ . /", "root\\"},
633 {"root/./", "root\\"},
638 for (int i = 0; i < test.GetUpperBound (0); i++) {
639 // "null" means we have to compare against "root2"
640 string res = test [i, 1] != null
644 Assert.AreEqual (res, Path.GetFullPath (root + test [i, 0]),
645 String.Format ("GetFullPathWindows UNC #{0}", i));
646 } catch (AssertionException) {
648 } catch (Exception ex) {
649 Assert.Fail (String.Format ("GetFullPathWindows UNC #{0} (\"{1}\") failed: {2}",
650 i, root + test [i, 0], ex.GetType ()));
654 test = new string [,] {
655 {"root////././././././../root/././../root", "root"},
657 {"root/./", "root\\"},
658 {"root/./", "root\\"},
661 {"root/../..", null},
662 {"root/.hiddenfile", "root\\.hiddenfile"},
663 {"root/. /", "root\\"},
665 {"root/..weirdname", "root\\..weirdname"},
667 {"root/../a/b/../../..", null},
671 {"root//dir", "root\\dir"},
672 {"root/. /", "root\\"},
675 {"root/ . /", "root\\"},
678 {"root/./", "root\\"},
683 string root3 = @"//server/share";
684 root = @"//server/share/";
685 bool needSlashConvert = Path.DirectorySeparatorChar != '/';
687 for (int i = 0; i < test.GetUpperBound (0); i++) {
688 // "null" means we have to compare against "root2"
689 string res = test [i, 1] != null
692 if (needSlashConvert)
693 res = res.Replace ('/', Path.DirectorySeparatorChar);
695 Assert.AreEqual (res, Path.GetFullPath (root + test [i, 0]),
696 String.Format ("GetFullPathWindows UNC[2] #{0}", i));
697 } catch (AssertionException) {
699 } catch (Exception ex) {
700 Assert.Fail (String.Format ("GetFullPathWindows UNC[2] #{0} (\"{1}\") failed: {2}",
701 i, root + test [i, 0], ex.GetType ()));
707 public void GetFullPath_Path_Empty ()
710 Path.GetFullPath (String.Empty);
712 } catch (ArgumentException ex) {
713 // The path is not of a legal form
714 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
715 Assert.IsNull (ex.InnerException, "#3");
716 Assert.IsNotNull (ex.Message, "#4");
717 Assert.IsNull (ex.ParamName, "#5");
722 public void GetFullPath_Path_EndingSeparator ()
724 string fp = Path.GetFullPath ("something/");
725 char end = fp [fp.Length - 1];
726 Assert.IsTrue (end == Path.DirectorySeparatorChar);
730 public void GetFullPath_Path_InvalidPathChars ()
733 Path.GetFullPath ("hi\0world");
735 } catch (ArgumentException ex) {
736 // Illegal characters in path
737 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
738 Assert.IsNull (ex.InnerException, "#3");
739 Assert.IsNotNull (ex.Message, "#4");
740 Assert.IsNull (ex.ParamName, "#5");
745 public void GetFullPath_Path_Null ()
748 Path.GetFullPath (null);
750 } catch (ArgumentNullException ex) {
751 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
752 Assert.IsNull (ex.InnerException, "#3");
753 Assert.IsNotNull (ex.Message, "#4");
754 Assert.AreEqual ("path", ex.ParamName, "#5");
759 public void GetFullPath_Path_Whitespace ()
762 Path.GetFullPath (" ");
764 } catch (ArgumentException ex) {
765 // The path is not of a legal form
766 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
767 Assert.IsNull (ex.InnerException, "#3");
768 Assert.IsNotNull (ex.Message, "#4");
769 Assert.IsNull (ex.ParamName, "#5");
774 public void GetFullPath2 ()
777 Assert.AreEqual (@"Z:\", Path.GetFullPath ("Z:"), "GetFullPath w#01");
778 Assert.AreEqual (@"c:\abc\def", Path.GetFullPath (@"c:\abc\def"), "GetFullPath w#02");
779 Assert.IsTrue (Path.GetFullPath (@"\").EndsWith (@"\"), "GetFullPath w#03");
780 // "\\\\" is not allowed
781 Assert.IsTrue (Path.GetFullPath ("/").EndsWith (@"\"), "GetFullPath w#05");
782 // "//" is not allowed
783 Assert.IsTrue (Path.GetFullPath ("readme.txt").EndsWith (@"\readme.txt"), "GetFullPath w#07");
784 Assert.IsTrue (Path.GetFullPath ("c").EndsWith (@"\c"), "GetFullPath w#08");
785 Assert.IsTrue (Path.GetFullPath (@"abc\def").EndsWith (@"abc\def"), "GetFullPath w#09");
786 Assert.IsTrue (Path.GetFullPath (@"\abc\def").EndsWith (@"\abc\def"), "GetFullPath w#10");
787 Assert.AreEqual (@"\\abc\def", Path.GetFullPath (@"\\abc\def"), "GetFullPath w#11");
788 Assert.AreEqual (Directory.GetCurrentDirectory () + @"\abc\def", Path.GetFullPath (@"abc//def"), "GetFullPath w#12");
789 Assert.AreEqual (Directory.GetCurrentDirectory ().Substring (0, 2) + @"\abc\def", Path.GetFullPath ("/abc/def"), "GetFullPath w#13");
790 Assert.AreEqual (@"\\abc\def", Path.GetFullPath ("//abc/def"), "GetFullPath w#14");
792 Assert.AreEqual ("/", Path.GetFullPath ("/"), "#01");
793 Assert.AreEqual ("/hey", Path.GetFullPath ("/hey"), "#02");
794 Assert.AreEqual (Environment.CurrentDirectory, Path.GetFullPath ("."), "#03");
795 Assert.AreEqual (Path.Combine (Environment.CurrentDirectory, "hey"),
796 Path.GetFullPath ("hey"), "#04");
801 public void GetPathRoot ()
806 current = Directory.GetCurrentDirectory ();
807 expected = current [0].ToString ();
809 current = @"J:\Some\Strange Directory\Name";
813 string pathRoot = Path.GetPathRoot (current);
814 Assert.AreEqual (expected, pathRoot, "GetPathRoot #01");
818 public void GetPathRoot2 ()
820 // note: this method doesn't call Directory.GetCurrentDirectory so it can be
821 // reused for partial trust unit tests in PathCas.cs
825 pathRoot = Path.GetPathRoot ("hola");
826 Assert.AreEqual (String.Empty, pathRoot, "#A1");
827 pathRoot = Path.GetPathRoot (null);
828 Assert.AreEqual (null, pathRoot, "#A2");
831 Assert.AreEqual ("z:", Path.GetPathRoot ("z:"), "GetPathRoot w#01");
832 Assert.AreEqual ("c:\\", Path.GetPathRoot ("c:\\abc\\def"), "GetPathRoot w#02");
833 Assert.AreEqual ("\\", Path.GetPathRoot ("\\"), "GetPathRoot w#03");
834 Assert.AreEqual ("\\\\", Path.GetPathRoot ("\\\\"), "GetPathRoot w#04");
835 Assert.AreEqual ("\\", Path.GetPathRoot ("/"), "GetPathRoot w#05");
836 Assert.AreEqual ("\\\\", Path.GetPathRoot ("//"), "GetPathRoot w#06");
837 Assert.AreEqual (String.Empty, Path.GetPathRoot ("readme.txt"), "GetPathRoot w#07");
838 Assert.AreEqual (String.Empty, Path.GetPathRoot ("c"), "GetPathRoot w#08");
839 Assert.AreEqual (String.Empty, Path.GetPathRoot ("abc\\def"), "GetPathRoot w#09");
840 Assert.AreEqual ("\\", Path.GetPathRoot ("\\abc\\def"), "GetPathRoot w#10");
841 Assert.AreEqual ("\\\\abc\\def", Path.GetPathRoot ("\\\\abc\\def"), "GetPathRoot w#11");
842 Assert.AreEqual (String.Empty, Path.GetPathRoot ("abc//def"), "GetPathRoot w#12");
843 Assert.AreEqual ("\\", Path.GetPathRoot ("/abc/def"), "GetPathRoot w#13");
844 Assert.AreEqual ("\\\\abc\\def", Path.GetPathRoot ("//abc/def"), "GetPathRoot w#14");
845 Assert.AreEqual (@"C:\", Path.GetPathRoot (@"C:\"), "GetPathRoot w#15");
846 Assert.AreEqual (@"C:\", Path.GetPathRoot (@"C:\\"), "GetPathRoot w#16");
847 Assert.AreEqual ("\\\\abc\\def", Path.GetPathRoot ("\\\\abc\\def\\ghi"), "GetPathRoot w#17");
849 // TODO: Same tests for Unix.
854 public void GetPathRoot_Path_Empty ()
857 Path.GetPathRoot (String.Empty);
859 } catch (ArgumentException ex) {
860 // The path is not of a legal form
861 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
862 Assert.IsNull (ex.InnerException, "#3");
863 Assert.IsNotNull (ex.Message, "#4");
864 Assert.IsNull (ex.ParamName, "#5");
870 [Category ("NotWorking")] // we also throw ArgumentException on 1.0 profile
872 public void GetPathRoot_Path_InvalidPathChars ()
876 Path.GetPathRoot ("hi\0world");
878 } catch (ArgumentException ex) {
879 // Illegal characters in path
880 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
881 Assert.IsNull (ex.InnerException, "#3");
882 Assert.IsNotNull (ex.Message, "#4");
883 Assert.IsNull (ex.ParamName, "#5");
886 Assert.AreEqual (String.Empty, Path.GetPathRoot ("hi\0world"));
891 public void GetPathRoot_Path_Whitespace ()
894 Path.GetPathRoot (" ");
896 } catch (ArgumentException ex) {
897 // The path is not of a legal form
898 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
899 Assert.IsNull (ex.InnerException, "#3");
900 Assert.IsNotNull (ex.Message, "#4");
901 Assert.IsNull (ex.ParamName, "#5");
906 public void GetTempPath ()
908 string getTempPath = Path.GetTempPath ();
909 Assert.IsTrue (getTempPath != String.Empty, "GetTempPath #01");
910 Assert.IsTrue (Path.IsPathRooted (getTempPath), "GetTempPath #02");
911 Assert.AreEqual (Path.DirectorySeparatorChar, getTempPath [getTempPath.Length - 1], "GetTempPath #03");
915 public void GetTempFileName ()
917 string getTempFileName = null;
919 getTempFileName = Path.GetTempFileName ();
920 Assert.IsTrue (getTempFileName != String.Empty, "GetTempFileName #01");
921 Assert.IsTrue (File.Exists (getTempFileName), "GetTempFileName #02");
923 if (getTempFileName != null && getTempFileName != String.Empty){
924 File.Delete (getTempFileName);
930 public void HasExtension ()
932 Assert.AreEqual (true, Path.HasExtension ("foo.txt"), "HasExtension #01");
933 Assert.AreEqual (false, Path.HasExtension ("foo"), "HasExtension #02");
934 Assert.AreEqual (true, Path.HasExtension (path1), "HasExtension #03");
935 Assert.AreEqual (false, Path.HasExtension (path2), "HasExtension #04");
936 Assert.AreEqual (false, Path.HasExtension (null), "HasExtension #05");
937 Assert.AreEqual (false, Path.HasExtension (String.Empty), "HasExtension #06");
938 Assert.AreEqual (false, Path.HasExtension (" "), "HasExtension #07");
939 Assert.AreEqual (false, Path.HasExtension ("."), "HasExtension #08");
940 Assert.AreEqual (false, Path.HasExtension ("end."), "HasExtension #09");
941 Assert.AreEqual (true, Path.HasExtension (".start"), "HasExtension #10");
942 Assert.AreEqual (true, Path.HasExtension (".a"), "HasExtension #11");
943 Assert.AreEqual (false, Path.HasExtension ("a."), "HasExtension #12");
944 Assert.AreEqual (false, Path.HasExtension ("Makefile"), "HasExtension #13");
948 public void HasExtension_Path_InvalidPathChars ()
951 Path.HasExtension ("hi\0world.txt");
953 } catch (ArgumentException ex) {
954 // Illegal characters in path
955 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
956 Assert.IsNull (ex.InnerException, "#3");
957 Assert.IsNotNull (ex.Message, "#4");
958 Assert.IsNull (ex.ParamName, "#5");
963 public void IsPathRooted ()
965 Assert.IsTrue (Path.IsPathRooted (path2), "IsPathRooted #01");
966 Assert.IsTrue (!Path.IsPathRooted (path3), "IsPathRooted #02");
967 Assert.IsTrue (!Path.IsPathRooted (null), "IsPathRooted #03");
968 Assert.IsTrue (!Path.IsPathRooted (String.Empty), "IsPathRooted #04");
969 Assert.IsTrue (!Path.IsPathRooted (" "), "IsPathRooted #05");
970 Assert.IsTrue (Path.IsPathRooted ("/"), "IsPathRooted #06");
971 Assert.IsTrue (Path.IsPathRooted ("//"), "IsPathRooted #07");
972 Assert.IsTrue (!Path.IsPathRooted (":"), "IsPathRooted #08");
975 Assert.IsTrue (Path.IsPathRooted ("\\"), "IsPathRooted #09");
976 Assert.IsTrue (Path.IsPathRooted ("\\\\"), "IsPathRooted #10");
977 Assert.IsTrue (Path.IsPathRooted ("z:"), "IsPathRooted #11");
978 Assert.IsTrue (Path.IsPathRooted ("z:\\"), "IsPathRooted #12");
979 Assert.IsTrue (Path.IsPathRooted ("z:\\topdir"), "IsPathRooted #13");
980 // This looks MS BUG. It is treated as absolute path
981 Assert.IsTrue (Path.IsPathRooted ("z:curdir"), "IsPathRooted #14");
982 Assert.IsTrue (Path.IsPathRooted ("\\abc\\def"), "IsPathRooted #15");
984 if (Environment.GetEnvironmentVariable ("MONO_IOMAP") == "all"){
985 Assert.IsTrue (Path.IsPathRooted ("\\"), "IsPathRooted #16");
986 Assert.IsTrue (Path.IsPathRooted ("\\\\"), "IsPathRooted #17");
988 Assert.IsTrue (!Path.IsPathRooted ("\\"), "IsPathRooted #09");
989 Assert.IsTrue (!Path.IsPathRooted ("\\\\"), "IsPathRooted #10");
990 Assert.IsTrue (!Path.IsPathRooted ("z:"), "IsPathRooted #11");
996 public void IsPathRooted_Path_Empty ()
998 Assert.IsTrue (!Path.IsPathRooted (String.Empty));
1002 public void IsPathRooted_Path_InvalidPathChars ()
1005 Path.IsPathRooted ("hi\0world");
1007 } catch (ArgumentException ex) {
1008 // Illegal characters in path.
1009 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
1010 Assert.IsNull (ex.InnerException, "#3");
1011 Assert.IsNotNull (ex.Message, "#4");
1012 Assert.IsNull (ex.ParamName, "#5");
1017 public void IsPathRooted_Path_Null ()
1019 Assert.IsTrue (!Path.IsPathRooted (null));
1023 public void IsPathRooted_Path_Whitespace ()
1025 Assert.IsTrue (!Path.IsPathRooted (" "));
1029 public void CanonicalizeDots ()
1031 string current = Path.GetFullPath (".");
1032 Assert.IsTrue (!current.EndsWith ("."), "TestCanonicalizeDotst #01");
1033 string parent = Path.GetFullPath ("..");
1034 Assert.IsTrue (!current.EndsWith (".."), "TestCanonicalizeDotst #02");
1038 public void WindowsSystem32_76191 ()
1040 // check for Unix platforms - see FAQ for more details
1041 // http://www.mono-project.com/FAQ:_Technical#How_to_detect_the_execution_platform_.3F
1042 int platform = (int) Environment.OSVersion.Platform;
1043 if ((platform == 4) || (platform == 128) || (platform == 6))
1044 Assert.Ignore ("Running on Unix.");
1046 string curdir = Directory.GetCurrentDirectory ();
1048 string system = Environment.SystemDirectory;
1049 Directory.SetCurrentDirectory (system);
1050 string drive = system.Substring (0, 2);
1051 Assert.AreEqual (system, Path.GetFullPath (drive), "current dir");
1054 Directory.SetCurrentDirectory (curdir);
1059 public void WindowsSystem32_77007 ()
1061 // check for Unix platforms - see FAQ for more details
1062 // http://www.mono-project.com/FAQ:_Technical#How_to_detect_the_execution_platform_.3F
1063 int platform = (int) Environment.OSVersion.Platform;
1064 if ((platform == 4) || (platform == 128) || (platform == 6))
1065 Assert.Ignore ("Running on Unix.");
1067 string curdir = Directory.GetCurrentDirectory ();
1069 string system = Environment.SystemDirectory;
1070 Directory.SetCurrentDirectory (system);
1071 // e.g. C:dir (no backslash) will return CurrentDirectory + dir
1072 string dir = system.Substring (0, 2) + "dir";
1073 Assert.AreEqual (Path.Combine (system, "dir"), Path.GetFullPath (dir), "current dir");
1076 Directory.SetCurrentDirectory (curdir);
1081 public void WindowsDriveC14N_77058 ()
1083 // check for Unix platforms - see FAQ for more details
1084 // http://www.mono-project.com/FAQ:_Technical#How_to_detect_the_execution_platform_.3F
1085 int platform = (int) Environment.OSVersion.Platform;
1086 if ((platform == 4) || (platform == 128) || (platform == 6))
1087 Assert.Ignore ("Running on Unix.");
1089 Assert.AreEqual (@"C:\Windows\dir", Path.GetFullPath (@"C:\Windows\System32\..\dir"), "1");
1090 Assert.AreEqual (@"C:\dir", Path.GetFullPath (@"C:\Windows\System32\..\..\dir"), "2");
1091 Assert.AreEqual (@"C:\dir", Path.GetFullPath (@"C:\Windows\System32\..\..\..\dir"), "3");
1092 Assert.AreEqual (@"C:\dir", Path.GetFullPath (@"C:\Windows\System32\..\..\..\..\dir"), "4");
1093 Assert.AreEqual (@"C:\dir\", Path.GetFullPath (@"C:\Windows\System32\..\.\..\.\..\dir\"), "5");
1097 public void InvalidPathChars_Values ()
1099 char[] invalid = Path.InvalidPathChars;
1102 Assert.AreEqual (36, invalid.Length, "Length");
1104 Assert.AreEqual (15, invalid.Length, "Length");
1106 foreach (char c in invalid) {
1112 if ((i == 0) || (i == 8) || ((i > 15) && (i < 19)) || ((i > 19) && (i < 26)))
1115 // in both 1.1 SP1 and 2.0
1116 if ((i == 34) || (i == 60) || (i == 62) || (i == 124))
1118 Assert.Fail (String.Format ("'{0}' (#{1}) is invalid", c, i));
1121 foreach (char c in invalid) {
1125 Assert.Fail (String.Format ("'{0}' (#{1}) is invalid", c, i));
1131 public void InvalidPathChars_Modify ()
1133 char[] expected = Path.InvalidPathChars;
1134 char[] invalid = Path.InvalidPathChars;
1135 char original = invalid[0];
1139 Assert.IsTrue (expected[0] == 'a', "expected");
1140 Assert.AreEqual (expected[0], Path.InvalidPathChars[0], "readonly");
1142 invalid[0] = original;
1148 public void GetInvalidFileNameChars_Values ()
1150 char[] invalid = Path.GetInvalidFileNameChars ();
1152 Assert.AreEqual (41, invalid.Length);
1153 foreach (char c in invalid) {
1157 if ((i == 34) || (i == 60) || (i == 62) || (i == 124))
1159 // ':', '*', '?', '\', '/'
1160 if ((i == 58) || (i == 42) || (i == 63) || (i == 92) || (i == 47))
1162 Assert.Fail (String.Format ("'{0}' (#{1}) is invalid", c, i));
1165 foreach (char c in invalid) {
1168 if ((i == 0) || (i == 47))
1170 Assert.Fail (String.Format ("'{0}' (#{1}) is invalid", c, i));
1176 public void GetInvalidFileNameChars_Modify ()
1178 char[] expected = Path.GetInvalidFileNameChars ();
1179 char[] invalid = Path.GetInvalidFileNameChars ();
1181 Assert.IsTrue (expected[0] != 'a', "expected");
1182 Assert.AreEqual (expected[0], Path.GetInvalidFileNameChars ()[0], "readonly");
1186 public void GetInvalidPathChars_Values ()
1188 char[] invalid = Path.GetInvalidPathChars ();
1190 Assert.AreEqual (36, invalid.Length);
1191 foreach (char c in invalid) {
1195 if ((i == 34) || (i == 60) || (i == 62) || (i == 124))
1197 Assert.Fail (String.Format ("'{0}' (#{1}) is invalid", c, i));
1200 foreach (char c in invalid) {
1204 Assert.Fail (String.Format ("'{0}' (#{1}) is invalid", c, i));
1210 public void GetInvalidPathChars_Order ()
1213 char [] invalid = Path.GetInvalidPathChars ();
1214 char [] expected = new char [36] { '\x22', '\x3C', '\x3E', '\x7C', '\x00', '\x01', '\x02',
1215 '\x03', '\x04', '\x05', '\x06', '\x07', '\x08', '\x09', '\x0A', '\x0B', '\x0C', '\x0D',
1216 '\x0E', '\x0F', '\x10', '\x11', '\x12', '\x13', '\x14', '\x15', '\x16', '\x17', '\x18',
1217 '\x19', '\x1A', '\x1B', '\x1C', '\x1D', '\x1E', '\x1F' };
1218 Assert.AreEqual (expected.Length, invalid.Length);
1219 for (int i = 0; i < expected.Length; i++ ) {
1220 Assert.AreEqual (expected [i], invalid [i], "Character at position " + i);
1226 public void GetInvalidPathChars_Modify ()
1228 char[] expected = Path.GetInvalidPathChars ();
1229 char[] invalid = Path.GetInvalidPathChars ();
1231 Assert.IsTrue (expected[0] != 'a', "expected");
1232 Assert.AreEqual (expected[0], Path.GetInvalidPathChars ()[0], "readonly");
1236 public void GetRandomFileName ()
1238 string s = Path.GetRandomFileName ();
1239 Assert.AreEqual (12, s.Length, "Length");
1240 char[] invalid = Path.GetInvalidFileNameChars ();
1241 for (int i=0; i < s.Length; i++) {
1243 Assert.AreEqual ('.', s[i], "8");
1245 Assert.IsTrue (Array.IndexOf (invalid, s[i]) == -1, i.ToString ());
1250 public void GetRandomFileNameIsAlphaNumerical ()
1252 string [] names = new string [1000];
1253 for (int i = 0; i < names.Length; i++)
1254 names [i] = Path.GetRandomFileName ();
1256 foreach (string name in names) {
1257 Assert.AreEqual (12, name.Length);
1258 Assert.AreEqual ('.', name [8]);
1260 for (int i = 0; i < 12; i++) {
1265 Assert.IsTrue (('a' <= c && c <= 'z') || ('0' <= c && c <= '9'));
1271 string Concat (string sep, params string [] parms)
1273 return String.Join (sep, parms);
1277 public void Combine_3Params ()
1279 string sep = Path.DirectorySeparatorChar.ToString ();
1282 Path.Combine (null, "two", "three");
1283 Assert.Fail ("#A1-1");
1289 Path.Combine ("one", null, "three");
1290 Assert.Fail ("#A1-2");
1296 Path.Combine ("one", "two", null);
1297 Assert.Fail ("#A1-3");
1302 Assert.AreEqual (Concat (sep, "one", "two", "three"), Path.Combine ("one", "two", "three"), "#A2-1");
1303 Assert.AreEqual (Concat (sep, sep + "one", "two", "three"), Path.Combine (sep + "one", "two", "three"), "#A2-2");
1304 Assert.AreEqual (Concat (sep, sep + "one", "two", "three"), Path.Combine (sep + "one" + sep, "two", "three"), "#A2-3");
1305 Assert.AreEqual (Concat (sep, sep + "two", "three"), Path.Combine (sep + "one" + sep, sep + "two", "three"), "#A2-4");
1306 Assert.AreEqual (Concat (sep, sep + "three"), Path.Combine (sep + "one" + sep, sep + "two", sep + "three"), "#A2-5");
1308 Assert.AreEqual (Concat (sep, sep + "one" + sep, "two", "three"), Path.Combine (sep + "one" + sep + sep, "two", "three"), "#A3");
1310 Assert.AreEqual ("", Path.Combine ("", "", ""), "#A4");
1314 public void Combine_4Params ()
1316 string sep = Path.DirectorySeparatorChar.ToString ();
1319 Path.Combine (null, "two", "three", "four");
1320 Assert.Fail ("#A1-1");
1326 Path.Combine ("one", null, "three", "four");
1327 Assert.Fail ("#A1-2");
1333 Path.Combine ("one", "two", null, "four");
1334 Assert.Fail ("#A1-3");
1340 Path.Combine ("one", "two", "three", null);
1341 Assert.Fail ("#A1-4");
1346 Assert.AreEqual (Concat (sep, "one", "two", "three", "four"), Path.Combine ("one", "two", "three", "four"), "#A2-1");
1347 Assert.AreEqual (Concat (sep, sep + "one", "two", "three", "four"), Path.Combine (sep + "one", "two", "three", "four"), "#A2-2");
1348 Assert.AreEqual (Concat (sep, sep + "one", "two", "three", "four"), Path.Combine (sep + "one" + sep, "two", "three", "four"), "#A2-3");
1349 Assert.AreEqual (Concat (sep, sep + "two", "three", "four"), Path.Combine (sep + "one" + sep, sep + "two", "three", "four"), "#A2-4");
1350 Assert.AreEqual (Concat (sep, sep + "three", "four"), Path.Combine (sep + "one" + sep, sep + "two", sep + "three", "four"), "#A2-5");
1351 Assert.AreEqual (Concat (sep, sep + "four"), Path.Combine (sep + "one" + sep, sep + "two", sep + "three", sep + "four"), "#A2-6");
1353 Assert.AreEqual (Concat (sep, sep + "one" + sep, "two", "three", "four"), Path.Combine (sep + "one" + sep + sep, "two", "three", "four"), "#A3");
1355 Assert.AreEqual ("", Path.Combine ("", "", "", ""), "#A4");
1359 public void Combine_ManyParams ()
1361 string sep = Path.DirectorySeparatorChar.ToString ();
1364 Path.Combine (null, "two", "three", "four", "five");
1365 Assert.Fail ("#A1-1");
1371 Path.Combine ("one", null, "three", "four", "five");
1372 Assert.Fail ("#A1-2");
1378 Path.Combine ("one", "two", null, "four", "five");
1379 Assert.Fail ("#A1-3");
1385 Path.Combine ("one", "two", "three", null, "five");
1386 Assert.Fail ("#A1-4");
1392 Path.Combine ("one", "two", "three", "four", null);
1393 Assert.Fail ("#A1-5");
1398 Assert.AreEqual (Concat (sep, "one", "two", "three", "four", "five"), Path.Combine ("one", "two", "three", "four", "five"), "#A2-1");
1399 Assert.AreEqual (Concat (sep, sep + "one", "two", "three", "four", "five"), Path.Combine (sep + "one", "two", "three", "four", "five"), "#A2-2");
1400 Assert.AreEqual (Concat (sep, sep + "one", "two", "three", "four", "five"), Path.Combine (sep + "one" + sep, "two", "three", "four", "five"), "#A2-3");
1401 Assert.AreEqual (Concat (sep, sep + "two", "three", "four", "five"), Path.Combine (sep + "one" + sep, sep + "two", "three", "four", "five"), "#A2-4");
1402 Assert.AreEqual (Concat (sep, sep + "three", "four", "five"), Path.Combine (sep + "one" + sep, sep + "two", sep + "three", "four", "five"), "#A2-5");
1403 Assert.AreEqual (Concat (sep, sep + "four", "five"), Path.Combine (sep + "one" + sep, sep + "two", sep + "three", sep + "four", "five"), "#A2-6");
1404 Assert.AreEqual (Concat (sep, sep + "five"), Path.Combine (sep + "one" + sep, sep + "two", sep + "three", sep + "four", sep + "five"), "#A2-6");
1406 Assert.AreEqual (Concat (sep, sep + "one" + sep, "two", "three", "four", "five"), Path.Combine (sep + "one" + sep + sep, "two", "three", "four", "five"), "#A3");
1408 Assert.AreEqual ("", Path.Combine ("", "", "", "", ""), "#A4");