1 // FileInfoTest.cs - NUnit Test Cases for System.IO.FileInfo class
3 // Ville Palo (vi64pa@koti.soon.fi)
10 using System.Runtime.Serialization;
11 using System.Runtime.Serialization.Formatters.Binary;
13 using NUnit.Framework;
15 namespace MonoTests.System.IO
18 public class FileInfoTest
20 string TempFolder = Path.Combine (Path.GetTempPath (), "MonoTests.System.IO.Tests");
21 static readonly char DSC = Path.DirectorySeparatorChar;
26 DeleteDirectory (TempFolder);
27 Directory.CreateDirectory (TempFolder);
31 public void TearDown ()
33 DeleteDirectory (TempFolder);
36 [Test] // ctor (String)
37 public void Constructor1 ()
39 string path = TempFolder + DSC + "FIT.Ctr.Test";
42 FileInfo info = new FileInfo (path);
43 Assert.IsTrue (info.DirectoryName.EndsWith (".Tests"), "#1");
44 Assert.IsFalse (info.Exists, "#2");
45 Assert.AreEqual (".Test", info.Extension, "#3");
46 Assert.AreEqual ("FIT.Ctr.Test", info.Name, "#4");
49 [Test] // ctor (String)
50 public void Constructor1_FileName_Null ()
55 } catch (ArgumentNullException ex) {
56 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
57 Assert.IsNull (ex.InnerException, "#3");
58 Assert.IsNotNull (ex.Message, "#4");
59 Assert.AreEqual ("fileName", ex.ParamName, "#5");
63 [Test] // ctor (String)
64 public void Constructor1_FileName_Empty ()
67 new FileInfo (string.Empty);
69 } catch (ArgumentException ex) {
70 // Empty file name is not legal
71 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
72 Assert.IsNull (ex.InnerException, "#3");
73 Assert.IsNotNull (ex.Message, "#4");
74 Assert.IsNull (ex.ParamName, "#5");
78 [Test] // ctor (String)
79 public void Constructor1_FileName_InvalidPathChars ()
81 string path = string.Empty;
82 foreach (char c in Path.InvalidPathChars)
86 } catch (ArgumentException ex) {
87 // The path contains illegal characters
88 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
89 Assert.IsNull (ex.InnerException, "#3");
90 Assert.IsNotNull (ex.Message, "#4");
91 Assert.IsNull (ex.ParamName, "#5");
95 [Test] // ctor (String)
96 public void Constructor1_FileName_Whitespace ()
101 } catch (ArgumentException ex) {
102 // The path is not of a legal form
103 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
104 Assert.IsNull (ex.InnerException, "#3");
105 Assert.IsNotNull (ex.Message, "#4");
106 Assert.IsNull (ex.ParamName, "#5");
111 public void DirectoryTest ()
113 string path = TempFolder + DSC + "FIT.Directory.Test";
116 FileInfo info = new FileInfo (path);
117 DirectoryInfo dir = info.Directory;
118 Assert.AreEqual ("MonoTests.System.IO.Tests", dir.Name);
122 public void Exists ()
124 string path = TempFolder + DSC + "FIT.Exists.Test";
128 FileInfo info = new FileInfo (path);
129 Assert.IsFalse (info.Exists, "#1");
131 File.Create (path).Close ();
132 Assert.IsFalse (info.Exists, "#2");
133 info = new FileInfo (path);
134 Assert.IsTrue (info.Exists, "#3");
135 info = new FileInfo (TempFolder);
136 Assert.IsFalse (info.Exists, "#4");
144 [Category ("NotWorking")]
145 public void IsReadOnly ()
147 string path = TempFolder + DSC + "FIT.IsReadOnly.Test";
151 using (FileStream stream = File.Create (path)) {
152 stream.WriteByte (12);
156 FileInfo info1 = new FileInfo (path);
157 Assert.IsFalse (info1.IsReadOnly, "#1");
159 FileInfo info2 = new FileInfo (path);
160 info2.IsReadOnly = true;
161 Assert.IsFalse (info1.IsReadOnly, "#2");
162 Assert.IsTrue (info2.IsReadOnly, "#3");
164 FileInfo info3 = new FileInfo (path);
165 Assert.IsTrue (info3.IsReadOnly, "#4");
166 info3.IsReadOnly = false;
167 Assert.IsFalse (info1.IsReadOnly, "#4");
168 Assert.IsTrue (info2.IsReadOnly, "#5");
169 Assert.IsFalse (info3.IsReadOnly, "#6");
171 File.SetAttributes (path, FileAttributes.Normal);
178 public void Length ()
180 string path = TempFolder + DSC + "FIT.Length.Test";
184 FileStream stream = File.Create (path);
185 FileInfo info = new FileInfo (path);
186 Assert.AreEqual (0, info.Length, "#1");
187 stream.WriteByte (12);
189 Assert.AreEqual (0, info.Length, "#2");
190 info = new FileInfo (path);
191 Assert.AreEqual (1, info.Length, "#3");
199 public void Length_FileDoesNotExist ()
201 string path = TempFolder + DSC + "FIT.LengthException.Test";
203 FileInfo info = new FileInfo (path);
205 long l = info.Length;
206 Assert.Fail ("#1:" + l);
207 } catch (FileNotFoundException ex) {
208 Assert.AreEqual (typeof (FileNotFoundException), ex.GetType (), "#2");
209 Assert.AreEqual (path, ex.FileName, "#3");
210 Assert.IsNull (ex.InnerException, "#4");
211 Assert.IsNotNull (ex.Message, "#5");
216 public void AppendText ()
218 string path = TempFolder + DSC + "FIT.AppendText.Test";
222 FileInfo info = new FileInfo (path);
223 Assert.IsFalse (info.Exists, "#1");
225 StreamWriter writer = info.AppendText ();
226 info = new FileInfo (path);
227 Assert.IsTrue (info.Exists, "#2");
229 writer.Write ("aaa");
233 Assert.AreEqual (0, info.Length, "#3");
234 info = new FileInfo (path);
235 Assert.AreEqual (3, info.Length, "#4");
241 [Test] // CopyTo (String)
242 public void CopyTo1 ()
244 string path1 = TempFolder + DSC + "FIT.CopyTo.Source.Test";
245 string path2 = TempFolder + DSC + "FIT.CopyTo.Dest.Test";
249 File.Create (path1).Close ();
251 FileInfo info = new FileInfo (path1);
252 Assert.IsTrue (info.Exists, "#1");
254 FileInfo info2 = info.CopyTo (path2);
255 info = new FileInfo (path1);
256 Assert.IsTrue (info2.Exists, "#2");
263 [Test] // CopyTo (String)
264 public void CopyTo1_DestFileName_AlreadyExists ()
266 string path1 = TempFolder + DSC + "FIT.CopyToException.Source.Test";
267 string path2 = TempFolder + DSC + "FIT.CopyToException.Dest.Test";
272 File.Create (path1).Close ();
273 File.Create (path2).Close ();
274 FileInfo info = new FileInfo (path1);
278 } catch (IOException ex) {
279 // The file '...' already exists.
280 Assert.AreEqual (typeof (IOException), ex.GetType (), "#2");
281 Assert.IsNull (ex.InnerException, "#3");
282 Assert.IsNotNull (ex.Message, "#4");
283 Assert.IsTrue (ex.Message.IndexOf (path2) != -1, "#5");
291 [Test] // CopyTo (String)
292 public void CopyTo1_DestFileName_Null ()
294 string path = TempFolder + DSC + "FIT.CopyToArgumentNullException.Test";
297 File.Create (path).Close ();
298 FileInfo info = new FileInfo (path);
302 } catch (ArgumentNullException ex) {
303 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
304 Assert.IsNull (ex.InnerException, "#3");
305 Assert.IsNotNull (ex.Message, "#4");
306 Assert.AreEqual ("destFileName", ex.ParamName, "#5");
313 [Test] // CopyTo (String)
314 public void CopyTo1_DestFileName_Empty ()
316 string path = TempFolder + DSC + "FIT.CopyToArgument1Exception.Test";
320 File.Create (path).Close ();
321 FileInfo info = new FileInfo (path);
323 info.CopyTo (string.Empty);
325 } catch (ArgumentException ex) {
326 // Empty file name is not legal
327 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
328 Assert.IsNull (ex.InnerException, "#3");
329 Assert.IsNotNull (ex.Message, "#4");
330 Assert.AreEqual ("destFileName", ex.ParamName, "#5");
337 [Test] // CopyTo (String)
338 public void CopyTo1_DestFileName_Whitespace ()
340 string path = TempFolder + DSC + "FIT.CopyToArgument2Exception.Test";
344 File.Create (path).Close ();
345 FileInfo info = new FileInfo (path);
349 } catch (ArgumentException ex) {
350 // The path is not of a legal form
351 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
352 Assert.IsNull (ex.InnerException, "#3");
353 Assert.IsNotNull (ex.Message, "#4");
354 Assert.IsNull (ex.ParamName, "#5");
361 [Test] // CopyTo (String)
362 public void CopyTo1_DestFileName_InvalidPathChars ()
364 string path = TempFolder + DSC + "FIT.CopyToArgument4Exception.Test";
365 string path2 = string.Empty;
369 File.Create (path).Close ();
370 FileInfo info = new FileInfo (path);
371 foreach (char c in Path.InvalidPathChars)
376 } catch (ArgumentException ex) {
377 // Illegal characters in path
378 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
379 Assert.IsNull (ex.InnerException, "#3");
380 Assert.IsNotNull (ex.Message, "#4");
381 Assert.IsNull (ex.ParamName, "#5");
388 [Test] // CopyTo (String, Boolean)
389 public void CopyTo2 ()
391 string path1 = TempFolder + DSC + "FIT.CopyTo2.Source.Test";
392 string path2 = TempFolder + DSC + "FIT.CopyTo2.Dest.Test";
396 File.Create (path1).Close ();
397 File.Create (path2).Close ();
398 FileInfo info = new FileInfo (path1);
400 FileInfo info2 = info.CopyTo (path2, true);
401 info = new FileInfo (path1);
402 Assert.IsTrue (info.Exists, "#1");
403 Assert.IsTrue (info2.Exists, "#2");
410 [Test] // CopyTo (String, Boolean)
411 public void CopyTo2_DestFileName_AlreadyExists ()
413 string path1 = TempFolder + DSC + "FIT.CopyToException.Source.Test";
414 string path2 = TempFolder + DSC + "FIT.CopyToException.Dest.Test";
419 File.Create (path1).Close ();
420 File.Create (path2).Close ();
421 FileInfo info = new FileInfo (path1);
423 info.CopyTo (path2, false);
425 } catch (IOException ex) {
426 // The file '...' already exists.
427 Assert.AreEqual (typeof (IOException), ex.GetType (), "#2");
428 Assert.IsNull (ex.InnerException, "#3");
429 Assert.IsNotNull (ex.Message, "#4");
430 Assert.IsTrue (ex.Message.IndexOf (path2) != -1, "#5");
438 [Test] // CopyTo (String, Boolean)
439 public void CopyTo2_DestFileName_Null ()
441 string path = TempFolder + DSC + "FIT.CopyToArgumentNullException.Test";
444 File.Create (path).Close ();
445 FileInfo info = new FileInfo (path);
447 info.CopyTo (null, false);
449 } catch (ArgumentNullException ex) {
450 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
451 Assert.IsNull (ex.InnerException, "#3");
452 Assert.IsNotNull (ex.Message, "#4");
453 Assert.AreEqual ("destFileName", ex.ParamName, "#5");
460 [Test] // CopyTo (String, Boolean)
461 public void CopyTo2_DestFileName_Empty ()
463 string path = TempFolder + DSC + "FIT.CopyToArgument1Exception.Test";
467 File.Create (path).Close ();
468 FileInfo info = new FileInfo (path);
470 info.CopyTo (string.Empty, false);
472 } catch (ArgumentException ex) {
473 // Empty file name is not legal
474 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
475 Assert.IsNull (ex.InnerException, "#3");
476 Assert.IsNotNull (ex.Message, "#4");
477 Assert.AreEqual ("destFileName", ex.ParamName, "#5");
484 [Test] // CopyTo (String, Boolean)
485 public void CopyTo2_DestFileName_Whitespace ()
487 string path = TempFolder + DSC + "FIT.CopyToArgument2Exception.Test";
491 File.Create (path).Close ();
492 FileInfo info = new FileInfo (path);
494 info.CopyTo (" ", false);
496 } catch (ArgumentException ex) {
497 // The path is not of a legal form
498 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
499 Assert.IsNull (ex.InnerException, "#3");
500 Assert.IsNotNull (ex.Message, "#4");
501 Assert.IsNull (ex.ParamName, "#5");
508 [Test] // CopyTo (String, Boolean)
509 public void CopyTo2_DestFileName_InvalidPathChars ()
511 string path = TempFolder + DSC + "FIT.CopyToArgument4Exception.Test";
512 string path2 = string.Empty;
516 File.Create (path).Close ();
517 FileInfo info = new FileInfo (path);
518 foreach (char c in Path.InvalidPathChars)
521 info.CopyTo (path2, false);
523 } catch (ArgumentException ex) {
524 // Illegal characters in path
525 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
526 Assert.IsNull (ex.InnerException, "#3");
527 Assert.IsNotNull (ex.Message, "#4");
528 Assert.IsNull (ex.ParamName, "#5");
536 public void Create ()
538 string path = TempFolder + DSC + "FIT.Create.Test";
542 FileInfo info = new FileInfo (path);
543 Assert.IsFalse (info.Exists, "#1");
544 FileStream stream = info.Create ();
545 Assert.IsFalse (info.Exists, "#2");
546 info = new FileInfo (path);
547 Assert.IsTrue (info.Exists, "#3");
548 Assert.IsTrue (stream.CanRead, "#4");
549 Assert.IsTrue (stream.CanWrite, "#5");
550 Assert.IsTrue (stream.CanSeek, "#6");
558 public void CreateText ()
560 string path = TempFolder + DSC + "FIT.CreateText.Test";
564 FileInfo info = new FileInfo (path);
565 Assert.IsFalse (info.Exists, "#1");
566 StreamWriter writer = info.CreateText ();
567 writer.WriteLine ("test");
569 info = new FileInfo (path);
570 Assert.IsTrue (info.Exists, "#2");
577 public void CreateText_Directory ()
579 FileInfo info = new FileInfo (TempFolder);
583 } catch (UnauthorizedAccessException ex) {
584 Assert.AreEqual (typeof (UnauthorizedAccessException), ex.GetType (), "#2");
585 Assert.IsNull (ex.InnerException, "#3");
586 Assert.IsNotNull (ex.Message, "#4");
591 public void Delete ()
593 string path = TempFolder + DSC + "FIT.Delete.Test";
597 FileInfo info = new FileInfo (path);
598 Assert.IsFalse (info.Exists, "#1");
599 info.Create ().Close ();
600 info = new FileInfo (path);
601 Assert.IsTrue (info.Exists, "#2");
603 Assert.IsTrue (info.Exists, "#3");
604 info = new FileInfo (path);
605 Assert.IsFalse (info.Exists, "#4");
612 public void Delete_Directory ()
614 FileInfo info = new FileInfo (TempFolder);
618 } catch (UnauthorizedAccessException ex) {
619 Assert.AreEqual (typeof (UnauthorizedAccessException), ex.GetType (), "#2");
620 Assert.IsNull (ex.InnerException, "#3");
621 Assert.IsNotNull (ex.Message, "#4");
626 public void MoveTo ()
628 string path1 = TempFolder + DSC + "FIT.MoveTo.Source.Test";
629 string path2 = TempFolder + DSC + "FIT.MoveTo.Dest.Test";
634 File.Create (path1).Close ();
635 FileInfo info1 = new FileInfo (path1);
636 FileInfo info2 = new FileInfo (path2);
637 Assert.IsTrue (info1.Exists, "#A1");
638 Assert.AreEqual (path1, info1.FullName, "#A2");
639 Assert.IsFalse (info2.Exists, "#A3");
640 Assert.AreEqual (path2, info2.FullName, "#A4");
642 info1.MoveTo (path2);
643 info2 = new FileInfo (path2);
644 Assert.IsTrue (info1.Exists, "#B1");
645 Assert.AreEqual (path2, info1.FullName, "#B2");
646 Assert.IsTrue (info2.Exists, "#B3");
647 Assert.AreEqual (path2, info2.FullName, "#B4");
654 [Test] //Covers #18361
655 public void MoveTo_SameName ()
657 string name = "FIT.MoveTo.SameName.Test";
658 string path1 = TempFolder + DSC + name;
664 File.Create (path1).Close ();
665 FileInfo info1 = new FileInfo (path1);
666 FileInfo info2 = new FileInfo (path2);
667 Assert.IsTrue (info1.Exists, "#A1");
668 Assert.IsFalse (info2.Exists, "#A2");
670 info1.MoveTo (path2);
671 info1 = new FileInfo (path1);
672 info2 = new FileInfo (path2);
673 Assert.IsFalse (info1.Exists, "#B1");
674 Assert.IsTrue (info2.Exists, "#B2");
682 public void MoveTo_DestFileName_AlreadyExists ()
684 string sourceFile = TempFolder + DSC + "FIT.MoveTo.Source.Test";
688 // move to same directory
689 File.Create (sourceFile).Close ();
690 info = new FileInfo (sourceFile);
692 info.MoveTo (TempFolder);
694 } catch (IOException ex) {
695 // Cannot create a file when that file already exists
696 Assert.AreEqual (typeof (IOException), ex.GetType (), "#A2");
697 Assert.IsNull (ex.InnerException, "#A3");
698 Assert.IsNotNull (ex.Message, "#A4");
699 Assert.IsFalse (ex.Message.IndexOf (sourceFile) != -1, "#A5");
700 Assert.IsFalse (ex.Message.IndexOf (TempFolder) != -1, "#A6");
702 DeleteFile (sourceFile);
705 // move to exist file
706 File.Create (sourceFile).Close ();
707 destFile = TempFolder + DSC + "FIT.MoveTo.Dest.Test";
708 File.Create (destFile).Close ();
709 info = new FileInfo (sourceFile);
711 info.MoveTo (destFile);
713 } catch (IOException ex) {
714 // Cannot create a file when that file already exists
715 Assert.AreEqual (typeof (IOException), ex.GetType (), "#B2");
716 Assert.IsNull (ex.InnerException, "#B3");
717 Assert.IsNotNull (ex.Message, "#B4");
718 Assert.IsFalse (ex.Message.IndexOf (sourceFile) != -1, "#B5");
719 Assert.IsFalse (ex.Message.IndexOf (destFile) != -1, "#B6");
721 DeleteFile (sourceFile);
722 DeleteFile (destFile);
725 // move to existing directory
726 File.Create (sourceFile).Close ();
727 destFile = TempFolder + Path.DirectorySeparatorChar + "bar";
728 Directory.CreateDirectory (destFile);
729 info = new FileInfo (sourceFile);
731 info.MoveTo (destFile);
733 } catch (IOException ex) {
734 // Cannot create a file when that file already exists
735 Assert.AreEqual (typeof (IOException), ex.GetType (), "#C2");
736 Assert.IsNull (ex.InnerException, "#C3");
737 Assert.IsNotNull (ex.Message, "#C4");
738 Assert.IsFalse (ex.Message.IndexOf (sourceFile) != -1, "#C5");
739 Assert.IsFalse (ex.Message.IndexOf (destFile) != -1, "#C6");
741 DeleteFile (sourceFile);
742 DeleteDirectory (destFile);
747 public void MoveTo_DestFileName_DirectoryDoesNotExist ()
749 string sourceFile = TempFolder + Path.DirectorySeparatorChar + "foo";
750 string destFile = Path.Combine (Path.Combine (TempFolder, "doesnotexist"), "b");
751 DeleteFile (sourceFile);
753 File.Create (sourceFile).Close ();
754 FileInfo info = new FileInfo (sourceFile);
756 info.MoveTo (destFile);
758 } catch (DirectoryNotFoundException ex) {
759 // Could not find a part of the path
760 Assert.AreEqual (typeof (DirectoryNotFoundException), ex.GetType (), "#2");
761 Assert.IsNull (ex.InnerException, "#3");
762 Assert.IsNotNull (ex.Message, "#4");
765 DeleteFile (sourceFile);
770 public void MoveTo_DestFileName_Null ()
772 string path = TempFolder + DSC + "FIT.MoveToArgumentNullException.Test";
776 File.Create (path).Close ();
777 FileInfo info = new FileInfo (path);
781 } catch (ArgumentNullException ex) {
782 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
783 Assert.IsNull (ex.InnerException, "#3");
784 Assert.IsNotNull (ex.Message, "#4");
785 Assert.AreEqual ("destFileName", ex.ParamName, "#5");
793 public void MoveTo_DestFileName_Empty ()
795 string path = TempFolder + DSC + "FIT.MoveToArgumentException.Test";
799 File.Create (path).Close ();
800 FileInfo info = new FileInfo (path);
802 info.MoveTo (string.Empty);
804 } catch (ArgumentException ex) {
805 // Empty file name is not legal
806 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
807 Assert.IsNull (ex.InnerException, "#3");
808 Assert.IsNotNull (ex.Message, "#4");
809 Assert.AreEqual ("destFileName", ex.ParamName, "#5");
817 public void MoveTo_DestFileName_Whitespace ()
819 string path = TempFolder + DSC + "FIT.MoveToArgumentException.Test";
823 File.Create (path).Close ();
824 FileInfo info = new FileInfo (path);
828 } catch (ArgumentException ex) {
829 // The path is not of a legal form
830 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
831 Assert.IsNull (ex.InnerException, "#3");
832 Assert.IsNotNull (ex.Message, "#4");
833 Assert.IsNull (ex.ParamName, "#5");
841 public void MoveTo_FileDoesNotExist ()
843 string path1 = TempFolder + DSC + "FIT.MoveToFileNotFoundException.Src";
844 string path2 = TempFolder + DSC + "FIT.MoveToFileNotFoundException.Dst";
849 FileInfo info = new FileInfo (path1);
853 } catch (FileNotFoundException ex) {
854 // Unable to find the specified file
855 Assert.AreEqual (typeof (FileNotFoundException), ex.GetType (), "#2");
856 Assert.IsNull (ex.FileName, "#2");
857 Assert.IsNull (ex.InnerException, "#3");
858 Assert.IsNotNull (ex.Message, "#4");
867 public void MoveTo_Same ()
869 string path = TempFolder + DSC + "FIT.MoveToSame.Test";
873 File.Create (path).Close ();
874 FileInfo info = new FileInfo (path);
876 Assert.IsTrue (info.Exists, "#1");
877 Assert.IsTrue (File.Exists (path), "#2");
885 public void Replace1 ()
887 string path1 = TempFolder + DSC + "FIT.Replace.Source.Test";
888 string path2 = TempFolder + DSC + "FIT.Replace.Dest.Test";
889 string path3 = TempFolder + DSC + "FIT.Replace.Back.Test";
895 File.Create (path1).Close ();
896 File.Create (path2).Close ();
897 File.Create (path3).Close ();
898 FileInfo info = new FileInfo (path1);
899 Assert.IsTrue (info.Exists, "#1");
900 FileInfo info2 = info.Replace (path2, path3);
901 Assert.IsTrue (info2.Exists, "#2");
902 FileInfo info3 = new FileInfo (path3);
903 Assert.IsTrue (info3.Exists, "#3");
911 public void Replace1_Backup_Null ()
913 string path1 = TempFolder + DSC + "FIT.Replace.Source.Test";
914 string path2 = TempFolder + DSC + "FIT.Replace.Dest.Test";
919 File.Create (path1).Close ();
920 File.Create (path2).Close ();
921 FileInfo info = new FileInfo (path1);
922 Assert.IsTrue (info.Exists, "#1");
923 FileInfo info2 = info.Replace (path2, null);
924 Assert.IsTrue (info2.Exists, "#2");
925 info = new FileInfo (path1);
926 Assert.IsFalse (info.Exists, "#3");
933 public void Replace1_DestFileName_Null ()
935 string path1 = TempFolder + DSC + "FIT.Replace.Source.Test";
939 File.Create (path1).Close ();
940 FileInfo info = new FileInfo (path1);
941 info.Replace (null, null);
943 } catch (ArgumentNullException ex) {
944 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
945 Assert.IsNull (ex.InnerException, "#3");
946 Assert.IsNotNull (ex.Message, "#4");
954 public void Replace1_DestFileName_Empty ()
956 string path1 = TempFolder + DSC + "FIT.Replace.Source.Test";
960 File.Create (path1).Close ();
961 FileInfo info = new FileInfo (path1);
962 info.Replace (string.Empty, null);
964 } catch (ArgumentException ex) {
965 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
966 Assert.IsNull (ex.InnerException, "#3");
967 Assert.IsNotNull (ex.Message, "#4");
975 public void Replace1_DestFileName_WhiteSpace ()
977 string path1 = TempFolder + DSC + "FIT.Replace.Source.Test";
981 File.Create (path1).Close ();
982 FileInfo info = new FileInfo (path1);
983 info.Replace (" ", null);
985 } catch (ArgumentException ex) {
986 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
987 Assert.IsNull (ex.InnerException, "#3");
988 Assert.IsNotNull (ex.Message, "#4");
996 public void Replace1_DestFileName_InvalidPathChars ()
998 string path1 = TempFolder + DSC + "FIT.Replace.Source.Test";
999 string path2 = string.Empty;
1003 File.Create (path1).Close ();
1004 FileInfo info = new FileInfo (path1);
1005 foreach (char c in Path.InvalidPathChars)
1008 info.Replace (path2, null);
1010 } catch (ArgumentException ex) {
1011 // Illegal characters in path
1012 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
1013 Assert.IsNull (ex.InnerException, "#3");
1014 Assert.IsNotNull (ex.Message, "#4");
1015 Assert.IsNull (ex.ParamName, "#5");
1023 public void Replace1_DestFileName_FileNotFound ()
1025 string path1 = TempFolder + DSC + "FIT.Replace.Source.Test";
1026 string path2 = TempFolder + DSC + "FIT.Replace.Dest.Test";
1032 File.Create (path1).Close ();
1033 FileInfo info = new FileInfo (path1);
1034 info.Replace (path2, null);
1036 } catch (FileNotFoundException ex) {
1037 Assert.AreEqual (typeof (FileNotFoundException), ex.GetType (), "#2");
1038 Assert.IsNull (ex.InnerException, "#3");
1039 Assert.IsNotNull (ex.Message, "#4");
1047 public void Replace1_DestFileName_IsReadOnly ()
1049 string path1 = TempFolder + DSC + "FIT.Replace.Source.Test";
1050 string path2 = TempFolder + DSC + "FIT.Replace.Dest.Test";
1056 File.Create (path1).Close ();
1057 File.Create (path2).Close ();
1058 File.SetAttributes (path2, FileAttributes.ReadOnly);
1059 FileInfo info = new FileInfo (path1);
1060 info.Replace (path2, null);
1062 } catch (UnauthorizedAccessException ex) {
1063 Assert.AreEqual (typeof (UnauthorizedAccessException), ex.GetType (), "#2");
1064 Assert.IsNull (ex.InnerException, "#3");
1065 Assert.IsNotNull (ex.Message, "#4");
1068 File.SetAttributes (path2, FileAttributes.Normal);
1075 public void Replace1_Source_FileNotFound ()
1077 string path1 = TempFolder + DSC + "FIT.Replace.Source.Test";
1078 string path2 = TempFolder + DSC + "FIT.Replace.Dest.Test";
1083 File.Create (path2).Close ();
1084 FileInfo info = new FileInfo (path1);
1085 info.Replace (path2, null);
1087 } catch (FileNotFoundException ex) {
1088 Assert.AreEqual (typeof (FileNotFoundException), ex.GetType (), "#2");
1089 Assert.IsNull (ex.InnerException, "#3");
1090 Assert.IsNotNull (ex.Message, "#4");
1101 string path = TempFolder + DSC + "FIT.Open.Test";
1103 FileStream stream = null;
1105 FileInfo info = new FileInfo (path);
1106 stream = info.Open (FileMode.CreateNew);
1107 Assert.IsTrue (stream.CanRead, "#A1");
1108 Assert.IsTrue (stream.CanSeek, "#A2");
1109 Assert.IsTrue (stream.CanWrite, "#A3");
1112 stream = info.Open (FileMode.Open);
1113 Assert.IsTrue (stream.CanRead, "#B1");
1114 Assert.IsTrue (stream.CanSeek, "#B2");
1115 Assert.IsTrue (stream.CanWrite, "#B3");
1118 stream = info.Open (FileMode.Append, FileAccess.Write);
1119 Assert.IsFalse (stream.CanRead, "#C1");
1120 Assert.IsTrue (stream.CanSeek, "#C2");
1121 Assert.IsTrue (stream.CanWrite, "#C3");
1124 stream = info.Open (FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite);
1125 Assert.IsTrue (stream.CanRead, "#D1");
1126 Assert.IsTrue (stream.CanSeek, "#D2");
1127 Assert.IsTrue (stream.CanWrite, "#D3");
1137 public void Open_FileDoesNotExist ()
1139 string path = TempFolder + DSC + "FIT.OpenFileNotFoundException.Test";
1142 FileInfo info = new FileInfo (path);
1144 info.Open (FileMode.Open);
1146 } catch (FileNotFoundException ex) {
1147 Assert.AreEqual (typeof (FileNotFoundException), ex.GetType (), "#2");
1148 Assert.AreEqual (path, ex.FileName, "#3");
1149 Assert.IsNull (ex.InnerException, "#4");
1150 Assert.IsNotNull (ex.Message, "#5");
1155 public void OpenRead ()
1157 string path = TempFolder + DSC + "FIT.OpenRead.Test";
1159 FileStream stream = null;
1161 File.Create (path).Close ();
1162 FileInfo info = new FileInfo (path);
1163 stream = info.OpenRead ();
1164 Assert.IsTrue (stream.CanRead, "#1");
1165 Assert.IsTrue (stream.CanSeek, "#2");
1166 Assert.IsFalse (stream.CanWrite, "#3");
1177 public void OpenRead_FileLock ()
1179 string path = TempFolder + DSC + "FIT.OpenReadIOException.Test";
1181 FileStream stream = null;
1184 stream = File.Create (path);
1185 FileInfo info = new FileInfo (path);
1189 } catch (IOException ex) {
1190 // The process cannot access the file because
1191 // it is being used by another process
1192 Assert.AreEqual (typeof (IOException), ex.GetType (), "#2");
1193 Assert.IsNull (ex.InnerException, "#3");
1194 Assert.IsNotNull (ex.Message, "#4");
1204 public void OpenRead_Directory ()
1206 FileInfo info = new FileInfo (TempFolder);
1210 } catch (UnauthorizedAccessException ex) {
1211 Assert.AreEqual (typeof (UnauthorizedAccessException), ex.GetType (), "#2");
1212 Assert.IsNull (ex.InnerException, "#3");
1213 Assert.IsNotNull (ex.Message, "#4");
1218 public void OpenText ()
1220 string path = TempFolder + DSC + "FIT.OpenText.Test";
1222 StreamReader reader = null;
1224 File.Create (path).Close ();
1225 FileInfo info = new FileInfo (path);
1226 reader = info.OpenText ();
1227 Assert.AreEqual (-1, reader.Peek ());
1236 public void OpenText_FileDoesNotExist ()
1238 string path = TempFolder + DSC + "FIT.OpenTextFileNotFoundException.Test";
1240 FileInfo info = new FileInfo (path);
1244 } catch (FileNotFoundException ex) {
1245 Assert.AreEqual (typeof (FileNotFoundException), ex.GetType (), "#2");
1246 Assert.AreEqual (path, ex.FileName, "#3");
1247 Assert.IsNull (ex.InnerException, "#4");
1248 Assert.IsNotNull (ex.Message, "#5");
1253 public void OpenText_Directory ()
1255 FileInfo info = new FileInfo (TempFolder);
1259 } catch (UnauthorizedAccessException ex) {
1260 Assert.AreEqual (typeof (UnauthorizedAccessException), ex.GetType (), "#2");
1261 Assert.IsNull (ex.InnerException, "#3");
1262 Assert.IsNotNull (ex.Message, "#4");
1267 public void OpenWrite ()
1269 string path = TempFolder + DSC + "FIT.OpenWrite.Test";
1271 FileStream stream = null;
1273 File.Create (path).Close ();
1274 FileInfo info = new FileInfo (path);
1275 stream = info.OpenWrite ();
1276 Assert.IsFalse (stream.CanRead, "#1");
1277 Assert.IsTrue (stream.CanSeek, "#2");
1278 Assert.IsTrue (stream.CanWrite, "#3");
1287 public void OpenWrite_Directory ()
1289 FileInfo info = new FileInfo (TempFolder);
1293 } catch (UnauthorizedAccessException ex) {
1294 Assert.AreEqual (typeof (UnauthorizedAccessException), ex.GetType (), "#2");
1295 Assert.IsNull (ex.InnerException, "#3");
1296 Assert.IsNotNull (ex.Message, "#4");
1301 public void Serialization ()
1304 SerializationInfo si;
1306 info = new FileInfo ("Test");
1307 si = new SerializationInfo (typeof (FileInfo), new FormatterConverter ());
1308 info.GetObjectData (si, new StreamingContext ());
1310 Assert.AreEqual (2, si.MemberCount, "#A1");
1311 Assert.AreEqual ("Test", si.GetString ("OriginalPath"), "#A2");
1312 Assert.AreEqual (Path.Combine (Directory.GetCurrentDirectory (), "Test"), si.GetString ("FullPath"), "#A3");
1314 info = new FileInfo (TempFolder);
1315 si = new SerializationInfo (typeof (FileInfo), new FormatterConverter ());
1316 info.GetObjectData (si, new StreamingContext ());
1318 Assert.AreEqual (2, si.MemberCount, "#B1");
1319 Assert.AreEqual (TempFolder, si.GetString ("OriginalPath"), "#B2");
1320 Assert.AreEqual (TempFolder, si.GetString ("FullPath"), "#B3");
1324 public void Deserialization ()
1326 FileInfo info = new FileInfo ("Test");
1328 MemoryStream ms = new MemoryStream ();
1329 BinaryFormatter bf = new BinaryFormatter ();
1330 bf.Serialize (ms, info);
1333 FileInfo clone = (FileInfo) bf.Deserialize (ms);
1334 Assert.AreEqual (info.Name, clone.Name, "#1");
1335 Assert.AreEqual (info.FullName, clone.FullName, "#2");
1340 [Category ("MobileNotWorking")]
1341 public void ToStringVariety ()
1343 Assert.AreEqual ("foo", new FileInfo ("foo").ToString ());
1344 Assert.AreEqual ("c:/foo", new FileInfo ("c:/foo").ToString ());
1345 Assert.AreEqual ("/usr/local/foo", new FileInfo ("/usr/local/foo").ToString ());
1346 Assert.AreEqual ("c:\\foo", new FileInfo ("c:\\foo").ToString ());
1347 Assert.AreEqual ("/usr/local\\foo", new FileInfo ("/usr/local\\foo").ToString ());
1348 Assert.AreEqual ("foo/BAR/baz", new FileInfo ("foo/BAR/baz").ToString ());
1349 Assert.AreEqual ("c:/documents and settings", new FileInfo ("c:/documents and settings").ToString ());
1350 Assert.AreEqual ("c:/docUme~1", new FileInfo ("c:/docUme~1").ToString ());
1353 void DeleteFile (string path)
1355 if (File.Exists (path))
1359 void DeleteDirectory (string path)
1361 if (Directory.Exists (path))
1362 Directory.Delete (path, true);