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