First pass, many more to go
[mono.git] / mcs / class / corlib / Test / System.IO / DirectoryInfoTest.cs
1 // DirectoryInfoTest.cs - NUnit Test Cases for System.IO.DirectoryInfo class\r
2 //\r
3 // Ville Palo (vi64pa@koti.soon.fi)\r
4 // \r
5 // (C) 2003 Ville Palo\r
6 // \r
7 using NUnit.Framework;\r
8 using System;\r
9 using System.IO;\r
10 namespace MonoTests.System.IO\r
11 {\r
12         [TestFixture]\r
13         public class DirectoryInfoTest : Assertion\r
14         {\r
15                 string TempFolder = Path.Combine (Path.GetTempPath (), "MonoTests.System.IO.Tests");\r
16 \r
17                 static readonly char DSC = Path.DirectorySeparatorChar;\r
18 \r
19                 [SetUp]\r
20                 protected void SetUp() {\r
21                         if (Directory.Exists (TempFolder))\r
22                                 Directory.Delete (TempFolder, true);\r
23                         Directory.CreateDirectory (TempFolder);\r
24                 }\r
25         \r
26                 [TearDown]\r
27                 protected void TearDown() {\r
28                         if (Directory.Exists (TempFolder))\r
29                                 Directory.Delete (TempFolder, true);\r
30                 }\r
31         \r
32                 [Test]\r
33                 public void Ctr ()\r
34                 {\r
35                         string path = TempFolder + DSC + "DIT.Ctr.Test";\r
36                         DeleteDir (path);\r
37                 \r
38                         FileInfo info = new FileInfo (path);\r
39                         AssertEquals ("test#01", true, info.DirectoryName.EndsWith (".Tests"));\r
40                         AssertEquals ("test#02", false, info.Exists);\r
41                         AssertEquals ("test#03", ".Test", info.Extension);\r
42                         AssertEquals ("test#05", "DIT.Ctr.Test", info.Name);            \r
43                 }\r
44 \r
45                 [Test]\r
46                 [ExpectedException(typeof(ArgumentNullException))]\r
47                 public void CtorArgumentNullException ()\r
48                 {\r
49                         DirectoryInfo info = new DirectoryInfo (null);            \r
50                 }\r
51 \r
52                 [Test]\r
53                 [ExpectedException(typeof(ArgumentException))]\r
54                 public void CtorArgumentException1 ()\r
55                 {\r
56                         DirectoryInfo info = new DirectoryInfo ("");            \r
57                 }\r
58 \r
59                 [Test]\r
60                 [ExpectedException(typeof(ArgumentException))]\r
61                 public void CtorArgumentException2 ()\r
62                 {\r
63                         DirectoryInfo info = new DirectoryInfo ("   ");            \r
64                 }\r
65 \r
66                 [Test]\r
67                 [ExpectedException(typeof(ArgumentException))]\r
68                 public void CtorArgumentException3 ()\r
69                 {\r
70                 string path = "";\r
71                 foreach (char c in Path.InvalidPathChars) {\r
72                         path += c;\r
73                 }\r
74                 DirectoryInfo info = new DirectoryInfo (path);\r
75                 }\r
76                                 \r
77                 [Test]\r
78                 public void Exists ()\r
79                 {\r
80                 string path = TempFolder + DSC + "DIT.Exists.Test";\r
81                 DeleteDir (path);\r
82             \r
83                 try {\r
84                         DirectoryInfo info = new DirectoryInfo (path);\r
85                         AssertEquals ("test#01", false, info.Exists);\r
86             \r
87                         Directory.CreateDirectory (path);\r
88                         AssertEquals ("test#02", false, info.Exists);\r
89                         info = new DirectoryInfo (path);\r
90                         AssertEquals ("test#03", true, info.Exists);            \r
91                 } finally {\r
92                         DeleteDir (path);\r
93                 }\r
94                 }\r
95                 \r
96                 [Test]\r
97                 public void Name ()\r
98                 {\r
99                         string path = TempFolder + DSC + "DIT.Name.Test";\r
100                         DeleteDir (path);\r
101                         \r
102                         try {\r
103                                 DirectoryInfo info = new DirectoryInfo (path);                          \r
104                                 AssertEquals ("test#01", "DIT.Name.Test", info.Name);\r
105                                 \r
106                                 info = Directory.CreateDirectory (path);\r
107                                 AssertEquals ("test#02", "DIT.Name.Test", info.Name);\r
108                                 \r
109                                 \r
110                         } finally {\r
111                                 DeleteDir (path);\r
112                         }                                  \r
113                 }\r
114                 \r
115                 [Test]\r
116                 public void Parent ()\r
117                 {\r
118                         string path = TempFolder + DSC + "DIT.Parent.Test";\r
119                         DeleteDir (path);\r
120                         \r
121                         try {\r
122                                 DirectoryInfo info = new DirectoryInfo (path);\r
123                                 AssertEquals ("test#01", "MonoTests.System.IO.Tests", info.Parent.Name);\r
124                                 \r
125                                 info = Directory.CreateDirectory (path);\r
126                                 AssertEquals ("test#02", "MonoTests.System.IO.Tests", info.Parent.Name);\r
127                                                                 \r
128                         } finally {\r
129                                 DeleteDir (path);\r
130                         }                                               \r
131                 }\r
132 \r
133                 [Test]\r
134                 public void Create ()\r
135                 {\r
136                 string path = TempFolder + DSC + "DIT.Create.Test";\r
137                 DeleteDir (path);\r
138             \r
139                 try {\r
140                         DirectoryInfo info = new DirectoryInfo (path);\r
141                         AssertEquals ("test#01", false, info.Exists);\r
142                         info.Create ();                \r
143                         AssertEquals ("test#02", false, info.Exists);\r
144                         info = new DirectoryInfo (path);\r
145                         AssertEquals ("test#03", true, info.Exists);\r
146                 } finally {\r
147                         DeleteDir (path);\r
148                 }\r
149                 }\r
150 \r
151                 [Test]\r
152                 public void CreateSubdirectory ()\r
153                 {\r
154                         string sub_path = Path.Combine ("test01", "test02");\r
155                         try {\r
156                                 DirectoryInfo info = new DirectoryInfo (TempFolder);\r
157                                 info.CreateSubdirectory (sub_path);\r
158                                 Assert ("test#01", Directory.Exists (Path.Combine (TempFolder, sub_path)));\r
159                         } finally {\r
160                                 DeleteDir (Path.Combine (TempFolder, sub_path));\r
161                         }\r
162                                 \r
163                 }
164                 
165                 [Test]
166                 [ExpectedException(typeof(ArgumentException))]
167                 public void CreateSubdirectoryEmptyString ()
168                 {
169                         new DirectoryInfo (".").CreateSubdirectory ("");
170                 }\r
171 \r
172                 [Test]\r
173                 public void Delete1 ()\r
174                 {\r
175                 string path = TempFolder + DSC + "DIT.Delete1.Test";\r
176                 DeleteDir (path);\r
177                         \r
178                         try {\r
179                                 Directory.CreateDirectory (path);\r
180                                 DirectoryInfo info = new DirectoryInfo (path);\r
181                                 AssertEquals ("test#01", true, info.Exists);\r
182                                 \r
183                                 info.Delete ();\r
184                                 AssertEquals ("test#02", true, info.Exists);\r
185                                 \r
186                                 info = new DirectoryInfo (path);\r
187                                 AssertEquals ("test#03", false, info.Exists);\r
188                         } finally {\r
189                                 DeleteDir (path);\r
190                         }\r
191                 }\r
192 \r
193                 [Test]\r
194                 public void Delete2 ()\r
195                 {\r
196                 string path = TempFolder + DSC + "DIT.Delete2.Test";\r
197                 DeleteDir (path);\r
198                         \r
199                         try {\r
200                                 Directory.CreateDirectory (path);\r
201                                 File.Create (path + DSC + "test").Close ();\r
202                                 DirectoryInfo info = new DirectoryInfo (path);\r
203                                 AssertEquals ("test#01", true, info.Exists);\r
204                                 \r
205                                 info.Delete (true);\r
206                                 AssertEquals ("test#02", true, info.Exists);\r
207                                 \r
208                                 info = new DirectoryInfo (path);\r
209                                 AssertEquals ("test#03", false, info.Exists);\r
210                         } finally {\r
211                                 DeleteDir (path);\r
212                         }\r
213                 }\r
214                 \r
215                 [Test]\r
216                 [ExpectedException (typeof (IOException))]\r
217                 public void DeleteIOException1 ()\r
218                 {\r
219                 string path = TempFolder + DSC + "DIT.DeleteIOException1.Test";\r
220                 DeleteDir (path);                       \r
221                         \r
222                         try {\r
223                                 Directory.CreateDirectory (path);\r
224                                 File.Create (path + DSC + "test").Close ();\r
225                                 DirectoryInfo info = new DirectoryInfo (path);\r
226                                 info.Delete ();\r
227                         } finally {\r
228                                 DeleteDir (path);\r
229                         }\r
230                 }\r
231 \r
232                 [Test]\r
233                 [ExpectedException (typeof (IOException))]\r
234                 public void DeleteIOException2 ()\r
235                 {\r
236                 string path = TempFolder + DSC + "DIT.DeleteIOException2.Test";\r
237                 DeleteDir (path);                       \r
238                         \r
239                         try {\r
240                                 Directory.CreateDirectory (path);\r
241                                 File.Create (path + DSC + "test").Close ();\r
242                                 DirectoryInfo info = new DirectoryInfo (path);\r
243                                 info.Delete (false);\r
244                         } finally {\r
245                                 DeleteDir (path);\r
246                         }\r
247                 }\r
248                 \r
249                 [Test]\r
250                 public void GetDirectories1 ()\r
251                 {\r
252                         string path = TempFolder + DSC + "DIT.GetDirectories1.Test";\r
253                         \r
254                         try {\r
255                                 DirectoryInfo info = Directory.CreateDirectory (path);\r
256                                 AssertEquals ("test#01", 0, info.GetDirectories ().Length);\r
257                                 \r
258                                 Directory.CreateDirectory (path + DSC + "1");\r
259                                 Directory.CreateDirectory (path + DSC + "2");                           \r
260                                 File.Create (path + DSC + "filetest").Close ();\r
261                                 AssertEquals ("test#02", 2, info.GetDirectories ().Length);\r
262                                 \r
263                                 Directory.Delete (path + DSC + 2);\r
264                                 AssertEquals ("test#02", 1, info.GetDirectories ().Length);                             \r
265                                 \r
266                         } finally {\r
267                                 DeleteDir (path);\r
268                         }\r
269                 }\r
270                 \r
271                 [Test]\r
272                 public void GetDirectories2 ()\r
273                 {\r
274                         string path = TempFolder + DSC + "DIT.GetDirectories2.Test";\r
275                         \r
276                         try {\r
277                                 DirectoryInfo info = Directory.CreateDirectory (path);\r
278                                 AssertEquals ("test#01", 0, info.GetDirectories ("*").Length);\r
279                                 \r
280                                 Directory.CreateDirectory (path + DSC + "test120");\r
281                                 Directory.CreateDirectory (path + DSC + "test210");\r
282                                 Directory.CreateDirectory (path + DSC + "atest330");\r
283                                 Directory.CreateDirectory (path + DSC + "test220");\r
284                                 File.Create (path + DSC + "filetest").Close ();\r
285                                 \r
286                                 AssertEquals ("test#02", 4, info.GetDirectories ("*").Length);\r
287                                 AssertEquals ("test#03", 3, info.GetDirectories ("test*").Length);\r
288                                 AssertEquals ("test#04", 2, info.GetDirectories ("test?20").Length);\r
289                                 AssertEquals ("test#05", 0, info.GetDirectories ("test?").Length);\r
290                                 AssertEquals ("test#06", 0, info.GetDirectories ("test[12]*").Length);\r
291                                 AssertEquals ("test#07", 2, info.GetDirectories ("test2*0").Length);\r
292                                 AssertEquals ("test#08", 4, info.GetDirectories ("*test*").Length);\r
293                                 \r
294                         } finally {\r
295                                 DeleteDir (path);\r
296                         }\r
297                 }\r
298                 \r
299                 [Test]\r
300                 [ExpectedException (typeof (DirectoryNotFoundException))]               \r
301                 public void GetDirectoriesDirectoryNotFoundException1 ()\r
302                 {\r
303                 string path = TempFolder + DSC + "DIT.GetDirectoriesDirectoryNotFoundException1.Test";\r
304                 DeleteDir (path);\r
305                         \r
306                         try {\r
307                                 DirectoryInfo info = new DirectoryInfo (path);\r
308                                 info.GetDirectories ();\r
309                         } finally {\r
310                                 DeleteDir (path);\r
311                         }\r
312                 }\r
313 \r
314                 [Test]\r
315                 [ExpectedException (typeof (DirectoryNotFoundException))]               \r
316                 public void GetDirectoriesDirectoryNotFoundException2 ()\r
317                 {\r
318                 string path = TempFolder + DSC + "DIT.GetDirectoriesDirectoryNotFoundException2.Test";\r
319                 DeleteDir (path);\r
320                         \r
321                         try {\r
322                                 DirectoryInfo info = new DirectoryInfo (path);\r
323                                 info.GetDirectories ("*");\r
324                         } finally {\r
325                                 DeleteDir (path);\r
326                         }\r
327                 }\r
328                 \r
329                 [Test]\r
330                 [ExpectedException (typeof (ArgumentNullException))]\r
331                 public void GetDirectoriesArgumentNullException ()\r
332                 {\r
333                 string path = TempFolder + DSC + "DIT.GetDirectoriesArgumentNullException.Test";\r
334                 DeleteDir (path);\r
335                         \r
336                         try {\r
337                                 DirectoryInfo info = new DirectoryInfo (path);\r
338                                 info.GetDirectories (null);\r
339                         } finally {\r
340                                 DeleteDir (path);\r
341                         }                       \r
342                 }\r
343 \r
344                 [Test]\r
345                 public void GetFiles1 ()\r
346                 {\r
347                 string path = TempFolder + DSC + "DIT.GetFiles1.Test";\r
348                 DeleteDir (path);\r
349                         \r
350                         try {\r
351                                 DirectoryInfo info = Directory.CreateDirectory (path);\r
352                                 AssertEquals ("test#01", 0, info.GetFiles ().Length);\r
353                                 File.Create (path + DSC + "file1").Close ();\r
354                                 File.Create (path + DSC + "file2").Close ();\r
355                                 Directory.CreateDirectory (path + DSC + "directory1");\r
356                                 AssertEquals ("test#02", 2, info.GetFiles ().Length);\r
357                                                         \r
358                         } finally {\r
359                                 DeleteDir (path);\r
360                         }\r
361                 }\r
362                 \r
363                 [Test]\r
364                 public void GetFiles2()\r
365                 {\r
366                 string path = TempFolder + DSC + "DIT.GetFiles2.Test";\r
367                 DeleteDir (path);\r
368                         \r
369                         try {\r
370                                 DirectoryInfo info = Directory.CreateDirectory (path);\r
371                                 AssertEquals ("test#01", 0, info.GetFiles ("*").Length);\r
372                                 File.Create (path + DSC + "file120file").Close ();\r
373                                 File.Create (path + DSC + "file220file").Close ();\r
374                                 File.Create (path + DSC + "afile330file").Close ();\r
375                                 File.Create (path + DSC + "test.abc").Close ();\r
376                                 File.Create (path + DSC + "test.abcd").Close ();\r
377                                 File.Create (path + DSC + "test.abcdef").Close ();                              \r
378                                 Directory.CreateDirectory (path + DSC + "dir");\r
379                                 \r
380                                 AssertEquals ("test#02", 6, info.GetFiles ("*").Length);\r
381                                 AssertEquals ("test#03", 2, info.GetFiles ("file*file").Length);\r
382                                 AssertEquals ("test#04", 3, info.GetFiles ("*file*").Length);\r
383                                 AssertEquals ("test#05", 2, info.GetFiles ("file?20file").Length);\r
384                                 AssertEquals ("test#07", 1, info.GetFiles ("*.abcd").Length);\r
385                                 AssertEquals ("test#08", 2, info.GetFiles ("*.abcd*").Length);                                                  \r
386                         } finally {\r
387                                 DeleteDir (path);\r
388                         }\r
389                 }\r
390                 \r
391                 [Test]\r
392                 [ExpectedException (typeof (DirectoryNotFoundException))]\r
393                 public void GetFilesDirectoryNotFoundException1 ()\r
394                 {\r
395                         string path = TempFolder + DSC + "DIT.GetFilesDirectoryNotFoundException1.Test";\r
396                         DeleteDir (path);\r
397                         \r
398                         try {\r
399                                 DirectoryInfo info = new DirectoryInfo (path);\r
400                                 info.GetFiles ();\r
401                                 \r
402                         } finally {\r
403                                 DeleteDir (path);\r
404                         }\r
405                 }\r
406 \r
407                 [Test]\r
408                 [ExpectedException (typeof (DirectoryNotFoundException))]\r
409                 public void GetFilesDirectoryNotFoundException2 ()\r
410                 {\r
411                         string path = TempFolder + DSC + "DIT.GetFilesDirectoryNotFoundException2.Test";\r
412                         DeleteDir (path);\r
413                         \r
414                         try {\r
415                                 DirectoryInfo info = new DirectoryInfo (path);\r
416                                 info.GetFiles ("*");\r
417                                 \r
418                         } finally {\r
419                                 DeleteDir (path);\r
420                         }\r
421                 }\r
422                 \r
423                 [Test]\r
424                 [ExpectedException (typeof (ArgumentNullException))]\r
425                 public void GetFilesArgumentNullException ()\r
426                 {\r
427                         string path = TempFolder + DSC + "DIT.GetFilesArgumentNullException.Test";\r
428                         DeleteDir (path);\r
429                         \r
430                         try {\r
431                                 DirectoryInfo info = new DirectoryInfo (path);\r
432                                 info.GetFiles (null);                           \r
433                         } finally {\r
434                                 DeleteDir (path);\r
435                         }\r
436                 }\r
437                 \r
438                 [Test]\r
439                 public void MoveTo ()\r
440                 {\r
441                         string path1 = TempFolder + DSC + "DIT.MoveTo.Soucre.Test";\r
442                         string path2 = TempFolder + DSC + "DIT.MoveTo.Dest.Test";\r
443                         DeleteDir (path1);\r
444                         DeleteDir (path2);\r
445                         \r
446                         try {\r
447                                 DirectoryInfo info1 = Directory.CreateDirectory (path1);\r
448                                 DirectoryInfo info2 = new DirectoryInfo (path2);\r
449                                 \r
450                                 AssertEquals ("test#01", true, info1.Exists);\r
451                                 AssertEquals ("test#02", false, info2.Exists);\r
452                                                                                                 \r
453                                 info1.MoveTo (path2);                           \r
454                                 AssertEquals ("test#03", true, info1.Exists);\r
455                                 AssertEquals ("test#04", false, info2.Exists);\r
456                                 \r
457                                 info1 = new DirectoryInfo (path1);\r
458                                 info2 = new DirectoryInfo (path2);\r
459                                 AssertEquals ("test#05", false, info1.Exists);\r
460                                 AssertEquals ("test#06", true, info2.Exists);\r
461                                 \r
462                         } finally {\r
463                                 DeleteDir (path1);\r
464                                 DeleteDir (path2);\r
465                         }\r
466                 }\r
467 \r
468                 [Test]\r
469                 [ExpectedException (typeof (ArgumentNullException))]\r
470                 public void MoveToArgumentNullException ()\r
471                 {\r
472                         string path = TempFolder + DSC + "DIT.MoveToArgumentNullException.Test";\r
473                         DeleteDir (path);\r
474                         \r
475                         try {\r
476                                 DirectoryInfo info = Directory.CreateDirectory (path);\r
477                                 info.MoveTo (null);\r
478                         } finally {\r
479                                 DeleteDir (path);\r
480                         }\r
481                         \r
482                 }\r
483 \r
484                 [Test]\r
485                 [ExpectedException (typeof (IOException))]\r
486                 public void MoveToIOException1 ()\r
487                 {\r
488                         string path = TempFolder + DSC + "DIT.MoveToIOException1.Test";\r
489                         DeleteDir (path);\r
490                         \r
491                         try {\r
492                                 DirectoryInfo info = Directory.CreateDirectory (path);\r
493                                 info.MoveTo (path);\r
494                         } finally {\r
495                                 DeleteDir (path);\r
496                         }                       \r
497                 }\r
498 \r
499                 [Test]\r
500                 [ExpectedException (typeof (ArgumentException))]\r
501                 public void MoveToArgumentException1 ()\r
502                 {\r
503                         string path = TempFolder + DSC + "DIT.MoveToArgumentException1.Test";\r
504                         DeleteDir (path);\r
505                         \r
506                         try {\r
507                                 DirectoryInfo info = Directory.CreateDirectory (path);\r
508                                 info.MoveTo ("");\r
509                         } finally {\r
510                                 DeleteDir (path);\r
511                         }                       \r
512                 }\r
513 \r
514                 [Test]\r
515                 [ExpectedException (typeof (ArgumentException))]\r
516                 public void MoveToArgumentException2 ()\r
517                 {\r
518                         string path = TempFolder + DSC + "DIT.MoveToArgumentException2.Test";\r
519                         DeleteDir (path);\r
520                         \r
521                         try {\r
522                                 DirectoryInfo info = Directory.CreateDirectory (path);\r
523                                 info.MoveTo ("    ");\r
524                         } finally {\r
525                                 DeleteDir (path);\r
526                         }                       \r
527                 }\r
528 \r
529                 [Test]\r
530                 [ExpectedException (typeof (ArgumentException))]\r
531                 public void MoveToArgumentException3 ()\r
532                 {\r
533                         string path = TempFolder + DSC + "DIT.MoveToArgumentException3.Test";\r
534                         DeleteDir (path);\r
535                         \r
536                         try {\r
537                                 DirectoryInfo info = Directory.CreateDirectory (path);\r
538                                 info.MoveTo (Path.InvalidPathChars [0].ToString ());\r
539                         } finally {\r
540                                 DeleteDir (path);\r
541                         }                       \r
542                 }\r
543 \r
544                 [Test]\r
545                 [ExpectedException (typeof (IOException))]\r
546                 public void MoveToIOException2 ()\r
547                 {\r
548                         string path = TempFolder + DSC + "DIT.MoveToIOException2.Test";\r
549                         DeleteDir (path);\r
550                         \r
551                         try {\r
552                                 DirectoryInfo info = new DirectoryInfo (path);\r
553                                 info.MoveTo (path);\r
554                         } finally {\r
555                                 DeleteDir (path);\r
556                         }                       \r
557                 }\r
558 \r
559                 private void DeleteDir (string path)\r
560                 {\r
561                         if (Directory.Exists (path))\r
562                                 Directory.Delete (path, true);\r
563                 }\r
564                                 \r
565         }\r
566 }\r