[Cleanup] Removed TARGET_JVM
[mono-project.git] / mcs / class / corlib / Test / System.IO / FileInfoTest.cs
blob297a54bf74b853ee15086f6aa7de325687526cf7
1 // FileInfoTest.cs - NUnit Test Cases for System.IO.FileInfo class
2 //
3 // Ville Palo (vi64pa@koti.soon.fi)
4 //
5 // (C) 2003 Ville Palo
6 //
8 using System;
9 using System.IO;
10 using System.Runtime.Serialization;
11 using System.Runtime.Serialization.Formatters.Binary;
13 using NUnit.Framework;
15 namespace MonoTests.System.IO
17 [TestFixture]
18 public class FileInfoTest
20 string TempFolder = Path.Combine (Path.GetTempPath (), "MonoTests.System.IO.Tests");
21 static readonly char DSC = Path.DirectorySeparatorChar;
23 [SetUp]
24 public void SetUp ()
26 DeleteDirectory (TempFolder);
27 Directory.CreateDirectory (TempFolder);
30 [TearDown]
31 public void TearDown ()
33 DeleteDirectory (TempFolder);
36 [Test] // ctor (String)
37 public void Constructor1 ()
39 string path = TempFolder + DSC + "FIT.Ctr.Test";
40 DeleteFile (path);
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 ()
52 try {
53 new FileInfo (null);
54 Assert.Fail ("#1");
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 ()
66 try {
67 new FileInfo (string.Empty);
68 Assert.Fail ("#1");
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)
83 path += c;
84 try {
85 new FileInfo (path);
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 ()
98 try {
99 new FileInfo (" ");
100 Assert.Fail ("#1");
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");
110 [Test]
111 public void DirectoryTest ()
113 string path = TempFolder + DSC + "FIT.Directory.Test";
114 DeleteFile (path);
116 FileInfo info = new FileInfo (path);
117 DirectoryInfo dir = info.Directory;
118 Assert.AreEqual ("MonoTests.System.IO.Tests", dir.Name);
121 [Test]
122 public void Exists ()
124 string path = TempFolder + DSC + "FIT.Exists.Test";
125 DeleteFile (path);
127 try {
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");
137 } finally {
138 DeleteFile (path);
142 #if !MOBILE
143 [Test]
144 [Category ("NotWorking")]
145 public void IsReadOnly ()
147 string path = TempFolder + DSC + "FIT.IsReadOnly.Test";
148 DeleteFile (path);
150 try {
151 using (FileStream stream = File.Create (path)) {
152 stream.WriteByte (12);
153 stream.Close ();
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");
170 } finally {
171 File.SetAttributes (path, FileAttributes.Normal);
172 DeleteFile (path);
175 #endif
177 [Test]
178 public void Length ()
180 string path = TempFolder + DSC + "FIT.Length.Test";
181 DeleteFile (path);
183 try {
184 FileStream stream = File.Create (path);
185 FileInfo info = new FileInfo (path);
186 Assert.AreEqual (0, info.Length, "#1");
187 stream.WriteByte (12);
188 stream.Flush ();
189 Assert.AreEqual (0, info.Length, "#2");
190 info = new FileInfo (path);
191 Assert.AreEqual (1, info.Length, "#3");
192 stream.Close ();
193 } finally {
194 DeleteFile (path);
198 [Test]
199 public void Length_FileDoesNotExist ()
201 string path = TempFolder + DSC + "FIT.LengthException.Test";
202 DeleteFile (path);
203 FileInfo info = new FileInfo (path);
204 try {
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");
215 [Test]
216 public void AppendText ()
218 string path = TempFolder + DSC + "FIT.AppendText.Test";
219 DeleteFile (path);
221 try {
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");
230 writer.Flush ();
231 writer.Close ();
233 Assert.AreEqual (0, info.Length, "#3");
234 info = new FileInfo (path);
235 Assert.AreEqual (3, info.Length, "#4");
236 } finally {
237 DeleteFile (path);
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";
246 DeleteFile (path1);
247 DeleteFile (path2);
248 try {
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");
257 } finally {
258 DeleteFile (path1);
259 DeleteFile (path2);
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";
269 try {
270 DeleteFile (path1);
271 DeleteFile (path2);
272 File.Create (path1).Close ();
273 File.Create (path2).Close ();
274 FileInfo info = new FileInfo (path1);
275 try {
276 info.CopyTo (path2);
277 Assert.Fail ("#1");
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");
285 } finally {
286 DeleteFile (path1);
287 DeleteFile (path2);
291 [Test] // CopyTo (String)
292 public void CopyTo1_DestFileName_Null ()
294 string path = TempFolder + DSC + "FIT.CopyToArgumentNullException.Test";
295 DeleteFile (path);
296 try {
297 File.Create (path).Close ();
298 FileInfo info = new FileInfo (path);
299 try {
300 info.CopyTo (null);
301 Assert.Fail ("#1");
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");
308 } finally {
309 DeleteFile (path);
313 [Test] // CopyTo (String)
314 public void CopyTo1_DestFileName_Empty ()
316 string path = TempFolder + DSC + "FIT.CopyToArgument1Exception.Test";
317 DeleteFile (path);
319 try {
320 File.Create (path).Close ();
321 FileInfo info = new FileInfo (path);
322 try {
323 info.CopyTo (string.Empty);
324 Assert.Fail ("#1");
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");
332 } finally {
333 DeleteFile (path);
337 [Test] // CopyTo (String)
338 public void CopyTo1_DestFileName_Whitespace ()
340 string path = TempFolder + DSC + "FIT.CopyToArgument2Exception.Test";
341 DeleteFile (path);
343 try {
344 File.Create (path).Close ();
345 FileInfo info = new FileInfo (path);
346 try {
347 info.CopyTo (" ");
348 Assert.Fail ("#1");
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");
356 } finally {
357 DeleteFile (path);
361 [Test] // CopyTo (String)
362 public void CopyTo1_DestFileName_InvalidPathChars ()
364 string path = TempFolder + DSC + "FIT.CopyToArgument4Exception.Test";
365 string path2 = string.Empty;
366 DeleteFile (path);
368 try {
369 File.Create (path).Close ();
370 FileInfo info = new FileInfo (path);
371 foreach (char c in Path.InvalidPathChars)
372 path2 += c;
373 try {
374 info.CopyTo (path2);
375 Assert.Fail ("#1");
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");
383 } finally {
384 DeleteFile (path);
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";
393 DeleteFile (path1);
394 DeleteFile (path2);
395 try {
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");
404 } finally {
405 DeleteFile (path1);
406 DeleteFile (path2);
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";
416 try {
417 DeleteFile (path1);
418 DeleteFile (path2);
419 File.Create (path1).Close ();
420 File.Create (path2).Close ();
421 FileInfo info = new FileInfo (path1);
422 try {
423 info.CopyTo (path2, false);
424 Assert.Fail ("#1");
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");
432 } finally {
433 DeleteFile (path1);
434 DeleteFile (path2);
438 [Test] // CopyTo (String, Boolean)
439 public void CopyTo2_DestFileName_Null ()
441 string path = TempFolder + DSC + "FIT.CopyToArgumentNullException.Test";
442 DeleteFile (path);
443 try {
444 File.Create (path).Close ();
445 FileInfo info = new FileInfo (path);
446 try {
447 info.CopyTo (null, false);
448 Assert.Fail ("#1");
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");
455 } finally {
456 DeleteFile (path);
460 [Test] // CopyTo (String, Boolean)
461 public void CopyTo2_DestFileName_Empty ()
463 string path = TempFolder + DSC + "FIT.CopyToArgument1Exception.Test";
464 DeleteFile (path);
466 try {
467 File.Create (path).Close ();
468 FileInfo info = new FileInfo (path);
469 try {
470 info.CopyTo (string.Empty, false);
471 Assert.Fail ("#1");
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");
479 } finally {
480 DeleteFile (path);
484 [Test] // CopyTo (String, Boolean)
485 public void CopyTo2_DestFileName_Whitespace ()
487 string path = TempFolder + DSC + "FIT.CopyToArgument2Exception.Test";
488 DeleteFile (path);
490 try {
491 File.Create (path).Close ();
492 FileInfo info = new FileInfo (path);
493 try {
494 info.CopyTo (" ", false);
495 Assert.Fail ("#1");
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");
503 } finally {
504 DeleteFile (path);
508 [Test] // CopyTo (String, Boolean)
509 public void CopyTo2_DestFileName_InvalidPathChars ()
511 string path = TempFolder + DSC + "FIT.CopyToArgument4Exception.Test";
512 string path2 = string.Empty;
513 DeleteFile (path);
515 try {
516 File.Create (path).Close ();
517 FileInfo info = new FileInfo (path);
518 foreach (char c in Path.InvalidPathChars)
519 path2 += c;
520 try {
521 info.CopyTo (path2, false);
522 Assert.Fail ("#1");
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");
530 } finally {
531 DeleteFile (path);
535 [Test]
536 public void Create ()
538 string path = TempFolder + DSC + "FIT.Create.Test";
539 DeleteFile (path);
541 try {
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");
551 stream.Close ();
552 } finally {
553 DeleteFile (path);
557 [Test]
558 public void CreateText ()
560 string path = TempFolder + DSC + "FIT.CreateText.Test";
561 DeleteFile (path);
563 try {
564 FileInfo info = new FileInfo (path);
565 Assert.IsFalse (info.Exists, "#1");
566 StreamWriter writer = info.CreateText ();
567 writer.WriteLine ("test");
568 writer.Close ();
569 info = new FileInfo (path);
570 Assert.IsTrue (info.Exists, "#2");
571 } finally {
572 DeleteFile (path);
576 [Test]
577 public void CreateText_Directory ()
579 FileInfo info = new FileInfo (TempFolder);
580 try {
581 info.CreateText ();
582 Assert.Fail ("#1");
583 } catch (UnauthorizedAccessException ex) {
584 Assert.AreEqual (typeof (UnauthorizedAccessException), ex.GetType (), "#2");
585 Assert.IsNull (ex.InnerException, "#3");
586 Assert.IsNotNull (ex.Message, "#4");
590 [Test]
591 public void Delete ()
593 string path = TempFolder + DSC + "FIT.Delete.Test";
594 DeleteFile (path);
596 try {
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");
602 info.Delete ();
603 Assert.IsTrue (info.Exists, "#3");
604 info = new FileInfo (path);
605 Assert.IsFalse (info.Exists, "#4");
606 } finally {
607 DeleteFile (path);
611 [Test]
612 public void Delete_Directory ()
614 FileInfo info = new FileInfo (TempFolder);
615 try {
616 info.Delete ();
617 Assert.Fail ("#1");
618 } catch (UnauthorizedAccessException ex) {
619 Assert.AreEqual (typeof (UnauthorizedAccessException), ex.GetType (), "#2");
620 Assert.IsNull (ex.InnerException, "#3");
621 Assert.IsNotNull (ex.Message, "#4");
625 [Test]
626 public void MoveTo ()
628 string path1 = TempFolder + DSC + "FIT.MoveTo.Source.Test";
629 string path2 = TempFolder + DSC + "FIT.MoveTo.Dest.Test";
630 DeleteFile (path1);
631 DeleteFile (path2);
633 try {
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");
648 } finally {
649 DeleteFile (path1);
650 DeleteFile (path2);
654 [Test]
655 public void MoveTo_DestFileName_AlreadyExists ()
657 string sourceFile = TempFolder + DSC + "FIT.MoveTo.Source.Test";
658 string destFile;
659 FileInfo info;
661 // move to same directory
662 File.Create (sourceFile).Close ();
663 info = new FileInfo (sourceFile);
664 try {
665 info.MoveTo (TempFolder);
666 Assert.Fail ("#A1");
667 } catch (IOException ex) {
668 // Cannot create a file when that file already exists
669 Assert.AreEqual (typeof (IOException), ex.GetType (), "#A2");
670 Assert.IsNull (ex.InnerException, "#A3");
671 Assert.IsNotNull (ex.Message, "#A4");
672 Assert.IsFalse (ex.Message.IndexOf (sourceFile) != -1, "#A5");
673 Assert.IsFalse (ex.Message.IndexOf (TempFolder) != -1, "#A6");
674 } finally {
675 DeleteFile (sourceFile);
678 // move to exist file
679 File.Create (sourceFile).Close ();
680 destFile = TempFolder + DSC + "FIT.MoveTo.Dest.Test";
681 File.Create (destFile).Close ();
682 info = new FileInfo (sourceFile);
683 try {
684 info.MoveTo (destFile);
685 Assert.Fail ("#B1");
686 } catch (IOException ex) {
687 // Cannot create a file when that file already exists
688 Assert.AreEqual (typeof (IOException), ex.GetType (), "#B2");
689 Assert.IsNull (ex.InnerException, "#B3");
690 Assert.IsNotNull (ex.Message, "#B4");
691 Assert.IsFalse (ex.Message.IndexOf (sourceFile) != -1, "#B5");
692 Assert.IsFalse (ex.Message.IndexOf (destFile) != -1, "#B6");
693 } finally {
694 DeleteFile (sourceFile);
695 DeleteFile (destFile);
698 // move to existing directory
699 File.Create (sourceFile).Close ();
700 destFile = TempFolder + Path.DirectorySeparatorChar + "bar";
701 Directory.CreateDirectory (destFile);
702 info = new FileInfo (sourceFile);
703 try {
704 info.MoveTo (destFile);
705 Assert.Fail ("#C1");
706 } catch (IOException ex) {
707 // Cannot create a file when that file already exists
708 Assert.AreEqual (typeof (IOException), ex.GetType (), "#C2");
709 Assert.IsNull (ex.InnerException, "#C3");
710 Assert.IsNotNull (ex.Message, "#C4");
711 Assert.IsFalse (ex.Message.IndexOf (sourceFile) != -1, "#C5");
712 Assert.IsFalse (ex.Message.IndexOf (destFile) != -1, "#C6");
713 } finally {
714 DeleteFile (sourceFile);
715 DeleteDirectory (destFile);
719 [Test]
720 public void MoveTo_DestFileName_DirectoryDoesNotExist ()
722 string sourceFile = TempFolder + Path.DirectorySeparatorChar + "foo";
723 string destFile = Path.Combine (Path.Combine (TempFolder, "doesnotexist"), "b");
724 DeleteFile (sourceFile);
725 try {
726 File.Create (sourceFile).Close ();
727 FileInfo info = new FileInfo (sourceFile);
728 try {
729 info.MoveTo (destFile);
730 Assert.Fail ("#1");
731 } catch (DirectoryNotFoundException ex) {
732 // Could not find a part of the path
733 Assert.AreEqual (typeof (DirectoryNotFoundException), ex.GetType (), "#2");
734 Assert.IsNull (ex.InnerException, "#3");
735 Assert.IsNotNull (ex.Message, "#4");
737 } finally {
738 DeleteFile (sourceFile);
742 [Test]
743 public void MoveTo_DestFileName_Null ()
745 string path = TempFolder + DSC + "FIT.MoveToArgumentNullException.Test";
746 DeleteFile (path);
748 try {
749 File.Create (path).Close ();
750 FileInfo info = new FileInfo (path);
751 try {
752 info.MoveTo (null);
753 Assert.Fail ("#1");
754 } catch (ArgumentNullException ex) {
755 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
756 Assert.IsNull (ex.InnerException, "#3");
757 Assert.IsNotNull (ex.Message, "#4");
758 Assert.AreEqual ("destFileName", ex.ParamName, "#5");
760 } finally {
761 DeleteFile (path);
765 [Test]
766 public void MoveTo_DestFileName_Empty ()
768 string path = TempFolder + DSC + "FIT.MoveToArgumentException.Test";
769 DeleteFile (path);
771 try {
772 File.Create (path).Close ();
773 FileInfo info = new FileInfo (path);
774 try {
775 info.MoveTo (string.Empty);
776 Assert.Fail ("#1");
777 } catch (ArgumentException ex) {
778 // Empty file name is not legal
779 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
780 Assert.IsNull (ex.InnerException, "#3");
781 Assert.IsNotNull (ex.Message, "#4");
782 Assert.AreEqual ("destFileName", ex.ParamName, "#5");
784 } finally {
785 DeleteFile (path);
789 [Test]
790 public void MoveTo_DestFileName_Whitespace ()
792 string path = TempFolder + DSC + "FIT.MoveToArgumentException.Test";
793 DeleteFile (path);
795 try {
796 File.Create (path).Close ();
797 FileInfo info = new FileInfo (path);
798 try {
799 info.MoveTo (" ");
800 Assert.Fail ("#1");
801 } catch (ArgumentException ex) {
802 // The path is not of a legal form
803 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
804 Assert.IsNull (ex.InnerException, "#3");
805 Assert.IsNotNull (ex.Message, "#4");
806 Assert.IsNull (ex.ParamName, "#5");
808 } finally {
809 DeleteFile (path);
813 [Test]
814 public void MoveTo_FileDoesNotExist ()
816 string path1 = TempFolder + DSC + "FIT.MoveToFileNotFoundException.Src";
817 string path2 = TempFolder + DSC + "FIT.MoveToFileNotFoundException.Dst";
818 DeleteFile (path1);
819 DeleteFile (path2);
821 try {
822 FileInfo info = new FileInfo (path1);
823 try {
824 info.MoveTo (path2);
825 Assert.Fail ("#1");
826 } catch (FileNotFoundException ex) {
827 // Unable to find the specified file
828 Assert.AreEqual (typeof (FileNotFoundException), ex.GetType (), "#2");
829 Assert.IsNull (ex.FileName, "#2");
830 Assert.IsNull (ex.InnerException, "#3");
831 Assert.IsNotNull (ex.Message, "#4");
833 } finally {
834 DeleteFile (path1);
835 DeleteFile (path2);
839 [Test]
840 public void MoveTo_Same ()
842 string path = TempFolder + DSC + "FIT.MoveToSame.Test";
843 DeleteFile (path);
845 try {
846 File.Create (path).Close ();
847 FileInfo info = new FileInfo (path);
848 info.MoveTo (path);
849 Assert.IsTrue (info.Exists, "#1");
850 Assert.IsTrue (File.Exists (path), "#2");
851 } finally {
852 DeleteFile (path);
856 #if !MOBILE
857 [Test]
858 public void Replace1 ()
860 string path1 = TempFolder + DSC + "FIT.Replace.Source.Test";
861 string path2 = TempFolder + DSC + "FIT.Replace.Dest.Test";
862 string path3 = TempFolder + DSC + "FIT.Replace.Back.Test";
864 DeleteFile (path1);
865 DeleteFile (path2);
866 DeleteFile (path3);
867 try {
868 File.Create (path1).Close ();
869 File.Create (path2).Close ();
870 File.Create (path3).Close ();
871 FileInfo info = new FileInfo (path1);
872 Assert.IsTrue (info.Exists, "#1");
873 FileInfo info2 = info.Replace (path2, path3);
874 Assert.IsTrue (info2.Exists, "#2");
875 FileInfo info3 = new FileInfo (path3);
876 Assert.IsTrue (info3.Exists, "#3");
877 } finally {
878 DeleteFile (path2);
879 DeleteFile (path3);
883 [Test]
884 public void Replace1_Backup_Null ()
886 string path1 = TempFolder + DSC + "FIT.Replace.Source.Test";
887 string path2 = TempFolder + DSC + "FIT.Replace.Dest.Test";
889 DeleteFile (path1);
890 DeleteFile (path2);
891 try {
892 File.Create (path1).Close ();
893 File.Create (path2).Close ();
894 FileInfo info = new FileInfo (path1);
895 Assert.IsTrue (info.Exists, "#1");
896 FileInfo info2 = info.Replace (path2, null);
897 Assert.IsTrue (info2.Exists, "#2");
898 info = new FileInfo (path1);
899 Assert.IsFalse (info.Exists, "#3");
900 } finally {
901 DeleteFile (path2);
905 [Test]
906 public void Replace1_DestFileName_Null ()
908 string path1 = TempFolder + DSC + "FIT.Replace.Source.Test";
909 DeleteFile (path1);
910 try {
911 try {
912 File.Create (path1).Close ();
913 FileInfo info = new FileInfo (path1);
914 info.Replace (null, null);
915 Assert.Fail ("#1");
916 } catch (ArgumentNullException ex) {
917 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
918 Assert.IsNull (ex.InnerException, "#3");
919 Assert.IsNotNull (ex.Message, "#4");
921 } finally {
922 DeleteFile (path1);
926 [Test]
927 public void Replace1_DestFileName_Empty ()
929 string path1 = TempFolder + DSC + "FIT.Replace.Source.Test";
930 DeleteFile (path1);
931 try {
932 try {
933 File.Create (path1).Close ();
934 FileInfo info = new FileInfo (path1);
935 info.Replace (string.Empty, null);
936 Assert.Fail ("#1");
937 } catch (ArgumentException ex) {
938 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
939 Assert.IsNull (ex.InnerException, "#3");
940 Assert.IsNotNull (ex.Message, "#4");
942 } finally {
943 DeleteFile (path1);
947 [Test]
948 public void Replace1_DestFileName_WhiteSpace ()
950 string path1 = TempFolder + DSC + "FIT.Replace.Source.Test";
951 DeleteFile (path1);
952 try {
953 try {
954 File.Create (path1).Close ();
955 FileInfo info = new FileInfo (path1);
956 info.Replace (" ", null);
957 Assert.Fail ("#1");
958 } catch (ArgumentException ex) {
959 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
960 Assert.IsNull (ex.InnerException, "#3");
961 Assert.IsNotNull (ex.Message, "#4");
963 } finally {
964 DeleteFile (path1);
968 [Test]
969 public void Replace1_DestFileName_InvalidPathChars ()
971 string path1 = TempFolder + DSC + "FIT.Replace.Source.Test";
972 string path2 = string.Empty;
973 DeleteFile (path1);
975 try {
976 File.Create (path1).Close ();
977 FileInfo info = new FileInfo (path1);
978 foreach (char c in Path.InvalidPathChars)
979 path2 += c;
980 try {
981 info.Replace (path2, null);
982 Assert.Fail ("#1");
983 } catch (ArgumentException ex) {
984 // Illegal characters in path
985 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
986 Assert.IsNull (ex.InnerException, "#3");
987 Assert.IsNotNull (ex.Message, "#4");
988 Assert.IsNull (ex.ParamName, "#5");
990 } finally {
991 DeleteFile (path1);
995 [Test]
996 public void Replace1_DestFileName_FileNotFound ()
998 string path1 = TempFolder + DSC + "FIT.Replace.Source.Test";
999 string path2 = TempFolder + DSC + "FIT.Replace.Dest.Test";
1000 DeleteFile (path1);
1001 DeleteFile (path2);
1003 try {
1004 try {
1005 File.Create (path1).Close ();
1006 FileInfo info = new FileInfo (path1);
1007 info.Replace (path2, null);
1008 Assert.Fail ("#1");
1009 } catch (FileNotFoundException ex) {
1010 Assert.AreEqual (typeof (FileNotFoundException), ex.GetType (), "#2");
1011 Assert.IsNull (ex.InnerException, "#3");
1012 Assert.IsNotNull (ex.Message, "#4");
1014 } finally {
1015 DeleteFile (path1);
1019 [Test]
1020 public void Replace1_DestFileName_IsReadOnly ()
1022 string path1 = TempFolder + DSC + "FIT.Replace.Source.Test";
1023 string path2 = TempFolder + DSC + "FIT.Replace.Dest.Test";
1024 DeleteFile (path1);
1025 DeleteFile (path2);
1027 try {
1028 try {
1029 File.Create (path1).Close ();
1030 File.Create (path2).Close ();
1031 File.SetAttributes (path2, FileAttributes.ReadOnly);
1032 FileInfo info = new FileInfo (path1);
1033 info.Replace (path2, null);
1034 Assert.Fail ("#1");
1035 } catch (UnauthorizedAccessException ex) {
1036 Assert.AreEqual (typeof (UnauthorizedAccessException), ex.GetType (), "#2");
1037 Assert.IsNull (ex.InnerException, "#3");
1038 Assert.IsNotNull (ex.Message, "#4");
1040 } finally {
1041 File.SetAttributes (path2, FileAttributes.Normal);
1042 DeleteFile (path1);
1043 DeleteFile (path2);
1047 [Test]
1048 public void Replace1_Source_FileNotFound ()
1050 string path1 = TempFolder + DSC + "FIT.Replace.Source.Test";
1051 string path2 = TempFolder + DSC + "FIT.Replace.Dest.Test";
1052 DeleteFile (path2);
1054 try {
1055 try {
1056 File.Create (path2).Close ();
1057 FileInfo info = new FileInfo (path1);
1058 info.Replace (path2, null);
1059 Assert.Fail ("#1");
1060 } catch (FileNotFoundException ex) {
1061 Assert.AreEqual (typeof (FileNotFoundException), ex.GetType (), "#2");
1062 Assert.IsNull (ex.InnerException, "#3");
1063 Assert.IsNotNull (ex.Message, "#4");
1065 } finally {
1066 DeleteFile (path2);
1069 #endif
1071 [Test]
1072 public void Open ()
1074 string path = TempFolder + DSC + "FIT.Open.Test";
1075 DeleteFile (path);
1076 FileStream stream = null;
1077 try {
1078 FileInfo info = new FileInfo (path);
1079 stream = info.Open (FileMode.CreateNew);
1080 Assert.IsTrue (stream.CanRead, "#A1");
1081 Assert.IsTrue (stream.CanSeek, "#A2");
1082 Assert.IsTrue (stream.CanWrite, "#A3");
1083 stream.Close ();
1085 stream = info.Open (FileMode.Open);
1086 Assert.IsTrue (stream.CanRead, "#B1");
1087 Assert.IsTrue (stream.CanSeek, "#B2");
1088 Assert.IsTrue (stream.CanWrite, "#B3");
1089 stream.Close ();
1091 stream = info.Open (FileMode.Append, FileAccess.Write);
1092 Assert.IsFalse (stream.CanRead, "#C1");
1093 Assert.IsTrue (stream.CanSeek, "#C2");
1094 Assert.IsTrue (stream.CanWrite, "#C3");
1095 stream.Close ();
1097 stream = info.Open (FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite);
1098 Assert.IsTrue (stream.CanRead, "#D1");
1099 Assert.IsTrue (stream.CanSeek, "#D2");
1100 Assert.IsTrue (stream.CanWrite, "#D3");
1101 stream.Close ();
1102 } finally {
1103 if (stream != null)
1104 stream.Close ();
1105 DeleteFile (path);
1109 [Test]
1110 public void Open_FileDoesNotExist ()
1112 string path = TempFolder + DSC + "FIT.OpenFileNotFoundException.Test";
1113 DeleteFile (path);
1115 FileInfo info = new FileInfo (path);
1116 try {
1117 info.Open (FileMode.Open);
1118 Assert.Fail ("#1");
1119 } catch (FileNotFoundException ex) {
1120 Assert.AreEqual (typeof (FileNotFoundException), ex.GetType (), "#2");
1121 Assert.AreEqual (path, ex.FileName, "#3");
1122 Assert.IsNull (ex.InnerException, "#4");
1123 Assert.IsNotNull (ex.Message, "#5");
1127 [Test]
1128 public void OpenRead ()
1130 string path = TempFolder + DSC + "FIT.OpenRead.Test";
1131 DeleteFile (path);
1132 FileStream stream = null;
1133 try {
1134 File.Create (path).Close ();
1135 FileInfo info = new FileInfo (path);
1136 stream = info.OpenRead ();
1137 Assert.IsTrue (stream.CanRead, "#1");
1138 Assert.IsTrue (stream.CanSeek, "#2");
1139 Assert.IsFalse (stream.CanWrite, "#3");
1140 stream.Close ();
1142 } finally {
1143 if (stream != null)
1144 stream.Close ();
1145 DeleteFile (path);
1149 [Test]
1150 public void OpenRead_FileLock ()
1152 string path = TempFolder + DSC + "FIT.OpenReadIOException.Test";
1153 DeleteFile (path);
1154 FileStream stream = null;
1156 try {
1157 stream = File.Create (path);
1158 FileInfo info = new FileInfo (path);
1159 try {
1160 info.OpenRead ();
1161 Assert.Fail ("#1");
1162 } catch (IOException ex) {
1163 // The process cannot access the file because
1164 // it is being used by another process
1165 Assert.AreEqual (typeof (IOException), ex.GetType (), "#2");
1166 Assert.IsNull (ex.InnerException, "#3");
1167 Assert.IsNotNull (ex.Message, "#4");
1169 } finally {
1170 if (stream != null)
1171 stream.Close ();
1172 DeleteFile (path);
1176 [Test]
1177 public void OpenRead_Directory ()
1179 FileInfo info = new FileInfo (TempFolder);
1180 try {
1181 info.OpenRead ();
1182 Assert.Fail ("#1");
1183 } catch (UnauthorizedAccessException ex) {
1184 Assert.AreEqual (typeof (UnauthorizedAccessException), ex.GetType (), "#2");
1185 Assert.IsNull (ex.InnerException, "#3");
1186 Assert.IsNotNull (ex.Message, "#4");
1190 [Test]
1191 public void OpenText ()
1193 string path = TempFolder + DSC + "FIT.OpenText.Test";
1194 DeleteFile (path);
1195 StreamReader reader = null;
1196 try {
1197 File.Create (path).Close ();
1198 FileInfo info = new FileInfo (path);
1199 reader = info.OpenText ();
1200 Assert.AreEqual (-1, reader.Peek ());
1201 } finally {
1202 if (reader != null)
1203 reader.Close ();
1204 DeleteFile (path);
1208 [Test]
1209 public void OpenText_FileDoesNotExist ()
1211 string path = TempFolder + DSC + "FIT.OpenTextFileNotFoundException.Test";
1212 DeleteFile (path);
1213 FileInfo info = new FileInfo (path);
1214 try {
1215 info.OpenText ();
1216 Assert.Fail ("#1");
1217 } catch (FileNotFoundException ex) {
1218 Assert.AreEqual (typeof (FileNotFoundException), ex.GetType (), "#2");
1219 Assert.AreEqual (path, ex.FileName, "#3");
1220 Assert.IsNull (ex.InnerException, "#4");
1221 Assert.IsNotNull (ex.Message, "#5");
1225 [Test]
1226 public void OpenText_Directory ()
1228 FileInfo info = new FileInfo (TempFolder);
1229 try {
1230 info.OpenText ();
1231 Assert.Fail ("#1");
1232 } catch (UnauthorizedAccessException ex) {
1233 Assert.AreEqual (typeof (UnauthorizedAccessException), ex.GetType (), "#2");
1234 Assert.IsNull (ex.InnerException, "#3");
1235 Assert.IsNotNull (ex.Message, "#4");
1239 [Test]
1240 public void OpenWrite ()
1242 string path = TempFolder + DSC + "FIT.OpenWrite.Test";
1243 DeleteFile (path);
1244 FileStream stream = null;
1245 try {
1246 File.Create (path).Close ();
1247 FileInfo info = new FileInfo (path);
1248 stream = info.OpenWrite ();
1249 Assert.IsFalse (stream.CanRead, "#1");
1250 Assert.IsTrue (stream.CanSeek, "#2");
1251 Assert.IsTrue (stream.CanWrite, "#3");
1252 } finally {
1253 if (stream != null)
1254 stream.Close ();
1255 DeleteFile (path);
1259 [Test]
1260 public void OpenWrite_Directory ()
1262 FileInfo info = new FileInfo (TempFolder);
1263 try {
1264 info.OpenWrite ();
1265 Assert.Fail ("#1");
1266 } catch (UnauthorizedAccessException ex) {
1267 Assert.AreEqual (typeof (UnauthorizedAccessException), ex.GetType (), "#2");
1268 Assert.IsNull (ex.InnerException, "#3");
1269 Assert.IsNotNull (ex.Message, "#4");
1272 #if !MOBILE
1273 [Test]
1274 public void Serialization ()
1276 FileInfo info;
1277 SerializationInfo si;
1279 info = new FileInfo ("Test");
1280 si = new SerializationInfo (typeof (FileInfo), new FormatterConverter ());
1281 info.GetObjectData (si, new StreamingContext ());
1283 Assert.AreEqual (2, si.MemberCount, "#A1");
1284 Assert.AreEqual ("Test", si.GetString ("OriginalPath"), "#A2");
1285 Assert.AreEqual (Path.Combine (Directory.GetCurrentDirectory (), "Test"), si.GetString ("FullPath"), "#A3");
1287 info = new FileInfo (TempFolder);
1288 si = new SerializationInfo (typeof (FileInfo), new FormatterConverter ());
1289 info.GetObjectData (si, new StreamingContext ());
1291 Assert.AreEqual (2, si.MemberCount, "#B1");
1292 Assert.AreEqual (TempFolder, si.GetString ("OriginalPath"), "#B2");
1293 Assert.AreEqual (TempFolder, si.GetString ("FullPath"), "#B3");
1296 [Test]
1297 public void Deserialization ()
1299 FileInfo info = new FileInfo ("Test");
1301 MemoryStream ms = new MemoryStream ();
1302 BinaryFormatter bf = new BinaryFormatter ();
1303 bf.Serialize (ms, info);
1304 ms.Position = 0;
1306 FileInfo clone = (FileInfo) bf.Deserialize (ms);
1307 Assert.AreEqual (info.Name, clone.Name, "#1");
1308 Assert.AreEqual (info.FullName, clone.FullName, "#2");
1310 #endif
1312 [Test]
1313 [Category ("MobileNotWorking")]
1314 public void ToStringVariety ()
1316 Assert.AreEqual ("foo", new FileInfo ("foo").ToString ());
1317 Assert.AreEqual ("c:/foo", new FileInfo ("c:/foo").ToString ());
1318 Assert.AreEqual ("/usr/local/foo", new FileInfo ("/usr/local/foo").ToString ());
1319 Assert.AreEqual ("c:\\foo", new FileInfo ("c:\\foo").ToString ());
1320 Assert.AreEqual ("/usr/local\\foo", new FileInfo ("/usr/local\\foo").ToString ());
1321 Assert.AreEqual ("foo/BAR/baz", new FileInfo ("foo/BAR/baz").ToString ());
1322 Assert.AreEqual ("c:/documents and settings", new FileInfo ("c:/documents and settings").ToString ());
1323 Assert.AreEqual ("c:/docUme~1", new FileInfo ("c:/docUme~1").ToString ());
1326 void DeleteFile (string path)
1328 if (File.Exists (path))
1329 File.Delete (path);
1332 void DeleteDirectory (string path)
1334 if (Directory.Exists (path))
1335 Directory.Delete (path, true);